Уже несколько дней назад я получаю DDOS-атаки на моем сервере. Я установил mod_evasive в apache, и он работает правильно! Он пишет журнал и отправляет электронное письмо с IP-адресами.
Но есть проблема: Apache не добавляет правило DROP в iptables (или, по крайней мере, оно не отображается)
Я использую apache в Plesk, файл конфигурации такой:
DOSHashTableSize 3097
DOSPageCount 1
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 600
DOSSystemCommand "sudo /sbin/iptables -A INPUT -s %s -j DROP"
DOSEmailNotify "xxx@xxx.com"
DOSLogDir "/var/log/evasive/"
Вот мой файл sudoers:
apache ALL=(ALL) NOPASSWD: /sbin/iptables -A INPUT -s [0-9.]* -j DROP
Но это не помогает.
Заранее спасибо.
Разрешить apache запускать iptables с правами root звучит как очень плохая идея - я полагаю, у вас есть root-доступ. Если бы это был я, я бы использовал прокси-программу (например, fail2ban), чтобы просеивать журналы и писать правила.
Я написал в Visudo вот что:
И вы проверили, что было развернуто в / etc / sudoers?
На странице руководства:
Если Cmnd имеет связанные аргументы командной строки, то аргументы в Cmnd должны точно совпадать с теми, которые указаны пользователем в командной строке (или соответствовать подстановочным знакам, если они есть).
Вы использовали регулярное выражение, а не подстановочные знаки. Пытаться:
apache ALL=(ALL) NOPASSWD: /sbin/iptables -A INPUT --dport 80 -s * -j DROP
Хотя лучше было бы обернуть функциональность в сценарий, а не напрямую вызывать iptables. (обратите внимание, я явно установил порт, чтобы вы не блокировали себя - я полагаю, у вас есть доступ по ssh).
В "visudo
", измените ALL на root и пропустите аргументы для iptables:
apache ALL=(root) NOPASSWD: /sbin/iptables
Убедитесь, что ведущий apache
имя пользователя, запускающего веб-сервер. (Проверить с ps -ef|egrep -e 'apache|http'
Тогда измените свой DOSSystemCommand
к
DOSSystemCommand "sudo -u root /sbin/iptables -A INPUT -s %s -j DROP"
Лучшее решение: создайте сценарий, принадлежащий пользователю root, который никто не может изменить, заставьте этот сценарий запускать iptables и пусть apache вызовет этот сценарий (включите этот сценарий вместо iptables в sudo).