一個典型的iptables防火牆配置
阿新 • • 發佈:2018-12-23
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協議,轉載請註明來源