Назад | Перейти на главную страницу

Блокхол Apache VirtualHost (принимает все запросы на всех портах на 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 уже сейчас 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-адрес в зависимости от типа запроса, вызвавшего добавление записи.