Iptables

為什麼 iptables 在使用 Chrome/Chromium 時無法阻止 Google 網站?

  • April 28, 2020

我使用了以下命令,取自這裡

# Allow loopback device (internal communication)
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

# Allow all local traffic.
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT

# Set default policies to drop all communication unless specifically allowed
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP

這似乎成功地阻止了幾乎所有來源的網際網路流量,但不知何故,通過 Chromium 訪問的 Google 服務(在 Pi 4 Model B 上的 Raspbian Buster 上)被允許通過(例如,youtube.com 載入暢通無阻)。搜尋並沒有真正幫助我理解這個問題。我找到的最接近的結果是this question,但據我了解,答案是指定域的規則過濾器無法成功應用於數據包,而我使用的規則沒有指定域全部。他們應該丟棄除本地和環回之外的所有數據包,無論域或瀏覽器如何,對吧?

作為背景,這是在我對暴露在網際網路上的偏執的 NAS 上。我對通過 OpenVPN 訪問網際網路的 Pi 有類似的規則,當 VPN 連接斷開時,會觀察到類似的行為:除了通過 Chromium 訪問的 Google 服務之外,不允許任何流量。主要問題是關於 NAS 以消除 VPN 的擔憂。

編輯:在評論中添加每個請求,sudo iptables-save在瀏覽器中載入 YouTube 時的輸出並且規則生效:

# Generated by xtables-save v1.8.2 on Mon Apr 27 13:24:52 2020
*filter
:INPUT DROP [7:2304]
:FORWARD DROP [0:0]
:OUTPUT DROP [482:36138]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.1.0/24 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -d 192.168.1.0/24 -j ACCEPT
COMMIT
# Completed on Mon Apr 27 13:24:52 2020

我不相信有代理,儘管我不熟悉網路中該術語的確切定義。Google向我表明,我將路由器從調製解調器連接到我的 ISP 是相關的,而不是中間伺服器?

此外,作為對已刪除評論的回應,我的 ISP 似乎支持 IPv6。

編輯2:輸出ping -c6 2001:67c:2564:a119::77

PING 2001:67c:2564:a119::77(2001:67c:2564:a119::77) 56 data bytes
64 bytes from 2001:67c:2564:a119::77: icmp_seq=1 ttl=49 time=132 ms
64 bytes from 2001:67c:2564:a119::77: icmp_seq=2 ttl=49 time=130 ms
64 bytes from 2001:67c:2564:a119::77: icmp_seq=3 ttl=49 time=127 ms
64 bytes from 2001:67c:2564:a119::77: icmp_seq=4 ttl=49 time=147 ms
64 bytes from 2001:67c:2564:a119::77: icmp_seq=5 ttl=49 time=129 ms
64 bytes from 2001:67c:2564:a119::77: icmp_seq=6 ttl=49 time=128 ms

--- 2001:67c:2564:a119::77 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 12ms
rtt min/avg/max/mdev = 126.981/132.157/147.250/6.932 ms

編輯 3:現在的最終編輯。只是想附加我按照解決方案中的建議得到的工作規則:

# Allow loopback device (internal communication)
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
sudo ip6tables -A INPUT -i lo -j ACCEPT
sudo ip6tables -A OUTPUT -o lo -j ACCEPT

# Allow all local traffic.
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT

# Allow VPN establishment
# Only 2 ports open, 1 for DNS and 1 for VPN
# If establishing through an IP and not a name, the ones with port 53 can be removed
# Port 1198 may be different depending on the VPN
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 1198 -j ACCEPT
sudo iptables -A INPUT -p udp --sport 1198 -j ACCEPT

# Accept all TUN connections (tun = VPN tunnel)
sudo iptables -A OUTPUT -o tun+ -j ACCEPT
sudo iptables -A INPUT -i tun+ -j ACCEPT

# Set default policies to drop all communication unless specifically allowed
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP
sudo ip6tables -P INPUT DROP
sudo ip6tables -P OUTPUT DROP
sudo ip6tables -P FORWARD DROP

請注意,此處沒有針對 ip6tables 的本地流量規則,但如果您的本地網路執行的是 IPv6 而不是 IPv4,則可能需要它。在這種情況下,更改iptablesip6tables替換本地流量規則中的 IP 地址即可。

ping 顯示的結果是您的電腦能夠利用 IPv6 與外界通信。因此,當 Chromium 無法獲得 IPv4 連接時,它將使用 IPv6。如果你想防止這種情況,你必須研究使用ip6tables.

引用自:https://unix.stackexchange.com/questions/582901