一個典型的iptables防火牆配置
機房安全是必須考慮的事情。一些服務器設備必須暴露公網IP,很容易遭到攻擊。配置硬件或軟件防火牆,只開放可以訪問的端口,拒絕其他不合法的IP的請求,包括端口掃描。甚至拒絕ping。將大大提升服務器的安全。 www.2cto.com
本腳本配置iptables,只允許北京和香港遠程訪問香港的服務器。但會開放web端口給任何IP訪問。可以做出更嚴格的限制,只允許某幾個IP訪問。這樣,規避大部分的隨意的攻擊。
本腳本缺省拒絕所有連接,這是必須小心的。如果用iptables -F來清空所有iptables的規則,可能導致遠程無法訪問服務器,必須先修改缺省規則為ACCEPT所有。所以有一種替代方法,在規則末尾增加一條drop任何包的規則。這樣清除規則後,不會導致無法訪問。 centos 5.2調試通過。
Linux代碼 www.2cto.com
#!/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