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

基于iptables的Docker端口白名單控制實(shí)現(xiàn)

 更新時(shí)間:2025年07月13日 11:27:30   作者:遇見(jiàn)火星  
本文主要介紹了通過(guò)iptables為Docker?Compose部署的容器設(shè)置宿主機(jī)端口IP白名單,強(qiáng)調(diào)規(guī)則順序與持久化配置,提供單端口和multiport兩種實(shí)現(xiàn)方式,感興趣的可以了解一下

一、需求背景

某項(xiàng)目組采用容器化部署架構(gòu),通過(guò)docker-compose對(duì)服務(wù)進(jìn)行編排管理。為確保核心服務(wù)安全性,需對(duì)以下三個(gè)暴露的宿主機(jī)端口實(shí)施IP白名單訪問(wèn)控制:

服務(wù)名稱宿主機(jī)IP宿主機(jī)端口容器內(nèi)部端口
apollo-configservice172.22.33.204100028080
apollo-adminservice172.22.33.204100038090
apollo-portal172.22.33.204100048070
  • 允許訪問(wèn)的IP白名單地址 172.16.200.200,允許訪問(wèn)apollo 全資源
  • apollo docker-compose 文件
version: '3'

services:
  apollo-configservice:
    container_name: apollo-configservice
    image: docker.cnb.cool/srebro/apollo:apollo-configservice-2.3.0
    volumes:
      - ./logs:/opt/logs
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "10002:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://172.22.33.201:3306/ApolloConfigDB?characterEncoding=utf8
      - SPRING_DATASOURCE_USERNAME=srebro
      - SPRING_DATASOURCE_PASSWORD=srebro@2025
      - EUREKA_INSTANCE_HOME_PAGE_URL=http://172.22.33.204:10002
      - EUREKA_INSTANCE_IP_ADDRESS=172.22.33.204
      - TZ=Asia/Shanghai
    restart: always
    networks:
      - srebro

  apollo-adminservice:
    depends_on:
      - apollo-configservice
    container_name: apollo-adminservice
    image: docker.cnb.cool/srebro/apollo:apollo-adminservice-2.3.0
    volumes:
      - ./logs:/opt/logs
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "10003:8090"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://172.22.33.201:3306/ApolloConfigDB?characterEncoding=utf8
      - SPRING_DATASOURCE_USERNAME=srebro
      - SPRING_DATASOURCE_PASSWORD=srebro@2025
      - EUREKA_INSTANCE_HOME_PAGE_URL=http://172.22.33.204:10003
      - EUREKA_INSTANCE_IP_ADDRESS=172.22.33.204
      - TZ=Asia/Shanghai
    restart: always
    networks:
      - srebro

  apollo-portal:
    depends_on:
      - apollo-adminservice
    container_name: apollo-portal
    image: docker.cnb.cool/srebro/apollo:apollo-portal-2.3.0
    volumes:
      - ./logs:/opt/logs
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "10004:8070"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://172.22.33.201:3306/ApolloPortalDB?characterEncoding=utf8
      - SPRING_DATASOURCE_USERNAME=srebro
      - SPRING_DATASOURCE_PASSWORD=srebro@2025
      - APOLLO_PORTAL_ENVS=baseline
      - baseline_META=http://172.22.33.204:10002
      - TZ=Asia/Shanghai
    restart: always
    networks:
      - srebro

networks:
  srebro:
    external: true

二、分析

  • ?? 使用iptables的方式進(jìn)行限制。
  • 配置后的策略需要持久化,系統(tǒng)或者容器重啟后 策略還在。
  • 查看docker 官方文檔,有關(guān)于Docker 為網(wǎng)橋網(wǎng)絡(luò)創(chuàng)建 iptables 規(guī)則的說(shuō)明
  • 默認(rèn)情況下,允許所有外部源 IP 連接到已發(fā)布到 Docker 主機(jī)地址的端口;要僅允許特定 IP 或網(wǎng)絡(luò)訪問(wèn)容器,需要在 DOCKER-USER 過(guò)濾器鏈的頂部插入一條否定規(guī)則。
  • 以下規(guī)則會(huì)丟棄來(lái)自除 192.0.2.2 之外的所有 IP 地址的數(shù)據(jù)包。被這些自定義鏈中的規(guī)則接受或拒絕的數(shù)據(jù)包將不會(huì)被附加到 FORWARD 鏈的用戶定義規(guī)則看到。因此,要添加其他規(guī)則來(lái)篩選這些數(shù)據(jù)包,使用 DOCKER-USER 鏈。

