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

Блокировать IP-адреса, которые пытаются использовать распространенные уязвимости веб-приложений

Есть ли приложение, которое просматривает журналы 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, что с этим делать.