无法在将 iptables 设置为允许所有的情况下建立出站连接

无法在将 iptables 设置为允许所有的情况下建立出站连接

我无论如何也想不通为什么 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

相关内容