最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

防火墻控制Docker端口開放與關閉

 更新時間:2023年12月12日 11:12:30   作者:張現(xiàn)偉的成長之路  
本文主要介紹了防火墻控制Docker端口開放與關閉,通過實例演示了如何配置防火墻規(guī)則來實現(xiàn)對Docker端口的控制,具有一定的參考價值,感興趣的可以了解一下

問題描述

docker下的oracle數(shù)據庫服務存在漏洞,解決難度較高,于是通過firewalld限制高危端口開放,只允許本機訪問。發(fā)現(xiàn)即使配置規(guī)則firewalld把oracle 1521漏洞端口不開放出去,但其他服務器依然能訪問這給服務器的1521端口,也就是說firewalld配置的規(guī)則失效。

第一種方案

docker容器在創(chuàng)建時會在iptables的INPUT表的DOCKER鏈下自動創(chuàng)建規(guī)則放行端口,為了保證docker啟動的每一個容器都能被外界訪問(自私!),所以導致firewalld不放行端口也能被外界訪問。

Firewalld服務啟動時,會將iptables上的規(guī)則全部清空,并把firewalld上的防火墻策略規(guī)則寫入到iptables中,此時docker因為防火墻規(guī)則被刪除就會不正常,需要重啟systemctl restart docker服務來重新刷寫防火墻規(guī)則到iptables上,所以我們在管理Docker端口時,應該使用iptables防火墻而不是firewalld防火墻服務

首先在docker容器啟動時不讓它自動在iptables上船艦規(guī)則,在docker配置文件中添加 “iptables”: false

[root@localhost ~]#  vi /etc/docker/daemon.json 
{ 
"data-root": "/opt/docker",
 "iptables": false
 }

#重啟生效
[root@localhost ~]#  systemctl daemon-reload
[root@localhost ~]#  systemctl restart docker

此時我們就可以隨便關閉我們不想放行的端口了,做到使用iptables管理Docker容器端口。

引發(fā)問題

發(fā)現(xiàn)以上做法可以屏蔽端口了,但是出現(xiàn)容器不能與宿主機其他服務器通訊,原因是加入了 “iptables”: false后,不能在iptables添加任何規(guī)則了,正常來說docker啟動時不止是添加幾條容器端口開放這么簡單,docker容器啟動時還需要在nat表添加-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE這些規(guī)則,這些規(guī)則是處理docker的SNAT地址偽裝用的,直白來說就是用來容器內部訪問外部網絡的。具體含義是將容器網絡網段發(fā)送到外部的數(shù)據包(! -o docker0)偽裝成宿主機的ip,就是將數(shù)據包的原來的容器ip換成了宿主機ip做了一次snat,沒經過源IP地址轉換是不能正常通訊的。

#網絡不通
[root@localhost ~]# docker exec  -it tomcat bash 
root@b287f29a1b60:/usr/local/tomcat# ping 172.21.36.43    #另一臺宿主機IP
PING 172.21.36.43 (172.21.36.43) 56(84) bytes of data.
^C
--- 172.21.36.43 ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 9ms