三、實(shí)現(xiàn)方式

只允許17216.200.200 訪問(wèn)apollo 暴露在宿主機(jī)上的 10002,10003,10004 端口

配置iptables 策略

正確配置方式(推薦兩種方法):

iptables -I 是插入到鏈的最前面,確保每個(gè)端口的 ACCEPT 規(guī)則在 DROP 規(guī)則之前。

方法一:為每個(gè)端口單獨(dú)設(shè)置規(guī)則(清晰直觀)

# 先添加拒絕規(guī)則
iptables -I DOCKER-USER -p tcp --dport 8080 -j DROP
iptables -I DOCKER-USER -p tcp --dport 8090 -j DROP
iptables -I DOCKER-USER -p tcp --dport 8070 -j DROP


# 再添加允許規(guī)則(它們會(huì)被插入到鏈的頂部)
iptables -I DOCKER-USER -p tcp --dport 8080 -s 172.16.200.200 -j ACCEPT
iptables -I DOCKER-USER -p tcp --dport 8090 -s 172.16.200.200 -j ACCEPT
iptables -I DOCKER-USER -p tcp --dport 8070 -s 172.16.200.200 -j ACCEPT

方法二:使用 multiport 模塊合并規(guī)則(更高效)

# 先添加拒絕規(guī)則
iptables -I DOCKER-USER -p tcp -m multiport --dports 8080,8090,8070 -j DROP

# 再添加允許規(guī)則(它會(huì)被插入到鏈的頂部)
iptables -I DOCKER-USER -p tcp -s 172.16.200.200 -m multiport --dports 8080,8090,8070 -j ACCEPT

驗(yàn)證規(guī)則順序

執(zhí)行以下命令檢查規(guī)則順序,確保 ACCEPT 規(guī)則在 DROP 規(guī)則之上

[root@localhost apollo]# iptables -L DOCKER-USER -n --line-numbers
Chain DOCKER-USER (1 references)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  172.16.200.200       0.0.0.0/0            tcp dpt:8080
2    ACCEPT     tcp  --  172.16.200.200       0.0.0.0/0            tcp dpt:8090
3    ACCEPT     tcp  --  172.16.200.200       0.0.0.0/0            tcp dpt:8070
4    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080
5    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8090
6    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8070
7    RETURN     all  --  0.0.0.0/0            0.0.0.0/0

訪問(wèn)測(cè)試

iptables 規(guī)則持久化保存

[root@localhost apollo]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables: [  OK  ]

四、其他

docker 多容器端口相同,怎么限制?

上面的案例,闡述的是,docker 容器里的端口分別是不同的端口,如果我們?nèi)萜鲀?nèi)的端口都是8080,那應(yīng)該怎么限制呢,典型的場(chǎng)景就是所有微服務(wù)的容器端口都是相同的,只是暴露的端口不同

服務(wù)名稱宿主機(jī)IP宿主機(jī)端口容器內(nèi)部端口
apollo-configservice172.22.33.204100028080
apollo-adminservice172.22.33.204100038080
apollo-portal172.22.33.204100048080

使用iptables 限制訪問(wèn)的目的地址

需要提前創(chuàng)建好docker 的網(wǎng)橋,指定容器的網(wǎng)絡(luò), ipv4_address: xx.xx.xx.xx

docker-compose.yaml

version: '3'

