1. 程式人生 > >Tomcat配置安全優化

Tomcat配置安全優化

Tomcat

1.刪除默認目錄

安裝完tomcat後,刪除$CATALINA_HOME/webapps下默認的所有目錄文件

rm -rf /usr/local/tomcat/webapps/*

2.用戶管理

如果不需要通過web部署應用,建議註釋或刪除tomcat-users.xml下用戶權限相關配置

<!--
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
  <user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
  <user username="role1" password="<must-be-changed>" roles="role1"/>
-->

3.隱藏tomcat版本信息

方法一:修改$CATALINA_HOME/conf/server.xml,在Connector節點添加server字段,示例如下

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
               server="WS1.0"/>

訪問測試:

# curl -I 127.0.0.1:8080
HTTP/1.1 200 OK
Content-Type: text/html;charset=ISO-8859-1
Transfer-Encoding: chunked
Date: Thu, 29 Mar 2018 03:16:36 GMT
Server: WS1.0

網頁測試:

 
測試結果顯示並沒隱藏Tomcat版本信息。

方法二:進入apache-tomcat目錄lib下,找到catalina.jar,使用vim工具依次找到org/apache/catalina/util下的ServerInfo.properties

server.info=Apache Tomcat
server.number=
server.built=

用戶也可自定義修改server.info字段和server.number字段,示例修改如下所示

server.info=WS/1.0
server.number=1.0
server.built=Feb 7 2018 18:52:33 UTC

4.關閉自動部署

如果不需要自動部署,建議關閉自動部署功能。

在$CATALINA_HOME/conf/server.xml中的host字段,修改unpackWARs=”false” autoDeploy=”false”。

      <Host name="localhost"  appBase="webapps"
            unpackWARs="false" autoDeploy="false">
       <!--   unpackWARs="true" autoDeploy="true">
       -->

5.自定義錯誤頁面

修改$CATALINA_HOME/conf/web.xml,自定義40x、50x等容錯頁面,防止信息泄露。

<error-page>
        <error-code>404</error-code>
        <location>/404.html</location>
</error-page>

error-page>
        <error-code>500</error-code>
        <location>/500.html</location>
</error-page>

6.禁止列目錄(高版本默認已禁止)

修改$CATALINA_HOME/conf/web.xml

    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

7.AJP端口管理

AJP是為 Tomcat 與 HTTP 服務器之間通信而定制的協議,能提供較高的通信速度和效率。如果tomcat前端放的是apache的時候,會使用到AJP這個連接器。前端如果是由nginx做的反向代理的話可以不使用此連接器,因此需要註銷掉該連接器。

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    -->

8.服務權限控制

tomcat以非root權限啟動,應用部署目錄權限和tomcat服務啟動用戶分離,比如tomcat以tomcat用戶啟動,而部署應用的目錄設置為nobody用戶750。

9.啟用cookie的HttpOnly屬性,使用HttpOnly提升Cookie安全性


修改$CATALINA_HOME/conf/context.xml,添加useHttpOnly="true",如下所示

<Context useHttpOnly="true">

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->

</Context>
啟用安全cookie,防止xss跨站點攻擊,tomcat6開始支持此屬性,此處在context.xml中添加啟用配置,context.xml配置即調用時生效不需要重啟tomcat

配置cookie的secure屬性,在web.xml中sesion-config節點配置cookie-config,此配置只允許cookie在加密方式下傳輸。

    <session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
                <secure>true</secure>
        </cookie-config>
    </session-config>



Tomcat配置安全優化