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

防火墻控制Docker端口開放與關(guān)閉

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

問題描述

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

第一種方案

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

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

首先在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

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

引發(fā)問題

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

#網(wǎng)絡(luò)不通
[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網(wǎng)段,查看容器的IP網(wǎng)段,需要查看容器的網(wǎng)絡(luò)模式,沒指定的話一般為bridge

在這里插入圖片描述

在這里插入圖片描述

如果容器里使用了不同的網(wǎng)絡(luò),每個網(wǎng)絡(luò)都要開放,沒有開放的網(wǎng)絡(luò)不能與外網(wǎng)通訊

在這里插入圖片描述

問題解決,
不過iptables -I INPUT -p tcp --dport 1521 -j DROP
加入這條規(guī)制,本地也無法通過IP訪問,所以容器內(nèi)部要么通過容器名相互訪問,要么再加一條允許本地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)先級最高,用于自定義轉(zhuǎn)發(fā)規(guī)則,可以限制進入容器的源IP地址:
iptables -I DOCKER-USER ! -s 10.108.11.178 -p tcp --dport 1521 -j DROP

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

又引發(fā)新的問題

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

進入容器內(nèi)部測試,發(fā)現(xiàn)網(wǎng)絡(luò)不通

在這里插入圖片描述

添加docker容器的網(wǎng)段

[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的網(wǎng)段
[root@localhost ~]# 

放行容器網(wǎng)段訪問所有端口

[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       #確保容器網(wǎng)絡(luò)規(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基礎(chǔ)命令

關(guān)閉特定端口

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
恢復(fù)
iptables–restore < /etc/iptables/iptables.rules

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

相關(guān)文章

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

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

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

    Docker Compose 網(wǎng)絡(luò)設(shè)置詳解

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

    Docker容器網(wǎng)絡(luò)端口配置過程詳解

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

    使用docker-compose連接到宿主機網(wǎng)絡(luò)

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

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

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

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

    這篇文章主要介紹了Docker部署安裝Redash中文版的方法詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    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ù)據(jù),從而避免數(shù)據(jù)丟失
    2024-12-12
  • 如何搭建docker虛擬機測試服

    如何搭建docker虛擬機測試服

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

    docker如何在一個容器內(nèi)部署多個服務(wù)

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

最新評論

舟曲县| 彰化县| 任丘市| 日土县| 溆浦县| 大渡口区| 定边县| 南漳县| 雅江县| 天全县| 淮北市| 武定县| 徐州市| 中超| 丹巴县| 西林县| 高台县| 静乐县| 长葛市| 瑞昌市| 三江| 吐鲁番市| 榆林市| 平罗县| 抚松县| 祁阳县| 乐平市| 沈阳市| 仙居县| 柏乡县| 思茅市| 禹州市| 桃园市| 牡丹江市| 青州市| 阜康市| 富蕴县| 阳新县| 库尔勒市| 北票市| 丰台区|