检查iptables规则是否正在工作

我有三个虚拟机。

1)作为具有两个接口的路由器的虚拟机VM-A

eth0 – 10.160.10.254

eth1 – 172.10.0.254

2)作为内部networking的虚拟机VM-B ,具有一个接口:

eth0 – 10.160.10.1(和gw到10.160.10.254)

3)作为外部networking的虚拟机VM-C ,具有一个接口:

eth0 172.10.0.1(和gw到172.10.0.254)

我想要允许ssh连接到路由器(VM-1)时发起的内部networking与iptables的服务器。

所以在路由器的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 

testing这是否正在工作我试图使用netcat

在内部networking机器中使用nc -lu 22命令,而在外部networking机器中使用nc -u 193.160.10.4 22命令,但没有任何内容出现。

你知道什么需要出现,以及如何正确使用netcat来testingiptables规则吗?

SSH使用TCP,而不是UDP。 你使用nc -u来发送UDP数据包。 你试一试

 nc -vz <ip> <port> 

如果你想以这种方式testing你的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部分 – networkingconfiguration

首先是你正在使用3个子网。 我假设你把它们全部用作/ 24:10.160.10.0/24,172.10.0.0/24和192.168.10.0/24

VM-Aconfiguration为10.160.10.0/24和172.10.0.0/24。

VM-Bconfiguration为192.168.10.0/24

VM-Cconfiguration为172.10.0.0/24。

使用此IP地址configuration,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部分 – 防火墙configuration

iptables -A INPUT -s 10.160.10.4 -d 10.160.10.254 -p udp -dport 22 -j ACCEPT

源IP应该是10.160.10.1 10.160.10.4主机从哪里来的? 否则@Knorke在iptablesconfiguration上有很好的处理。