![iptables规则阻止本地网络端口](https://linux22.com/image/168537/iptables%E8%A7%84%E5%88%99%E9%98%BB%E6%AD%A2%E6%9C%AC%E5%9C%B0%E7%BD%91%E7%BB%9C%E7%AB%AF%E5%8F%A3.png)
我在本地 192.168.1.0/24 网络上,openwrt 路由器位于 192.168.1.1,我想阻止与具有开放端口的 IoT 设备的任何 tcp 连接,比方说 192.168.1.12:5001。我无权访问设备的 linux,所以我无法在那里强制执行规则,
在没有任何复杂分段的情况下,是否可以通过路由器实现这一点?也许我需要特殊的路由器/交换机?
我已经在路由器上尝试过这些,但它们都不起作用:
root@OpenWrt:~# iptables -I INPUT -p tcp --destination-port 5001 -j DROP
root@OpenWrt:~# iptables -I OUTPUT -p tcp --destination-port 5001 -j DROP
root@OpenWrt:~# iptables -I FORWARD -p tcp --destination-port 5001 -j DROP
(我可以将任何数据包丢弃到端口 5001 只是为了测试)
答案1
您不能直接执行此操作,因为来自客户端的流量将直接发送到 LAN 上的另一台设备,而不会干扰路由器。
答案2
因为是在同一个子网。它不通过路由器。
路由表会显示诸如您自己路由本地员工之类的信息(这通常几乎是硬编码的)。然后(对于大多数设备)将其余部分发送到您的默认路由器。
设备会广播“arp: who is 192.168.1.12?”然后129.168.1.12会回复“Arp:我是192.168.1.12”。任何听到此消息的设备都可以提取 MAC 地址,并将其放入自己的 apt 表中,然后将 IP 数据包直接发送到该设备。
因此,您必须设置两个子网,并在它们之间建立路由器路由。它们可以位于同一个物理网络上,但是如果您希望安全性有价值,那么您需要将它们放在单独的物理网络上(否则,如果您可以控制任何网络,那么绕过安全性将是微不足道的)网络上的机器。