iptables使用详解( 五 )

iptables使用详解

文章插图
相当于第一条规则没启作用 。直接会进入第二条规则进行匹配计算
  • 第二条链会包导入DOCKER-ISOLATION-STAGE-1链进行规则计算

    • iptables使用详解

      文章插图
    • 一路链下去 , 最终只有图中的规则能命中,而该规则对包的处理方式,是RETURN,也即交给下个规则处理
  • 第三条规则
    iptables使用详解

    文章插图
    是对目标网口是docker0的包进行匹配,按理说我们的包会匹配这条规则, 但是这条规则被匹配还有一个条件,就是包链接的状态要是已建立的连接才行,我们第一次从外部对数据库进行访问显然不符合这个要求,于是该规则不会命中 。进入第四条规则匹配
  • 第四条规则命中后,进入DOCKER 链
    iptables使用详解

    文章插图
    从截图可以看到,包到了这里,被完美匹配 。该包首先是一个非docker网络到docker网络的访问,其次,其目标ip是172.17.0.2 的3306端口,匹配后,处理动作是ACCEPT 。也即最终该访问被响应 , 我们从外部网络访问到数据库了 。
  • docker服务无法被iptables限制问题总结及解决办法说白了,由于数据包被更改了目标地址,于是路由策略将该包导向了FORWARD链 。所以我们在INPUT链中再怎么定义规则,都无法限制外网对docker服务的访问 。
    那解决办法很简单,既然包导向了FORWARD链,那么在FORWARD链中添加拦路虎,不就得了嘛 。DOCKER官方给的建议便是如此,比如,针对本文中的例子,我们可以添加如下规则,即可实现所有外部网络都无法访问docker中的服务:
    iptables -I DOCKER-USER -i enp0s3 -j DROP规则含义是:所有从外部网络进入的数据包,直接被丢弃 。DOCKER-USER链是上述FORWARD链中第一个规则匹配的到的链 。外部访问的数据包,其输入网口,肯定是enp0s3,因为在本例中,它是对外通信的网口 。当然我们也可以在此 , 插入只允许某个网络访问,或某个网络不能访问的规则,不再赘述 。
    参考资料https://www.zsythink.net/archives/1199https://www.booleanworld.com/depth-guide-iptables-linux-firewall/https://linuxconfig.org/how-to-make-iptables-rules-persistent-after-reboot-on-linuxhttps://askubuntu.com/questions/579231/whats-the-difference-between-prerouting-and-forward-in-iptableshttps://docs.docker.com/network/iptables/
    欢迎关注我的个人公众号"西北偏北UP",记录代码人生,行业思考,科技评论
    【iptables使用详解】

    推荐阅读