我的条件是有 3 台计算机的本地网络
- Comp A(10.1.1.7 和 172.16.1.12 和 192.168.0.4)(实际上 Comp A 有 3 个网络接口)
- 比较 B (10.1.1.13)
- 比较 C (172.16.1.5)
Comp A 有两个网络接口,我在 Comp A 后面使用 NAT 连接 Comp C,它是一个 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 端口 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
没有看到你的其他桌子,很难说。您可以
iptables
使用该-L
标志查看您的所有内容,以列出它们:请使用此输出更新您的问题,特别是如果此答案没有为您提供解决方案。
阅读此输出时,您必须从顶部开始,然后向下工作。在此行之前是否有任何规则会拒绝、丢弃或接受您的流量?由于您试图阻止访问,因此您很可能在端口 80 上的 REJECT 上方有一条 ACCEPT 行。
使用
iptables
命令时,您可以附加规则-A
,或使用 . 插入-I
规则。这意味着,添加的规则-A
将位于现有规则的底部。这可能会使动态修改很麻烦,相反,您从文件中加载规则列表:您还可以
sudo iptables --flush
使用一组新的规则重新开始,这些规则将接受所有连接。由于您要丢弃或拒绝的数据包将被转发到计算机 C,因此它们实际上并没有到达正常的 INPUT 链。此外,nat 表不适用于过滤,因此不能在那里完成。mangle PREROUTING 表在 nat PREROUTING 表之前被遍历,所以过滤器规则可以放在那里。
其中 $EXTIF 是网络接口名称。
上面的规则是在我的测试电脑上测试的,使用不同的 IP 地址和接口名称。
使用此图帮助跟踪 iptables 数据包流。