1. JVM

1.1. 使用 Server JRE 替代JDK。

1.2. JAVA_OPTS

1.3. java.security 優(yōu)化




2. Tomcat 優(yōu)化

2.1. maxThreads 連接數(shù)限制

2.2. 虛擬主機

2" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > Tomcat 安全配置與性能優(yōu)化

Tomcat 安全配置與性能優(yōu)化

時間:2023-06-29 08:57:01 | 來源:網(wǎng)站運營

時間:2023-06-29 08:57:01 來源:網(wǎng)站運營

Tomcat 安全配置與性能優(yōu)化:目錄


1. JVM

1.1. 使用 Server JRE 替代JDK。

1.2. JAVA_OPTS

1.3. java.security 優(yōu)化




2. Tomcat 優(yōu)化

2.1. maxThreads 連接數(shù)限制

2.2. 虛擬主機

2.3. 壓縮傳輸




3. Tomcat 安全配置

3.1. 禁用8005端口

3.2. 安裝后初始化配置

3.2.1. 隱藏版本信息

3.2.2. 應用程序安全

3.2.3. JSESSIONID




3.3. 啟動用戶與端口




4. 如何部署應用程序

5. 延伸閱讀


1. JVM

1.1. 使用 Server JRE 替代JDK。

服務器上不要安裝JDK,請使用 Server JRE. 服務器上根本不需要編譯器,代碼應該在Release服務器上完成編譯打包工作。

理由:一旦服務器被控制,可以防止在其服務器上編譯其他惡意代碼并植入到你的程序中。

1.2. JAVA_OPTS

export JAVA_OPTS="-server -Xms512m -Xmx4096m -XX:PermSize=64M -XX:MaxPermSize=512m" -Xms 指定初始化時化的棧內(nèi)存

-Xmx 指定最大棧內(nèi)存

提示
Java 8 以后 -XX:PermSize 與 -XX:MaxPermSize 兩個配置項被廢棄

1.3. java.security 優(yōu)化

打開$JAVA_HOME/jre/lib/security/java.security文件,找到下面的內(nèi)容:

securerandom.source=file:/dev/urandom替換成 securerandom.source=file:/dev/./urandom 2. Tomcat 優(yōu)化

2.1. maxThreads 連接數(shù)限制

maxThreads 是 Tomcat 所能接受最杭州接數(shù)。一般設置不要超過8000以上,如果你的網(wǎng)站訪問量非常大可能使用運行多個Tomcat實例的方法。

即,在一個服務器上啟動多個tomcat然后做負載均衡處理。

<Connector port="8080" address="localhost" maxThreads="2048" maxHttpHeaderSize="8192" emptySessionPath="true" protocol="HTTP/1.1" enableLookups="false" redirectPort="8181" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" /> 提示
很多做過php運維的朋友在這里會犯一個大錯誤,php優(yōu)化服務器通常怎做法是安裝cpu以及內(nèi)存的情況配置連接數(shù),連接數(shù)過萬都很正常,但java不同jvm配置要非常小心,稍有差錯就會崩潰。

maxThreads 配置要結(jié)合 JVM -Xmx 參數(shù)調(diào)整,也就是要考慮內(nèi)存開銷。

maxThreads 客戶請求最大線程數(shù)minSpareThreads 初始化時創(chuàng)建的 socket 線程數(shù)maxSpareThreads 連接器的最大空閑 socket 線程數(shù) 2.2. 虛擬主機

不要使用Tomcat的虛擬主機,每個站點一個實例。即,啟動多個tomcat.

這也是PHP運維在這里常犯的錯誤,PHP的做法是一個Web下面放置多個虛擬主機,而不是每個主機啟動一個web服務器。Tomcat 是多線程,共享內(nèi)存,任何一個虛擬主機中的應用出現(xiàn)崩潰,會影響到所有應用程序。采用多個實例方式雖然開銷比較大,但保證了應用程序隔離與安全。

2.3. 壓縮傳輸

通常所說的gzip壓縮,Tomcat通過在server.xml配置設置壓縮的選項。

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" compression="on" compressionMinSize1="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,,application/octet-stream"/> 提示
壓縮會增加Tomcat負擔,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,壓縮交由Nginx/Apache 去做。

compression 打開壓縮功能 compressionMinSize 啟用壓縮的輸出內(nèi)容大小,這里面默認為2KBcompressableMimeType 壓縮類型 3. Tomcat 安全配置

3.1. 禁用8005端口

telnet localhost 8005 然后輸入 SHUTDOWN 就可以關閉 Tomcat,為了安全我們要禁用該功能

<Server port="-1" shutdown="SHUTDOWN"> 3.2. 安裝后初始化配置

當Tomcat完成安裝后你首先要做的事情如下:

首次安裝完成后立即刪除webapps下面的所有代碼

