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

Как заблокировать запросы для виртуальных хостов, которых нет в apache

Прежде всего, проверьте этот вопрос:

Почему в моих журналах apache появляются внешние домены?

Мы наблюдаем то же самое на одном из наших VPS-серверов Debian - с одной большой разницей, регулярностью указанных запросов. Мы видим более 5000 запросов в минуту - иногда до 100 запросов в секунду - и все для доменов, которые мы не размещаем - это большая проблема, поскольку apache поглощает гигабайты оперативной памяти, а затем приводит к сбою сервера.

Я сделал снимок хвоста other_vhosts_access.log из apache и загружено здесь:

http://www.heavencore.co.uk/filehub/20140411101731_apache_log_tail.txt

Два примера указанного журнала:

vps.XXXXXX.co.uk:80 216.244.68.216 - - [10/Apr/2014:14:57:15 +0000] "GET http://advs.adgorithms.com/ttj?id=2440545 HTTP/1.0" 404 527 "http://www.cashwargames.com/girls-games.htm" "Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC; Alexa Toolbar)"
vps.XXXXXX.co.uk:80 192.157.246.54 - - [10/Apr/2014:14:57:15 +0000] "GET http://ads.yahoo.com/st?ad_type=ad&ad_size=300x250&section=5452138&pub_url=${PUB_URL} HTTP/1.0" 404 520 "http://www.verlyer.com/?p=866" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5"

Даже если мы удалим все виртуальные хосты - apache по-прежнему будет мысленно отвечать с 404 на все эти запросы, и если мы настроим apache на отклонение всех - он просто начнет отвечать с 403

В качестве временной меры мы использовали IPTABLES для блокировки ВСЕГО трафика на сервер, за исключением нескольких IP-адресов наших основных пользователей.

Как вы можете видеть из журнала событий, эти запросы поступают с тысяч уникальных адресов - предположительно, какой-то ботнет привязался к нашему серверу ??

Как мы можем остановить эту атаку и восстановить публичный http-доступ к серверу ??? (это продолжается уже более 48 часов)

VPS размещен на стороннем сервере, и мы не контролируем брандмауэр / гипервизор периметра.

Единственное, что могли бы порекомендовать сторонние службы поддержки, - это использование IPT для блокировки всех IP-адресов - мы не понимаем, как это возможно, учитывая огромное их количество?

Вы можете настроить виртуальный хост по умолчанию для обработки всех доменов, кроме вашего сервера. Настройте его так, чтобы он возвращал запрос 403 всем запросам. Это будет минимальное содержание. Также настройте его, чтобы функция keep alive не позволяла быстро освобождать ресурсы.

Использование отдельного журнала для виртуального хоста по умолчанию с fail2ban, настроенным на удаление любых подключенных хостов, быстро заблокирует хосты. Fail2ban очистит блоки по истечении заданного времени.

Я бы попытался использовать обратный прокси-сервер с некоторым быстрым веб-сервером (apache 2.4 с рабочим или событийным MPM или ngix), который разрешал бы только действительные запросы к реальному веб-серверу (возможно, apache с prefork MPM для совместимости с PHP).

Оба могут работать на одном VPS. Настоящий веб-сервер может, например, прослушивать 127.0.0.2 на нестандартном порту.