實驗環境介紹:
本指令碼環境為eth0外網,eth1內網;
#!/bin/sh
#外網網卡
EXT_IF="eth0"
FW_IP="61.137.85.21"
#內網網卡
INT_IF="eth1"
LAN_IP="192.168.0.1"
LAN_IP_RANGE="192.168.0.0/255.255.255.0"
#載入模組,一般已內建
#Module loading.
#echo "modprobe modules"
#modprode ip_tables
#modprode ip_nat_ftp
#modprode ip_conntrack
#modprobe ip_conntrack_ftp
#啟用轉寄(forward)功能
echo "enabling IP FORWARDING......"
echo "1" > /proc/sys/net/ipv4/ip_forward
#規則初始化,設定預設都為drop
echo "enabling iptables rules"
#reset the default policies in the tables
#Iptables 命令參數
iptables -F
iptables -X
iptables -F -t mangle
iptables -X -t mangle
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
#set policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
###-----------------------------------------------------------------###
#過慮蠕蟲
#444/445/69/135/139
###-----------------------------------------------------------------###
iptables -A FORWARD -p tcp --dport 4444 -j DROP
iptables -A FORWARD -p udp --dport 4444 -j DROP
iptables -A FORWARD -p tcp --dport 445 -j DROP
iptables -A FORWARD -p udp --dport 445 -j DROP
iptables -A FORWARD -p tcp --dport 69 -j DROP
iptables -A FORWARD -p udp --dport 69 -j DROP
iptables -A FORWARD -p tcp --dport 135 -j DROP
iptables -A FORWARD -p udp --dport 135 -j DROP
iptables -A FORWARD -p tcp --dport 139 -j DROP
iptables -A FORWARD -p udp --dport 139 -j DROP
#允許ping localhost,ping 192.168.0.1/2
#allow loopback access
iptables -A INPUT -p icmp -i lo -j ACCEPT
iptables -A OUTPUT -p icmp -o lo -j ACCEPT
#開啟內對內串連
#iptables -A INPUT -i lo -j ACCEPT
#允許代理和內網客戶機相互傳輸資料(包括ping)
#allow ping LAN
iptables -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT
iptables -A OUTPUT -p ALL -o $INT_IF -d $LAN_IP_RANGE -j ACCEPT
#允許外網的網卡與內網相互連訊.接受資料只接受響應封包,否則不予允許存取.發送資料沒有限制.
iptables -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT
iptables -A INPUT -p ALL -i $INT_IF -s $LAN_IP_RANGE -j ACCEPT
#拒絕外部使用內網進行欺騙
#deny local cheat
iptables -A INPUT -i $EXT_IF -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i $EXT_IF -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i $EXT_IF -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i $EXT_IF -s 127.0.0.0/8 -j DROP
#從LAN進入防火牆主機的dhcp封包,不於允許存取,只有防火牆擔任DHCP時才允許存取
#deny DHCP_packets from LAN
iptables -A INPUT -p udp -i $INT_IF --dport 67 --sport 68 -j DROP
###-----------------------------------------------------------------------------------###
#配置向外方向的TCP規則,其中 --state ESTABLISHED ,NEW參數指定要檢查哪個狀態。
#ESTABLISHED標誌匹配屬於已有的TCP串連的封包.
#NEW標誌指定試圖建立一條新的TCP串連的第一個封包,這條規則指明屬於建立的和已建立的
#TCP串連的封包將會通過eth0連接埠向外發送.
###-----------------------------------------------------------------------------------###
iptables -A OUTPUT -o $EXT_IF -p tcp -m state --state ESTABLISHED,NEW -j ACCEPT
###----------------------------------------------------------------------------------###
#配置封包從一個連接埠轉寄到另一個連接埠
###----------------------------------------------------------------------------------###
iptables -A FORWARD -i $INT_IF -j ACCEPT
# same to above 和上面的規則功能相同
#iptables -A FORWARD -i $EXT_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
###-------------------------------------------------------------------------------------###
#檢查到達外部網路介面的封包狀態.屬於已有TCP串連的封包都允許通過
# 從WAN到LAN的封包僅允許存取回應封包
###-------------------------------------------------------------------------------------###
iptables -A INPUT -i $EXT_IF -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
# 限制過濾規則的比對頻率為每分鐘平均流量三個封包(超過上限的封包將暫停比對),
#並將瞬間流量設定為一次最多處理三個封包(超過上限的封包將丟棄不予處理),
#這類封包通常是駭客用來進行阻斷式攻擊
iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level INFO --log-prefix "IPT INPUT packets died:"
###-------------------------------------------------------------------------###
#不管來自哪裡的ip片段都進行控制,允許每秒通過100個片段
###-------------------------------------------------------------------------###
iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
###-------------------------------------------------------------------------###
#icmp包通過的控制,防止icmp駭客攻擊
###-------------------------------------------------------------------------###
iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
###-------------------------------------------------------------------------###
# 防止DDOS
###-------------------------------------------------------------------------###
#iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
###-------------------------------------------------------------------------###
# UDP包一律允許存取
# allow UDP
###-------------------------------------------------------------------------###
iptables -A FORWARD -p udp -d $LAN_IP_RANGE -i $EXT_IF -j ACCEPT
###-------------------------------------------------------------------------###
#根據mac屏蔽主機上網
###-------------------------------------------------------------------------###
#iptables -t nat -I PREROUTING -m mac --mac-source 4C:00:10:D8:57:F3 -j DROP
###-----------------------------------------------------###
# 開放內部主機可以telnet至外部主 telnet port 23
###-----------------------------------------------------###
#沒必要開啟23連接埠
#iptables -A OUTPUT -o $EXT_IF -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 23 -j ACCEPT
#iptables -A INPUT -i $EXT_IF -p tcp ! --syn -s any/0 --sport 23 -d $FW_IP --dport 1024:65535 -j ACCEPT
###-----------------------------------------------------###
# 開放郵包轉送通道 open SMTP port 25
###-----------------------------------------------------###
#以下是別人可以送信給你