rm -rf /srv/apache-tomcat/webapps/* 注釋或刪除 tomcat-users.xml 所有用戶權(quán)限,看上去如下:

# cat conf/tomcat-users.xml<?xml version='1.0' encoding='utf-8'?><tomcat-users></tomcat-users> 3.2.1. 隱藏版本信息

隱藏Tomcat版本信息,首先隱藏HTTP頭中的版本信息

vim $CATALINA_HOME/conf/server.xml <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="8192" minSpareThreads="64" maxSpareThreads="128" acceptCount="128" enableLookups="false" server="Neo App Srv 1.0"/># curl -I http://localhost:8080/HTTP/1.1 400 Bad RequestTransfer-Encoding: chunkedDate: Thu, 20 Oct 2011 09:51:55 GMTConnection: closeServer: Neo App Srv 1.0 服務器信息已經(jīng)被改為 Server: Neo App Srv 1.0

注意:當出現(xiàn) 404 頁面時仍可能看到Tomcat的版本信息
HTTP Status 404 - /sdf type Status report message /sdf description The requested resource is not available. Apache Tomcat/8.0.32
隱藏Tomcat 404頁面版本信息的方法如下
mkdir -p apache-tomcat-8.0.33/lib/org/apache/catalina/util cat >> apache-tomcat-8.0.33/lib/org/apache/catalina/util/ServerInfo.properties <<EOF server.info=Apache server.number= server.built= EOF
測試
HTTP Status 404 - /sdf type Status report message /sdf description The requested resource is not available. Apache

3.2.2. 應用程序安全

關閉war自動部署 unpackWARs="false" autoDeploy="false"。防止被植入木馬等惡意程序

關閉 reloadable="false" 也用于防止被植入木馬

3.2.3. JSESSIONID

修改 Cookie 變量 JSESSIONID, 這個cookie 是用于維持Session關系。建議你改為PHPSESSID。

<Context path="" docBase="path/to/your" reloadable="false" sessionCookiePath="/" sessionCookieName="PHPSESSID"> 3.3. 啟動用戶與端口

不要使用root用戶啟動tomcat,Java程序與C程序不同。nginx,httpd 使用root用戶啟動守護80端口,子進程/線程會通過setuid(),setgid()兩個函數(shù)切換到普通用戶。即父進程所有者是root用戶,子進程與多線程所有者是一個非root用戶,這個用戶沒有shell,無法通過ssh與控制臺登陸系統(tǒng),Java 的JVM 是與系統(tǒng)無關的,是建立在OS之上的,你使用什么用戶啟動Tomcat,那麼Tomcat 就會繼承該所有者的權(quán)限。

這造成了一個問題,Linux系統(tǒng)小于1024的端口只有root可以使用,這也是為什么Tomcat默認端口是8080。如果你想使用80端口只能使用root啟動Tomcat。這有帶來了很多安全問題。

解決方案是創(chuàng)建一個普通用戶,如:

groupadd -g 80 daemonadduser -o --home /daemon --shell /sbin/nologin --uid 80 --gid 80 -c "Web Server" daemon 注意 /sbin/nologin , 意味著該用戶不能登錄,同時我也沒有給它指定密碼,這個用戶只能用于啟動tomcat,沒有Shell權(quán)限就以為只被注入后無法運行l(wèi)inux命令。

chown daemon:daemon -R /srv/*su - daemon -c "/srv/apache-tomcat/bin/startup.sh" 接下來解決80端口問題, 思路就是80去調(diào)用8080,或者映射端口。

下面是影射方案,80 跳轉(zhuǎn) 8080

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080取消跳轉(zhuǎn)iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080查看規(guī)則iptables -t nat -L 另一個就是從80請求去調(diào)用8080的方案

這個方案可以在 Tomcat 前段增加反向代理,例如:Nginx,Apache,Squid,Varnish或者F5, Array這類設備等等

4. 如何部署應用程序

應用程序部署與tomcat啟動,不能使用同一個用戶。

我的tomcat 安裝在 /srv目錄下,Tomcat啟動用戶為daemon; 應用程序放在/www目錄下www所有者是www用戶。這樣的目的是一旦tomcat被植入web shell程序,它將不能創(chuàng)建或編輯/www目錄下面的任何內(nèi)容。

adduser --home /www -c "Web Application" www 我的Tomcat安裝在/srv目錄下,但應用程序放在/www目錄下,一般是這樣的結(jié)構(gòu)。

/www/example.com/www.example.com 每次升級將壓錯包解壓到 /www/http://example.com/目錄下,http://www.example.com 是符號連接,連接到剛剛解壓的目錄。

這個可以實現(xiàn)通過符號連接在多個版本之間快速切換。

5. 延伸閱讀






關鍵詞:性能,安全,配置

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