我有 2 台使用 Virtual Box 的虚拟机。其中一台虚拟机用作路由器。我试图删除进入路由器机器的所有通信,但某些服务除外。我在每台机器上拥有的接口 IP 是:
作为路由器的虚拟机1:
eth1: 193.136.200.254
eth2: 10.10.0.254
eth3: 10.254.0.254
虚拟机2:
eth1: 10.10.0.2
eth1:0: 10.10.0.3
...
如果来自 IP 为 10.10.0.3 的机器,我希望接受到路由器的 ssh 连接。因此,我在路由器机器上定义了规则:
iptables -P INPUT DROP
iptables -A INPUT -p tcp -s 10.10.0.3 -d 10.10.0.254 --dport 22 -j ACCEPT
现在我尝试使用 netcat 测试它是否正常工作。因此,我在路由器机器上运行以下命令:
nc -l 10.10.0.254 22
我在虚拟机 2 中运行:
nc 10.10.0.254 22
然后我在一台机器上写了一个随机单词,但它没有出现在另一台机器上。所以它不起作用。你知道问题出在哪里吗?
如果我在放置删除策略之前测试这个 netcat 命令,它会起作用,我在一台机器上写入的内容会出现在另一台机器上。
iptables -L的结果:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp --- 10.10.0.2 10.10.0.254 tcp dpt:ssh
答案1
对于来自虚拟机 1 的端口 22 上的传入 netcat 连接,tcpdump 打印了哪个源地址?
在虚拟机 2 上:
iptables -F
tcpdump -n -i eth3 'port 22'
也许虚拟机 1 上的默认路由绑定了接口 eth2,导致该子网上的所有传出流量都具有该接口的源地址。
route -n
虚拟机 1 上显示的输出是什么?