四张表: 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,转载请联系本人。