1. 程式人生 > >一個典型的iptables防火牆配置

一個典型的iptables防火牆配置

2011-02-17

周海漢 2011.2.17

機房安全是必須考慮的事情。一些伺服器裝置必須暴露公網IP,很容易遭到攻擊。配置硬體或軟體防火牆,只開放可以訪問的埠,拒絕其他不合法的IP的請求,包括埠掃描。甚至拒絕ping。將大大提升伺服器的安全。 本指令碼配置iptables,只允許北京和香港遠端訪問香港的伺服器。但會開放web埠給任何IP訪問。可以做出更嚴格的限制,只允許某幾個IP訪問。這樣,規避大部分的隨意的攻擊。 本指令碼預設拒絕所有連線,這是必須小心的。如果用iptables -F來清空所有iptables的規則,可能導致遠端無法訪問伺服器,必須先修改預設規則為ACCEPT所有。所以有一種替代方法,在規則末尾增加一條drop任何包的規則。這樣清除規則後,不會導致無法訪問。 centos 5.2除錯通過。

#!/bin/bash
# 2010.10.14 modified by zhouhh
### 1.允許內網192.168.0.0,通過內網絡卡的所有協議
### 2.允許北京電信、網通、電信通和香港26段共4個子網通過外網訪問ssh埠,允許所有ping本機
### 3.允許任何地址,通過任何網口訪問本機web埠
### 4.開放所有UDP埠
if [ $UID != 0 ]; then
	echo "must be root to run this script!"
	exit
fi

### 定義子網變數
 BJ_DXT=218.249.75.128/26
 BJ_DX=219.141.178.96/28
 BJ_CNC
=123.127.24.128/25 HK_26=210.211.26.0/24 NET_LAN=192.168.1.0/24 ### 定義本地IP IP_LAN=192.168.1. IP_WAN=210.211.26. ### 定義服務埠 ssh_port=60000 web_port=80 sip_port=5060 ### 定義網路介面 ETH_LAN=eth0 ETH_WAN=eth1 ### 定義程式及路徑變數 ipt=/sbin/iptables ### 具體規則 echo "[+]Flushing all rules..." iptables --flush service iptables stop echo
"[+]Set default policy..." #預設拒絕所有接入 $ipt -P INPUT DROP $ipt -I INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT $ipt -N TCP_ERR $ipt -I INPUT 2 -j TCP_ERR echo "[+]Creating rules for web port..." $ipt -A INPUT -p tcp --dport $web_port -m state --state NEW -j ACCEPT echo "[+] accept all UDP ports..." $ipt -A INPUT -p udp -j ACCEPT ### 允許北京和香港ping本機,其他拒絕 # ping 不限制,zhouhh comment # echo "[+]Creating icmp rules..." # $ipt -A INPUT -i $ETH_WAN -s $BJ-DXT -p icmp --cmp-type 8 -j ACCEPT # $ipt -A INPUT -i $ETH_WAN -s $BJ-DX -p icmp --cmp-type 8 -j ACCEPT # $ipt -A INPUT -i $ETH_WAN -s $BJ-CNC -p icmp --cmp-type 8 -j ACCEPT # $ipt -A INPUT -i $ETH_WAN -s $HK-26 -p icmp --cmp-type 8 -j ACCEPT # $ipt -A INPUT -i $ETH_WAN -p icmp -j DROP $ipt -A INPUT -p icmp -j ACCEPT ### 允許內網所有IP通訊 echo "[+]Permit lan all..." $ipt -A INPUT -i $NET_LAN -s $NET_LAN -j ACCEPT $ipt -A INPUT -i lo -j ACCEPT ### 其他規則start ### 其他規則end ### 拒絕錯誤的TCP包 echo "[+]Creating TCP rules for new chain TCP_ERR..." $ipt -I TCP_ERR 1 -p tcp --tcp-flags ALL ALL -j DROP $ipt -I TCP_ERR 2 -p tcp --tcp-flags ALL NONE -j DROP $ipt -I TCP_ERR 3 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP $ipt -I TCP_ERR 4 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP $ipt -I TCP_ERR 5 -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG -m limit --limit 1/s --log-prefix "bad package" $ipt -I TCP_ERR 6 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP $ipt -I TCP_ERR 7 -p tcp ! --syn -m state --state NEW -j DROP ### 允許北京和香港訪問ssh埠 echo "[+]Creating ssh rules..." $ipt -A INPUT -i $ETH_WAN -s $BJ_DXT -p tcp --dport $ssh_port -m state --state NEW -j ACCEPT $ipt -A INPUT -i $ETH_WAN -s $BJ_DX -p tcp --dport $ssh_port -m state --state NEW -j ACCEPT $ipt -A INPUT -i $ETH_WAN -s $BJ_CNC -p tcp --dport $ssh_port -m state --state NEW -j ACCEPT $ipt -A INPUT -i $ETH_WAN -s $HK_25 -p tcp --dport $ssh_port -m state --state NEW -j ACCEPT ### 儲存配置讓規則隨系統啟動 service iptables save

如非註明轉載, 均為原創. 本站遵循知識共享CC協議,轉載請註明來源