基于防火墙的 SSH 隧道

基于防火墙的 SSH 隧道

我有一个连接到第三方数据库服务器的 Web 服务器,并通过数据库服务器上的防火墙规则获得这样做的权限。

当我在笔记本电脑上进行本地开发时,我使用 SSH 隧道通过 Web 服务器连接到数据库服务器。

ssh web.server.com -L 5678:database.server.com:1234

如果可能的话,我想做的是在 Web 服务器上设置一条防火墙规则,本质上持续地完成同一件事。

因此,连接到 web.server.com:5678 会将我的连接转发到 database.server.com:1234,并且数据库服务器允许该连接,因为它来自 Web 服务器。

问题是,我真的不确定应该从哪里开始寻找方法来做到这一点。

我在网络服务器上运行 Shorewall 3.2.6 来配置我的防火墙。

我是否需要从 VPN 开始,或者是否可以不使用 VPN 来实现?

答案1

使用 Shorewall,您正在寻找 DNAT 规则(在线文档非常棒,去那里吧)。你最终会得到类似

DNAT net loc:192.168.1.3:1234 tcp 5678

routeback在您的规则文件中,其中 192.168.1.3 是您的数据库服务器的 IP 地址。如果您的传入连接和 Web 服务器与数据库服务器的连接位于同一 NIC 上,则可能必须启用该选项。

然而,我强烈敦促你不要这样做!!这会将您的数据库服务器向任何人开放,明确授予他们伪装成您的 Web 服务器的访问权限,并使数据库服务器无法对自身进行防火墙保护。此外,您通过此连接执行的所有操作都将不加密,包括您的数据库服务器用户名和密码!所以不要这样做!您的 SSH 隧道提供身份验证和加密,而此端口转发无法做到这一点。

另外,你为什么要使用这么老版本的 Shorewall?我已经使用 Shorewall 有,当我开始版本 3 已经过时了!你现在至少应该使用 4.0,或者最好是 4.2 或 4.4。保持你的安全软件最新是绝对必要!

答案2

我猜你可以用类似这样的方法实现你想要的(未经测试,仅凭记忆,可能不会起作用,但可以给你一些提示)。在 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)连接需要身份验证,这很好 2)流量是加密的 3)您可以随时使用 ssh 调整您的连接(添加压缩、向隧道添加更多端口、添加 socks5 绑定等...

答案3

如果您不想保留 ssh 隧道,您可以设置自动加密 VPN(如 openvpn)来执行相同操作。这将使您的服务器更加安全。

相关内容