Есть ли приложение, которое просматривает журналы nginx и блокирует IP-адреса, которые делали запросы на общие уязвимости веб-приложений?
У меня есть веб-сервер nginx, который обслуживает только статический контент. Я регулярно получаю запросы на GET /db/websql/main.php
или GET /db/phpMyAdmin2/main.php
. Это явные признаки того, что кто-то ищет уязвимости. Есть ли приложение, которое может просматривать журналы nginx, распознавать эти попытки использования распространенных уязвимостей и блокировать вредоносные IP-адреса? Я считаю, что даже если я не уязвим для этих эксплойтов, одни и те же IP-адреса могут участвовать в других атаках на тот же или другие ящики в моей сети: SMTP, SSH, другие веб-серверы с веб-приложениями. Мне кажется хорошим подходом блокировать их, когда они попадают в банку с печеньем.
Fail2ban делает нечто подобное для SSH и попыток аутентификации HTTP. Возможно, его можно было бы использовать с конфигурацией, включающей список хорошо известных адресов, используемых для уязвимостей. Доступна ли такая конфигурация?
Да, вы можете использовать fail2ban для блокировки IP-адресов, отправляющих неверные запросы и сканирования вашего сервера:
В fail2ban есть встроенный фильтр, который называется nginx-botsearch
это может уже сделать то, что вы ищете. Просто позаботьтесь о том, чтобы плохие запросы регистрировались nginx, чтобы fail2ban мог найти их в журналах nginx.
Мне нравится новый fail2ban v11 (даже если он еще не предназначен для использования в продакшене, как говорят разработчики. Но уже очень хорошо работает для меня). В нем есть функция под названием bantime.increment
где fail2ban хранит заблокированные IP-адреса в своей собственной базе данных и затем может автоматически увеличивать время блокировки по формуле givn для каждого запрета известного плохого IP-адреса. Это означает, что у вас может быть очень небольшое время начального бана, а об остальном позаботится fail2ban.
Кроме того, запрет IPv6 IP наконец стал возможен с помощью fail2ban, начиная с версии v10. (Используйте запрет iptables, так как при запрете UFW все еще есть проблемы с запретом IPv6 IP.)
Дополнительно вы могли:
Установите UFW с хорошими настройками по умолчанию, такими как отбрасывание недействительных пакетов.
Регулярно (возможно, один раз в день) загружайте черный список с известными плохими IP-адресами и блокируйте эти IP-адреса непосредственно в iptables. Хорошей отправной точкой может быть такой сценарий сценарий. (Прокрутите страницу вниз, чтобы получить улучшенную версию, используя ipset
.)
С сайта gotroot.com форумы:
Вы можете использовать nginx с нашими правилами, поставив обратный прокси-сервер apache с mod_security перед nginx. Это на самом деле очень легкий, и что-то мы будем добавлять post 3.0 в качестве опции для сайтов, на которых работают альтернативные веб-серверы, такие как nginx и т. Д. Как сказал Скотт, nginx не имеет какого-либо модуля или возможности WAF, поэтому вы не можете сделать что-то вроде modsecurity. внутри nginx.
Люди просили команду nginx добавить WAF, и я знаю, что lightspeed работает над полной поддержкой modsec, но пока я ничего не видел для nginx. Поэтому, если вы используете nginx и хотите, чтобы WAF защищал его, вам нужно будет поставить перед ним WAF.
Как я уже сказал, это прекрасно работает, поэтому я настоятельно рекомендую вам это сделать. У нас есть группа клиентов, использующих всевозможные веб-серверы, отличные от apache, с обратными прокси-серверами apache и mod_security перед ними. И как я уже упоминал, мы добавим это в выпуск ASL post 3.0 в качестве опции для веб-серверов, отличных от Apache.
(Gotroot.com хорошо известен своим списком правил mod_security, который они предоставляют.)
Еще вы можете попробовать Naxsi который является модулем брандмауэра веб-приложений для Nginx, хотя он все еще находится в альфа-версии. Больше
Я расставляю им ловушки. Одна из распространенных атак - добавление? Author = 1 для просмотра имени пользователя администратора WordPress. Если моя домашняя страница обнаруживает это, она запрещает этот IP-адрес. Еще одна уловка - создать каталог, который не используется вашим веб-сайтом, например / admin. Не помещайте на него никаких ссылок. Поместите правило в свой robots.txt, запрещающее google.com индексировать его. Поместите веб-страницу в эту папку, которая запускает программу, чтобы запретить их IP-адрес, если они посещают эту страницу. Для упомянутых вами страниц поместите настоящие веб-страницы в те места, которые будут добавлять их IP-адреса в запрещенный брандмауэр iptables.
Это работает на моем Raspberry Pi с версией linux и php.
Чтобы запустить iptables с php, добавьте следующее в / etc / sudoers
www-data ALL=(ALL) NOPASSWD: /sbin/iptables
Некоторым людям не нравится предоставлять iptables доступ к www-данным. Говорят, это угроза безопасности. Но я думаю, это нормально, потому что их только что забанили. Вот код, который я использую:
<?php
// Get the ip address of the client.
$remote_addr = $_SERVER['REMOTE_ADDR'];
// Ban them.
if (is_ip($remote_addr)) {
ban_ip($remote_addr);
// Save the banned IP address.
$logfile = '/run/shm/banned.txt';
file_put_contents($logfile,$remote_addr."\n",FILE_APPEND);
}
// Returns true if $ip is a valid ip address.
function is_ip($ip)
{
$count = strlen($ip);
$valid = '0123456789.:';
for($loop=0;$loop<$count;$loop++) {
if (strpos($valid,substr($ip,$loop,1))===false) {
return false;
}
}
return true;
}
// Bans an ip address.
function ban_ip($ip)
{
$cmd = 'sudo /sbin/iptables -A INPUT -s ' . $ip . ' -j DROP';
exec($cmd);
return;
}
?>
Как вы обнаруживаете эти незаконные запросы ... если вы их видите, то fail2ban может их видеть. Это всего лишь случай добавления правил в jail.conf для их обнаружения и последующего запрета этих пользователей.
Создайте копию кода apache-httpd в fail2ban и поэкспериментируйте. По сути, вам нужно определить регулярное выражение, которое будет соответствовать каждой полученной ошибке, а затем указать fail2ban, что с этим делать.