LINUX 16.04 端口封锁和ip封锁

LINUX 16.04 端口封锁和ip封锁

我的情况是有一个本地网络,里面有 3 台电脑

  1. 公司 A(10.1.1.7 和 172.16.1.12 和 192.168.0.4)(实际上公司 A 有 3 个网络接口)
  2. 组分 B (10.1.1.13)
  3. 公司 C (172.16.1.5)

公司 A 有两个网络接口,我使用 NAT 连接公司 C,它是位于公司 A 后面的 Tomcat 服务器。此外,NAT 是 172.16.1.5:8080<->10.1.1.7:80

现在,我尝试在 Comp A(10.1.1.7)上使用 iptables:

sudo iptables -A INPUT -s 10.1.1.13 -j DROP; sudo iptables -A INPUT -p tcp --dport 80 -j REJECT;

之后,Comp B(10.1.1.13)无法 ping Comp A(10.1.1.7),但我仍然可以访问 Tomcat 页面。我甚至尝试使用第二条命令(REJECT port 80)来阻止端口 80。

我可以封锁 Comp B (10.1.1.13),这样 Comp B 就无法访问 Tomcat 页面了吗?如果我只封锁端口,我是否可以只不允许访问 Tomcat,但仍然可以 ping 10.1.1.7?谢谢

我的iptables -v -x -n -L:

 pkts      bytes target     prot opt in     out     source               destination
       0        0 DROP       all  --  *      *       147.8.179.216        0.0.0.0/0
       0        0 DROP       all  --  *      *       14.0.154.45          0.0.0.0/0
       0        0 DROP       all  --  *      *       10.1.1.13            0.0.0.0/0
       0        0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 reject-with icmp-port-unreachable

并且,我的iptables -v -x -n -L -t -nat:

Chain PREROUTING (policy ACCEPT 35032 packets, 1969104 bytes)
    pkts      bytes target     prot opt in     out     source               destination
     386    19820 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:172.16.1.5:8080

Chain INPUT (policy ACCEPT 34737 packets, 1955948 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 312260 packets, 19072061 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 312260 packets, 19072061 bytes)
    pkts      bytes target     prot opt in     out     source               destination
     385    19780 SNAT       tcp  --  *      *       0.0.0.0/0            172.16.1.5           tcp dpt:8080 to:172.16.1.12

答案1

由于您要丢弃或拒绝的数据包否则将被转发到计算机 C,因此它们实际上不会到达正常的 INPUT 链。此外,nat 表不用于过滤,因此无法在那里完成过滤。mangle PREROUTING 表在 nat PREROUTING 表之前被遍历,因此过滤规则可以放在那里。

sudo iptables -t mangle -A PREROUTING -i $EXTIF -p tcp -s 10.1.1.13 --dport 80 -j DROP

其中 $EXTIF 是网络接口名称。
上述规则已在我的测试计算机上进行了测试,使用了不同的 IP 地址和接口名称。

使用此图帮助追踪 iptables 数据包流。

答案2

如果不查看其余表格,很难说。您可以iptables使用标志查看所有表格-L,并列出它们:

sudo iptables -L

请用此输出更新您的问题,特别是当这个答案没有为您提供解决方案时。

阅读此输出时,您必须从顶部开始,然后向下阅读。在此行之前是否有任何规则会 REJECT、DROP 或 ACCEPT 您的流量?由于您试图阻止访问,因此您很可能在端口 80 上的 REJECT 上方有一个 ACCEPT 行。

iptables使用命令时,您可以附加规则-A,或插入规则-I。这意味着,添加的规则-A将位于现有规则的底部。这可能会使即时修改变得麻烦,相反,您可以从文件中加载规则列表:

sudo iptables -L # Look at tables, test that they work correctly
sudo iptables-save > /etc/iptables # Save tables to a file
....
sudo iptables-restore < /etc/iptables # Restore tables after a reboot or something

您还可以sudo iptables --flush重新开始制定一组新的规则来接受所有连接。

相关内容