我有一个Web服务器连接到第三方数据库服务器,并被授予通过数据库服务器上的防火墙规则的权限。
当我在笔记本电脑上进行本地开发时,我使用SSH隧道通过Web服务器连接到数据库服务器。
ssh web.server.com -L 5678:database.server.com:1234
如果可能的话,我想要做的是在Web服务器上设置一个防火墙规则,这个规则基本上可以持久地完成同样的事情。
所以连接到web.server.com:5678转发我的连接到database.server.com:1234和数据库服务器允许连接,因为它来自Web服务器。
问题是,我不确定从哪里开始寻找方法来做到这一点。
我正在Web服务器上运行Shorewall 3.2.6来configuration我的防火墙。
我需要从一个VPN开始,还是可以在没有VPN的情况下实现?
使用Shorewall,你正在寻找一个DNAT规则( 在线文档非常棒,去那里)。 你最终会得到类似的东西
DNAT net loc:192.168.1.3:1234 tcp 5678
在您的规则文件中,其中192.168.1.3是您的数据库服务器的IP地址。 如果传入连接和Web服务器与数据库服务器的连接位于同一个NIC上,则可能必须启用routeback
选项。
不过,我非常强烈地敦促你不要这样做! 这将打开你的数据库服务器到任何人,明确授予他们访问伪装自己作为你的Web服务器和否定任何数据库服务器自身防火墙的能力。 另外,你通过这个连接所做的一切都是未encryption的, 包括你的数据库服务器的用户名和密码! 所以不要这样做! 您的SSH隧道提供身份validation和encryption,该端口转发不会执行。
另外,你为什么使用这样一个旧版本的Shorewall? 我已经使用Shorewall 多年了 ,当我开始使用版本3已经过时! 你现在至less应该在4.0,或者更好的是4.2或4.4。 让您的安全软件保持最新是绝对必要的!
我想你可以用这样的东西来实现你想要的东西(没有testing,只是从内存中,可能不会工作,但可以给你一些启动提示)。 在Web服务器上尝试:
iptables -t nat -I PREROUTING -p tcp --dport 5678 -j REDIRECT --to-port 1234 iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination database.server.com
除非您的数据库服务器无法从路由器直接访问,否则您可以直接在路由器上直接映射相应的端口。
但在我看来, 你仍然应该使用你的SSH隧道,因为它的优点:
1)连接需要autentification这是很好的2)stream量encryption3)你可以调整你的连接,只要你希望与SSH(添加压缩,添加更多的端口隧道,添加袜子5绑定等…
如果你不想保留SSH隧道,你可以设置一个像openvpn一样的自动encryptionVPN来做同样的事情。 这将使您的服务器更受保护。