iptables动作总结
ACCEPT动作:
将数据包放行,进行完此处理动作后,将不再比对当前链的其它规则,直接跳往下一个规则链。
范例如下:
1 2 3 4 5 6 7 8 9 10 11 | #新增自定义链TEST_ACCEPT iptables -t filter -N TEST_ACCEPT #新增自定义链TEST_ACCEPT2 iptables -t filter -N TEST_ACCEPT2 #在INPUT链中引用TEST_ACCEPT,在TEST_ACCEPT链中引用TEST_ACCEPT2 iptables -t filter -I INPUT -j TEST_ACCEPT iptables -t filter -I TEST_ACCEPT -j TEST_ACCEPT2 #在TEST_ACCEPT2增加如下规则 iptables -t filter -A TEST_ACCEPT2 -d 192.168.249.149 -p tcp -m tcp --dport 30180 -j ACCEPT #在TEST_ACCEPT增加如下规则 iptables -t filter -A TEST_ACCEPT -d 192.168.249.149 -p tcp -m tcp --dport 30180 -j REJECT |
测试:未加上面规则前,http://192.168.249.149:30180服务能够正常访问,加上上面规则后经测试还是能正常访问,效果入下图所示:
总结:这就说明自定义链TEST_ACCEPT2匹配规则 192.168.249.149 -p tcp -m tcp --dport 30180后执行ACCEPT动作,执行完ACCET动作后将不再比对当前链的(INPUT->TEST_ACCEPT->TEST_ACCEPT2)其它规则,直接跳往下一个规则链,TEST_ACCEPT链的第二条规则没机会匹配。
REJECT动作:
拦阻该数据包,并传送数据包通知对方,可以传送的数据包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这个数据包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
范例如下:
1 | iptables -t filter -I INPUT -d 192.168.249.149 -p tcp -m tcp --dport 30180 -j REJECT |
测试:
DROP动作:
丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
范例如下:
1 | iptables -t filter -I INPUT -d 192.168.249.149 -p tcp -m tcp --dport 30180 -j DROP |
测试:
总结:
DROP表示丢弃,REJECT表示拒绝,REJECT和DROP动作效果类似,只不过REJECT拦阻该数据包后会传送数据包通知对方,REJECT表达的意思好像更坚决一点。
REDIRECT动作:
将包重新导向到另一个端口(PNAT),进行完此处理动作后,将直接跳往下一个规则链。 这个功能可以用来实作通透式porxy 或用来保护 web 服务器。例如:
1 | iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 |
范例如下:
1 2 3 | iptables -t nat -A PREROUTING -p tcp --dport 1888 -j REDIRECT --to-ports 28888 iptables -t nat -A PREROUTING -p tcp --dport 1888 -j REDIRECT --to-ports 38888 iptables -t nat -A PREROUTING -p tcp --dport 1888 -j REDIRECT --to-ports 48888 |
测试:
MASQUERADE动作:
改写数据包来源 IP为防火墙 NIC IP,可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则链(和ACCEPT动作一致)。这个功能与 SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨号连接时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。范例如下:linux基础
1 | iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000 |
总结:使用MASQUERADE动作可以不指定网卡,它可以自动根据目标地址选择出口网卡地址作为伪装的源地址,另外,使用MASQUERADE动作和ACCEPT、SNAT、DNAT动作的效果一致,都是进行完此处理动作后,直接跳往下一个规则链。
参考:https://serverfault.com/questions/869751/how-does-masquerade-choose-an-ip-address-if-there-are-multiple
另外可以使用ip route get <dst>
命令来确定伪装后将用作源地址的地址。
SNAT动作
改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则链。范例如下:
1 | iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000 |
DNAT动作
改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规链。范例如下:
1 2 | iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10:80-100 |
测试:自定义链C匹配规则后执行DNAT动作,执行完DNAT动作后将不再比对当前链的(A->B->C)其它规则,直接跳往下一个规则链,B链的第二条规则没机会匹配。
RETURN动作
结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自定义规则链看成是一个子程序,那么这个动作,就相当提早结束子程序并返回到主程序中。
测试:TEST_ACCEPT链第一条规则匹配后,将返回后INPUT链继续执行INPUT链剩下未比对的规则,即INPUT链的第2条规则到第四条规则直到匹配规则成功执行对应动作。
MARK动作
将数据包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。范例如下:
1 | iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2 |
LOG动作
将封包相关讯息纪录在 /var/log 中,详细位置请查阅 /etc/syslog.conf 配置文件,进行完此处理动作后,将会继续比对其规则。例如:
1 | iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets" |
MIRROR动作
镜像数据包,也就是将来源 IP 与目的地 IP 对调后,将数据包送回,进行完此处理动作后,将会中断过滤程序。
QUEUE动作
中断过滤程序,将数据包放入队列,交给其它程序处理。透过自行开发的处理程序,可以进行其它应用,例如:计算联机费.......等。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2014-12-07 HDU1556:Color the ball(简单的线段树区域更新)
2014-12-07 HDU1698:Just a Hook(线段树区域更新模板题)
2014-12-07 32位的二进制数
2014-12-07 HDU5139:Formula(找规律+离线处理)