Tomcat學習總結(11)——Linux下的Tomcat安全優化
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安全優化