商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 如何使用iptables设置自定义链

如何使用iptables设置自定义链

  发布于2026-07-16 阅读(0)

扫一扫,手机访问

使用iptables设置自定义链,其实是一个非常实用的技巧,尤其是在规则越来越多、需要分类管理的时候。通过自定义链,你可以把防火墙规则组织得更清晰、更模块化,而不是把所有逻辑都塞进那几条默认链里。 先说说我的理解:iptables的默认链,比如INPUT、OUTPUT、FORWARD,就像系统的大门,所有流量都要经过它们。但如果你的规则太复杂,光是读写就得花不少时间。自定义链的作用,就是把这些规则拆分成独立的“功能模块”,然后按需调用。这样既提高了可读性,也降低了误操作的风险。 好了,直接进入正题,看看具体怎么操作。 ### 1. 创建自定义链 动手创建自定义链,用`iptables -N`命令就能搞定。假设我们创建一个名为`MY_CUSTOM_CHAIN`的链: ``` sudo iptables -N MY_CUSTOM_CHAIN ``` 这里的`MY_CUSTOM_CHAIN`可以换成任何你喜欢的名字,但建议起个有意义的名称,方便以后识别。比如,如果是专门处理Web流量的,可以考虑叫`WEB_FILTER`。 ### 2. 将规则添加到自定义链 自定义链创建好之后,它只是一个空壳,需要往里填充规则。这里举个例子,我们打算把这个链用于处理HTTP和HTTPS流量: ``` sudo iptables -A MY_CUSTOM_CHAIN -p tcp --dport 80 -j ACCEPT sudo iptables -A MY_CUSTOM_CHAIN -p tcp --dport 443 -j ACCEPT sudo iptables -A MY_CUSTOM_CHAIN -j DROP ``` 这里稍微解释一下这几条规则: - 前两条:允许TCP协议的80端口(HTTP)和443端口(HTTPS)通过。 - 最后一条:如果流量不符合上面的条件,就直接丢弃。 其实很简单,规则和默认链里写的一样,只不过现在是挂在自定义链下面。 ### 3. 将自定义链应用到主链 自定义链里的规则虽然写好了,但如果不挂到某个主链上,它就不会生效。这一步,就是把这个自定义链引用到`INPUT`、`OUTPUT`或`FORWARD`链中。比如,我们想让所有进入的流量先经过`MY_CUSTOM_CHAIN`过滤: ``` sudo iptables -A INPUT -j MY_CUSTOM_CHAIN ``` 这条命令的意思是:所有进入的流量,都跳到`MY_CUSTOM_CHAIN`这个自定义链去处理。处理完了,如果规则里有`ACCEPT`或`DROP`,就执行对应的动作;如果没有匹配的规则,流量会回到主链继续往下走。 ### 4. 查看自定义链 想确认一下规则写对了没有,或者查一下当前有哪些规则,用这条命令: ``` sudo iptables -L MY_CUSTOM_CHAIN -v -n ``` 加了`-v`能显示包和字节计数,`-n`表示不解析域名,直接以IP形式显示。这样看起来更直观。 ### 5. 删除自定义链 如果发现自定义链用不上了,或者想重新配置,记得先解除引用,再删除。操作分为两步走: 第一步,把主链中对这个自定义链的引用去掉: ``` sudo iptables -D INPUT -j MY_CUSTOM_CHAIN ``` 第二步,删除这个自定义链本身: ``` sudo iptables -X MY_CUSTOM_CHAIN ``` 注意顺序不能错。如果自定义链已经被引用了,直接删除会报错。 ### 一个完整的流程示例 为了方便理解,我们把上面几步串成一个完整脚本,看起来会更清楚: ``` # 1. 创建自定义链 sudo iptables -N MY_CUSTOM_CHAIN # 2. 在自定义链中添加规则 sudo iptables -A MY_CUSTOM_CHAIN -p tcp --dport 80 -j ACCEPT sudo iptables -A MY_CUSTOM_CHAIN -p tcp --dport 443 -j ACCEPT sudo iptables -A MY_CUSTOM_CHAIN -j DROP # 3. 将自定义链挂到INPUT链上 sudo iptables -A INPUT -j MY_CUSTOM_CHAIN # 4. 查看自定义链的规则 sudo iptables -L MY_CUSTOM_CHAIN -v -n # 5. 清理:先解除引用,再删除自定义链 sudo iptables -D INPUT -j MY_CUSTOM_CHAIN sudo iptables -X MY_CUSTOM_CHAIN ``` 通过这样的方式,你可以根据业务场景灵活创建多个自定义链,比如一个处理HTTP,一个处理SSH,一个处理ICMP,各司其职。规则多了之后,维护起来会比全部塞在INPUT链里清晰很多。当然,如果规则非常简单,也没有必要刻意用自定义链,直接写在默认链里反而更省事。 关键还是根据实际场景,选择最合适的组织方式。
本文转载于:https://www.yisu.com/ask/90451947.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注