Apache Tomcat 強化和安全指南

已發表: 2015-02-14

使用最佳實踐強化和保護 Apache Tomcat 服務器的實用指南。

Tomcat 是最流行的 Servlet 和 JSP 容器服務器之一。 它被以下一些高流量網站使用:

  • LinkedIn.com
  • Dailymail.co.uk
  • 康卡斯特網
  • 沃爾瑪網
  • 路透社
  • Meetup.com
  • 網站

下圖展示了Tomcat在Java應用服務器中的市場地位。

tomcat-市場份額
資料來源:Plumbr

從技術上講,您可以使用 Tomcat 作為前端服務器來直接服務站點請求。 但是,在生產環境中,您可能希望使用一些 Web 服務器(如 Apache、Nginx)作為前端來將請求路由到 Tomcat。

使用 Web 服務器處理請求可以帶來性能安全優勢。 如果您使用 Apache HTTP 作為前端 Web 服務器,那麼您還必須考慮保護它。

擁有默認的 Tomcat 配置可能會暴露敏感信息,這有助於黑客為攻擊應用程序做好準備。

以下是在 Tomcat 7.x、UNIX 環境下測試的。

觀眾

這是為中間件管理員、應用程序支持、系統分析師或任何工作或渴望學習 Tomcat 強化和安全的人設計的。

必須具備良好的 Tomcat 和 UNIX 命令知識。

筆記

我們需要一些工具來檢查 HTTP 標頭以進行驗證。 有兩種方法可以做到這一點。

如果測試面向 Internet 的應用程序,那麼您可以使用以下 HTTP 標頭工具來驗證實現。

  • HTTP 標頭檢查器
  • 黑客目標

對於Intranet 應用程序,您可以使用 Google Chrome、Firefox 開發工具。

作為最佳實踐,您必須對要修改的任何文件進行備份

在本指南中,我們將 Tomcat 安裝文件夾稱為$tomcat

讓我們來看看硬化和固定程序。

刪除服務器橫幅

從 HTTP 標頭中刪除服務器標語是強化的首要任務之一。

使用服務器橫幅會暴露您正在使用的產品和版本,並導致信息洩露漏洞。

默認情況下,由 Tomcat 提供的頁面將顯示如下。

Tomcat服務器頭

讓我們從 Server 標頭中隱藏產品和版本詳細信息。

  • 轉到 $tomcat/conf 文件夾
  • 使用 vi 修改 server.xml
  • 將以下內容添加到Connector port
 Server =” “

前任: -

 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" Server =" " redirectPort="8443" />
  • 保存文件並重新啟動 Tomcat。 現在,當您訪問應用程序時,您應該會看到 Server 標頭的空白值。
tomcat-removed-server-header

使用安全管理器啟動 Tomcat

安全管理器保護您免受瀏覽器中運行的不受信任的小程序的侵害。

使用安全管理器運行 Tomcat 比不使用安全管理器要好。 Tomcat 有關於 Tomcat 安全管理器的優秀文檔。

這樣做的好處是您不需要更改任何配置文件。 這只是您執行startup.sh文件的方式。

你所要做的就是用–security參數啟動tomcat。

 [root@geekflare bin]# ./startup.sh -security Using CATALINA_BASE: /opt/tomcat Using CATALINA_HOME: /opt/tomcat Using CATALINA_TMPDIR: /opt/tomcat/temp Using JRE_HOME: /usr Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar Using Security Manager Tomcat started. [root@geekflare bin]#

啟用 SSL/TLS

通過 HTTPS 提供 Web 請求對於保護客戶端和 Tomcat 之間的數據至關重要。 為了使您的 Web 應用程序可以通過 HTTPS 訪問,您需要實現 SSL 證書。

假設您已經準備好帶有證書的密鑰庫,您可以在server. Connector port部分下的 xml 文件。

 SSLEnabled="true" scheme="https" keystoreFile="ssl/bloggerflare.jks" keystorePass="chandan" clientAuth="false" sslProtocol="TLS"

使用您的更改密鑰庫文件名和密碼。

如果您需要有關密鑰庫和 CSR 流程的幫助,請參閱本指南。

強制 HTTPS

這僅在您啟用 SSL 時適用。 如果沒有,它將破壞應用程序。

啟用 SSL 後,最好將所有 HTTP 請求強制重定向到 HTTPS,以確保用戶與 Tomcat 應用程序服務器之間的安全通信。

  • 轉到 $tomcat/conf 文件夾
  • 使用vi修改web.xml
  • </web-app>語法之前添加以下內容
