我累坏了。我刚刚花了两个小时追赶一只鹅,过去一年来我一直在断断续续地追赶它。这是我的目标,尽可能简洁地表达出来。
步骤 1:HOSTS 文件:
127.0.0.5 NastyAdServer.com
127.0.0.5 xssServer.com
127.0.0.5 SQLInjector.com
127.0.0.5 PornAds.com
127.0.0.5 OtherBadSites.com
…
第 2 步:Apache httpd.conf
<VirtualHost 127.0.0.5:80>
ServerName BlackHole
DocumentRoot "X:\Docs\…\BlackHole"
RewriteEngine On
RewriteRule (\.(gif|jpg|png|jpeg)$) /p.png [L]
RewriteRule (.*) /ad.htm [L]
</VirtualHost>
因此,基本上,HOSTS 文件会将指定域重定向到本地主机,但重定向到特定的环回 IP 地址。Apache 会监听此地址上的任何请求,并提供透明像素图形或空 HTML 文件。因此,任何不良网站上的任何页面或图形都会被替换为空(换句话说,广告/恶意软件/色情/等拦截器)。
这本身就很好用(对我来说已经好几年了)。问题是这些坏事不再仅限于 HTTP 流量。例如:
<script src="http://NastyAdServer.com:99">
or
<iframe src="https://PornAds.com/ad.html">
or a Trojan using
ftp://spammaster.com/[email protected];[email protected];[email protected]
or an app “phoning home” with private info in a crafted ICMP packet by pinging
CardStealer.ru:99
处理 HTTPS 是一个相对较小的障碍。我可以创建一个单独的 VirtualHost,就像上面的一样,将端口 80 替换为 443,并添加 SSL 指令。这样就剩下处理其他端口了。
我尝试使用 * 作为端口,但随后出现重叠错误。我尝试将所有请求重定向到 HTTPS 服务器,反之亦然,但都不起作用;要么 SSL 请求无法正确重定向,要么 HTTP 请求给出了您正在向启用 SSL 的服务器端口传输普通的 HTTP 消息……错误。此外,我无法找到测试其他端口是否成功重定向的方法(我可以尝试使用浏览器,但是 FTP、ICMP 等呢?)
我意识到我可以使用端口阻止程序(例如 ProtoWall、PeerBlock 等),但这样做有两个问题。首先,我使用此方法阻止的是域,而不是 IP 地址,因此要使用端口阻止程序,我必须获取每个域的 IP,并经常更新主题。其次,使用此方法,我可以让 Apache 保留所有广告/恶意软件/垃圾邮件/等请求的日志,以供将来分析(我当前的 BlackHole 日志现在已经有 466MB)。
非常感谢任何帮助我成功设置 Apache VirtualHost 黑洞的人。谢谢。
答案1
有趣的解决方案。我喜欢它!但是,您应该使用 localhost 以外的地址。
将另一个 IP 绑定到盒子上的 NIC(或使用第二个 NIC),并设置 Apache 以监听该地址,无论您想要什么端口。通配符 (*) 应该有效。然后,到该地址的唯一流量由 HOSTS 文件“欺骗”引导,并且该流量不会干扰可能访问本地主机的其他(合法)服务。
此外,您可以选择使用 DNS 而不是 HOSTS 文件来执行此操作。在我看来,这是一个更好的长期解决方案。最后,最简单的解决方案很可能是在防火墙上阻止到这些域的流量。
更新 - 根据评论。我建议您使用两个不同的 IP 地址,一个用于 HTTP,一个用于 HTTPS。让每个 IP 地址监听所有端口并将流量引导到相应的端口。然后,当您将要阻止的域添加到 HOSTS 文件时,根据触发添加条目的请求类型将其设置为 SSL/vanilla IP。
答案2
您可以通过将所有 ErrorDocument 代码和通配符图像类型重定向到与下面相同的空白页/图像来真正简化事情。它首先尝试匹配死机,然后允许错误文档例程作为失败。(我想您可以在错误例程中完成所有操作,但我认为作为错误例程,速度会慢一点?)在 http.conf 的末尾,以及单独的 IP 地址上(例如,在我的设置中使用 Listen 192.168.1.9:80,它在 192.168.1 网络上,主服务器在 .10 上)
<VirtualHost 192.168.1.9:80>
ServerName adware
DocumentRoot /usr/local/httpsd/adware
CustomLog /dev/null common
ErrorLog /dev/null
<Directory "/usr/local/httpsd/adware">
AllowOverride none
Order allow,deny
Allow from all
</Directory>
AliasMatch /*.php /usr/local/httpsd/adware/no.html
AliasMatch /*.sql /usr/local/httpsd/adware/no.html
AliasMatch /*.html /usr/local/httpsd/adware/no.html
AliasMatch /*.htm /usr/local/httpsd/adware/no.html
AliasMatch /*.gif /usr/local/httpsd/adware/no.gif
AliasMatch /*.jpg /usr/local/httpsd/adware/no.jpg
AliasMatch /*.png /usr/local/httpsd/adware/no.png
ErrorDocument 400 /usr/local/httpsd/adware/no.html
ErrorDocument 401 /usr/local/httpsd/adware/no.html
ErrorDocument 403 /usr/local/httpsd/adware/no.html
ErrorDocument 404 /usr/local/httpsd/adware/no.html
ErrorDocument 405 /usr/local/httpsd/adware/no.html
ErrorDocument 414 /usr/local/httpsd/adware/no.html
ErrorDocument 500 /usr/local/httpsd/adware/no.html
</VirtualHost>
-对我们来说很有帮助。no.html 文件是 Figlet 文本:
_______ __ | _ |.--| |.-----. | || _ ||__ --|__ __ |___|___||_____||_____||_____|__|__||
并且所有图像都是 1x1 各自的空图像,调色板为 2。
而且我有一个 hosts 文件,用于将转换后的广告拦截网站列表绑定到我们的主要 DNS 中,从而在网络级别捕获所有内容。因此 DHCP 访问者和工作人员都会获得同样周到的保护。