Tomcat的安全
生產環境tomcat規範
1.更改服務監聽端口
若 Tomcat 都是放在內網的,則針對 Tomcat 服務的監聽地址都是內網地址
標準配置:<Connector port="10000" server="webserver"/>
2.telnet管理端口保護
修改默認的 8005 管理端口不易猜測(大於1024),但要求端口配置在8000~8999之間
修改SHUTDOWN命令爲其他字符串
標準配置:<Server port="8578" shutdown="dangerous">
3.AJP連接端口的保護
修改默認的ajp 8009端口爲不易衝突(大於1024),但要求端口配置在8000~8999之間
通過iptables規則限制ajp端口訪問的權限僅爲線上機器,目的在於防止線下測試流量被apache的mod_jk轉發至線上tomcat服務器
標準配置:<Connector port="8349" protocol="AJP/1.3"/>
4.禁用管理端
刪除默認$CATALINA_HOME/conf/tomcat-users.xml文件,重啓tomcat將會自動生成新的文件
刪除$CATALINA_HOME/webapps下載默認的所有目錄和文件
將tomcat應用根目錄配置爲tomcat安裝目錄以外的目錄
標準配置:
a.server.xml配置
一種直接修改Host節點信息,表示全局配置
<Host name="localhost" appBase="/data/www/tomcat_webapps" unpackWARs="true" autoDeploy="false"></Host>
另一種直接在Host節點中新增Context節點,指定具體的項目
<Context path="" docBase="/usr/local/tomcat/webapps/jenkins" debug="0" reloadable="false" crossContext="true">
</Context>
b.在$CATALINA_HOME/conf/Catalina/locathost目錄下新增文件 test##20160506172651.xml
<Context displayName="test" docBase="/data/www/tomcat_webapps/test##20160506172651.war" reloadable="false" />
5.隱藏Tomcat的版本信息
針對該信息的顯示是由一個jar包控制的,該jar包存放在$CATALINA_HOME/lib目錄下,名稱爲 catalina.jar,通過 jar xf 命令解壓這個 jar 包會得到兩個目錄 META-INF 和 org ,修改 org/apache/catalina/util/ServerInfo.properties 文件中的 serverinfo 字段來實現來更改我們tomcat的版本信息
$ cd $CATALINA_HOME/lib
$ jar xf catalina.jar
$ cat org/apache/catalina/util/ServerInfo.properties |grep -v '^$|#'
$ mkdir -p org/apache/catalina/util
$ vim ServerInfo.properties
server.info=nolinux # 把這個值改成其它值就行了
自定義錯誤頁面:修改$CATALINA_HOME/conf/web.xml重定向 403/404/500等錯誤到指定的錯誤頁面
6.降權啓動
Tomcat啓動用戶權限必須非root權限,儘量降低tomcat啓動用戶的目錄訪問權限,如需直接對外使用80端口,可通過普通賬號啓動後,配置iptables規則進行轉發,爲了防止 Tomcat 被植入 web shell 程序後,可以修改項目文件。要將 Tomcat 和項目的屬主做分離,即便被破壞也無法創建和編輯項目文件
7.文件列表訪問控制
$CATALINA_HOME/conf/web.xml文件中的default部分的listings的配置必須爲false(默認),表示不列出文件列表
8.訪問限制
通過配置,限定訪問的IP來源
全局設置限定IP和域名訪問:
<Host name="localhost" appBase="/data/www/tomcat_webapps" unpackWARs="true" autoDeploy="false">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168.1.10,192.168.1.30,192.168.2.*" deny=""/>
<Valve className="org.apache.catalina.valves.RemoteHostValve" allow="www.test.com,*.test.com" deny=""/>
</Host>
9.腳本權限回收
控制CATALINAHOME/bin目錄下的start.sh、catalina.sh、shutdown.sh的可執行權限,chmod−R744CATALINA_HOME/bin/*
10.訪問日誌格式規範
開啓tomcat默認訪問日誌中Referer和User-Agent記錄
標準配置:
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log"
suffix=".txt" pattern="%h %l %u %t "%r" %s %b %{Referer}i %{User-Agent}i %D"
resolveHosts="false" />
11.Server header重寫
在HTTP Connector配置中加入server的配置,server=”chuck-server”