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

1. JVM

1.1.?使用 Server JRE 替代JDK。

服務(wù)器上不要安裝JDK笆焰,請(qǐng)使用 Server JRE. 服務(wù)器上根本不需要編譯器,代碼應(yīng)該在Release服務(wù)器上完成編譯打包工作见坑。

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

1.2.?JAVA_OPTS

export JAVA_OPTS="-server -Xms512m -Xmx4096m? -XX:PermSize=64M -XX:MaxPermSize=512m"

-Xms 指定初始化時(shí)化的棧內(nèi)存

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

提示

Java 8 以后 -XX:PermSize 與 -XX:MaxPermSize 兩個(gè)配置項(xiàng)被廢棄

2.?Tomcat 優(yōu)化

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

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

即熊楼,在一個(gè)服務(wù)器上啟動(dòng)多個(gè)tomcat然后做負(fù)載均衡處理霹娄。

maxThreads="2048" maxHttpHeaderSize="8192"

emptySessionPath="true" protocol="HTTP/1.1"

enableLookups="false" redirectPort="8181" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" />

提示

很多做過php運(yùn)維的朋友在這里會(huì)犯一個(gè)大錯(cuò)誤,php優(yōu)化服務(wù)器通常怎做法是安裝cpu以及內(nèi)存的情況配置連接數(shù)鲫骗,連接數(shù)過萬都很正常犬耻,但java不同jvm配置要非常小心,稍有差錯(cuò)就會(huì)崩潰执泰。

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

maxThreads? 客戶請(qǐng)求最大線程數(shù)

minSpareThreads? ? 初始化時(shí)創(chuàng)建的 socket 線程數(shù)

maxSpareThreads? 連接器的最大空閑 socket 線程數(shù)

2.2.?虛擬主機(jī)

不要使用Tomcat的虛擬主機(jī)术吝,每個(gè)站點(diǎn)一個(gè)實(shí)例计济。即茸苇,啟動(dòng)多個(gè)tomcat.

這也是PHP運(yùn)維在這里常犯的錯(cuò)誤,PHP的做法是一個(gè)Web下面放置多個(gè)虛擬主機(jī)沦寂,而不是每個(gè)主機(jī)啟動(dòng)一個(gè)web服務(wù)器学密。Tomcat 是多線程,共享內(nèi)存,任何一個(gè)虛擬主機(jī)中的應(yīng)用出現(xiàn)崩潰凑队,會(huì)影響到所有應(yīng)用程序则果。采用多個(gè)實(shí)例方式雖然開銷比較大,但保證了應(yīng)用程序隔離與安全漩氨。

2.3.?壓錯(cuò)傳輸

通常所說的gzip壓縮,Tomcat通過在server.xml配置設(shè)置壓縮的選項(xiàng)遗增。

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"/>

提示

壓縮會(huì)增加Tomcat負(fù)擔(dān)叫惊,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,壓縮交由Nginx/Apache 去做做修。

compression 打開壓縮功能

compressionMinSize? 啟用壓縮的輸出內(nèi)容大小霍狰,這里面默認(rèn)為2KB

compressableMimeType 壓縮類型

3.?Tomcat 安全配置

3.1.?禁用8005端口

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

3.2.?安裝后初始化配置

當(dāng)Tomcat完成安裝后你首先要做的事情如下:

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

rm -rf /srv/apache-tomcat/webapps/*

注釋或刪除 tomcat-users.xml 所有用戶權(quán)限饰及,看上去如下:

# cat conf/tomcat-users.xml


3.2.1.?隱藏版本信息

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

vim $CATALINA_HOME/conf/server.xml

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 Request

Transfer-Encoding: chunked

Date: Thu, 20 Oct 2011 09:51:55 GMT

Connection: close

Server: Neo App Srv 1.0

服務(wù)器信息已經(jīng)被改為 Server: Neo App Srv 1.0

注意:當(dāng)出現(xiàn) 404 頁面時(shí)仍可能看到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 <

server.info=Apache

server.number=

server.built=

EOF

測(cè)試

HTTP Status 404 - /sdf

type Status report

message /sdf

description The requested resource is not available.

Apache

3.2.2.?應(yīng)用程序安全

關(guān)閉war自動(dòng)部署 unpackWARs="false" autoDeploy="false"。防止被植入木馬等惡意程序

關(guān)閉 reloadable="false" 也用于防止被植入木馬

3.2.3.?JSESSIONID

修改 Cookie 變量 JSESSIONID燎含, 這個(gè)cookie 是用于維持Session關(guān)系宾濒。建議你改為PHPSESSID。

3.3.?啟動(dòng)用戶與端口

不要使用root用戶啟動(dòng)tomcat屏箍,Java程序與C程序不同绘梦。nginx,httpd 使用root用戶啟動(dòng)守護(hù)80端口,子進(jìn)程/線程會(huì)通過setuid(),setgid()兩個(gè)函數(shù)切換到普通用戶赴魁。即父進(jìn)程所有者是root用戶卸奉,子進(jìn)程與多線程所有者是一個(gè)非root用戶,這個(gè)用戶沒有shell颖御,無法通過ssh與控制臺(tái)登陸系統(tǒng)榄棵,Java 的JVM 是與系統(tǒng)無關(guān)的,是建立在OS之上的潘拱,你使用什么用戶啟動(dòng)Tomcat疹鳄,那麼Tomcat 就會(huì)繼承該所有者的權(quán)限。

這造成了一個(gè)問題泽铛,Linux系統(tǒng)小于1024的端口只有root可以使用尚辑,這也是為什么Tomcat默認(rèn)端口是8080。如果你想使用80端口只能使用root啟動(dòng)Tomcat盔腔。這有帶來了很多安全問題杠茬。

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

groupadd -g 80 daemon

adduser -o --home /daemon --shell /sbin/nologin --uid 80 --gid 80 -c "Web Server" daemon

注意 /sbin/nologin , 意味著該用戶不能登錄,同時(shí)我也沒有給它指定密碼瓢喉,這個(gè)用戶只能用于啟動(dòng)tomcat宁赤,沒有Shell權(quán)限就以為只被注入后無法運(yù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

另一個(gè)就是從80請(qǐng)求去調(diào)用8080的方案

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末佛猛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子坠狡,更是在濱河造成了極大的恐慌继找,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逃沿,死亡現(xiàn)場(chǎng)離奇詭異婴渡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)凯亮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門边臼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人假消,你說我怎么就攤上這事柠并。” “怎么了置谦?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵堂鲤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我媒峡,道長(zhǎng)瘟栖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任谅阿,我火速辦了婚禮半哟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘签餐。我一直安慰自己寓涨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布氯檐。 她就那樣靜靜地躺著戒良,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冠摄。 梳的紋絲不亂的頭發(fā)上糯崎,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天几缭,我揣著相機(jī)與錄音,去河邊找鬼沃呢。 笑死年栓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的薄霜。 我是一名探鬼主播某抓,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼惰瓜!你這毒婦竟也來了否副?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤鸵熟,失蹤者是張志新(化名)和其女友劉穎副编,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體流强,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年呻待,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了打月。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚕捉,死狀恐怖奏篙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迫淹,我是刑警寧澤秘通,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站敛熬,受9級(jí)特大地震影響肺稀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜应民,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一话原、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诲锹,春花似錦繁仁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至庸诱,卻和暖如春捻浦,著一層夾襖步出監(jiān)牢的瞬間晤揣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工默勾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碉渡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓母剥,卻偏偏與公主長(zhǎng)得像滞诺,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子环疼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容