Из gotroot.com форумы :
Вы можете использовать nginx с нашими правилами, установив обратный прокси-сервер apache с mod_security перед nginx. Это на самом деле очень легкий и что-то мы будем добавлять пост 3.0 в качестве опции для сайтов запускать альтернативные веб-серверы, такие как nginx и т. д. Как сказал Скотт, nginx не имеет модуля или возможностей WAF, поэтому вы не можете делать что-нибудь вроде modsecurity внутри nginx.
Люди просили команду nginx добавить WAF, и я знаю, что скорость света работает над полной поддержкой modsec, но пока ничего не видел для nginx. Итак, если вы используете nginx и хотите, чтобы WAF защищал его, вы перед ним нужно будет поставить WAF.
И, как я уже сказал, это отлично работает, поэтому я настоятельно рекомендую вам это сделать. У нас есть множество клиентов, использующих всевозможные не-apache веб-серверы с обратными прокси apache и mod_security перед их. Как я уже упоминал, мы добавим это в ASL post 3.0. выпуск в качестве опции для веб-серверов, отличных от Apache.
(Gotroot.com хорошо известен своим списком правил mod_security, который они предоставляют.)
Еще вы можете попробовать naxsi , который является Модуль брандмауэра веб-приложений для Nginx, хотя он все еще находится в альфа-версии. Подробнее
Как вы обнаруживаете эти незаконные запросы ... если вы их видите, то fail2ban может их видеть. Это всего лишь случай добавления правил в jail.conf для их обнаружения и последующего запрета этих пользователей.
Создайте копию кода apache-httpd в fail2ban и поиграйте с ним. По сути, вам нужно определить регулярное выражение, которое будет соответствовать каждой полученной вами ошибке, а затем указать fail2ban, что с ней делать.
Да, вы можете использовать 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
.)
Я расставил для них ловушки. Одна из распространенных атак - добавление? 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
Некоторым людям не нравится предоставлять доступ к www-данным iptables. Говорят, это угроза безопасности. Но я думаю, это нормально, потому что их только что забанили. Вот код, который я использую:
<?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;
}
?>