經典iptables腳本(2011-07-07)

#!/bin/bash
#
# The interface that connect Internet
EXTIF="ppp0"
# the inside interface. if you don't have this one
# and you must let this be black ex> INIF=""
INIF="eth0"
INNET="192.168.1.0/24"     # This is for NAT's network
kver=`uname -r | cut -c 1-3`
if [ "$kver" != "2.4" ] && [ "$kver" != "2.5" ] && [ "$kver" != "2.6" ]; then
    echo "Your Linux Kernel Version may not be suported by this script!"
    echo "This scripts will not be runing"
    exit
fi
ipchains=`lsmod | grep ipchains`
if [ "$ipchains" != "" ]; then
    echo "unload ipchains in your system"
    rmmod ipchains 2> /dev/null
fi
# 載入相關模塊
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH EXTIF INIF INNET
modprobe ip_tables         > /dev/null 2>&1
modprobe iptable_nat       > /dev/null 2>&1
modprobe ip_nat_ftp       > /dev/null 2>&1
modprobe ip_nat_irc       > /dev/null 2>&1
modprobe ipt_mark       > /dev/null 2>&1
modprobe ip_conntrack       > /dev/null 2>&1
modprobe ip_conntrack_ftp   > /dev/null 2>&1
modprobe ip_conntrack_irc   > /dev/null 2>&1
modprobe ipt_MASQUERADE   > /dev/null 2>&1
# 清除所有防火牆規則
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -F -t nat
/sbin/iptables -X -t nat
/sbin/iptables -Z -t nat
/sbin/iptables -P INPUT   DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD DROP
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT     ACCEPT
#允許內網samba,smtp,pop3,連接
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m multiport --dports 1863,443,110,80,25 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s $INNET --dport 139 -j ACCEPT
#允許dns連接
/sbin/iptables -A INPUT -i $INIF -p udp -m multiport --dports 53 -j ACCEPT
#爲了防止DOS太多連接進來,那麼可以允許最多15個初始連接,超過的丟棄
/sbin/iptables -A INPUT -s $INNET -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -i $EXTIF -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
/sbin/iptables -A INPUT -s $INNET -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
#設置icmp闊值 ,並對***者記錄在案
/sbin/iptables -A INPUT -p icmp -m limit --limit 3/s -j LOG --log-level INFO --log-prefix "ICMP packet IN: "
/sbin/iptables -A INPUT -p icmp -m limit --limit 6/m -j ACCEPT
/sbin/iptables -A INPUT -p icmp -j DROP
#L7 layer補丁過濾...
# /sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto msnmessenger -j DROP
# /sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto skypeout -j DROP
# /sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto skypetoskype -j DROP
/sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto bittorrent -j DROP
/sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto fasttrack -j DROP
/sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto edonkey -j DROP
/sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto kugoo -j DROP
/sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto xunlei -j DROP
/sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto code_red -j DROP
/sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto kameng -j DROP
/sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto poco -j DROP
/sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto baiduxiaba -j DROP
/sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto 100bao -j DROP
/sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto socks -j DROP
/sbin/iptables -t mangle -I POSTROUTING -m layer7 --l7proto nimda -j DROP
#防止SYN*** 輕量
/sbin/iptables -N syn-flood
/sbin/iptables -A INPUT -p tcp --syn -j syn-flood
/sbin/iptables -I syn-flood -p tcp -m limit --limit 3/s --limit-burst 6 -j RETURN
/sbin/iptables -A syn-flood -j REJECT
#FORWARD鏈
/sbin/iptables -A FORWARD -m layer7 --l7proto qq -m time --timestart 8:00 --timestop 12:00 --days Sun,Mon,Tue,Wed,Thu,Fri,Sat -j DROP
/sbin/iptables -A FORWARD -m layer7 --l7proto qq -m time --timestart 13:30 --timestop 21:00 --days Sun,Mon,Tue,Wed,Thu,Fri,Sat -j DROP
/sbin/iptables -A FORWARD -p tcp -s $INNET -m multiport --dports 25,110,443,1863 -j ACCEPT
/sbin/iptables -A FORWARD -p udp -s $INNET --dport 53 -j ACCEPT
/sbin/iptables -A FORWARD -p gre -s $INNET -j ACCEPT
/sbin/iptables -A FORWARD -p icmp -s $INNET -j ACCEPT
#禁止BT連接
/sbin/iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP
/sbin/iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP
/sbin/iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP
#只允許每組ip同時15個80端口轉發
/sbin/iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 24 -j DROP
#打開 syncookie (輕量級預防 DOS ***)
sysctl -w net.ipv4.tcp_syncookies=1 &>/dev/null
#設置默認 TCP 連接癡呆時長爲 3800 秒(此選項可以大大降低連接數)
sysctl -w net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=3800 &>/dev/null
#設置支持最大連接樹爲 30W(這個根據你的內存和 iptables 版本來,每個 connection ?枰?300 多個字節)
sysctl -w net.ipv4.ip_conntrack_max=300000 &>/dev/null
#內網IP轉發
/sbin/iptables -A INPUT -i lo   -j ACCEPT
if [ "$INIF" != "" ]; then
    /sbin/iptables -A INPUT -i $INIF -j ACCEPT
    echo "1" > /proc/sys/net/ipv4/ip_forward
    /sbin/iptables -t nat -A POSTROUTING -s $INNET -o $EXTIF -j MASQUERADE
    #/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
    /sbin/iptables -t nat -A PREROUTING -p tcp -m iprange --src-range 192.168.1.3-192.168.1.253 --dport 80 -j REDIRECT --to-ports 3128
