Iptables简介
在Linux协议栈中,有一组回调函数的挂载点,通过这些挂载点挂接的钩子函数可以在Linux网络栈处理数据包的过程中对数据进行一些操作,例如过滤、修改、丢弃等。整个挂载点技术就叫做iptables和netfilter。
很多人知道iptables,但是却不知道netfilter。实际上,netfilter负责在内核中执行各种挂载规则,运行在内核模式中;而iptables是在用户模式下运行的进程,负责协助维护内核中netfilter的各种规则表。通过二者的配合来实现整个Linux协议栈中灵活处理数据包的机制。
netfilter可以挂载的规则点有5个(PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING),如下图所示。
目前Linux系统支持的不同挂载点能挂接的规则类型如下图所示:
当Linux协议栈的数据处理运行到挂接点时,它会依次调用挂接点上所有的钩子函数,直至数据包的处理结果时明确的接受、拒绝或者丢弃。
下图详细描述了入站、出站、转发数据流向以及各表、链之间的规则:
规则表之间的优先顺序:raw > mangle > nat > filter
管理和设置iptables规则
实际工作中最常用的就是使用filter(默认)表对数据包进行过滤处理,接下来详细介绍filter表的常用命令。各种常用参数如下图
iptables命令选项详解
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)
iptables [-j target/jump] 常用的处理动作
ACCEPT:允许数据包通过(例如:允许防火墙转发除ICMP协议以外的所有数据包)
iptables -A FORWARD -p ! icmp -j ACCEPT
DROP:直接丢弃数据包,不给任何回应信息
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
REJECT: 拦阻该封包,并传送封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这个封包会要求对方关闭 连接)。进行完此处理动作后,将不再匹配其它规则,直接中断过滤程序
iptables -A INPUT -p tcp -m tcp --dport 1234 -j REJECT --reject-with tcp-reset
REDIRECT:
将封包重新导向到另一个端口(pnat),进行完此处理动作后,将会继续匹配其它规则。这个功能可以用来实现透明代理或用来保护 web 服务器。例如:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
MASQUERADE:源地址伪装,只在NAT表中使用(与SNAT略有不同)
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000
DNAT:改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规则链(filter:input 或 filter:forward)。范例如下:
iptables -t nat -A PREROUTING -p tcp -d 135.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10:80-100
SNAT:源地址转换,修改数据包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则(mangleostrouting)。范例如下:
iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 192.236.50.155-192.236.50.160:1024-30000
MIRROR:镜射封包,也就是将来源 IP 与目的地 IP 对调后,将封包送回,进行完此处理动作后,将会中断过滤程序。
QUEUE:中断过滤程序,将封包放入队列,交给其它程序处理。通过自行开发的处理程序,可以进行其它应用,例如:计算连接费用等。
RETURN:结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自定义规则链看成是一个子程序,那么这个动作,就相当于提前结束子程序并返回到主程序中。
MARK:
将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续匹配其它规则。范例如下:
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2
LOG: 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"
-m:extend matches,这个选项用于提供更多的匹配参数,如:
-m state --state ESTABLISHED,RELATED
state状态有以下四种
-m tcp --dport 22
-m multiport --dports 22,3306
-m icmp --icmp-type 8
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有