如何允许外部网络使用 iptables 通过 ssh 连接到内部服务器

如何允许外部网络使用 iptables 通过 ssh 连接到内部服务器

我的防火墙 IP 为 10.0.0.2/24,这也是默认网关。我需要允许外部网络能够通过 SSH 连接到 IP 为 10.0.0.1/24 的服务器。我必须使用 iptables 并且需要在防火墙上设置权限。

答案1

假设其他一切都已到位,您将需要确保防火墙上存在两条规则:

  1. 转发规则:必须允许流量从外部转发到10.0.0.1端口22。
  2. NAT 规则:由于您使用的是 RFC 1918 专用 IPv4 网络,因此您需要更改到达防火墙、发往端口 22 的数据包的目标地址。

再次,我假设您的防火墙已设置为伪装 WAN 绑定流量,已启用 IPv4 转发,并且允许转发返回流量。

要解决第一部分以确保允许转发:

iptables -I FORWARD -d 10.0.0.1 --p TCP --dport 22 -j ACCEPT

如果您的 FORWARD 链默认为 ACCEPT(通常是默认值),则此规则可能是不必要的。

其次,进行目的地址转换:

iptables -t nat -I PREROUTING -p tcp --dport 22 -j DNAT --to 10.0.0.1

在这两个示例中,我都用来-I确保规则首先插入到各自的链中;优先于任何现有规则。这可能是所希望的,也可能不是所希望的。

您可以通过添加接口名称来使规则更加具体,但您没有在问题中指定任何名称。

另请注意,这些规则不是永久性的;系统重新启动将使它们消失。

答案2

通过使用下面的权限,我能够从外部 ssh 到内部网络。

# nano /etc/sysctl.conf

net.ipv4.ip_forward = 1

# route add -net 10.0.0.0/24 dev ens33
# iptables -t nat -A POSTROUTING ! -d 10.0.0.0/24 -o ens33 -j SNAT --to-source 192.168.1.200
# iptables -A PREROUTING -t nat -i ens38 -p tcp --dport 22 -j DNAT --to 10.0.0.1
# iptables -A FORWARD -p tcp -d 10.0.0.1 --dport 22 -j ACCEPT

相关内容