1. 程式人生 > >生產環境Tomcat安全規範

生產環境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/binstart.shcatalina.shshutdown.shchmodR744CATALINA_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 &quot;%r&quot; %s %b %{Referer}i %{User-Agent}i %D"
     resolveHosts="false" />

11.Server header重寫

在HTTP Connector配置中加入server的配置,server=”chuck-server”