假设我想永久屏蔽 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
(例如每分钟/每小时)来更新地址。