四张表: filter、nat、mangle和raw
五条链: PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING
在内核中打开转发功能:echo 1 >> /proc/sys/net/ipv4/ip_forward
表与链对应关系:
raw:
PREROUTING
OUTPUT
mangle(拆开、修改、封装):
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
nat(地址转换):
PREROUTING
OUTPUT
POSTROUTING
filter(过滤):
INPUT
OUTPUT
FORWARD
iptables [-t TABLE] COMMAND CHAIN [num] 匹配条件 -j 处理动作
一、TABLE (表)
raw、mangle、nat、filter,不写-t 参数指定则默认为filter
二、COMMAND :
1.管理规则
-A:附加一条规则,添加在链的尾部
-I CHAIN [num]: 插入一条规则,插入为对应CHAIN上的第num条;
-D CHAIN [num] 或者 -D CRETERIA : 删除指定链中的第num条规则;
-R CHAIN [num]: 替换指定的规则;
2.管理链:
-F [CHAIN]:flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
-P CHAIN: 设定指定链的默认策略;
-Z:置零指定链中所有规则的计数器;
-N:自定义一个新的空链
-X: 删除一个自定义的空链
-E: 重命名自定义的链;
3.查看类:
-L: 显示指定表中的规则;
-n: 以数字格式显示主机地址和端口号;
-v: 显示链及规则的详细信息
-vv:
-vvv
-x: 显示计数器的精确值
--line-numbers: 显示规则号码
三、链(chain)
PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING
四、匹配条件
1.通用匹配
-s
-d
-p {tcp|udp|icmp}
-i
-o
2.扩展匹配
(1)隐式扩展
-p tcp
--sport PORT[-PORT]: 源端口
--dport PORT[-PORT]: 目标端口
--tcp-flags mask comp: 只检查mask指定的标志位,是逗号分隔的标志位列表;comp:此列表中出现的标记位必须为1,comp中没出现,而mask中出现的,必须为0;
--tcp-flags SYN,FIN,ACK,RST SYN = --syn
SYN,ACK,RST,URG,PSH,FIN, ALL,NONE
--syn
-p icmp
--icmp-type
0: echo-reply
8: echo-request
-p udp
--sport
--dport
(2)显式扩展: 使用额外的匹配机制
-m EXTESTION --spe-opt
-m state: 状态扩展 (可以是icmp、udp、tcp等的状态)
结合ip_conntrack追踪会话的状态
NEW: 新连接请求
ESTABLISHED:已建立的连接(和tcp状态机的ESTABLISHED状态不一样)
INVALID:非法连接
RELATED:相关联的
-m state --state NEW,ESTABLISHED -j ACCEPT
首先要装载ip_conntrack_ftp和ip_nat_ftp模块
iptables -A INPUT -d 172.16.100.7 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-m multiport: 离散的多端口匹配扩展
--source-ports 21,22,80
--destination-ports
--ports
-m limit
--limit RATE
--limit-burst
(如:--limit 5/minute --limit-burst 8 -j ACCEPT)符合这速率则允许,不符合则执行下一条,所以还要在后面的规则drop.
-m string
--algo {bm|kmp}
--string PATTEN
例:iptables -I OUTPUT 1 -p tcp --sport 80 -m string --algo kmp --string "sex" -j DROP
-m connlimit: 每客户端IP连接数限制
[ ! ] --connlimit-above n (一般drop则不用取反!,accept则需要取反!)
-m iprange
--src-range 172.16.1.1-172.16.1.100
--dst-range
-m mac
--mac-source XX:XX:XX:XX:XX:XX
-m recent
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
条件取反:! 如 -s ! 172.16.100.6 (!后成有空格)
五、动作(target):
ACCEPT:放行
DROP:丢弃
REJECT:拒绝
DNAT:目标地址转换
SNAT:源地址转换
REDIRECT:端口重定向
MASQUERADE:地址伪装 masquerade,类似于SNAT,自动选择合适的外网地址作为转换后的地址,尤其适合外网地址是动态获取的情况。
LOG:日志 --log-prefix "something to be add before the log"
MARK:打标记
自定义链名 :跳转到自定义链
RETURN :在自定义链上定义,跳转回主链
每个规则都有两个内置的计数器:
被匹配的报文个数
被匹配的报文大小之和
SNAT:
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth 1 -j SNAT --to-source 10.0.0.1
DNAT:
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1
注意:做地址转换,forward链必须是ACCEPT才能通过。
保存规则:
service iptables save
默认位置: /etc/sysconfig/iptables
指定路径保存与载入:
iptables-save > /otherdir/iptalbes2
iptables-restore < /otherdir/iptables2
有任何疑问请点击留言: 留言板
本文发布于http://wiki.too2.net,转载请联系本人。