![IPTABLES 由于端口错误而拒绝](https://linux22.com/image/666689/IPTABLES%20%E7%94%B1%E4%BA%8E%E7%AB%AF%E5%8F%A3%E9%94%99%E8%AF%AF%E8%80%8C%E6%8B%92%E7%BB%9D.png)
我正在使用防火墙,遇到了一些问题。我打开一个SOCKS5
端口,假设33333
我在 IPTABLES 中没有任何规则,它就可以正常工作。当我应用我的规则时,它就可以正常工作。这些是我的规则:
# RULE 0 : Add some headers
*filter
# RULE 1
-I INPUT -i eth1 -s 0/0 -p tcp --dport 1080:65535 -j REJECT <--- THIS RULE MIGHT BE WRONG
-I INPUT -i eth1 -p tcp --dport ssh -j REJECT
# RULE 13
-I INPUT -i eth1 -p tcp --dport 25 -j REJECT
-I INPUT -i eth1 -p tcp --dport 465 -j REJECT
# RULE 2
-I INPUT -i eth1 -p tcp --match multiport --dport 80 -j ACCEPT
-I INPUT -i eth1 -p tcp -s xxx.xxx.175.220 --dport ssh -j ACCEPT
-I INPUT -i eth1 -p tcp -s xxx.xxx.175.222 --dport ssh -j ACCEPT
-I INPUT -i eth1 -p tcp -s xxx.xxx.175.242 --dport ssh -j ACCEPT
# RULE 7
-I INPUT -i eth1 -p tcp --match multiport --dports 15001:25000 -j ACCEPT
-I INPUT -i eth1 -p tcp --dport 18420 -j REJECT
-I INPUT -i eth1 -p tcp -s xxx.xxx.35.132/32 --dport 18420 -j ACCEPT
-I INPUT -i eth1 -p tcp --dport 23152 -j REJECT
-I INPUT -i eth1 -p tcp -s xxx.xxx.199.34/32 --dport 23152 -j ACCEPT
-I INPUT -i eth1 -p tcp --dport 16932 -j REJECT
-I INPUT -i eth1 -p tcp -s xxx.xxx.255.186/32 --dport 16932 -j ACCEPT
-I INPUT -i eth1 -p tcp --dport 19472 -j REJECT
# RULE 8
-I INPUT -i eth1 -p tcp --match multiport --dports 5000:6000 -j ACCEPT
# RULE 8
-I INPUT -i eth1 -p tcp -s 127.0.0.1/32 --match multiport --dports 0:65535 -j ACCEPT
-I INPUT -i eth1 -p tcp -s xxx.xxx.141.110/32 --match multiport --dports 0:65535 -j ACCEPT
# RULE 9
-I OUTPUT -o eth1 -d 0.0.0.0/0 -j ACCEPT
-I INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
# RULE 11
-I INPUT -i eth1 -s xxx.xxx.163.214 -p tcp --dport 6000:65535 -j REJECT
-I INPUT -i eth1 -s xxx.xxx.154.8 -p tcp --dport 6000:65535 -j REJECT
-I INPUT -i eth1 -s xxx.xxx.208.175 -p tcp --dport 6000:65535 -j REJECT
-I INPUT -i eth1 -s xxx.xxx.232.43 -p tcp --dport 6000:65535 -j REJECT
-I INPUT -i eth1 -s xxx.xxx.60.239 -p tcp --dport 6000:65535 -j REJECT
# RULE 13
COMMIT
如果我运行ifconfig
我会得到这个:
eth1 Link encap:Ethernet HWaddr 0c:c4:7a:0a:89:b0
inet addr:xxx.xxx.141.110 Bcast:xxx.xxx.141.255 Mask:255.255.255.0
inet6 addr: xxxx::xxx:xxxx:xxxx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4558771351 errors:0 dropped:6351 overruns:0 frame:0
TX packets:5256425350 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:974002772174 (907.1 GiB) TX bytes:1003703499168 (934.7 GiB)
Interrupt:16 Memory:df900000-df920000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8611035 errors:0 dropped:0 overruns:0 frame:0
TX packets:8611035 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3936947723 (3.6 GiB) TX bytes:3936947723 (3.6 GiB)
如果我删除这一行
-I INPUT -i eth1 -s 0/0 -p tcp --dport 1080:65535 -j REJECT <--- THIS RULE MIGHT BE WRONG
它能工作,但其他规则却不行,因为我没有激活任何防火墙,这就是我开发它的方式。“有趣”的是,在其他服务器上,它却eth0
运行eth1
正常。
我还在-i eth1
每个之后添加了-I INPUT
但没有...
问题是什么?
在此服务器上,我Debian GNU/Linux 7 \n \l
在其他服务器上也使用了Ubuntu 14
相同的软件。在此服务器(有问题的服务器)上,我必须使用 Debian7...这不是我的选择。
谢谢。
答案1
由于第一条规则,与端口 33333 的连接无法工作:
-I INPUT -i eth1 -s 0/0 -p tcp --dport 1080:65535 -j REJECT
此规则虽然被 iptables 接受,但格式不正确。它应该看起来像这样(-s 0/0
由于匹配所有数据包,因此是多余的):
-I INPUT -i eth1 -p tcp -m multiport --dports 1080:65535 -j REJECT
此规则将丢弃从 1080 到 65535 的所有端口上的拒绝数据包。一个简单的修复方法是添加一条规则来打开端口 33333:
-A INPUT -i eth1 -p tcp --dport 33333 -j ACCEPT
无论如何,您创建防火墙的方法(即在各个端口/各个主机上混合接受/拒绝)可能不是最佳方法。通常,INPUT 表中的规则如下:
- 接受某些数据包
- 丢弃/拒绝所有其他
显示更详细的例子:
# Accept packets on loopback interface
-A INPUT -i lo -j ACCEPT
# Open certain ports
-A INPUT -p tcp -m multiport --dports x,y,z -j ACCEPT
...
# Accept packets from established/related connections - to allow packets from locally-originated connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Drop everything else (or REJECT)
-A INPUT -j DROP
这使得防火墙干净、直接,只有某些端口是打开的,而所有其他端口都关闭。