Docker端口不受ufw防火墻限制問(wèn)題及解決過(guò)程
官方說(shuō)明
(ufw) 是 Debian 和 Ubuntu 附帶的前端,它允許您管理防火墻規(guī)則。 Docker 和 ufw 使用 iptables 的方式使它們彼此不兼容。
當(dāng)您使用 Docker 發(fā)布容器的端口時(shí),進(jìn)出該容器的流量在通過(guò) ufw 防火墻設(shè)置之前會(huì)被轉(zhuǎn)移。
Docker 在表中路由容器流量nat,這意味著數(shù)據(jù)包在到達(dá)ufw 使用的鏈INPUT之前會(huì)被轉(zhuǎn)移。
OUTPUT數(shù)據(jù)包在應(yīng)用防火墻規(guī)則之前進(jìn)行路由,從而有效地忽略您的防火墻配置。
現(xiàn)在的問(wèn)題是需要ufw防火墻生效,盡可能少的修改docker網(wǎng)絡(luò)。
下面是解決方法
修改UFW配置文件
修改 UFW 的配置文件 /etc/ufw/after.rules,在最后添加上如下規(guī)則:
# BEGIN UFW AND DOCKER *filter :ufw-user-forward - [0:0] :ufw-docker-logging-deny - [0:0] :DOCKER-USER - [0:0] -A DOCKER-USER -j ufw-user-forward -A DOCKER-USER -j RETURN -s 10.0.0.0/8 -A DOCKER-USER -j RETURN -s 172.16.0.0/12 -A DOCKER-USER -j RETURN -s 192.168.0.0/16 -A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN -A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16 -A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8 -A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12 -A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16 -A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8 -A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12 -A DOCKER-USER -j RETURN -A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] " -A ufw-docker-logging-deny -j DROP COMMIT # END UFW AND DOCKER
然后重啟UFW,不生效則重啟服務(wù)器
sudo systemctl restart ufw
現(xiàn)在外部就已經(jīng)無(wú)法訪問(wèn) Docker 發(fā)布出來(lái)的任何端口了
假設(shè)現(xiàn)在我有如下容器
- 容器1 端口映射:8081:8080 docker內(nèi)部IP地址:172.17.0.1
- 容器2 端口映射:8082:8080 docker內(nèi)部IP地址:172.17.0.2
- 容器3 端口映射:8083:8085 docker內(nèi)部IP地址:172.17.0.3
允許訪問(wèn)端口
ufw route allow 8080
這兒8080是容器內(nèi)部的端口,而不是映射出的docker端口,執(zhí)行這個(gè)規(guī)則后,容器1和容器2都能被外部訪問(wèn)。
ufw route allow 8085
執(zhí)行這個(gè)規(guī)則后,只有容器3都能被外部訪問(wèn)。
想要只有容器1被外部訪問(wèn)
ufw route allow from any to 172.17.0.1 port 8080
容器具體的IP地址可以通過(guò)下面的命令獲得
docker network inspect bridge
可以在輸出中找到容器的ip地址,如果使用了自定義網(wǎng)絡(luò),而不是默認(rèn)的bridge網(wǎng)絡(luò),將bridge更換為自定義網(wǎng)絡(luò)名。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker pure-ftp 搭建ftp服務(wù)器的方法
本篇文章主要介紹了docker pure-ftp 搭建ftp服務(wù)器的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
使用Docker快速搭建Airflow+MySQL詳細(xì)步驟
本文詳細(xì)介紹了如何使用Docker和Docker Compose安裝并配置Apache Airflow 2.9.3,步驟包括創(chuàng)建項(xiàng)目目錄、編寫docker-compose.yml文件、創(chuàng)建所需目錄結(jié)構(gòu)、啟動(dòng)和管理Docker容器,以及如何訪問(wèn)和配置Airflow Web UI,感興趣的朋友跟隨小編一起看看吧2024-09-09
Docker 容器內(nèi)存監(jiān)控原理及應(yīng)用
這篇文章主要介紹了Docker 容器內(nèi)存監(jiān)控原理及應(yīng)用的相關(guān)資料,需要的朋友可以參考下2016-10-10
Windows?Server?2012?R2?安裝?Docker的詳細(xì)步驟
這篇文章主要介紹了Windows?Server?2012?R2?安裝?Docker,在這個(gè)給大家說(shuō)明下使用windows10、Windows?Server?2016以上系統(tǒng)可直接使用安裝包,低版本系統(tǒng)需要使用?Docker?Toolbox?來(lái)進(jìn)行安裝使用?Docker,需要的朋友可以參考下2022-04-04
如何使用Docker和cpolar在Linux服務(wù)器上搭建DashDot監(jiān)控面板
本文主要介紹如何在Linux服務(wù)器上使用Docker和cpolar技術(shù)搭建DashDot監(jiān)控面板,實(shí)現(xiàn)實(shí)時(shí)服務(wù)器監(jiān)控,DashDot提供直觀的監(jiān)控界面和豐富的指標(biāo),通過(guò)cpolar可以實(shí)現(xiàn)公網(wǎng)訪問(wèn),方便用戶隨時(shí)了解服務(wù)器狀態(tài),文章詳細(xì)說(shuō)明了環(huán)境準(zhǔn)備、安裝Docker、配置DashDot和cpolar的步驟2024-09-09
docker 命令報(bào)異常permission denied的解決方案
這篇文章主要介紹了docker 命令報(bào)異常permission denied的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
Docker?compose啟動(dòng)服務(wù)遇到的問(wèn)題小結(jié)
這篇文章主要介紹了Docker?compose啟動(dòng)服務(wù)遇到的問(wèn)題小結(jié),這個(gè)是檢驗(yàn)我們的docker?compose掌握程度,因此里面的鏡像沒有提前拉取,掛載數(shù)據(jù)卷的目錄也沒有提前創(chuàng)建,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11

