這篇文章主要為大家展示了“基于Tomcat安全配置與性能優(yōu)化的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“基于Tomcat安全配置與性能優(yōu)化的示例分析”這篇文章吧。
目前成都創(chuàng)新互聯(lián)公司已為1000+的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)站空間、網(wǎng)站托管、服務器租用、企業(yè)網(wǎng)站設計、龍?zhí)毒W(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。一、版本安全
升級當前的tomcat版本為最新穩(wěn)定版本。故名思議,最新穩(wěn)定版本就要兼顧最新和穩(wěn)定這兩個概念。一個穩(wěn)定的版本,是需要時間沉淀的,而最新又是相對于穩(wěn)定版而言的最新。因此我們一般會選擇當前大版本中,最新版本往前推幾個版本或者往前推幾個月出的版本。
目前,企業(yè)常用的tomcat大版本為6.0和7.0版本,8.0版本雖然已經(jīng)出了很久了,但是仍然不建議使用。
在升級版本中,需要注意的事情有兩點:
1、盡量避免跨大版本的升級
2、將當前老版本 tomcat 的server.xml、catalina.sh、web.xml和tomcat-users.xml文件進行備份,然后部署完新版本的 tomcat 之后,將這些配置文件覆蓋過去即可,然后停掉舊版本,啟動新版本即可完成升級操作。
二、隱藏版本信息
為了避免黑客針對某些版本進行攻擊,因此我們需要隱藏或者偽裝 Tomcat 的版本信息。
針對該信息的顯示是由一個jar包控制的,該jar包存放在 Tomcat 安裝目錄下的lib目錄下,名稱為 catalina.jar。
我們可以通過 jar xf 命令解壓這個 jar 包會得到兩個目錄 META-INF 和 org ,通過修改 org/apache/catalina/util/ServerInfo.properties 文件中的 serverinfo 字段來實現(xiàn)來更改我們tomcat的版本信息。
文件信息如下:
[root@localhost ~]# cat org/apache/catalina/util/ServerInfo.properties |grep -v '^$|#' server.info=Apache Tomcat/7.0.53 server.number=7.0.53.0 server.built=Mar 25 2014 06:20:16 當然,還有另外一種方法來實現(xiàn)隱藏或偽裝Tomcat的版本信息,不過本質(zhì)和上面一樣,操作如下: [root@localhost ~]# cd /usr/local/apache-tomcat-7.0.53/lib [root@localhost lib]# mkdir -p org/apache/catalina/util [root@localhost lib]# cd org/apache/catalina/util [root@localhost util]# vim ServerInfo.properties server.info=nolinux # 如果想修改成其它版本號,把這個地方的值改成其它值就行了
修改完畢之后,重啟 Tomcat即可看到效果!
三、優(yōu)化 web.xml
servlet與其它適用于整個Web應用程序設置的配置文件,必須符合servlet規(guī)范的標準格式。通過它可以配置你web應用的相關選項,tomcat在啟動的時候會讀取這個文件,完成你開發(fā)的系統(tǒng)的一些初始化操作。
它可以做如下事情:
1、提供基于 servlet 的相關配置
2、增加監(jiān)聽器,監(jiān)控session或在tomcat啟動時,加載一些你希望加載的資源。比如創(chuàng)建數(shù)據(jù)庫連接池等等
3、設置session過期時間,tomcat默認是30分鐘
4、更改應用的默認網(wǎng)頁,常用為index.html/index.jsp等
5、增加過濾器,做一些你希望的過濾操作,比如敏感詞匯的過濾
6、增加一些 jstl(標準標簽庫)的定義,方便在jsp中直接includ進來,直接使用這些標簽
7、struts,spring或hibernate的一些配置等等
下面摘錄下O'REILLY 的《Tomcat 權(quán)威指南》中的一段話:
web.xml 的文件格式定義在 Servlet 規(guī)范中,因此所有符合 Servlet 規(guī)范的 Java Servlet Container 都會用到它。當 Tomcat 部署應用程序時(在激活過程中,或加載應用程序后),它都會讀取通用的conf/web.xml,然后再讀取web應用程序中的WEB-INF/web.xml。其實根據(jù)他們的位置,我們就可以知道,conf/web.xml文件中的設定會應用于所有的web應用程序,而某些web應用程序的WEB-INF/web.xml中的設定只應用于該應用程序本身。
如果沒有WEB-INF/web.xml文件,tomcat會輸出找不到的消息,但仍然會部署并使用web應用程序,servlet規(guī)范的作者想要實現(xiàn)一種能迅速并簡易設定新范圍的方法,以用作測試,因此,這個web.xml并不是必要的,不過通常最好還是讓每一個上線的web應用程序都有一個自己的WEB-INF/web.xml,即使它只用做識別,但我想這是一個好的習慣。
由于Servlet規(guī)范主要是對于web程序員,而非系統(tǒng)管理員使用的。因此,對于運維來講,我們可能更關心的是站點的默認網(wǎng)頁、自定義錯誤頁面、禁止列目錄等功能。
由于,正常生產(chǎn)環(huán)境中,肯定不會直接由tomcat對公網(wǎng)提供服務,前端肯定放的有apache或者nginx。因此,針對站點的默認主頁和自定義錯誤頁面,我們均在前端的apache或者nginx中做。另外,公司也可能交由程序猿在項目內(nèi)的WEB-INF/web.xml中去做定義。
在tomcat新版本中,自動默認已經(jīng)禁止列目錄功能。
下面,我列出幾種常見功能,在web.xml中的表現(xiàn)形式:
站點默認主頁,
自定義錯誤頁面,
定義會話超時時間,
禁止列目錄.
四、優(yōu)化 tomcat-user.xml
該文件含有用戶名、角色以及密碼的清單文件。負責提供webapps下manager項目的登錄認證管理。
在生產(chǎn)環(huán)境中,我們需要將該文件全部注釋。
五、優(yōu)化 server.xml
Tomcat的主配置文件,該文件中包含很多主要元素,比如Service、Connector、Host等,這些元素都會創(chuàng)建軟件"對象"、排序及進程管道中設置的這些元素嵌套方,使我們可以執(zhí)行過濾、分組等工作。
如果要對改文件做優(yōu)化,我們需要先了解該文件的結(jié)構(gòu)!
server.xml的結(jié)構(gòu)圖:
該文件描述了如何啟動Tomcat Server
針對該文件,我們需要優(yōu)化的點有如下:
1、maxThreads 連接數(shù)限制
maxThreads 是 Tomcat 所能接受大連接數(shù)。一般設置不要超過8000以上,如果你的網(wǎng)站訪問量非常大可能使用運行多個Tomcat實例的方法,即,在一個服務器上啟動多個tomcat然后做負載均衡處理。
這里還需要注意的一點是,tomcat 和 php 不同。php可以按照cpu和內(nèi)存的情況去配置連接數(shù),上萬很正常。而 java 還需要注意 jvm 的參數(shù)配置。如果不注意就會因為jvm參數(shù)過小而崩潰。
2、多虛擬主機
強烈建議不要使用 Tomcat 的虛擬主機,推薦每個站點使用一個實例。即,可以啟動多個 Tomcat,而不是啟動一個 Tomcat 里面包含多個虛擬主機。因為 Tomcat是多線程,共享內(nèi)存,任何一個虛擬主機中的應用崩潰,都會影響到所有應用程序。雖然采用多實例的方式會產(chǎn)生過多的開銷,但至少保障了應用程序的隔離和安全。
3、壓錯傳輸
tomcat作為一個應用服務器,也是支持 gzip 壓縮功能的。我們可以在 server.xml 配置文件中的 Connector 節(jié)點中配置如下參數(shù),來實現(xiàn)對指定資源類型進行壓縮。
compression="on" # 打開壓縮功能 compressionMinSize="50" # 啟用壓縮的輸出內(nèi)容大小,默認為2KB noCompressionUserAgents="gozilla, traviata" # 對于以下的瀏覽器,不啟用壓縮 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 哪些資源類型需要壓縮
提示:
Tomcat 的壓縮是在客戶端請求服務器對應資源后,從服務器端將資源文件壓縮,再輸出到客戶端,由客戶端的瀏覽器負責解壓縮并瀏覽。相對于普通的瀏覽過程 HTML、CSS、Javascript和Text,它可以節(jié)省40% 左右的流量。更為重要的是,它可以對動態(tài)生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等輸出的網(wǎng)頁也能進行壓縮,壓縮效率也很高。但是,壓縮會增加 Tomcat 的負擔,因此最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,將壓縮的任務交由 Nginx/Apache 去做。
4、管理AJP端口
AJP是為 Tomcat 與 HTTP 服務器之間通信而定制的協(xié)議,能提供較高的通信速度和效率。如果tomcat前端放的是apache的時候,會使用到AJP這個連接器。由于我們公司前端是由nginx做的反向代理,因此不使用此連接器,因此需要注銷掉該連接器。
5、更改關閉 Tomcat 實例的指令
server.xml中定義了可以直接關閉 Tomcat 實例的管理端口。我們通過 telnet 連接上該端口之后,輸入 SHUTDOWN (此為默認關閉指令)即可關閉 Tomcat 實例(注意,此時雖然實例關閉了,但是進程還是存在的)。由于默認關閉 Tomcat 的端口和指令都很簡單。默認端口為8005,指令為SHUTDOWN 。因此我們需要將關閉指令修改復雜一點。
當然,在新版的 Tomcat 中該端口僅監(jiān)聽在127.0.0.1上,因此大家也不必擔心。除非黑客登陸到tomcat本機去執(zhí)行關閉操作。
修改實例:
6、更改 Tomcat 的服務監(jiān)聽端口
一般公司的 Tomcat 都是放在內(nèi)網(wǎng)的,因此我們針對 Tomcat 服務的監(jiān)聽地址都是內(nèi)網(wǎng)地址。
修改實例:
7、關閉war自動部署
默認 Tomcat 是開啟了對war包的熱部署的。為了防止被植入木馬等惡意程序,因此我們要關閉自動部署。
修改實例:
六、禁用 Tomcat 管理頁面
我們線上是不使用 Tomcat 默認提供的管理頁面的,因此都會在初始化的時候就把這些頁面刪掉。這些頁面是存放在 Tomcat 安裝目錄下的webapps目錄下的。
我們只需要刪除該目錄下的所有文件即可。
當然,還有涉及管理頁面的2個配置文件 host-manager.xml 和 manager.xml 也需要一并刪掉。這兩個文件存放在 Tomcat 安裝目錄下的conf/Catalina/localhost目錄下。
七、用普通用戶啟動 Tomcat
為了進一步安全,我們不建議使用 root 來啟動 Tomcat。這邊建議使用專用用戶 tomcat 或者 nobody 用戶來啟動 Tomcat。
在啟動之前,需要對我們的tomcat 安裝目錄下所有文件的屬主和屬組都設置為指定用戶。
八、分離 Tomcat 和項目的用戶
為了防止 Tomcat 被植入 web shell 程序后,可以修改項目文件。因此我們要將 Tomcat 和項目的屬主做分離,這樣子,即便被搞,他也無法創(chuàng)建和編輯項目文件。
以上是“基于Tomcat安全配置與性能優(yōu)化的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)成都網(wǎng)站設計公司行業(yè)資訊頻道!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。