我目前正在尝试通过 Windows 10 主机上的 SSH 连接到我的 Linux Mint 客户机。更确切地说,我正在尝试在考虑特定防火墙规则的情况下成功连接到客户机。
使用 Virtual Box,我为 Linux Mint 虚拟机启用了仅主机适配器。
当使用该特定的允许所有规则通过防火墙允许任何和所有通过端口 22 的流量时,我能够从我的 Windows 主机使用 SSH 成功连接到客户机。
但是,我希望 Linux 客户机仅有的接受我的SSH 的 IP。换句话说,我希望它只接受我的 22 端口 IP(如果这有意义的话)。
我使用这些规则配置了 Linux 防火墙,不能连接成功后:
GUEST IP 22/tcp ALLOW IN HOST IP 22/tcp
HOST IP 22/tcp ALLOW OUT GUEST IP 22/tcp
注意:术语“GUEST IP”和“HOST IP”是上下文中关联 IP 地址的简单占位符。在本例中,GUEST IP 是来自 eth1 接口的主机专用适配器的 IP 地址。不用说,HOST IP 代表在我的 Windows 10 主机上找到的主机 IP 地址。
我已尽我所能使其发挥作用,但老实说,我现在不知道如何得到我想要的东西。
我当前的设置:
- 带有 MobaXtrem SSH 客户端和 FreeSSHd SSH 服务器的 Windows 10(主机)
- Linux Mint 17(Guest)带 openSSH 客户端和服务器
- 根本没有触碰 Windows 防火墙
- 目前已将 Linux 防火墙设置为删除,但已在提及的规则中添加
我想让大家知道,我对基于 Linux/Unix 的系统的经验是非常由于使用 shell、SSH 和配置防火墙而受到限制。
我实际上是一天前才安装了上述 SSH 软件。
总结:我想将我的 Linux 客户机配置为仅接受来自主机的 SSH 流量。我假设这是通过 IP 完成的,但我不确定如何操作。将上述防火墙规则添加到 Linux 客户机后,连接不再成功,每次尝试都会超时。
附加信息: - 我见过一些当地人提到端口转发;我试过了,没用。考虑到我能够让它与仅主机适配器一起工作,我想即使没有那个解决方案也行。
作为旁白,是否可以使用 SSH 通过 Linux 客户机连接到 Windows 主机?我尝试从 Linux 终端执行此操作,但它一直说我没有权限这样做。
如果您需要澄清或补充信息,请随时询问。
提前致谢!
— TRG
答案1
TCP 连接有两个端口,源端口和目标端口。对于传出的 SSH 连接,目标端口为 22,但源端口为随机选择(只有极少数协议,例如 BGP,使用相同的源端口和目标端口。)
因此你需要放宽规则以:
allow incoming from hostIP (any)/tcp to guestIP 22/tcp
allow outgoing from guestIP 22/tcp to hostIP (any)/tcp
如果你担心客人重新连接到主机时,只要使用有状态的防火墙(允许属于现有连接的传出数据包)。
在 iptables 中,工作规则集如下所示:
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j REJECT
# (Well, *I think* this should work.)
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -j REJECT
(包括“允许 ICMP”,因为诚实地)