選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
3 分鐘閱讀時間 (546 個字)

每日小知識 #19 - Docker 網路篇(3) - iptables

shutterstock_198004562
  • 在 Linux 機器上,Docker 是透過 iptables 來達到「網路」的隔離。這已經是相當細節的部份,而通常也不應該直接修改 Docker 所建立的 iptable 規則。
  • 然而,這也間接隱含著可以在不觸動 Docker 建立的規則的前提下,再追加額外的 iptables 規則,比方說:
    • 你想限制未授權的使用者存取你的 container
    • 你想限制其它的服務存取你的 container
  • Docker 預設會在 iptables 加上兩條 chain,分別是 DOCKERDOCKER_USER,並藉著這兩個 chain 來過篩進來的封包
    • 幾乎所有的規則都是被加在 DOCKER 這條 chain 上,請務必不要異動它的內容
    • 如果你非得加規則,請加在DOCKER_USER 這條 chain 上,這兩條 chain 會在任何其他 Docker 加上的規則前被建立
    • 手動、或是其他基於 iptables 的防火牆在 FORWARD chain 上建立的規則,都會被放置在上述兩條 chain 之後
    • 承上,這意味著如果透過 -p, --publish 開通了某個 container 的 port,它就是會被開通,不論補上什麼規則。
    • 然而,如前面所述,可以透過修改DOCKER_USER chain,來追加針對開放的 port 的控管。
  • 預設所有的外部 IP 都可以連到 Docker Host,為了管制可連線的 IP,可以在 DOCKER_USER 的 chain 建立以下規則:
    • iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.1 -j DROP
      • ext_if 請以你機器的實際 NIC 取代之
      • 請留意是 -I 加在 chain 的最前面
      • 此規則代表除了 192.168.1.1 全部無法連線
    • 或 $ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.0/24 -j DROP
      • 以子網段的表示方式設定
    • 或 iptables -I DOCKER-USER -m iprange -i ext_if ! –src-range 192.168.1.1-192.168.1.3 -j DROP
      • 設定一個 IP 範圍
  • iptables 是一個非常複雜的議題,詳細的內容可以參考鳥哥的教學
  • 如同前一篇所述,Docker 是透過 iptables 來建立相關的隔離規則,但其實也可以透過修改 /etc/docker/daemon.json 將 Docker 操作 iptables 的權限關掉,但:
    • 這麼一來所有的規則都要親自設定,容易出錯
    • 必須深度了解 Linux Container 與網路相關的知識,所以…建議別這麼做
每日小知識 #20 - Kubernetes(序)
每日小知識 #18 - Docker 網路篇(2) - Bridge

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/10, 週五

Captcha 圖像