Я изможден. Я только что провел последние два часа в погоне за гусем, за которым то и дело гнался весь последний год. Вот цель, изложенная максимально кратко.
Шаг 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/id=goodaddr@foo.bar;myemail@baz.com;harvested@email.addr
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 давали Вы говорите по обычному протоколу HTTP с портом сервера с поддержкой SSL… ошибка. Кроме того, я не могу найти способ проверить, успешно ли перенаправляются другие порты (я мог бы попробовать использовать браузер, но как насчет FTP, ICMP и т. Д.?)
Я понимаю, что могу просто использовать блокировщик портов (например, ProtoWall, PeerBlock и т. Д.), Но с этим есть две проблемы. Во-первых, я блокирую этим методом домены, а не IP-адреса, поэтому для использования блокировщика портов мне пришлось бы получать IP-адреса каждого домена и часто обновлять тему. Во-вторых, с помощью этого метода я могу заставить Apache вести журналы всей рекламы, вредоносных программ, спама и т. Д. запросы на будущий анализ (мои текущие логи BlackHole уже сейчас 466MB).
Я благодарен за любую помощь в успешной настройке черной дыры Apache VirtualHost. Спасибо.
Вы действительно могли бы упростить ситуацию, перенаправив все коды 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 получают такую же вежливую защиту.
Интересное решение .. Нравится! Однако вы должны использовать адрес, отличный от localhost.
Привяжите другой IP-адрес к сетевому адаптеру (или используйте второй сетевой адаптер) на коробке и настройте Apache для прослушивания этого адреса для любых портов, которые вы хотите. Подстановочный знак (*) должен работать. Затем единственный трафик на этот адрес направляется «подделкой» файла HOSTS, и этот трафик не будет мешать другим (законным) службам, которые могут получить доступ к localhost.
Кроме того, вы можете сделать это с помощью DNS, а не с помощью файла HOSTS. Это ИМХО лучшее долгосрочное решение. Наконец, самое простое решение, скорее всего, заблокирует трафик на вашем брандмауэре к этим доменам.
ОБНОВЛЕНИЕ - на основе комментариев. Я предлагаю вам использовать ДВА разных IP-адреса, один для HTTP и один для HTTPS. Пусть каждый будет прослушивать все порты и направлять трафик на соответствующий порт. Затем, когда вы добавляете домен для блокировки в файл HOSTS, установите для него SSL / ванильный IP-адрес в зависимости от типа запроса, вызвавшего добавление записи.