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

Разрешение apache на запись с помощью iptables

Уже несколько дней назад я получаю 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).