我无论如何也想不通为什么 DROP 最终会受到来自基于 openvz 的 VPS 的出站请求的影响。
我知道这肯定是数据包没有直接出站的原因,或者其他原因,但我似乎忽略了一些基本的东西。我尝试了各种方法,唯一能让它再次工作的方法就是刷新规则 ( iptables -F
)
目标是阻止所有传入流量(除来自一个 IP(1.2.3.4)和端口 53/113 的流量外),并允许所有传出流量。
这是输出iptables -L -n -v
- 当我尝试 curl 出站时,我可以看到 DROP 数据包计数上升。(为了保护隐私,IP 略有修改)
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
239 17668 ACCEPT all -- * * 1.2.3.4 0.0.0.0/0
118 11175 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp spt:53
3 174 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
17 1176 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:113
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
2238 119K DROP all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
889 56648 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
这是来自iptables-save
(为保护隐私,IP 略作修改)
# Generated by iptables-save v1.8.4 on Thu Dec 2 02:42:40 2021
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 1.2.3.4/32 -j ACCEPT
-A INPUT -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 113 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j DROP
-A OUTPUT -j ACCEPT
COMMIT
# Completed on Thu Dec 2 02:42:40 2021
这些是接口(为了保护隐私,IP 略作修改)
venet0: flags=211<UP,BROADCAST,POINTOPOINT,RUNNING,NOARP> mtu 1500
inet 127.0.0.1 netmask 255.255.255.255 broadcast 0.0.0.0 destination 127.0.0.1
inet6 2a00:d880:3:1::ad49:a3f2 prefixlen 128 scopeid 0x0<global>
inet6 2a00:d880:3:1::a639:a610 prefixlen 128 scopeid 0x0<global>
venet0:0: flags=211<UP,BROADCAST,POINTOPOINT,RUNNING,NOARP> mtu 1500
inet 81.1.1.1 netmask 255.255.255.255 broadcast 81.1.1.1 destination 81.1.1.1
答案1
您的INPUT
链拒绝对出站数据包的有效预期回复。要允许它们:
iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
它将检测该数据包是否是某个先前连接的延续(例如,对某个传出数据包的回复)并允许它。
另外,我建议将INPUT
政策改为DROP
。处理不会改变(DROP
规则集中的约束已经解除),但意图会很明确。
iptables -P INPUT DROP