我需要使用iptables从一个IP转发到一个URL(由于目标服务器使用一个IP范围在它们之间交换)。
有可能做到这一点?
如果是这样,我正在考虑使用这个:
iptables -t nat -A PREROUTING -p tcp --dport 10022 -j DNAT --to sftp.cl.cloud.mypega.com:22 iptables -A FORWARD -d sftp.cl.cloud.mypega.com -p tcp --dport 22 -j ACCEPT iptables -t nat -A POSTROUTING -o eth69 -j MASQUERADE
它是否正确?
不,它不会工作。 虽然您可以将主机名称提供给iptables,但它们不会dynamicparsing。 根据手册页:
在将规则提交给内核之前,主机名将只被parsing一次。
所以规则将把包转发到提交规则后得到解决的IP地址。
这不能用于裸iptables 。 您需要设置一个代理(即haproxy , apache httpd , nginx ),它可以反向代理到您想要的目的地,然后代理DNAT。
真正的问题是如何让我的主机sftpstream量?
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -j ACCEPT
是的,这和SSH一样。 如果您只想限制networking中的某些主机,请相应地进行调整。 我从这里拿走了IPTables:允许传出的SSH 。 这也build议两个有状态规则,一旦build立连接,允许继续通信:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
目的地的DMZ,FQDN,IP地址scheme和IP轮换是不相关的。 只要您提供的FQDN有效且已注册,DNS将允许TCP / IP在需要的地方获取数据包。
如果您提到的DMZ服务器是您的DMZ,并且服务器充当您的防火墙,则您需要接受来自源服务器的数据包,并将其转发到承载公共IP的接口。 您还需要打开内部服务器的入站端口22端口的stream量。 接受并转发到内部networking。
注意,你不需要知道任何这个的目标FQDN。 如果他们有一个很好的静态IP地址,你可能会locking规则,只允许sftp(和SSH)进出这些网站。