检查 iptables 规则是否正常工作

检查 iptables 规则是否正常工作

我有三个虚拟机。

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]

  1. https://www.arin.net/knowledge/address_filters.html

第 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 配置。

相关内容