在 iptables 中永久阻止域名

在 iptables 中永久阻止域名

假设我想永久屏蔽 Facebook。为此,我遵循了以下步骤:

#host -ta www.facebook.com

示例输出:

www.facebook.com 的地址为 69.171.224.40

查找 CIDR

#whois 69.171.224.40 | grep CIDR

示例输出:

CIDR:69.171.224.0/19

阻止对 www.facebook.com 的传出访问

方法 1:

#iptables -I FORWARD -p tcp -d 69.171.224.0/19 -j DROP

方法 2:

#iptables -I FORWARD -p tcp -d www.facebook.com -j DROP

两种方法都很好用。方法 1,IP 地址可能会更改,因此不会永久阻止 Facebook。我不知道方法 2是否会永久封锁 Facebook。如果上述方法不是永久封锁域名的正确方法,我该怎么做?

答案1

使用 squid 如下操作如果你使用它的话就做同样的事情。

# Mon to Fry time
acl blockfacebooktime time MTWHF 8:30-8:30
# Domain name
acl blockfacebookdotcom  dstdomain .facebook.com

答案2

iptables方法 2 可能并不像你想象的那样有效。你可以从手册中读到:

[!] -s, --source address[/mask]
          Source specification. Address can be either a network name, a hostname (please note that specifying any name to be resolved with a remote query  such
          as  DNS  is  a  really bad idea), a network IP address (with /mask), or a plain IP address.

当然,目标选项也一样-d。这是因为iptables只会进行一次 DNS 查找,并在规则中使用检索到的 IP。因此,如果此后 IP 发生变化,它将不起作用。

更好的方法是使用 @neolix 建议的代理服务器。但是,除非您有非常严格的规则来防止这种情况,否则您的用户可能会尝试绕过您的代理。

答案3

我通过将主机重定向到本地 IP 实现了相同的目的。

编辑/etc/hosts并添加类似这样的内容(非路由IP):

10.0.0.1      www.facebook.com

答案4

您可以使用自动脚本链来阻止域的所有 IP。即,只需列出域的所有 IP 并逐一阻止它们。如果表中已存在 IP,则将跳过插入。请执行以下操作:

# nslookup www.facebook.com|grep "^Address: [1-9]"| while read l; do ip=$(sed "s/Address://" <<< "$l"); if [ -z "$(iptables -n -L FORWARD|grep $ip)" ]; then iptables -I FORWARD -j DROP -d $ip; echo Blocked $ip; fi; done

可以从调用此脚本cron(例如每分钟/每小时)来更新地址。

相关内容