fi
#載入信任和拒絕的網域文件
if [ -f /opt/iptables/iptables.deny ]; then
    sh /opt/iptables/iptables.deny
fi
if [ -f /opt/iptables/iptables.allow ]; then
    sh /opt/iptables/iptables.allow
fi
#網絡帶寬限制
if [ -f /opt/iptables/QoS.sh ]; then
    sh /opt/iptables/QoS.sh
fi
#防網絡***
if [ -f /opt/httpd-err/http-netstat.sh ]; then
    sh /opt/httpd-err/http-netstat.sh
fi
#允許ICMP封包和已經建立連接的數據包通過
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
AICMP="0 3 3/4 4 11 12 14 16 18"
for tyicmp in $AICMP
do
    /sbin/iptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT
done
#開放的端口
/sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 21 -j ACCEPT     # FTP
# /sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 22 -j ACCEPT     # SSH
/sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 25 -j ACCEPT     # SMTP
/sbin/iptables -A INPUT -p UDP -i $EXTIF --dport 53 -j ACCEPT     # DNS
/sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 53 -j ACCEPT
/sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 80 -j ACCEPT     # WWW
/sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 110 -j ACCEPT     # POP3
/sbin/iptables -A INPUT -p TCP -i $EXTIF --dport 113 -j ACCEPT     # auth
Quote:
[root@server ~]# cat /opt/iptables/iptables.allow
#!/bin/bash
#
# This program is used to allow some IP or hosts to access your Server
#MAC、IP地址綁定校驗
/sbin/iptables -A FORWARD -s 192.168.1.3 -m mac --mac-source 00:03:0d:32:39:92 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.4 -m mac --mac-source 00:11:5B:83:C2:17 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.5 -m mac --mac-source 00:11:5B:E3:F1:39 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.6 -m mac --mac-source 00:0B:6A:6D:5E:7B -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.7 -m mac --mac-source 00:05:5D:F6:B4:82 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.8 -m mac --mac-source 00:11:5B:9E:BE:5C -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.9 -m mac --mac-source 00:0C:6E:B6:84:9B -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.10 -m mac --mac-source 00:0D:5E:A8:9D:4F -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.11 -m mac --mac-source 00:06:1B:CE:7B:36 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.12 -m mac --mac-source 00:11:2F:E5:33:15 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.13 -m mac --mac-source 00:0A:EB:FD:89:9B -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.14 -m mac --mac-source 00:0B:6A:E8:36:F5 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.15 -m mac --mac-source 00:11:5B:F3:C0:4D -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.16 -m mac --mac-source 00:00:E8:18:C1:64 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.17 -m mac --mac-source 00:14:2A:31:98:99 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.18 -m mac --mac-source 00:0A:EB:95:68:44 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.19 -m mac --mac-source 00:0B:6A:6C:F5:85 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.20 -m mac --mac-source 00:E0:06:09:55:66 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s 192.168.1.21 -m mac --mac-source 00:C0:9F:9B:20:53 -p tcp --dport 80 -j ACCEPT
# 將NB加入高級組
/sbin/iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK --set-mark 60
/sbin/iptables -t mangle -A POSTROUTING -d 192.168.1.3 -j MARK --set-mark 60
# 將 Rita 加入高級組
/sbin/iptables -t mangle -A PREROUTING -s 192.168.1.7 -j MARK --set-mark 60
/sbin/iptables -t mangle -A POSTROUTING -d 192.168.1.7 -j MARK --set-mark 60
# 將 Workstation 加入高級組
/sbin/iptables -t mangle -A PREROUTING -s 192.168.1.8 -j MARK --set-mark 60
/sbin/iptables -t mangle -A POSTROUTING -d 192.168.1.8 -j MARK --set-mark 60
# NB 數據包全部放行
/sbin/iptables -I INPUT -s 192.168.1.3 -j ACCEPT
/sbin/iptables -I FORWARD -s 192.168.1.3 -j ACCEPT
# Wujie 數據包全部放行
/sbin/iptables -I INPUT -s 192.168.1.6 -j ACCEPT
/sbin/iptables -I FORWARD -s 192.168.1.6 -j ACCEPT
# Rita 數據包全部放行
/sbin/iptables -I INPUT -s 192.168.1.7 -j ACCEPT
/sbin/iptables -I FORWARD -s 192.168.1.7 -j ACCEPT
# Workstation 數據包全部放行
/sbin/iptables -I INPUT -s 192.168.1.8 -j ACCEPT
/sbin/iptables -I FORWARD -s 192.168.1.8 -j ACCEPT
[root@server ~]# cat /opt/iptables/iptables.deny
#!/bin/bash
#
# This script will deny computer from LAN
# 禁止生產部文員使用 Internet
/sbin/iptables -I FORWARD -m mac --mac-source 00:0D:61:98:8D:98 -j DROP
/sbin/iptables -I INPUT -m mac --mac-source 00:0D:61:98:8D:98 -j DROP
# 禁止192.168.1.12使用QQ
/sbin/iptables -t mangle -A POSTROUTING -m layer7 --l7proto qq -s 192.168.1.12/32 -j DROP
/sbin/iptables -t mangle -A POSTROUTING -m layer7 --l7proto qq -d 192.168.1.12/32 -j DROP
# 禁止192.168.1.12使用MSN
# /sbin/iptables -t mangle -A POSTROUTING -m layer7 --l7proto msnmessenger -s 192.168.1.12/32 -j DROP
# /sbin/iptables -t mangle -A POSTROUTING -m layer7 --l7proto msnmessenger -d 192.168.1.12/32 -j DROP
# 以MAC認證方式將用戶加入相應的QoS組
# /sbin/iptables -t mangle -A PREROUTING -m mac --mac-source 00:11:2F:E5:33:15 -j MARK --set-mark 20
# /sbin/iptables -t mangle -A PREROUTING -m mac --mac-source 00:03:0D:32:39:92 -j MARK --set-mark 60
# 初級用戶,限制流量
/sbin/iptables -t mangle -A PREROUTING -s 192.168.1.12 -j MARK --set-mark 20
/sbin/iptables -t mangle -A POSTROUTING -d 192.168.1.12 -j MARK --set-mark 20
# 針對特定用戶,限制流量
/sbin/iptables -t mangle -A PREROUTING -s 192.168.1.4 -j MARK --set-mark 30
/sbin/iptables -t mangle -A POSTROUTING -d 192.168.1.4 -j MARK --set-mark 30
[root@server ~]# cat /opt/iptables/QoS.sh
#!/bin/sh
#
# Coyote local command init script
# 對外網卡: eth1
# 對內網卡: eth0
# 清除 eth1 所有隊列規則
tc qdisc del dev eth1 root 2>/dev/null
# 定義最頂層(根)隊列規則,並指定 default 類別編號
tc qdisc add dev eth1 root handle 10: htb default 50
# 定義第一層的 10:1 類別 (總頻寬)
tc class add dev eth1 parent 10: classid 10:1 htb rate 64kbps ceil 64kbps
# 定義第二層葉類別
# rate 保證頻寬,ceil 最大頻寬,prio 優先權
tc class add dev eth1 parent 10:1 classid 10:10 htb rate 1kbps ceil 2kbps prio 0
tc class add dev eth1 parent 10:1 classid 10:20 htb rate 2kbps ceil 8kbps prio 2
tc class add dev eth1 parent 10:1 classid 10:30 htb rate 4kbps ceil 12kbps prio 3
tc class add dev eth1 parent 10:1 classid 10:40 htb rate 8kbps ceil 16kbps prio 1
tc class add dev eth1 parent 10:1 classid 10:50 htb rate 32kbps ceil 40kbps prio 4
tc class add dev eth1 parent 10:1 classid 10:60 htb rate 32kbps ceil 40kbps prio 4
# 定義各葉類別的隊列規則
# parent 類別編號,handle 葉類別隊列規則編號
# 由於採用 fw 過濾器,所以此處使用 pfifo 的隊列規則即可
tc qdisc add dev eth1 parent 10:10 handle 101: pfifo
tc qdisc add dev eth1 parent 10:20 handle 102: pfifo
tc qdisc add dev eth1 parent 10:30 handle 103: pfifo
tc qdisc add dev eth1 parent 10:40 handle 104: pfifo
tc qdisc add dev eth1 parent 10:50 handle 105: pfifo
tc qdisc add dev eth1 parent 10:60 handle 106: pfifo
# 設定過濾器
# 指定貼有 10 標籤 (handle) 的封包,歸類到 10:10 類別,以此類推
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 30 fw classid 10:30
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 40 fw classid 10:40
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 50 fw classid 10:50
tc filter add dev eth1 parent 10: protocol ip prio 100 handle 60 fw classid 10:60
# QoS eth0 下載方面
#
# 清除 eth0所有隊列規則
tc qdisc del dev eth0 root 2>/dev/null
# 定義最頂層(根)隊列規則,並指定 default 類別編號
tc qdisc add dev eth0 root handle 10: htb default 50
# 定義第一層的 10:1 類別 (總頻寬)
tc class add dev eth0 parent 10: classid 10:1 htb rate 256kbps ceil 256kbps
# 定義第二層葉類別
# rate 保證頻寬,ceil 最大頻寬,prio 優先權
tc class add dev eth0 parent 10:1 classid 10:10 htb rate 1kbps ceil 2kbps prio 0
tc class add dev eth0 parent 10:1 classid 10:20 htb rate 4kbps ceil 32kbps prio 2
tc class add dev eth0 parent 10:1 classid 10:30 htb rate 8kbps ceil 188kbps prio 3
tc class add dev eth0 parent 10:1 classid 10:40 htb rate 16kbps ceil 196kbps prio 1
tc class add dev eth0 parent 10:1 classid 10:50 htb rate 32kbps ceil 212kbps prio 4
tc class add dev eth0 parent 10:1 classid 10:60 htb rate 32kbps ceil 212kbps prio 4
# 定義各葉類別的隊列規則
# parent 類別編號,handle 葉類別隊列規則編號
tc qdisc add dev eth0 parent 10:10 handle 101: pfifo
tc qdisc add dev eth0 parent 10:20 handle 102: pfifo
tc qdisc add dev eth0 parent 10:30 handle 103: pfifo
tc qdisc add dev eth0 parent 10:40 handle 104: pfifo
tc qdisc add dev eth0 parent 10:50 handle 105: pfifo
tc qdisc add dev eth0 parent 10:60 handle 106: pfifo
# 設定過濾器
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 10 fw classid 10:10
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 20 fw classid 10:20
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 30 fw classid 10:30
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 40 fw classid 10:40
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 50 fw classid 10:50
tc filter add dev eth0 parent 10: protocol ip prio 100 handle 60 fw classid 10:60
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章