简答
将文件用作阻止“空”地址的网站是否安全?/etc/hosts
我认为答案应该是:不。
如果没有其他原因,请求实际上并未“无效”。它们仍然是活跃的请求。正如 OP 所指出的,由于请求是针对合法的 Internet 主机的,因此这种将请求重定向到的捷径localhost
可能会干扰在开发环境中测试网络代码。
阻止进出某些 Internet 主机的流量的更好方法可能是利用iptables
Linux 内核防火墙的接口。 iptables
是大多数 GNU/Linux 系统的默认网络规则表。一些发行版ufw
用作iptables
.
如果你想使用iptables
,这里有一个简单的脚本,它将DROP
所有传入和传出的数据包用于 IP 地址或主机名列表,每行一个地址或主机名包含在一个名为的纯文本文件中~/blocking.txt
## Block every IP address in ~/blocking.txt
## DROP incoming packets to avoid information leak about your hosts firewall
## (HT to Conor Mancone) REJECT outgoing packets to avoid browser wait
for i in $(cat ~/blocking.txt); do
echo "Blocking all traffic to and from $i"
/sbin/iptables -I INPUT -s $i -j DROP
/sbin/iptables -I OUTPUT -d $i -j REJECT
done
样本 ~/blocking.txt
websiteiwanttoblock.com
anotherone.com
ip.add.of.net/mask
不要将您的localhost
IP 地址放在此文件中。
更长的答案
虽然localhost
在文件中重新分配 Internet 主机是阻止/etc/hosts
不需要的 Internet 主机的常用捷径技术,但这种方法存在一些严重的安全缺陷。
传入请求
不是通过特定用户请求有意发起的传入请求。最常见的例子是网页上的广告。让我们跟踪传入的数据包...
首先,我启动wireshark
. 然后,我将最大的互联网广告公司放在我的/etc/hosts
文件中,其中包含以下内容:
127.0.0.1 google.com
然后在我的浏览器中禁用所有广告拦截器,导航到youtube
并播放任何随机视频。
如果我过滤我的数据包,包括谷歌的 IP 地址空间:
ip.addr==172.217.0.0/16
我仍在接收来自 Google 的数据包。
这是什么意思?
这意味着恶意服务器可能会插入恶意软件,该恶意软件可能会通过仍然到达并发送到本地主机的数据包来攻击我的计算平台。通过防火墙规则使用/etc/hosts
而不是丢弃或拒绝数据包是一种较差的安全措施。它不会阻止来自可能的恶意主机的传入数据包,也不会为故障排除提供有效的反馈。
传出请求
发送到localhost
而不是被防火墙规则拒绝或丢弃的传出请求仍在由内核处理。/etc/hosts
使用而不是防火墙时会发生一些不良操作:
iptables 可以处理很多规则
据一些人说:
ServerFault:iptables可以支持多少条规则
32 位机器上可能的理论限制是 3800 万条规则。但是,正如引用的帖子中所述,随着iptables
规则列表的扩展,所需的内核内存也随之增加。