<security-constraint> <web-resource-collection> <web-resource-name>Protected Context</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
  • 保存文件並重啟Tomcat

將 Secure & HttpOnly 標誌添加到 Cookie

在沒有安全 cookie 的情況下,可能會竊取或操縱 Web 應用程序會話和 cookie。 這是一個注入響應頭的標誌。

這是通過在 web.xml 文件的session-config部分的行下方添加來完成的

<cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config>

配置截圖:

Tomcat-httponly

保存文件並重新啟動 Tomcat 以檢查 HTTP 響應標頭。

從非特權帳戶運行 Tomcat

最好為 Tomcat 使用單獨的非特權用戶。 這裡的想法是保護其他運行的服務,以防任何帳戶受到損害。

  • 創建一個 UNIX 用戶,比如說 tomcat
 useradd tomcat
  • 如果正在運行,請停止 Tomcat
  • 將 $tomcat 所有權更改為用戶 tomcat
 chown -R tomcat:tomcat tomcat/

啟動 Tomcat 並確保它以 tomcat 用戶運行

刪除默認/不需要的應用程序

默認情況下,Tomcat 附帶以下 Web 應用程序,在生產環境中可能需要也可能不需要。

您可以刪除它們以保持乾淨並避免 Tomcat 默認應用程序的任何已知安全風險。

  • ROOT - 默認歡迎頁面
  • 文檔 – Tomcat 文檔
  • 示例 – 用於演示的 JSP 和 servlet
  • Manager, host-manager – Tomcat 管理

它們位於 $tomcat/webapps 文件夾下

[root@geekflare webapps]# ls -lt drwxr-xr-x 14 tomcat tomcat 4096 Sep 29 15:26 docs drwxr-xr-x 7 tomcat tomcat 4096 Sep 29 15:26 examples drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 host-manager drwxr-xr-x 5 tomcat tomcat 4096 Sep 29 15:26 manager drwxr-xr-x 3 tomcat tomcat 4096 Sep 29 15:26 ROOT [root@geekflare webapps]#

更改 SHUTDOWN 端口和命令

默認情況下,tomcat 配置為在 8005 端口上關閉。

你知道你可以通過遠程登錄到 IP: 端口並發出 SHUTDOWN 命令來關閉 tomcat 實例嗎?

 Chandans # telnet localhost 8005 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. SHUTDOWN Connection closed by foreign host. Chandans #

危險的!

您會看到,使用默認配置會導致高安全風險。

建議將 tomcat 關閉端口和默認命令更改為不可預測的內容。

  • 在 server.xml 中修改以下內容
<Server port="8005" shutdown="SHUTDOWN">

8005 - 更改為其他一些未使用的端口

SHUTDOWN - 改變一些複雜的東西

前任-

 <Server port="8867" shutdown="NOTGONNAGUESS">

替換默認的 404、403、500 頁面

具有未找到、禁止、服務器錯誤的默認頁面會公開版本詳細信息。

讓我們看一下默認的 404 頁面。

tomcat-default-404-頁面

為了緩解,您可以先創建一個一般錯誤頁面,然後配置 web.xml 以重定向到一般錯誤頁面。

  • 轉到 $tomcat/webapps/$application
  • 使用vi編輯器創建 error.jsp 文件
<html>
<頭部> 
<title>錯誤頁面</title>
</head>
<body> 這是一個錯誤! </正文>
</html>
  • 轉到 $tomcat/conf 文件夾
  • 在 web.xml 文件中添加以下內容。 確保在</web-app>語法之前添加
<錯誤頁面> 
<錯誤代碼>404</錯誤代碼> 
<location>/error.jsp</location>
</錯誤頁面>
<錯誤頁面> 
<錯誤代碼>403</錯誤代碼> 
<location>/error.jsp</location>
</錯誤頁面>
<錯誤頁面> 
<錯誤代碼>500</錯誤代碼> 
<location>/error.jsp</location>
</錯誤頁面>
  • 重啟tomcat服務器測試一下
tomcat 自定義錯誤

好多了!

您也可以對java.lang.Exception執行此操作。 如果有任何 java lang 異常,這將有助於不公開 tomcat 版本信息。

只需在web.xml中添加以下內容並重新啟動 tomcat 服務器。

 <錯誤頁面> 
<exception-type>java.lang.Exception</exception-type> 
<location>/error.jsp</location>
</錯誤頁面>

我希望上面的指南能給你一個保護 Tomcat 的想法。 如果您想了解有關 Tomcat 管理的更多信息,請查看此在線課程。
此外,在此處了解如何配置 WAS 以在關機期間停止詢問密碼。