by Devin Yang

建立於: 3年前 ( 更新: 3年前 )

首先Docker在Linux的環境下,Docker使用iptables規則來提供網路隔離。
然而在Docker swarm mode的環境下,我們是沒辨法把連接埠開在host的127.0.0.1下的,
這時便可透過iptables中的DOCKER-USER chain來自訂規則囉 。

Docker 安裝了兩個名為 DOCKER-USER 和 DOCKER 的自定義 iptables 鏈,它確保傳入的數據包始終首先由這兩個鏈檢查。

Docker 的所有 iptables 規則都添加到 DOCKER 鏈中。不要手動操作此鏈。

如果您需要添加在 Docker 規則之前加載的規則,

請使用 DOCKER-USER 鏈。這些規則可在 Docker 自動創建的任何規則之前啟用。

例如我的nginx開了port 8081,代表了輸入host的ip,加上port 8081就能存取到該主機了。

cyh3692mbacl   dlaravel_web          replicated   4/4        nginx:latest      *:8081->80/tcp

但其實我更希望是透過HAProyx才可以存取到該主機,而不是使用者開啟host的ip加上port 8081就進行存取,那麼解法就是調整iptables囉 。

我們可以用如下指令先查看見前的規則

iptables -nL DOCKER-USER
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

基本上是完全開放的,我們可以寫個bash如下,請注意,這只是一個示意範例,請依自己的需求自行調整。
在這範例中包含了不同的網段或特定的IP及網卡。

#!/bin/bash
iptables -F DOCKER-USER
#全檔只能用本機的ip存取
iptables -I DOCKER-USER -p tcp -m multiport --dports 8025,8084,30001,30020 -j DROP
#鎖區網在可以連
iptables -I DOCKER-USER -i eno1 ! -s 10.0.0.26 -p tcp -m multiport --dports 8080,8081 -j DROP
iptables -I DOCKER-USER -i eno2 ! -s 192.168.88.0/24 -p tcp -m multiport --dports 3306,2222,1024 -j DROP
iptables -A DOCKER-USER -j RETURN
#列出規則
iptables -nL DOCKER-USER

在開頭 ,我先清除了所有規則

iptables -F DOCKER-USER

其他就不多說了,相信大家用猜的都猜的出來。

 

 

Tags: docker

Devin Yang

文章內容無法一一說明,如果您有什麼不了解處,歡迎提問哦:)

No Comment

Post your comment

需要登入才可留言!

類似的文章


d-laravel, docker, laravel, docker-compose

D-Laravel v1.0.0 release變更說明

為了讓container可以被更靈活運用,D-Laravel釋出v1.0.0版了,此版本為不向下相容變更。 https://github.com/DevinY/dlaravel/releases/tag/v1.0.0 如果您使用為 v1.0.0 之前,您需修改Laravel專案的.env檔,DB_HOST=127.0.0.1變更為DB_HOST=db 如果您有自訂的docker-compose-custom.yml檔....more

laravel docker

關於D-Laravel的專案模式

如果您是新使用者,建議您改用我的最新環境phpenv。https://github.com/DevinY/phpenv

docker,phpenv

用光了Docker IPv4 address pool問題解法

可能在舊版的docker環境,使用Docker compose啟動容器時,會碰過下方的錯誤:

 Error response from daemon: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network這其實這是default-address-pools用光的症狀,有些環境,docker-compose預設會使用Class B的私有網路。172段的私有IP是有範圍的,從172.16.0.0到172.31.255.255。也就是說,當我們起動一個docker-compose的Project,就會吃掉一個Class B的私有段,非常豪邁,