生產環境Tomcat安全規範
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−R744 CATALINA_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”