如何通过 IPTables 阻止除少数 IP 之外的出站流量?

如何通过 IPTables 阻止除少数 IP 之外的出站流量?

我有一台华硕无线路由器,上面刷了 MERLIN。我还有几个通过 Wifi 连接的 IP 摄像头。我想通过禁用出站来阻止 IP 摄像头尝试呼叫家里。我这样做了

然而,有几件事我还是想做。

  1. 默认情况下防止 IP 摄像机将任何数据发送到我的网络之外。
  2. 例外:IP 摄像机需要连接并发送到端口 465(SMTPS 端口)才能发送电子邮件。
  3. 例外:我希望一些 IP 地址(一些是 IP 范围)能够通过 PORT 远程访问摄像头。因此我需要一个规则作为默认规则的例外。

我已经设置了端口转发。

例如:192.168.1.2:123(123 是我用来通过浏览器访问摄像头的端口)是我通过浏览器在线连接摄像头的方式。我还希望它不仅可在本地访问,而且可在家庭网络之外访问,但需要几个 IP。如果您不是 IP 地址,那么您将被丢弃,如果您是,您将被接受。就像一个保镖。所以本质上,我的工作电脑可以通过端口 123 访问该摄像头,这就是我想要做的。

我了解 Linux,也知道 IPTABLES 的一些标志,但这还不够,所以我需要一位专家。

谢谢!

答案1

如果您的相机位于标准子网上,这项工作将更容易。然后您可以在下面提到的每条规则中提及子网。否则,您最好看看这个帖子或类似的东西。

处理完如何指定摄像头的 IP 范围后,您可以使用 --syn 选项轻松丢弃摄像头发起的所有数据包(假设它们是 TCP 连接)。这是一个假设所有摄像头(<=8 个摄像头且无其他系统)位于 192.168.1.0/29 子网的示例

#1    iptables -A FORWARD -s 192.168.1.0/29 -p tcp --dport 465 -j ACCEPT
#2    iptables -A FORWARD -d 192.168.1.0/29 -p tcp --sport 465 -j ACCEPT
#3    iptables -A FORWARD -s 192.168.1.0/29 -p tcp --syn -j DROP
#4    iptables -A FORWARD -s 192.168.1.0/29 -p udp -j DROP

仅当 Linux 机器上没有完成 NAT 时才添加 #2。

要发布摄像头:

iptables -t nat -A PREROUTING -p tcp --dport 1202 -j DNAT 192.168.1.2:123
iptables -t nat -A PREROUTING -p tcp --dport 1203 -j DNAT 192.168.1.3:123
iptables -t nat -A PREROUTING -p tcp --dport 1204 -j DNAT 192.168.1.4:123

但只允许那些特定的 IP 地址访问它们:

iptables -A FORWARD -s trustedip1 -d 192.168.1.0/29 -p tcp --dport 123 -j ACCEPT
iptables -A FORWARD -s trustedip2 -d 192.168.1.0/29 -p tcp --dport 123 -j ACCEPT
iptables -A FORWARD -s trustedip3 -d 192.168.1.0/29 -p tcp --dport 123 -j ACCEPT
iptables -A FORWARD -d 192.168.1.0/29 -p tcp --dport 123 -j DROP

当然,如果摄像机地址不在一个子网中,您必须将 192.168.1.0/29 与摄像机 IP 地址交换,并对每个地址重复该规则。

相关内容