Iptables配置:如何排除特定端口不被转发至目标地址(或转发至本地回环地址)
Iptables配置:如何排除特定端口不被转发至目标地址(或转发至本地回环地址)
没问题,这两种需求都能通过调整iptables规则轻松实现,我给你详细说两种方案:
方案一:将端口27的流量转发至127.0.0.1
iptables的规则是按从上到下的顺序匹配的,一旦匹配到某条规则就会执行对应动作,不会再往下匹配。所以我们只需要在你现有的转发规则前面插入一条针对端口27的DNAT规则即可:
sudo iptables -t nat -I PREROUTING -d 172.31.44.186 --dport 27 -j DNAT --to-destination 127.0.0.1
这里的-I参数是核心,它会把这条规则插入到PREROUTING链的最开头,确保端口27的流量先被匹配到并转发到本地回环地址,剩下的所有流量才会触发你原来的转发规则。
方案二:直接排除端口27,不转发至10.8.0.2
这种情况我们可以修改原有的转发规则,添加“非端口27”的匹配条件。不过iptables不支持直接修改规则,所以需要先删除旧规则,再添加新规则:
- 先删除你原来的那条全量转发规则:
sudo iptables -t nat -D PREROUTING -d 172.31.44.186 -j DNAT --to-destination 10.8.0.2
- 然后添加新规则,仅转发不是端口27的流量:
sudo iptables -t nat -A PREROUTING -d 172.31.44.186 ! --dport 27 -j DNAT --to-destination 10.8.0.2
这里的!符号表示“否定匹配”,意思是只处理目标端口不等于27的流量,端口27的流量会按照系统默认路由规则走,不会被转发到10.8.0.2。
你可以用以下命令查看当前规则的顺序和内容,确认配置是否正确:
sudo iptables -t nat -L PREROUTING -n -v
备注:内容来源于stack exchange,提问作者user1107607
相关产品推荐
相关产品推荐

