首页 > Operation System > Linux下iptables导致往外主动访问出问题的事情

Linux下iptables导致往外主动访问出问题的事情

2017年3月4日 发表评论 阅读评论

新上线一台服务器,有公网地址,于是启用本机 iptables 做简单安全防护。按照平日常用的逻辑策略:

1,入的包走白名单模式(缺省策略 DROP)
2,出和转发的包,走黑名单模式(缺省策略 ACCEPT)
3,关键业务服务端口,直接设置为 NOTRACK

策略看起来没啥问题,但当我把 iptables 起起来后,却发现种种问题,都是主动往外访问的问题,比如:

1,dns 无法解析
2,无法往外 ping

然后这些问题基本上都走特殊的单独的策略解决了。但是最后碰到无法从公网下载软件安装,这个问题,我再也不想通过添加单独的规则来解决了,就仔细看了看,tcpdump 听包发现有 syn 出去的包,也有公网 web server syn+ack 回来的包,然后,周而复始。显然,公网 web server 回来的 syn+ack 的包被 iptables 给干掉了!

为什么会这样?在我的策略里,公网回来的包应该是匹配 ESTABLISHED 的状态这条规则而被接受的呀,但实际上看起来其实并没有。看了看 /proc/net/nf_conntrack,的确来回交互的包不在里头。这是咋么回事儿?!

仔细扣 iptables 配置规则,终于发现一行,我把从公网往外走的包都打成 NOTRACK 了……慢着,貌似这里有问题,出公网的包被打成 NOTRACK 了以后自然就不会被放入 /proc/net/nf_conntrack 里保持状态了,这样回来的包自然就不会匹配到 ESTABLISHED 状态了呀。当然最后还是受缺省策略控制,被悲催地 DROP 掉了。

改起来很容易,直接把这一句干掉,重启 iptables,一切 OK 了。

分类: Operation System 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.