#iptables規(guī)則消失
[root@localhost ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

解決方法:
在docker啟動配置中加入配置

vi /etc/systemd/system/docker.service
[Service]
ExecStartPre=/usr/sbin/iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
ExecStopPost=/usr/sbin/iptables -t nat -D POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

#加載并重啟docker
systemctl daemon-reload
systemctl restart docker

#172.17.0.0/16 IP為容器的IP網段,查看容器的IP網段,需要查看容器的網絡模式,沒指定的話一般為bridge

在這里插入圖片描述

在這里插入圖片描述

如果容器里使用了不同的網絡,每個網絡都要開放,沒有開放的網絡不能與外網通訊

在這里插入圖片描述

問題解決,
不過iptables -I INPUT -p tcp --dport 1521 -j DROP
加入這條規(guī)制,本地也無法通過IP訪問,所以容器內部要么通過容器名相互訪問,要么再加一條允許本地IP訪問策略
iptables -I INPUT -s 172.21.36.67 -t tcp -j ACCEPT

第二種方案

以至于后來我才發(fā)現(xiàn)第二種解決辦法,看了第二種方案你就會覺得第一種方案有多傻,我們要實現(xiàn)防火墻管理Docker端口,只需要在iptables的filter表的DOCKER-USER鏈下添加規(guī)則即可。

#只允許10.108.11.178訪問容器的1521端口
[root@data dciproject]# iptables -I DOCKER-USER  !  -s  10.108.11.178  -p tcp --dport 1521 -j DROP
[root@data dciproject]# iptables -nL  
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:9090
ACCEPT     tcp  --  10.108.11.178        0.0.0.0/0            tcp dpt:1521
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8091
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8085
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:9695
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:7001
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8086
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8083
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8089
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:19080
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8088
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:6379
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:445
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:139
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22223
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3306
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:7443
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:7010
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:10020
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:10010
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:6443
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:6080
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:5432
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:9011
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8082
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8081
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:1521

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-ISOLATION-STAGE-1  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (5 references)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            10.1.1.2             tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            192.168.0.2          tcp dpt:5000
ACCEPT     tcp  --  0.0.0.0/0            10.1.0.2             tcp dpt:9090
ACCEPT     tcp  --  0.0.0.0/0            10.1.3.2             tcp dpt:5432
ACCEPT     tcp  --  0.0.0.0/0            10.1.1.3             tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            10.1.1.3             tcp dpt:1521
ACCEPT     tcp  --  0.0.0.0/0            10.1.0.3             tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            192.168.0.3          tcp dpt:8085
ACCEPT     tcp  --  0.0.0.0/0            192.168.0.3          tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            10.1.0.4             tcp dpt:5432
ACCEPT     tcp  --  0.0.0.0/0            10.1.1.4             tcp dpt:15675
ACCEPT     tcp  --  0.0.0.0/0            10.1.1.4             tcp dpt:15672
ACCEPT     tcp  --  0.0.0.0/0            10.1.1.4             tcp dpt:5672
ACCEPT     tcp  --  0.0.0.0/0            10.1.1.4             tcp dpt:1883
ACCEPT     tcp  --  0.0.0.0/0            10.1.1.5             tcp dpt:6379
ACCEPT     tcp  --  0.0.0.0/0            10.1.1.6             tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            10.1.0.6             tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            10.1.1.7             tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            10.1.1.8             tcp dpt:19080
ACCEPT     tcp  --  0.0.0.0/0            10.1.0.8             tcp dpt:9191
ACCEPT     tcp  --  0.0.0.0/0            10.1.0.8             tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            10.1.1.9             tcp dpt:27017
ACCEPT     tcp  --  0.0.0.0/0            10.1.0.9             tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            10.1.0.11            tcp dpt:8000
ACCEPT     tcp  --  0.0.0.0/0            10.1.0.12            tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            10.1.0.13            tcp dpt:5432

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0           
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-ISOLATION-STAGE-2 (5 references)
target     prot opt source               destination         
DROP       all  --  0.0.0.0/0            0.0.0.0/0           
DROP       all  --  0.0.0.0/0            0.0.0.0/0           
DROP       all  --  0.0.0.0/0            0.0.0.0/0           
DROP       all  --  0.0.0.0/0            0.0.0.0/0           
DROP       all  --  0.0.0.0/0            0.0.0.0/0           
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
DROP       tcp  -- !10.108.11.178        0.0.0.0/0            tcp dpt:1521
RETURN     all  --  0.0.0.0/0            0.0.0.0/0                 

Chain l (0 references)
target     prot opt source               destination         
[root@data dciproject]#
#永久保存iptables規(guī)則
[root@data dciproject]# yum install iptables -y && yum install iptables-services -y
[root@data dciproject]# systemctl start iptables.service && systemctl enable iptables.service
[root@data dciproject]#  service iptables save

在docjer啟動的時創(chuàng)建的眾多鏈中,DOCKER-USER鏈優(yōu)先級最高,用于自定義轉發(fā)規(guī)則,可以限制進入容器的源IP地址:
iptables -I DOCKER-USER ! -s 10.108.11.178 -p tcp --dport 1521 -j DROP

其他記錄點:docker在啟動時是會在iptables上添加規(guī)則的,而firewalld服務啟動時,會將iptables上的規(guī)則全部清空,并把firewalld上的防火墻策略規(guī)則寫入到iptables中,此時docker因為防火墻規(guī)則被刪除就會不正常,需要重啟systemctl restart docker服務來重新刷寫防火墻規(guī)則到iptables上,所以我們在管理Docker端口時,應該使用iptables防火墻而不是firewalld防火墻服務。
參考地址:http://m.fzitv.net/server/307655tdj.htm

又引發(fā)新的問題

按照第二種方案處理后,確實實現(xiàn)了iptables對docker容器的管理,實現(xiàn)了只允許特定IP訪問特定容器端口,但又引發(fā)新的問題,容器內部之間也無法通過防火墻,這個是我沒想到的,還要手動將容器的網段地址添加到DOCKER-USER鏈中去,才能保證容器內部相互通訊。

進入容器內部測試,發(fā)現(xiàn)網絡不通

在這里插入圖片描述

添加docker容器的網段

[root@localhost ~]# docker network ls 
NETWORK ID     NAME                     DRIVER    SCOPE
4ac677e2fd2f   bridge                   bridge    local
f28591fefa67   docker-project_default   bridge    local
f32fea4be351   host                     host      local
dc907d235925   none                     null      local
[root@localhost ~]# 
[root@localhost ~]# docker inspect docker-project_default | grep Subnet 
                    "Subnet": "172.18.0.0/16",            #所有docker使用docker-project_default  bridge的網段
[root@localhost ~]# 

放行容器網段訪問所有端口

[root@localhost ~]# iptables -I DOCKER-USER  -p tcp  -s 172.18.0.12/16  -j ACCEPT
[root@localhost ~]# iptables -n -L  DOCKER-USER
Chain DOCKER-USER (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  172.18.0.0/16        0.0.0.0/0       #確保容器網絡規(guī)則在第一位
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:5432
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

測試容器訪問其他容器端口,成功

[root@localhost ~]# docker exec  -it tomcat bash 
root@2aedfa874301:/usr/local/tomcat# telnet  postgres 5432
Trying 172.18.0.2...
Connected to postgres.
Escape character is '^]'.

三.Iptables基礎命令

關閉特定端口

iptables -A INPUT -p tcp --dport 1521 -j ACCEPT

允許特定IP訪問所有端口

iptables -I INPUT -s 10.108.11.178 -j ACCEPT

允許特定IP訪問特定端口

iptables -I DOCKER-USER !  -s  10.108.11.178  -p tcp --dport 1521 -j DROP

刪除規(guī)則

iptables  -t filter -nL --line-number
iptables -D INPUT 1

清空所有規(guī)則

iptables -F
iptables -X
iptables -Z

永久保存規(guī)則

#第一種方案
yum install iptables  iptables-services -y 
systemctl start iptables.service && systemctl enable iptables.service
service iptables save
#第二種方案
保存
iptables-save > /etc/iptables/iptables.rules
恢復
iptables–restore < /etc/iptables/iptables.rules

 到此這篇關于防火墻控制Docker端口開放與關閉的文章就介紹到這了,更多相關Docker端口開放關閉內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Docker配置WebSSH的實現(xiàn)

    Docker配置WebSSH的實現(xiàn)

    本文主要介紹了Docker配置WebSSH的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Docker Compose 網絡設置詳解

    Docker Compose 網絡設置詳解

    這篇文章主要介紹了Docker Compose 網絡設置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • Docker容器網絡端口配置過程詳解

    Docker容器網絡端口配置過程詳解

    這篇文章主要介紹了Docker容器網絡端口配置過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • 使用docker-compose連接到宿主機網絡

    使用docker-compose連接到宿主機網絡

    這篇文章主要介紹了使用docker-compose連接到宿主機網絡,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Docker刪除已存在的鏡像的實現(xiàn)

    Docker刪除已存在的鏡像的實現(xiàn)

    本文主要介紹了Docker刪除已存在的鏡像的實現(xiàn),刪除已存在的 Docker 鏡像,可以使用 docker rmi 命令,下面就來詳細的介紹一下使用步驟,感興趣的可以了解一下
    2023-08-08
  • Docker部署安裝Redash中文版的方法詳解

    Docker部署安裝Redash中文版的方法詳解

    這篇文章主要介紹了Docker部署安裝Redash中文版的方法詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Docker Compose常用命令詳解

    Docker Compose常用命令詳解

    本篇文章主要介紹了Docker Compose常用命令詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Docker desktop安裝mysql過程

    Docker desktop安裝mysql過程

    文章介紹了如何在本地已有的Docker環(huán)境中拉取并啟動MySQL容器,并詳細說明了常用的環(huán)境變量參數(shù),此外,還討論了如何通過掛接本地磁盤來持久化MySQL數(shù)據,從而避免數(shù)據丟失
    2024-12-12
  • 如何搭建docker虛擬機測試服

    如何搭建docker虛擬機測試服

    文章介紹如何搭建Docker虛擬機測試服,通過隔離環(huán)境、安裝CentOS鏡像并映射端口,配置安全組和域名轉發(fā),實現(xiàn)本地開發(fā)測試連接測試服數(shù)據庫和Redis,感興趣的朋友跟隨小編一起學習吧
    2025-08-08
  • docker如何在一個容器內部署多個服務

    docker如何在一個容器內部署多個服務

    這篇文章主要介紹了docker如何在一個容器內部署多個服務,思路是這樣的首先拿到你的httpd,以及你的springBoot,合并他們的Dockerfile,然后打包,然后啟動的時候啟動多個端口(httpd的端口和你服務的端口),需要的朋友可以參考下
    2024-01-01

最新評論

墨竹工卡县| 徐闻县| 渭源县| 子长县| 耒阳市| 道孚县| 瑞昌市| 银川市| 巨鹿县| 卓资县| 建德市| 南溪县| 高州市| 伊春市| 淮滨县| 公安县| 肃北| 岳池县| 东莞市| 江油市| 自治县| 高邑县| 黄山市| 海安县| 禄丰县| 定州市| 南投市| 西林县| 龙南县| 浮山县| 吉安市| 黔江区| 即墨市| 陕西省| 中卫市| 那曲县| 永德县| 资阳市| 邓州市| 新宾| 文山县|