Centos
Centos Docker iptables 阻止除域之外的所有流量
我正在嘗試阻止來自 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)。再一次,現代網際網路顯然正在禁止第三方檢查流量的可能性。