![iptables 没有正确路由 ssh](https://linux22.com/image/688039/iptables%20%E6%B2%A1%E6%9C%89%E6%AD%A3%E7%A1%AE%E8%B7%AF%E7%94%B1%20ssh.png)
我正在研究 AWS 系统,建立自己的小型网络。
我在开放子网中有一个 AWS 负载均衡器。在带有负载均衡器的子网中有一个纳米大小的服务器,运行 Apache,它充当我的穷人代理服务器,路由到我的 DMZ 子网。我让它运行得很好,路由到 HTTPS 和一切。它是一种简单而美丽的东西。
这就是我现在痛苦的原因。
我的 DMZ 中的一台机器是 gitlab 服务器。Git 需要 SSH 访问权限才能进行克隆等操作。由于我运行的是 apache,而且我了解 apache,可以蒙着眼睛配置它,所以我需要转发 SSH。由于这台机器是唯一需要从外部进行 SSH 的机器,所以我觉得这很简单,iptables 端口转发。
因此,在尝试让 IP 表正确转发大约 5 个小时后,我开始进行完整的系统测试,并意识到不知何故我的机器只能接受端口 22。这真的很糟糕。即使从本地 curl,我也无法访问 apache。我今天就此放弃,但各位大师有没有在我的 iptables 配置中看到任何会关闭对代理机器的 http 和 https 访问的内容?
我认为我的问题在于输出部分中的 forward 语句。我认为发生的事情是 forward 语句将所有流量转发到该 .69:22 端口。问题是该语句是使 SSH 内容转发的关键。
代理机器 = 10.0.0.5
gitlab = 10.0.1.69
# Generated by iptables-save v1.4.18 on Sun Aug 14 01:06:58 2016
*filter
:INPUT ACCEPT [326:116424]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [306:122290]
-A INPUT -p tcp -m tcp --dport 22 -j LOG
-A FORWARD -d 10.0.0.5/32 -p tcp -m tcp --dport 22 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 22 -j LOG
COMMIT
# Completed on Sun Aug 14 01:06:58 2016
# Generated by iptables-save v1.4.18 on Sun Aug 14 01:06:58 2016
*nat
:PREROUTING ACCEPT [112:6680]
:INPUT ACCEPT [112:6680]
:OUTPUT ACCEPT [54:3304]
:POSTROUTING ACCEPT [54:3304]
-A PREROUTING -d 10.0.0.5/32 -i eth0 -p tcp -m tcp --dport 22 -j DNAT --to-destination 10.0.1.69:22
-A POSTROUTING -d 10.0.1.69/32 -p tcp -m tcp --dport 22 -j SNAT --to-source 10.0.0.5
COMMIT
# Completed on Sun Aug 14 01:06:58 2016