Ubuntu
iptables geoip 可以阻止除我列出的國家以外的所有國家,但阻止 apt 更新?
認為 id 會阻止所有連接,禁止來自美國和 AU 的連接,這部分有效,但我無法再執行 apt 更新,並且從終端 ping google 失敗
我在這裡想念什麼?如果我刪除 geoip 行一切正常…順便說一句,apt 鏡像位於美國,託管在我執行的 digitalocean 伺服器上…
任何幫助表示讚賞
iptables -N LOGGING iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -I INPUT -m geoip ! --src-cc AU,US -j LOGGING iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "iptables-dropped: " --log-level 4 iptables -A LOGGING -j DROP
ping 到 google 然後 apt-get install 的結果是:
Jan 3 12:18:33 wifi kernel: [ 6083.707903] iptables-dropped: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.53 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=35873 DF PROTO=UDP SPT=51564 DPT=53 LEN=64 Jan 3 12:19:13 wifi kernel: [ 6123.745110] iptables-dropped: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.53 LEN=67 TOS=0x00 PREC=0x00 TTL=64 ID=38624 DF PROTO=UDP SPT=36189 DPT=53 LEN=47 Jan 3 12:19:33 wifi kernel: [ 6144.125699] iptables-dropped: IN=eth0 OUT= MAC=42:40:27:b3:46:91:fe:00:00:00:01:01:08:00 SRC=117.50.110.5 DST=198.199.71.101 LEN=60 TOS=0x00 PREC=0x00 TTL=42 ID=59012 DF PROTO=TCP SPT=47926 DPT=80 WINDOW=28280 RES=0x00 SYN URGP=0 Jan 3 12:20:04 wifi kernel: [ 6175.132445] iptables-dropped: IN=eth0 OUT= MAC=42:40:27:b3:46:91:fe:00:00:00:01:01:08:00 SRC=117.50.110.5 DST=198.199.71.101 LEN=60 TOS=0x00 PREC=0x00 TTL=44 ID=734 DF PROTO=TCP SPT=33934 DPT=80 WINDOW=28280 RES=0x00 SYN URGP=0
根據要求,使用 iptables-save -c 輸出:
:INPUT ACCEPT [33:1936] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [5:260] :LOGGING - [0:0] [27:2919] -A INPUT -m geoip ! --source-country AU,US -j LOGGING [269:136906] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT [0:0] -A INPUT -i lo -j ACCEPT [0:0] -A INPUT -p tcp -m tcp --dport 2010 -j ACCEPT [0:0] -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT [0:0] -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT [261:18115] -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT [22:2420] -A OUTPUT -o lo -j ACCEPT [5:550] -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "iptables-dropped: " [27:2919] -A LOGGING -j DROP
目前,您的腳本作為第一條規則*插入一條僅允許來自 AU 和 US 的數據包的規則。*這不包括環回介面上使用的來自 127.0.0.0/8 的數據包。因此,以後出現的所有其他規則都不會使用:所需的數據包已經被丟棄。
因此,例如涉及客戶端 127.0.0.1 到本地 DNS 伺服器 127.0.0.53 的 DNS 解析失敗,並且無法正確使用必須解析任何主機名的查詢。
代替:
iptables -I INPUT -m geoip ! --src-cc AU,US -j LOGGING
和:
iptables -A INPUT -m geoip ! --src-cc AU,US -j LOGGING
仍然將其保留在腳本中的相同位置。這樣它就不會繞過狀態規則,該規則只允許來自先前建立的連接的數據包,包括本地發起的到 AU 和 US 之外的傳出連接,以及各種本地服務(包括本地 DNS 伺服器)所需的環回介面規則。在允許特定服務的規則之前,它仍然會阻止來自澳大利亞/美國的任何東西。
另外,簡單說明一下,由於 OUTPUT 鏈中的預設策略是 ACCEPT,並且那裡沒有帶有 DROP 目標的規則,因此 OUTPUT 鏈中的兩條規則目前是無用的。