iptables的过滤规则:
# 过滤表规则
- *filter
# 默认彻略
- :FORWARD DROP [ ]
- :INPUT DROP [ ]
- :OUTPUT ACCEPT [ ]
# 定义新链
- -N ICMP_FORWARD
- -N TCP_FORWARD
- -N UDP_FORWARD
- -N ICMP_INPUT
- -N TCP_INPUT
- -N UDP_INPUT
- # Fix a bug
- -A OUTPUT -p icmp -m state --state INVALID -j DROP
# 以下是FORWARD链的规则
# 若是ICMP协议则跳到 ICMP_FORWARD
- -A FORWARD -p icmp -j ICMP_FORWARD
# 若是TCP协议则跳到 TCP_FORWARD
- -A FORWARD -p tcp -j TCP_FORWARD
# 若是UDP协议则跳到 UDP_FORWARD
- -A FORWARD -p udp -j UDP_FORWARD
# 允许碎片通过的速率200个/s,从200开始计数
- -A FORWARD -f -m limit --limit 200/s --limit-burst 200 -j ACCEPT
# 不匹配FORWARD链的所有规则,丢弃数据包,结束FORWARD链
- -A FORWARD -j DROP
# 以下是FORWARD链中针对ICMP协议的规则
# 从内网到外网的放行
- -A ICMP_FORWARD -p icmp -s 192.168.0.0/24 -i eth0 -o ppp+ -j ACCEPT
# 从外网进来的回应包放行
- -A ICMP_FORWARD -p icmp -m state --state ESTABLISHED,RELATED -i ppp+ -j ACCEPT
# 丢弃所有不匹配的ICMP数据包,结束FORWARD链
- -A ICMP_FORWARD -p icmp -j DROP
# 以下是FORWARD链中针对TCP协议的规则
# 允许内网1024以上的端口连接外网
- -A TCP_FORWARD -p tcp -s 192.168.0.0/24 -m tcp --sport 1024: -i eth0 -o ppp+ -j ACCEPT
# 允许内网进行主动式的FTP
- -A TCP_FORWARD -p tcp -m tcp --sport 21 --dport 1024: -m state --state ESTABLISHED -i ppp+ -j ACCEPT
- -A TCP_FORWARD -p tcp -m tcp --sport 20 --dport 1024: -m state --state ESTABLISHED,RELATED -i ppp+ -j ACCEPT
# 允许外网进来的回应包通过
- -A TCP_FORWARD -p tcp -m state --state ESTABLISHED -m tcp --dport 1024: -i ppp+ -j ACCEPT
# 丢弃所有不匹配的TCP数据包,结束FORWARD链
- -A TCP_FORWARD -p tcp -j DROP
# 以下是FORWARD链中针对UDP协议的规则
# 允许内网1024以上的端口连接外网
- -A UDP_FORWARD -p udp -s 192.168.0.0/24 -m udp --sport 1024: -i eth0 -o ppp+ -j ACCEPT
# 允许外网中指明的DNS服务器进行域名解析
- -A UDP_FORWARD -p udp -s 202.96.96.68 -m udp --sport 53 --dport 1024: -i ppp+ -j ACCEPT
- -A UDP_FORWARD -p udp -s 202.96.*.* -m udp --sport 53 --dport 1024: -i ppp+ -j ACCEPT
# 开放IRC OICQ 端口
- -A UDP_FORWARD -p udp -m multiport --source-port 4000,8000 -m udp --dport 1024: -i ppp+ -j ACCEPT
# 允许从外网进来的UDP回应包通行
- -A UDP_FORWARD -p udp -m state --state ESTABLISHED,RELATED -m udp --dport 1024: -i ppp+ -j ACCEPT
# 丢弃所有不匹配的UDP数据包,结束FORWARD链
- -A UDP_FORWARD -p udp -j DROP
# 以下开始是对网关服务器的匹配规则
# 允许数据包进入本地回环接口
- -A INPUT -p all -i lo -j ACCEPT
# 若是ICMP协议则跳到ICMP_INPUT进行规则匹配
- -A INPUT -p icmp -j ICMP_INPUT
# 若是TCP协议则跳到TCP_INPUT进行规则匹配
- -A INPUT -p tcp -j TCP_INPUT
# 若是UDP协议则跳到UDP_INPUT进行规则匹配
-A INPUT -p udp -j UDP_INPUT
# 允许碎片通过的速率200个/s,从200开始计数
- -A INPUT -f -m limit --limit 200/s --limit-burst 200 -j ACCEPT
# 不匹配INPUT链的所有规则,丢弃数据包,结束INPUT链
- -A INPUT -j DROP
# 以下是INPUT链中针对ICMP协议的规则
# 允许从内网来的ICMP数据包
- -A ICMP_INPUT -p icmp -i eth0 -j ACCEPT
# 允许从外网来的ICMP回应包通行
- -A ICMP_INPUT -p icmp -m state --state ESTABLISHED,RELATED -i ppp+ -j ACCEPT
# 丢弃所有不匹配的ICMP数据包,结束INPUT链
- -A ICMP_INPUT -p icmp -j DROP
# 以下是INPUT链中针对TCP协议的规则
# 对内网机器提供 http https 网上邻居 透明代理服务
- -A TCP_INPUT -p tcp -s 192.168.0.0/24 -m multiport --destination-port 80,443,137,138,139,8080 -i eth0 -j ACCEPT
# 允许服务器以主动方式连接外网的FTP服务器
- -A TCP_INPUT -p tcp -m tcp --sport 21 --dport 1024: -m state --state ESTABLISHED -i ppp+ -j ACCEPT
- -A TCP_INPUT -p tcp -m tcp --sport 20 --dport 1024: -m state --state ESTABLISHED,RELATED -i ppp+ -j ACCEPT
# 提供 ssh smtp pop3 http https 服务
- -A TCP_INPUT -p tcp -m multiport --destination-port 22,25,110,80,443 -j ACCEPT
# 拒绝外网主动连接本服务器
- -A TCP_INPUT -p tcp -m tcp --syn -i ppp+ -j DROP
# 允许进来的回应包通过
- -A TCP_INPUT -p tcp -m state --state ESTABLISHED -m tcp --dport 1024: -j ACCEPT
# 丢弃所有不匹配的TCP数据包,结束INPUT链
- -A TCP_INPUT -p tcp -j DROP
# 以下是INPUT链中针对UDP协议的规则
# 允许外网中指明的DNS服务器进行域名解析
- -A UDP_INPUT -p udp -s 202.96.96.68 -m udp --sport 53 --dport 1024: -i ppp+ -j ACCEPT
- -A UDP_INPUT -p udp -s 202.96.*.* -m udp --sport 53 --dport 1024: -i ppp+ -j ACCEPT
# 为内网的机器提供DNS和SAMBA服务
- -A UDP_INPUT -p udp -s 192.168.0.0/24 -m multiport --destination-port 53,137,138,139 -i eth0 -j ACCEPT
# 允许服务器作为samba client
- -A UDP_INPUT -p udp -s 192.168.0.0/24 -m udp --sport 137:139 --dport 1024: -i eth0 -j ACCEPT
# 允许进来的回应包通过
- -A UDP_INPUT -p udp -m state --state ESTABLISHED,RELATED -m udp --dport 1024: -j ACCEPT
# 为内网的机器提供DHCP服务
- -A UDP_INPUT -p udp -m udp --sport 68 --dport 67 -i eth0 -j ACCEPT
# 丢弃所有不匹配的UDP数据包,结束INPUT链
- -A UDP_INPUT -p udp -j DROP
- COMMIT
# 路由表规则
*nat
# 默认彻略
- :PREROUTING ACCEPT [ ]
- :POSTROUTING ACCEPT [ ]
- :OUTPUT ACCEPT [ ]
# 为内网机器使用squid透明代理进行端口重定向
- -A PREROUTING -i eth0 -p tcp -d ! 192.168.0.1 -m tcp --dport 80 -j REDIRECT --to-ports 8080
# 对内网机器应用IP伪装
- -A POSTROUTING -o ppp+ -j MASQUERADE
- COMMIT
【编辑推荐】