linux – iptables:已建立的流量被丢弃

前端之家收集整理的这篇文章主要介绍了linux – iptables:已建立的流量被丢弃前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有iptables设置如下:
# iptables -L -nv
Chain INPUT (policy DROP 0 packets,0 bytes)
 pkts bytes target     prot opt in     out     source               destination
13925 8291K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 8153 2431K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22,25,53,80,443
  482 98621 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
 5057 3382K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0

但是我无法从这台机器发出请求. DNS,HTTP,我从这台机器启动的任何东西都失败了.传入流量仍然很好,SSH和Web服务器仍然可以从外部访问.如果我将输入策略更改为ACCEPT(并删除最后一个DROP规则,这只是用于测试),一切正常.看起来没有传入的ESTABLISHED / RELATED流量通过,注意该行开头的零.我做错了什么?

解决方法

由于某种原因,连接跟踪对您不起作用(由输入中基于conntrack的规则没有处理单个数据包的事实证明).这是因为你已经在某处设置了NOTRACK(唯一允许的是原始表,所以iptables -t raw -nvL也是如此),或者因为你没有在你的内核中加载conntrack模块,或者你已经禁用了它另一种方式.您可以通过设置如下规则来验证这一点:
iptables -t filter -I INPUT 1 -m conntrack --ctstate UNTRACKED -j LOG

这将为您提供所有未通过conntrack跟踪的数据包的数据包计数器(不会影响其他任何内容).不要将其保留太长时间,因为它会将数据发送到syslog(但在这种情况下,它是非决定性规则的最佳选择).

我不相信iptables会允许你在没有加载conntrack的情况下指定基于conntrack的规则,但你可以通过执行lsmod来验证这一点. grep conntrack并寻找这些模块:

nf_conntrack_ipv4
nf_conntrack

否则你可能有内核错误或其他什么.

值得一提的是,通常DNS查询是通过udp / 53而不是tcp / 53进行的.但是,您在输入中接受相关的已建立数据包的规则应该考虑您的DNS查询需求.

猜你在找的Linux相关文章