You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何nftables的prerouting链会导致SSH连接失败?

为何nftables的prerouting链会导致SSH连接失败?

我来帮你理清楚这个问题的根源哈~

首先咱们拆解下配置和问题的核心关联:

  1. prerouting链的drop策略直接拦截了SSH流量
    你的dnat_prerouting链设置了policy drop,这意味着所有进入prerouting NAT阶段的流量,如果没被链内的规则匹配到,就会直接被丢弃。
    你目前在这个链里只配置了TCP 80端口的DNAT转发规则,而你的SSH流量(看input链的配置应该是用7749端口)完全匹配不到这条规则,所以还没等走到input链去执行那些放行SSH的规则,就被prerouting链的drop策略直接干掉了,自然连不上服务器。

  2. 改成accept策略后能连接的原因
    当你把prerouting链的policy改成accept,那些没被DNAT规则匹配的流量(比如你的SSH流量)就可以正常通过prerouting阶段,继续流转到input链。而你的input链已经配置了放行已建立/相关连接、lo接口,还有TCP 7749端口的规则,SSH流量能顺利通过这些检查,自然就能连上了。

  3. 给你一个更安全的优化方案
    其实不需要把prerouting链的policy改成全局accept(这样相当于让所有流量跳过DNAT检查,安全性有所降低),你只需要在dnat_prerouting链的最后添加一条accept规则,让不需要做DNAT的流量正常通过即可:

    chain dnat_prerouting {
            type nat hook prerouting priority dstnat;policy drop;
             tcp dport 80 dnat ip to 192.168.100.1:80
             # 允许未匹配DNAT规则的流量通过prerouting阶段
             accept
    }
    

    这样既保留了对80端口的DNAT转发,又不会丢弃其他正常流量,同时后续还有input链的过滤规则做安全保障,比直接改全局policy要稳妥得多。

备注:内容来源于stack exchange,提问作者xfuture johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:35:28