默认的5种规则链
1) INPUT:处理入站数据包
2) OUTPUT:处理出站数据包
3) FORWARD:处理转发数据包
4) POSTROUTING:在进行路由选择后处理数据包
5) PREROUTING:在进行路由选择前处理数据包
根据数据流的方向,规则链间的匹配顺序
1) 入站数据:PREROUTING、INPUT
2) 出站数据:OUTPUT、POSTROUTING
3) 转发数据:PREROUTING、FORWARD、POSTROUTING
表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。规则表间的优先顺序依次为:raw、mangle、nat、filter。
1) filter表:一般的过滤功能。
2) nat表:用于nat功能(端口映射,地址映射等)。
3) mangle表:用于对特定数据包的修改。
4) raw表:优先级最高,主要用于决定数据包是否被状态跟踪机制处理,提高性能。
常见的目标动作
1) ACCEPT:放行数据包
2) DROP:丢弃数据包
3) REJECT:拒绝数据包,并返回一个错误提示
4) LOG:将符合规则的数据包的信息记录在日志中,并传递给下一条规则处理
5) 用户自定义链名:传递给自定义链内的规则进行处理
6) SNAT:修改数据包的源地址
7) DNAT:修改数据包的目标地址
8) MASQUERADE:修改数据包的源地址为外网动态获取的IP
9) REDIRECT:重定向数据包
iptables命令的语法
iptables的命令语法格式比较复杂,命令选项非常多,而且大小写严格区分。表名使用小写,链名使用大写,目标动作使用大写。
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
注意事项
1) 不指定表名时,默认表示filter表
2) 不指定链名时,默认表示该表内所有链
3) 除非设置规则链的缺省策略,否则需要指定匹配条件
举几个小例子:
iptables -t raw -nL iptables -t mangle -nL iptables -t nat -nL iptables -t filter -nL iptables -nL iptables -t filter -nL --line-number iptables -t filter -A INPUT -s 192.168.10.111 -p icmp -j DROP iptables -t filter -D INPUT 1 iptables -t filter -I INPUT -s 192.168.10.111 -p icmp -j REJECT //iptables规则是自上而下的顺序处理的! iptables -t nat -A POSTROUTING -s 10.10.24.0/24 -p udp --dport 53 -o eth0 -j SNAT --to-source 192.168.10.112 iptables -t nat -I PREROUTING -p udp -s 10.10.24 .0/24 --dport 53 -j DNAT --to-destination 192.168.10.112 iptables -t nat -A POSTROUTING -s 10.10.24.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.10.112 iptables -t nat -nL --line-number -v iptables -t filter -A INPUT -s 192.168.10.112 -p tcp --dport 22 -j LOG iptables -t filter -A INPUT -p icmp -j REJECT --reject-with icmp-host-unreachable iptables -I INPUT 2 -s 10.1.1.0/24 -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -s 10.1.1.10 -p icmp -m limit 10/minute --limit-burst 15 -j ACCEPT iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN -m limit --limit 2/minute --limit-burst 3 -j ACCEPT iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN -j DROP //实现每分钟允许2个新连接,最多不超过3个的方法有: ( Did it! ) iptables -I INPUT 1 -p tcp --tcp-flags SYN,FIN,ACK SYN -m limit --limit 2/minute --limit-burst 3 -j ACCEPT iptables -I INPUT 2 -p tcp --tcp-flags SYN,FIN,ACK SYN -j DROP //另外一种写法 iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 3 -j DROP iptables -A INPUT -m -time --timestart 9:00 --timestop 18:00 --weekdays Fr --monthdays 22,23,24,25 //防洪水攻击 iptables -I FORWARD 1 -p tcp --syn -m limit --limit 1/s -j ACCEPT //客户机访问 web服务器,如果需要记录日志的话,当然需要在web服务器上面进行日志记录 iptables -I INPUT -p tcp --dport 80 -j LOG --log-tcp-options --log-tcp-sequence //如果需要在NAT 转发上面设置 IPTABLES日志,需要在 FORWARD链上面添加日志记录的规则! 。。。。。。
。。。还有很多~~
想更好滴研究 iptables! 可以看linux防火墙 这本书喔!