场景:
[internal_server_1]AA------AB[firewall_1]AC----+
10.2.0.3-^ ^-10.2.0.2 |
internet
10.3.0.3-v v-10.3.0.2 |
[internal_server_2]BA------BB[firewall_2]BC----+
端口 AC、BC 具有有效的互联网地址。所有系统都运行 Linux 并具有所有系统的 root 访问权限。
需要安全 rsyncinternal_server_1:/某些/路径进入internal_server_2:/另一个/路径
我的想法是在两个防火墙之间建立 ssh 安全隧道,例如从防火墙 1
firewall1# ssh -N -p 22 -c 3des user2@firewall_2.example.com -L xxx/10.3.0.3/xxxx
之后将从 internal_server_1 运行 rsync,类似于:
intenal1# rsync -az /some/path [email protected]:/another/path
我不知道
- 如何为 rsync 创建正确的 ssh 隧道(哪些端口需要隧道)
- 和去哪里我会进行 rsync 吗?(如果是 ssh 隧道,则为远程计算机地址)
对于这个案例,有什么想法或有用的互联网资源吗?
谢谢。
答案1
我假设防火墙_2 上的 SSH 端口(您图中的“BC”)可从外部访问。网络 1(10.2.0.*)上的计算机可以直接(即通过 NAT)访问互联网,还是只能通过防火墙_1 进行代理访问?由于您没有具体说明,我假设不行。
可能最简单的做法是通过 SSH 隧道传输 rsync(显然,“最简单”是相对的)。首先,通过在防火墙 1 上运行以下命令来构建外部隧道:
firewall_1# ssh -N -p 22 -c 3des user2@firewall_2.example.com -L 10.2.0.2:5432:10.3.0.3:22
请注意,这将在任意端口(我使用了 5432)上运行绑定到其内部 IP(10.2.0.2)的隧道本地端(firewall_1)。
然后,从 server_1 运行 rsync 并使用其-e
选项通过 SSH 运行它:
server_1# rsync -e "ssh -N -p5432 -c 3des" -a /local/path [email protected]:/remote/path
这将通过 SSH 连接到 IP 地址 10.2.0.2 上的端口 5432,外部隧道将其转发到 10.3.0.3(server_2)端口 22(标准 SSH)。
顺便说一句,如果协调多台计算机上的设置(即从防火墙_1 创建隧道,然后从服务器_1 使用它)很困难,请告诉我;如果稍微复杂一点,可以使用单个命令从服务器_1 启动所有设置。虽然您应该能够设置一次外部隧道,然后就让它保持打开状态...
答案2
SSH 有一个名为 ProxyCommand 的选项,它允许您将所有 SSH 流量传递给可以在不同主机上运行的命令。您可能可以将多个这样的命令串联在一起以实现您想要的操作。
如果您可以直接从 internal_server_1 连接到firewall_2,则可以使用类似这样的内容(例如,-e
如果您使用 rsync,则作为值):
ssh -o ProxyCommand="ssh -W %h:%p firewall_2" internal_server_2
答案3
rsync 默认使用 SSH(端口 22)。因此,您需要在防火墙上进行端口转发,以便能够从内部服务器 1 rsync 到内部服务器 2。
可以iptables
在防火墙 1 和防火墙 2 上执行如下操作:
在防火墙1上
iptables -A POSTROUTING -s 10.2.0.3 -p tcp --dport 5022 -j SNAT --to-source AC.IP.addr.ess
在防火墙2上
iptables -A PREROUTING -s AC.IP.addr.ess -p tcp --dport 5022 -j DNAT --to-destination 10.3.0.3:22
使用这些规则,您可以使用端口 5022 从内部服务器 1 访问内部服务器 2,例如:
internal_server1$ ssh -p 5022 [email protected]
答案4
经过测试的完整命令如下:
rsync -av --delete -e "ssh -o ProxyCommand='ssh -l username -W %h:%p jumphost-ip'" ./source_path/ username@internal-ip:/dest_path/