以为 id 会阻止所有连接(除了来自美国和澳大利亚的连接),并且该部分有效,但我无法再运行 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 的结果是:
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
答案1
目前您的脚本插入物作为第一条规则,该规则仅允许来自澳大利亚和美国的数据包。这不包括环回接口上使用的来自 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
仍然将其保留在脚本中的同一位置。这样它就不会绕过仅允许来自先前建立的连接的数据包的状态规则包括当地发起的外向的与澳大利亚和美国以外的连接以及各种本地服务(包括本地 DNS 服务器)所需的环回接口规则。在允许特定服务的规则之前,它仍然会阻止非来自澳大利亚/美国的任何内容。
另外,简单地说,由于 OUTPUT 链中的默认策略是 ACCEPT,并且那里没有带有 DROP 目标的规则,因此 OUTPUT 链中的两条规则目前没有用处。