現場(環境):CentOS 6.9 套件:tomcat、netfilter
原因:
依先前部落格介紹內容設定tomcat偽裝,
只有一定限度的防護方式,
這次想要再加上限制tomcat不使用root權限開啟。
處理方式:
這邊的重點在於因為root權限以外的使用者,
無法開啟1024以下的服務埠,
所以如果用一般使用者帳號會無法開啟80、443等服務。
此時只好將他開啟1024以上服務,
再透過iptables轉port
1. 先依tomcat偽裝內容做好所有前置作業。
這邊需要另外補充一點,如果要修改的比較好看些。
我們可以用touch 修改檔案時間,
因為touch一個已經存在的檔案時,他就只會更改時間。
#touch -m -d "2008-01-29" catalina.jar
(檔案時間配合其他檔案的時間設定)
2. 創建開啟服務的帳號
$CATALINA_HOME --> 表示為Tomcat的預設家目錄
#groupadd tomcat
#useradd -g tomcat tomcatuser
#chgrp -R tomcat $CATALINA_HOME
這邊也不用給他什麼其他的可以使用sudo的權限。
3.更改tomcat家目錄權限
#chmod 775 -R $CATALINA_HOME
這部份也可以依tomcat版本的差異,選擇想要賦予權限的路徑。
EX:bin、common、conf、logs、server、webapps、work
4. 關鍵在iptables的設定。
這邊我要幫他做一個導port的動作。
啟動forward功能。
#echo "1" > /proc/sys/net/ipv4/ip_forward
#sysctl -p
前面有說到非root帳號沒辦法開啟1024以下的port
所以我這邊讓tomcat 開啟 8000 與 4430 兩個服務。
接著用port forward 轉到 80 與 443。
#iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8000
#iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 4430
一般來說,如果單純只是要讓外面的主機可以進行連線的portfoward,這一行就夠了。
#iptables -t nat -A OUTPUT -p tcp -d localhost --dport 80 -j REDIRECT --to-ports 8000
#iptables -t nat -A OUTPUT -p tcp -d localhost --dport 443 -j REDIRECT --to-ports 4430
本機自己連結自己的話,因為不會經過prerouting,所以要加上-A OUTPUT的規則才能讓本機認得。
可以寫一個簡單的shell script讓他開機時可以自動執行,
或者寫在/etc/sysconfig/iptables當中。
記得,要轉的兩個PORT都要開可以連線。
#vim /etc/sysconfig/iptables
=!================================
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
[0:0] -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8000
[0:0] -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 4430
[0:0] -A OUTPUT -p tcp -d localhost --dport 80 -j REDIRECT --to-ports 8000
[0:0] -A OUTPUT -p tcp -d localhost --dport 443 -j REDIRECT --to-ports 4430
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 8000 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 4430 -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j DROP
-A INPUT -j DROP
COMMIT
=!============================================================
或者自己都設定好後,
使用指令存進/etc/sysconfig/iptables也可以
#iptables-save > /etc/sysconfig/iptables
這邊都設定完成後就可以使用使用者帳號去進行服務啟用測試了。
(本篇完)