Centos

Centos Docker iptables 阻止除域之外的所有流量

  • June 18, 2021

我正在嘗試阻止來自 iptables 的所有傳出流量,用於 docker 的介面 docker0。但我想打開幾個域的訪問權限:

我怎樣才能做到這一點?

我試過了:

iptables -I OUTPUT -o docker0 -j DROP 
iptables -I DOCKER -i docker0 -p udp --dport 53 -j ACCEPT 
iptables -I DOCKER -i docker0 -p tcp -d mydomain.com --dport 80 -j ACCEPT 
iptables -I DOCKER -i docker0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

這是不可能的。iptables控制 Netfilter,它是一個 IP 數據包過濾器(防火牆),作用於 OSI 級別 3 和 4。DNS 域名比這更高級別(並且有些正交)。

您可以使用 Netfilter控制對某些IP 地址(L3) 和TCP/UDP 埠(L4) 的訪問。

如果您想控制對網站的訪問,您有以下選項:

  • 提前解析 DNS 名稱,獲取 IP 地址並將其放入防火牆。iptables當你給它一個域名時,AFAIK本身就是這樣做的;它在 Netfilter 中配置的東西是該名稱的解析 IP 地址。當該域的所有者決定更改 IP 地址時,您的規則將不再適用。如果在該伺服器上託管了多個具有此 IP 地址的網站(即,有一個託管多個名稱的虛擬主機),您將完全允許它們或完全禁用它們。這就是您現在似乎正在做的事情;
  • HTTP(s) 代理,它檢查請求的域名並禁止訪問某些域名。像 ECH (eSNI) 這樣的現代發明將降低你的功耗,只控制對 IP 範圍的訪問,就像普通防火牆一樣,因為它使你無法知道請求的主機名;
  • DNS 過濾,它配置您的遞歸解析器將為客戶端解析哪些域,哪些不會。同樣,像 DNS-over-HTTP(由 Cloudflare 開發)這樣的現代發明將推斷您這樣做的能力,因為您的 DNS 伺服器將不再負責解析名稱,而且您不可能知道請求了哪個主機名;
  • 深度數據包檢測 (DPI)。再一次,現代網際網路顯然正在禁止第三方檢查流量的可能性。

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