Apache VirtualHost Blockhole (ест все запросы на все порты на IP)

Я изможден. Я только что провел последние два часа в погоне за гусем, которого я провел после года в прошлом. Вот цель, изложенная максимально кратко.

Шаг 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 уже 466 МБ).

Я ценю любую помощь в успешной установке черной дыры Apache VirtualHost. Благодарю.

2 ответа

Интересное решение.. Мне нравится! Однако вы должны использовать адрес, отличный от localhost.

Свяжите другой IP-адрес с сетевой картой (или используйте другую сетевую карту) на устройстве и настройте Apache для прослушивания этого адреса для любых портов, которые вы хотите. Подстановочный знак (*) должен работать. Затем единственный трафик на этот адрес направляется "поддельным" файлом HOSTS, и этот трафик не будет мешать другим (законным) службам, которые могут обращаться к localhost.

Кроме того, вы можете сделать это с DNS, а не с файлом HOSTS. Это ИМХО лучшее долгосрочное решение. Наконец, самое простое решение - блокировать трафик вашего брандмауэра на эти домены.


ОБНОВЛЕНИЕ - на основе комментариев. Я предлагаю вам использовать ДВА разных IP-адреса, один для HTTP и один для HTTPS. Пусть каждый прослушивает все порты и направляет трафик на соответствующий порт. Затем, когда вы добавляете домен для блокировки в файл HOSTS, установите для него SSL/vanilla IP в зависимости от типа запроса, который инициировал добавление записи.

Вы могли бы действительно упростить вещи, перенаправив все коды 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, работники получают такую ​​же вежливую защиту.

Другие вопросы по тегам