Centos
阻止任何埠上的所有傳入請求,除非來自源 IP 列表
我有許多執行 Docker 的 CentOS 7 VPS,並由 Cattle (Rancher) 編排。
這些 VPS 應該只能從 Internet 上的幾個 IP 地址訪問,所有其他來源都應該被丟棄/忽略。我已經適當地配置了 firewalld 並且限制適用於標準系統服務,例如 SSH,但是當我向它們部署容器時,任何地方都允許暴露的埠。
似乎 Docker 正在將主機 IP/埠映射到容器 IP/埠(這是正確的),但是在我的顯式源允許列表之前,這條規則被插入到 netfilter 中……
有沒有辦法解決這個問題?任何幫助將非常感激。
我為此苦苦掙扎了幾個小時,但這是一個使用
iptables
而不是firewalld
.關鍵是在 Docker 之前獲得你的塊。然而 Docker 有一個討厭的習慣,就是把它的規則放在桌面
FORWARD
鏈的頂端。filter
在每次服務重啟時。所以……我必鬚髮揮創造力並利用mangle
桌子和POSTROUTING
鏈條,如下所示:*mangle :IS-ALLOWED - -A IS-ALLOWED ! -o docker0 -j RETURN -A IS-ALLOWED -o docker0 -s 1.1.1.1 -j RETURN -A IS-ALLOWED -j DROP -I POSTROUTING -j IS-ALLOWED COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :IS-ALLOWED - -A IS-ALLOWED -s 1.1.1.1 -j RETURN -A IS-ALLOWED -i lo -j RETURN -A IS-ALLOWED -j DROP -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -j IS-ALLOWED -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
這限制
1.1.1.1
了對機器服務(SSH、ICMP 等)和 Docker 在docker0
介面上轉發服務的訪問。
是的,您只需在 docker 添加的條目之前評估您的阻止防火牆條目。
在我的環境中,docker 將允許規則添加到名為 DOCKER 的鏈中,並將拒絕規則添加到名為 DOCKER-ISOLATION 的鏈中。這些在 FORWARD 鏈的開頭進行評估。因此,如果您的環境和我的一樣,只需將您自己的規則放在 FORWARD 鏈的頂部即可。這是在“過濾器”表中。我最近對“過濾器”和“nat”表感到困惑。
希望有幫助 - 迪倫