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使用詳解】

    推薦閱讀