services:
  apollo-configservice:
    container_name: apollo-configservice
    image: docker.cnb.cool/srebro/apollo:apollo-configservice-2.3.0
    volumes:
      - ./logs:/opt/logs
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "10002:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://172.22.33.201:3306/ApolloConfigDB?characterEncoding=utf8
      - SPRING_DATASOURCE_USERNAME=srebro
      - SPRING_DATASOURCE_PASSWORD=srebro@2025
      - EUREKA_INSTANCE_HOME_PAGE_URL=http://172.22.33.204:10002
      - EUREKA_INSTANCE_IP_ADDRESS=172.22.33.204
      - TZ=Asia/Shanghai
    restart: always
    networks:
      srebro:
        ipv4_address: 10.22.33.66

  apollo-adminservice:
    depends_on:
      - apollo-configservice
    container_name: apollo-adminservice
    image: docker.cnb.cool/srebro/apollo:apollo-adminservice-2.3.0
    volumes:
      - ./logs:/opt/logs
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "10003:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://172.22.33.201:3306/ApolloConfigDB?characterEncoding=utf8
      - SPRING_DATASOURCE_USERNAME=srebro
      - SPRING_DATASOURCE_PASSWORD=srebro@2025
      - EUREKA_INSTANCE_HOME_PAGE_URL=http://172.22.33.204:10003
      - EUREKA_INSTANCE_IP_ADDRESS=172.22.33.204
      - TZ=Asia/Shanghai
    restart: always
    networks:
      srebro:
        ipv4_address: 10.22.33.67

  apollo-portal:
    depends_on:
      - apollo-adminservice
    container_name: apollo-portal
    image: docker.cnb.cool/srebro/apollo:apollo-portal-2.3.0
    volumes:
      - ./logs:/opt/logs
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "10004:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://172.22.33.201:3306/ApolloPortalDB?characterEncoding=utf8
      - SPRING_DATASOURCE_USERNAME=srebro
      - SPRING_DATASOURCE_PASSWORD=srebro@2025
      - APOLLO_PORTAL_ENVS=baseline
      - baseline_META=http://172.22.33.204:10002
      - TZ=Asia/Shanghai
    restart: always
    networks:
      srebro:
        ipv4_address: 10.22.33.68

networks:
  srebro:
    external: true

配置方式

  • 只允許白名單地址172.16.200.200 可以訪問(wèn)apollo 的10002 和 10004 端口,也就是可以訪問(wèn) apollo-configservice 和 apollo-portal服務(wù),其他都不允許訪問(wèn)。
  • 這里的10.22.33.66,10.22.33.67,10.22.33.68 三個(gè)IP 是容器的IP地址, 8080 是容器的端口。三個(gè)IP 分別對(duì)應(yīng) apollo-configservice, apollo-adminservice 和 apollo-portal服務(wù)。
#先添加拒絕規(guī)則
iptables -I DOCKER-USER -p tcp --dport 8080 -j DROP

# 再添加允許規(guī)則(它們會(huì)被插入到鏈的頂部)
iptables -I DOCKER-USER -p tcp -s 172.16.200.200 -d 10.22.33.66 --dport 8080 -j ACCEPT
iptables -I DOCKER-USER -p tcp -s 172.16.200.200 -d 10.22.33.68 --dport 8080 -j ACCEPT

驗(yàn)證規(guī)則順序

執(zhí)行以下命令檢查規(guī)則順序,確保 ACCEPT 規(guī)則在 DROP 規(guī)則之上

[root@localhost apollo]#  iptables -L DOCKER-USER -n --line-numbers
Chain DOCKER-USER (1 references)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  172.16.200.200       10.22.33.68          tcp dpt:8080
2    ACCEPT     tcp  --  172.16.200.200       10.22.33.66          tcp dpt:8080
3    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080
4    RETURN     all  --  0.0.0.0/0            0.0.0.0/0

訪問(wèn)測(cè)試

iptables 規(guī)則持久化保存

[root@localhost apollo]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables: [  OK  ]

其他方式?? 限制docker外部IP 訪問(wèn)

1、docker運(yùn)行在宿主機(jī)模式上,直接走宿主機(jī)的防火墻或者iptables管理

2、docker 的外部暴露地址監(jiān)聽(tīng)在 127.0.0.1 上 , 本地再運(yùn)行一個(gè)NGINX 做代理,設(shè)置NGINX 白名單

