|
|
请帮我看看:
#!/bin/sh
echo "Starting iptables rules..."
#
# 1. configuration options
#
INET_IP="162.111.44.199"
INET_IFACE="eth0"
LAN_IP_RANGE="192.169.10.0/24"
LAN_IP="192.169.10.1"
LAN_BROADCAST_ADDRESS="192.169.10.255"
LAN_IFACE="eth1"
LO_IP="127.0.0.1"
LO_IFACE="lo"
IPTABLES="/sbin/iptables"
#
# 2. Load all required IPTables modules
#
#
# Needed to initially load modules
#
/sbin/depmod -a
#
# adds some iptables targets like LOG, REJECT and MASQUARADE.
#
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ip_tables
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
# CRITICAL: Enable IP forwarding since it is disables by default.
#
echo "1" > /proc/sys/net/ipv4/ip_forward
#
# 3. Reset the defult policies in the nat table.
#
$IPTABLES -F
$IPTABLES -F -t nat
$IPTABLES -X
$IPTABLES -X -t nat
$IPTABLES -t nat -F PREROUTING
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
#
# 定义安全策略为正面表列
#
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
#
# 4. Create content in userspecified chains
#
#
# 4.1 新增自定义的规则链:bad_tcp_packets, allowed, icmp_packets
#
$IPTABLES -N bad_tcp_packets
$IPTABLES -N allowed
$IPTABLES -N icmp_packets
#
# 4.1.1 bad_tcp_packets chain
# bad_tcp_packets 规则链的功能是:将要求重导向的联机记录起来,然后将封包丢弃(防止联机被绑架,
# 但会阻挡需要三方交谈的服务,如M$ Media Server)
#
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-level 6 --log-prefix "New not syn:"
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j REJECT --reject-with tcp-reset
#
# 4.1.2 allowed chain
# allowed 规则链的功能是:允许要求联机封包或响应封包进入,将其余封包丢弃
#
$IPTABLES -A allowed -p tcp --syn -j ACCEPT
$IPTABLES -A allowed -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p tcp -j REJECT --reject-with tcp-reset
#
# 4.1.3 icmp chain
# icmp_packets 规则链的功能是:允许ping封包进入,将其余封包丢弃
#
$IPTABLES -A icmp_packets -p icmp -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p icmp -s 0/0 --icmp-type 11 -j ACCEPT
#
# 4.2 INPUT Chain(过滤要到达防火墙的封包)
#
#
#
# 进入防火墙的TCP封包必须先进行bad_tcp_packets过滤
#
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
#
# 从WAN进入防火墙的ICMP封包必须先进行icmp_packets过滤,这是为了避免骇客传送不完整的IP封包,系统
# 会响应ICMP封包通知对方,导致主机位置被侦测出来
#
$IPTABLES -A INPUT -p icmp -i $INET_IFACE -j icmp_packets
#
# 从LAN进入防火墙的全部unicast和broadcast封包,通通放行;额外检查目的地IP可以将multicast封包过滤
#
$IPTABLES -A INPUT -p all -i $LAN_IFACE -d $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p all -i $LAN_IFACE -d $LAN_BROADCAST_ADDRESS -j ACCEPT
#
# 从Loopback接口进入防火墙的所有封包,检查是否来自本机,若是则放行;此规则去检查来源IP,似乎有些画蛇添足,
# 因为只有来自本机的封包才有可能进入Loopback接口
#
$IPTABLES -A INPUT -p all -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p all -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p all -i $LO_IFACE -s $INET_IP -j ACCEPT
#
# 从LAN进入防火墙的DHCP封包,予以放行(只有当防火墙担任DHCP时才使用)
#
# $IPTABLES -A INPUT -p udp -i $LAN_IFACE --dport 67 --sport 68 -j ACCEPT
#
# 从WAN进入防火墙的所有封包,检查是否为响应封包,若是则予以放行
#
$IPTABLES -A INPUT -p all -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# 限制过滤规则的比对频率为每分钟平均流量3个封包(超过上限的封包将暂停比对),并将瞬间流量设定为一次最多
# 处理3个封包(超过上限的封包将丢弃不予处理),这类封包通常用来进行阻断式攻击
#
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level 6 --log-prefix "IPT INPUT packet died:"
#
# 4.3 FORWARD Chain(过滤要通过防火墙的封包)
#
#
# 通过防火墙的TCP封包必须先进行bad_tcp_packets过滤
#
$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets
#
# 从LAN要到WAN的封包通通放行
#
$IPTABLES -A FORWARD -i $LAN_IFACE -o $INET_IFACE -j ACCEPT
#
# 从wan要到LAN的封包仅放行回应封包
#
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# 限制过滤规则的比对频率为每分钟平均流量3个封包(超过上限的封包将暂停比对),并将瞬间流量设定为一次最多
# 处理3个封包(超过上限的封包将丢弃不予处理),这类封包通常用来进行阻断式攻击
#
$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level 7 --log-prefix "IPT FORWARD packet died:"
#
# 4.4 OUTPUT Chain(过滤从防火墙送出的封包)
#
#
# 从防火墙送出的封包必须先进行bad_tcp_packets过滤
#
$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets
#
# 从防火墙送出的所有封包,通通放行
#
$IPTABLES -A OUTPUT -p all -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p all -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p all -s $INET_IP -j ACCEPT
#
# 限制过滤规则的比对频率为每分钟平均流量3个封包(超过上限的封包将暂停比对),并将瞬间流量设定为一次最多
# 处理3个封包(超过上限的封包将丢弃不予处理),这类封包通常用来进行阻断式攻击
#
$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level 7 --log-prefix "IPT OUTPUT packet died:"
#
# 5. Enable simple IP Forwarding and Masquerading , MASQ to INET_IFACE
#
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -s $LAN_IP_RANGE -j MASQUERADE
#$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
#
# 6. 阻断下述网段的数据包
#
$IPTABLES -t nat -A PREROUTING -s 192.168.0.0/16 -j REJECT --reject-with tcp-reset
$IPTABLES -t nat -A PREROUTING -s 10.0.0.0/8 -j REJECT --reject-with tcp-reset
$IPTABLES -t nat -A PREROUTING -s 172.16.0.0/12 -j REJECT --reject-with tcp-reset
#
# 7. Delete old POSTROUTING chain
#
$IPTABLES -t nat -F POSTROUTING
#
# 8. set SNAT
#
$IPTABLES -t nat -A POSTROUTING -s $LAN_IP_RANGE -j SNAT --to $INET_IP
#
# 9. Delete old INPUT chain
#
$IPTABLES -F INPUT
#
# 10. Set port
#
#
# 10.1 Drop ports in PREROUTING
#
$IPTABLES -A INPUT -p tcp -i $INET_IFACE -d $INET_IP --dport 80 -j RETURN
$IPTABLES -A INPUT -p tcp -i $INET_IFACE -d $INET_IP --dport 100 -j RETURN
$IPTABLES -A INPUT -p tcp -i $INET_IFACE -d $INET_IP --dport 1021 -j RETURN
$IPTABLES -A INPUT -p tcp -i $INET_IFACE -d $INET_IP --dport 1080 -j RETURN
$IPTABLES -A INPUT -p tcp -i $INET_IFACE -d $INET_IP --dport 1130 -j RETURN
$IPTABLES -A INPUT -p tcp -i $INET_IFACE -d $INET_IP --dport 2121 -j RETURN
$IPTABLES -A INPUT -p tcp -i $INET_IFACE -d $INET_IP --dport 3389 -j RETURN
$IPTABLES -A INPUT -p tcp -i $INET_IFACE -d $INET_IP --dport 3391 -j RETURN
$IPTABLES -A INPUT -p tcp -i $INET_IFACE -d $INET_IP --dport 3392 -j RETURN
$IPTABLES -A INPUT -p tcp -i $INET_IFACE -d $INET_IP --dport 4321 -j RETURN
$IPTABLES -A INPUT -p tcp -i $INET_IFACE -d $INET_IP --dport 10021 -j RETURN
#
# 10.2 设置管理端口为22
# port:22
#
# 可管理服务器的IP分别限定设置为192.169.10.5和162.111.44.200
$IPTABLES -A INPUT -p tcp -i $INET_IFACE -s 162.111.44.200/32 -d $INET_IP --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp -i $LAN_IFACE -s 192.169.10.3/32 -d $INET_IP --dport 22 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 22 -j REJECT --reject-with tcp-reset
#
# 10.3 disable port 1 to 1024
#
$IPTABLES -A INPUT -p tcp --dport 1:1024 -j RETURN
$IPTABLES -A INPUT -p udp --dport 1:1024 -j RETURN
#
# Delete old Forward chain
#
$IPTABLES -F FORWARD
#
# 10.4 封禁以下端口,主要是为了防范病毒、各种恶意攻击和端口扫描
#
# Drop 69,113,135,136,137,138,139,389,445,593,636,1029,1434,3067,3268,3269
# 4444,5554,5631,5800,5900,6346,6667,9393,20168,45576 ports
#
# 采用多端口比对的方法进行封禁
#
$IPTABLES -A FORWARD -p tcp -m multiport --port 69,113,135,136,137,138,139,389,445,593,636,1029,1434,1503,3067 -j DROP
$IPTABLES -A FORWARD -p tcp -m multiport --port 1720,3268,3269,4444,5554,5631,5800,5900,6346,6667,9393,20168,45576 -j DROP
$IPTABLES -A FORWARD -p udp -m multiport --port 69,113,135,136,137,138,139,389,445,593,636,1029,1434,1503,3067 -j DROP
$IPTABLES -A FORWARD -p udp -m multiport --port 1720,3268,3269,4444,5554,5631,5800,5900,6346,6667,9393,20168,45576 -j DROP
#
# 11. set natlog train
#
$IPTABLES -N natlog
$IPTABLES -A natlog -p tcp --syn -m state --state NEW -j LOG --log-prefix "nat_tcp: " --log-ip-options --log-level 6
$IPTABLES -A natlog -p udp -m state --state NEW -j LOG --log-prefix "nat_udp: " --log-ip-options --log-level 6
#
# Log all forward
#
$IPTABLES -A FORWARD -j natlog
#
# 12. save settings
#
/etc/init.d/iptables save
echo "End..." |
|