切換語言為:簡體
Linux防火牆firewalld不生效,無法攔截Docker對映埠

Linux防火牆firewalld不生效,無法攔截Docker對映埠

  • 爱糖宝
  • 2024-10-22
  • 2048
  • 0
  • 0

背景

今天出現了一個奇怪的現象,centos伺服器上的防火牆(firewall)沒有開放8103埠,但是依然可以訪問

伺服器開放的埠如下:

Linux防火牆firewalld不生效,無法攔截Docker對映埠

可以看出並沒有開放8103埠

開放的服務如下:

Linux防火牆firewalld不生效,無法攔截Docker對映埠

失敗的原因,如下:

docker run -p 啟動的時候會往iptables裡面新增規則,firewall底層是基於iptables的,所以-p引數啟動等於在防火牆上打了個洞

因為我是在docker的宿主機上控制埠訪問,所以簡單粗暴直接讓docker不使用iptables,操作如下:

vi /usr/lib/systemd/system/docker.service

在檔案中新增 --iptables=false

Linux防火牆firewalld不生效,無法攔截Docker對映埠

systemctl daemon-reload
systemctl restart docker

重啟 Docker 搞定!!!

注意:完成上述步驟以及可以採用系統 firewall 控制埠訪問,但會出現 docker 容器間無法訪問,而且容器內也無法訪問外部網路。

使用類似 NAT 網路方式使得 docker 可以訪問外部網路

firewall-cmd --permanent --zone=public --add-masquerade

談談使用該方法解決 docker 無視系統防火牆問題所帶來的缺點:容器內無法獲取得到客戶端的真實 IP,由於是類似 NAT 網路,常常 nginx 日誌上記錄的是 docker0 網路的子網 IP,對於一些業務無法獲取真實 IP 可能不能容忍,看個人的取捨吧。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.