Centos

阻止任何埠上的所有傳入請求,除非來自源 IP 列表

  • April 29, 2017

我有許多執行 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”表感到困惑。

希望有幫助 - 迪倫

引用自:https://serverfault.com/questions/847169