编辑:

编辑:

这是网络图:

  [External computer]---[Router]---[SSH server]

            EXTERNAL NET <=|=> INTERNAL NET

路由器正在进行 SNAT 和端口转换:

#~ iptables -t nat -A POSTROUTING -o eth-external -j SNAT --to-source $EXT_ROUTER_IP
#~ iptables -t nat -A PREROUTING -i eth-external -p tcp --dport 2222 -j DNAT --to-destination $SSH_SERVER:22

这很有效,我可以从我的网络外部通过 ssh -p 2222 $ROUTER_IP 连接到 SSH 服务器。

当我将 FORWARD 的默认策略设置为 DROP 时,问题就出现了。

#~ iptables -P FORWARD DROP

从逻辑上来说,现在发往内部 SSH 服务器的数据包已被丢弃。

我正在尝试

#~ iptables -A FORWARD -i eth-external -o eth-internal -p tcp --dport 22 -j ACCEPT
#~ iptables -A FORWARD -o sth-external -i eth-internal -p tcp --dport 22 -j ACCEPT

没有工作。

#~ iptables -A FORWARD -i eth-external -o eth-internal -j ACCEPT
#~ iptables -A FORWARD -o sth-external -i eth-internal -j ACCEPT

作品。

但我不想允许这两个接口之间的所有流量,只允许 SSH 数据包。

有人能帮助我吗?

谢谢!

编辑:

最后我终于让它工作了......

#~ iptables -t nat -A PREROUTING -i eth-external -p tcp --dport 2222 -j DNAT --to-destination $SSH_SERVER:22
#~ iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

谢谢@davidgo

答案1

您不接受从端口 2222 返回端口 22 的流量。您需要以下行

iptables -A FORWARD -i eth-external -o eth-internal -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -o sth-external -i eth-internal -p tcp --dport 2222 -j ACCEPT

或者可能更好

iptables -A FORWARD -i eth-external -o eth-internal -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

它将响应入站请求来匹配出站数据包。

相关内容