我有三个虚拟机。
1)虚拟机虚拟机它具有两个接口,可充当路由器:
eth0-10.160.10.254
eth1-172.10.0.254
2)虚拟机VM-B作为具有一个接口的内部网络运行:
eth0 - 10.160.10.1(并将 gw 设置为 10.160.10.254)
3)虚拟机虚拟机作为具有一个接口的外部网络:
eth0 172.10.0.1(并将 gw 设置为 172.10.0.254)
我希望当使用 iptables 从内部网络中的服务器发起时允许与路由器(VM-1)建立 ssh 连接。
因此在路由器 vbox 中我使用下面这两个命令:
iptables -A INPUT -s 10.160.10.4 -d 10.160.10.254 -p udp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.160.10.4 -d 10.160.10.254 -p tcp--dport 22 -j ACCEPT
为了测试这是否有效,我尝试使用 netcat。
在内部网络机器上我使用nc -lu 22
命令,在外部网络机器上我使用nc -u 193.160.10.4 22
命令,但什么都没有出现。
您知道需要出现什么以及如何正确使用 netcat 来测试 iptables 规则吗?
答案1
SSH 使用 TCP,而不是 UDP。您可以使用 nc -u 发送 UDP 数据包。试试
nc -vz <ip> <port>
如果您想以这种方式测试您的 iptables 规则,您应该将 INPUT 链的策略设置为 DROP 或 REJECT。请注意,您之前允许 tcp 数据包从源发送到端口 22。您可以允许它来自特定机器的 IP、整个子网或接口。
源 IP 示例:
iptables -A INPUT -s <source ip> -p tcp --dport 22 -j ACCEPT
源子网示例(接受来自 192.168.xxx.xxx 的所有内容):
iptables -A INPUT -s 192.168.0.0/16 -p tcp --dport 22 -j ACCEPT
示例源接口(接受通过接口 eth0 传入的每个数据包):
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
将 INPUT 的策略设置为 DROP(如果没有任何规则适用,则为默认操作):
iptables -P INPUT DROP
此致
编辑:当然,正如大卫所说的,但我推测问题中存在一些拼写错误,否则就不会有任何有效的联系。
答案2
您的问题分为两个部分:
第 1 部分 - 网络配置
首先,您使用了 3 个子网。我假设您将它们全部用作 /24:10.160.10.0/24、172.10.0.0/24 和 192.168.10.0/24
VM-A 配置为 10.160.10.0/24 和 172.10.0.0/24。
VM-B 配置为 192.168.10.0/24
VM-C 配置为 172.10.0.0/24。
使用此 IP 地址配置,VM-B 无法看VM-A 或 VM-B。您需要将 192.168.10.0/24 子网添加到 VM-A(您的路由器),或者将 VM-B 上的子网更改为 10.160.10.0/24 或 172.10.0.0/24 子网。也就是说,您不能将网关设置为与主机上设置的 IP 地址完全不同的子网。主机 IP 地址和网关 IP 地址必须位于同一子网内。
您还应该知道 172.10.0.0/24 不是私有子网。私人的172 范围是 172.16.0.0/12,即 IP 地址:172.16.0.0 -- 172.31.255.255 [1]
第 2 部分 - 防火墙配置
iptables -A 输入 -s 10.160.10.4 -d 10.160.10.254 -p udp --dport 22 -j 接受
源 IP 应该是10.160.10.1
10.160.10.4 主机来自哪里?否则 @Knorke 可以很好地处理 iptables 配置。