1. 程式人生 > >Tomcat學習總結(11)——Linux下的Tomcat安全優化

Tomcat學習總結(11)——Linux下的Tomcat安全優化

app span must 以及 站點 with rip web.xml dev

1、web.xml配置及修改:

站點默認主頁:

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

404及500設置

<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>

默認會話超時時間:

<session-config>

<session-timeout>60</session-timeout>

</session-config>

禁止列表目錄結構:

<init-param>

<param-name>listings</param-name>

<param-value>false</param-value>

</init-param>

2、server.xml配置安全修改

<Server port="8005" shutdown="SHUTDOWN">

把SHUTDOWN改成forevernotdown,端口也可自行修改

3、修改或隱藏默認Tomcat的版本信息

類似於nginx的server_tokens off ,tomcat也可以隱藏版本號,具體步驟如下:

cd apache-tomcat-7.0.59/lib

mkdir test

cd test

jar xf ../catalina.jar

cat org/apache/catalina/util/ServerInfo.properties |grep -v ‘^$|#‘

server.info=Apache Tomcat/7.0.59

server.number=7.0.59.0

vi org/apache/catalina/util/ServerInfo.properties

server.info=Tomcat

server.number=6

server.built=Jan 18 2013 14:51:10 UTC

jar cf ../catalina.jar ./*

rm -rf test

curl -I http://127.0.0.1:8080

4、刪除$CATALINA_HOME/webapps下的不必要的目錄

當Tomcat首次完成安裝後,立即刪除webapps下面的所有代碼

rm -rf /srv/apache-tomcat/webapps/*

5、tomcat-users.xml該文件含有用戶名、角色以及密碼的清單文件,如果不需要web部署,生產環境需要註釋掉:

# cat conf/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"/>

-->

6、server.xml線程數修改/熱部署修改/

1)maxThreads 為Tomcat的最大線程數,minSpareThreads 初始化時創建的Socket線程數。如果連接過多,組建tomcat集群負載均衡處理

2)默認 Tomcat 是開啟了對war包的熱部署的。為了防止被植入木馬等惡意程序,因此我們要關閉自動部署。

<Host name="localhost" appBase="webapps"

unpackWARs="false" autoDeploy="false">

7、多虛擬主機

強烈建議不要使用Tomcat的虛擬主機,每個站點一個實例。即,啟動多個tomcat,雖然開銷比較大,但保證了應用程序隔離與安全。

8、Tomacat雖然可以啟用壓縮通過compression="on" 來配置,但最好把它前置通過apache和nginx來統一處理

9、應用程序安全,Tomcat目錄與應用程序部署分離

不建議用root啟動,建議單獨設置獨立用戶啟動,把Tomcat目錄的屬主設置為指定用戶,比如tomcat。

10、生產環境部署

apache+tomcat/nginx+tomcat,站點的默認主頁和自定義錯誤頁面,可在前端的apache或者nginx中做。

優化

Tomcat的運行模式有3種

1、bio

默認的模式,效率性能非常低。

2、nio

使用NIO在服務器端會有更好的性能,加強服務器端對並發處理的性能。 Tomcat8默認以nio模式運行,想運行在該模式下,直接修改server.xml裏的Connector節點,修改protocol為

<Connector port="8080″

protocol="org.apache.coyote.http11.Http11NioProtocol"

connectionTimeout="20000"

URIEncoding="UTF-8"

useBodyEncodingForURI="true"

enableLookups="false"

redirectPort="8443">

重啟tomcat ,就可以生效。

3、apr安裝及優化

從操作系統級別來解決異步的IO問題,大幅度的提高性能。必須要安裝apr和native,直接啟動就支持apr修改protocol為org.apache.coyote.http11.Http11AprProtocol

安裝apr

yum -y install apr apr-util apr-devel openssl-devel

安裝native 進入tomcat/bin目錄,比如:

cd /usr/local/tomcat/bin/

tar xzfv tomcat-native.tar.gz

cd tomcat-native-1.1.20-src/jni/native/

./configure --with-apr=/usr/bin/apr-1-config

make && make install

安裝完成之後 會出現如下提示信息

Libraries have been installed in: /usr/local/apr/lib

安裝成功後還需要對tomcat設置環境變量,方法是在setenv.sh文件中增加1行:

CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"

或者:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib

source /etc/profile

修改8080端對應的conf/server.xml

protocol="org.apache.coyote.http11.Http11AprProtocol"

啟動tomcat之後,查看日誌會有這一行信息,說明已經是APR模式啟動了。INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].

4、內存參數優化

並發優化 1.JVM調優 新增文件TOMCAT_HOME/bin/setenv.sh如下語句,具體數值視情況而定。

JAVA_OPTS="-Xms1024m -Xmx1024m -Xss1024K -XX:PermSize=64m -XX:MaxPermSize=128m"

參數詳解

-Xms JVM初始化堆內存大小 -Xmx JVM堆的最大內存 -Xss 線程棧大小 -XX:PermSize JVM非堆區初始內存分配大小 -XX:MaxPermSize JVM非堆區最大內存 建議和註意事項: -Xms和-Xmx選項設置為相同堆內存分配,以避免在每次GC 後調整堆的大小,堆內存建議占內存的60%~80%;非堆內存是不可回收內存,大小視項目而定;線程棧大小推薦256k.

32G內存配置如下:

JAVA_OPTS="-Xms20480m -Xmx20480m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=2048m"

5、.關閉DNS反向查詢 在<Connector port=”8080″中加入如下參數

<Connector port="8081" protocol="HTTP/1.1"

connectionTimeout="6000" enableLookups="false" acceptCount="800"

redirectPort="8443" />

6、優化tomcat參數(使用APR)參考:

<Listener className="org.apache.catalina.core.AprLifecycleListener" />

...

<Connector port="8080"

protocol="org.apache.coyote.http11.Http11AprProtocol"

connectionTimeout="20000" //鏈接超時時長

redirectPort="8443"

maxThreads="500"

minSpareThreads="20"

acceptCount="1000"

enableLookups="false"

compression="on" //壓縮傳輸,取值on|off|force,默認值off。

noCompressionUserAgents="gozilla, traviata"

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,,application/octet-stream"="2048"

URIEncoding="UTF-8"

server="office" />

升級版本一般將當前老版本 tomcat 的server.xml、catalina.sh、web.xml和tomcat-users.xml文件進行備份,然後部署完新版本的 tomcat 之後,將這些配置文件覆蓋過去即可,然後停掉舊版本,啟動新版本即可完成升級操作

Tomcat學習總結(11)——Linux下的Tomcat安全優化