K8S 場(chǎng)景下,怎么限制外部的IP 訪問(wèn)

  • 用clusterip,內(nèi)部訪問(wèn)沒(méi)問(wèn)題,外部走訪問(wèn)nginx的nodeport或者ingress,這樣就可以用白名單了

到此這篇關(guān)于基于iptables的Docker端口白名單控制實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Docker iptables端口白名單內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Docker部署postgresql的方法實(shí)現(xiàn)

    Docker部署postgresql的方法實(shí)現(xiàn)

    本文主要介紹了Docker部署postgresql的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Linux 離線安裝docker的過(guò)程(一鍵式安裝)

    Linux 離線安裝docker的過(guò)程(一鍵式安裝)

    這篇文章主要介紹了Linux 離線安裝docker(一鍵式安裝)的方法,非常簡(jiǎn)單,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Docker 鏡像、容器、倉(cāng)庫(kù)的概念及應(yīng)用詳解

    Docker 鏡像、容器、倉(cāng)庫(kù)的概念及應(yīng)用詳解

    這篇文章主要介紹了Docker 鏡像、容器、倉(cāng)庫(kù)的概念及應(yīng)用詳解的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Docker中使用gosu的方法詳解

    Docker中使用gosu的方法詳解

    在Docker鏡像中啟動(dòng)服務(wù)時(shí),我們通常不希望以root身份運(yùn)行主進(jìn)程,sudogosu是一個(gè)非常輕量的工具,功能類似sudo,但不會(huì)產(chǎn)生額外進(jìn)程,非常適合在Docker容器中用來(lái)切換用戶,本文給大家介紹Docker中使用gosu的方法,感興趣的朋友一起看看吧
    2025-10-10
  • docker-compose build使用參數(shù)args方式

    docker-compose build使用參數(shù)args方式

    這篇文章主要介紹了docker-compose build使用參數(shù)args方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Ubuntu 16.04中Docker的安裝和代理配置教程

    Ubuntu 16.04中Docker的安裝和代理配置教程

    這篇文章主要給大家介紹了在Ubuntu 16.04中Docker的安裝和代理配置的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-05-05
  • Docker使用Dockerfile來(lái)創(chuàng)建鏡像

    Docker使用Dockerfile來(lái)創(chuàng)建鏡像

    本篇文章主要介紹了Docker使用Dockerfile來(lái)創(chuàng)建鏡像,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • 遠(yuǎn)程docker服務(wù)器攜帶證書(shū)連接的實(shí)現(xiàn)方法

    遠(yuǎn)程docker服務(wù)器攜帶證書(shū)連接的實(shí)現(xiàn)方法

    本文主要介紹了遠(yuǎn)程docker服務(wù)器攜帶證書(shū)連接的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • docker部署項(xiàng)目/var/lib/docker/overlay2目錄滿了該如何清理

    docker部署項(xiàng)目/var/lib/docker/overlay2目錄滿了該如何清理

    Docker中的/var/lib/docker/overlay2目錄是用于存儲(chǔ)Docker容器的數(shù)據(jù)層和鏡像層的,使用Docker一段時(shí)間后這個(gè)目錄可能會(huì)變得非常大,這篇文章主要給大家介紹了關(guān)于docker部署項(xiàng)目/var/lib/docker/overlay2目錄滿了該如何清理的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • 使用docker compose搭建一個(gè)elk系統(tǒng)的方法

    使用docker compose搭建一個(gè)elk系統(tǒng)的方法

    這篇文章主要介紹了使用docker-compose搭建一個(gè)elk系統(tǒng)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08

最新評(píng)論

威宁| 荥阳市| 汝阳县| 山西省| 建瓯市| 麻江县| 喀喇| 志丹县| 吴忠市| 延庆县| 高雄市| 新和县| 宜兰县| 都江堰市| 布尔津县| 平定县| 筠连县| 潜江市| 梨树县| 六枝特区| 栾川县| 桓仁| 郧西县| 安国市| 礼泉县| 江津市| 东海县| 盐亭县| 岱山县| 恭城| 治县。| 安新县| 册亨县| 扬中市| 惠东县| 油尖旺区| 成都市| 合水县| 池州市| 舞阳县| 江川县|