Автор Тема: mod_evasive не видит DOSSystemCommand  (Прочитано 2311 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн wegas9393

  • Пользователь
  • *
  • Сообщений: 11
mod_evasive не видит DOSSystemCommand
« : 21 Января 2015, 07:19:36 »
OC:Debian GNU/Linux 7.8
Apache/2.2.22

Поставил mod_evasive
Ставил так:
apt-get install libapache2-mod-evasiveВстал отлично
В файле mod-evasive.load [/etc/nginx/sites-available]
Прописал конфиги

LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so

DOSHashTableSize 4096
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 300
DOSSystemCommand "sudo /usr/local/bin/ddos_system.sh %s"
DOSLogDir           "/tmp"

Так вот всё работает отлично,кроме команды
DOSSystemCommand,пробивал по разному
DOSSystemCommand “sudo /sbin/iptables -A INPUT -s %s -j DROP” и так
DOSSystemCommand "/bin/echo hi >> /tmp/out.txt" файл не создаёт

Во время проверки всё срабатывает идеально и блокирует на время что в конфиге DOSBlockingPeriod 300 (Вместо сайта показывает 403 Forbidden)
Ну а вот команду выполнять не в какую не хочет,в чом может быть проблема?
Либо может есть у кого скрипт который будет по крону работать и по логам заносить в бан iptables
 

Оффлайн endru

Re: mod_evasive не видит DOSSystemCommand
« Ответ #1 : 21 Января 2015, 07:36:37 »
Apache/2.2.22
....
Поставил mod_evasive
В файле mod-evasive.load [/etc/nginx/sites-available]
ничего не напутал?

я бы не рекомендовал блокировать пользователей по IP - с учетом что многие пользователи сидят за серыми IP адресами.

если уж так нужна блокировка, посмотри fail2ban, возможно он тебе поможет.

Оффлайн wegas9393

  • Пользователь
  • *
  • Сообщений: 11
Re: mod_evasive не видит DOSSystemCommand
« Ответ #2 : 21 Января 2015, 08:12:54 »
Apache/2.2.22
....
Поставил mod_evasive
В файле mod-evasive.load [/etc/nginx/sites-available]
ничего не напутал?

я бы не рекомендовал блокировать пользователей по IP - с учетом что многие пользователи сидят за серыми IP адресами.

если уж так нужна блокировка, посмотри fail2ban, возможно он тебе поможет.
Если создать свой конфиг он не читает из него

Вот пример создавал
nano /etc/apache2/mods-available/mod-evasive.conf
Содержимое
<IfModule mod_evasive20.c>
#Размер таблицы адресов
DOSHashTableSize 4096
#Количество одновременно открытых одинаковых страниц сайта для каждого хоста в интервал времени
DOSPageCount 5
#Количество открытых страниц сайта для каждого хоста в интервал времени
DOSSiteCount 50
#Интервал времени для DOSPageCount в секундах
DOSPageInterval 1
#Интервал времени для DOSSiteCount в секундах
DOSSiteInterval 1
#Период блокировки хоста в секундах
DOSBlockingPeriod 10
#Файл логов
DOSLogDir /var/log/mod_evasive.log
#Email для уведомлений о блокировке
DOSEmailNotify test@example.com
#Список адресов для которых не будут работать ограничения
DOSWhitelist 127.0.0.1
DOSWhitelist 192.168.1.1
</IfModule>
От туда не хочет читать,порыскал в интернете пишут что можно прописать и в mod-evasive.load

Либо может кто сможет написать простенький скрипт
Spoiler: ShowHide
Функционал:
Берёт ипы из логов,вид лога dos-53.146.233.323
iptables даёт бан на 10 минут
По окончанию как возьмёт все ипы и забанит чистит папку с логами,так как логи не удаляются
Ну и конечно скрипт будет работать по крону каждую минуту


Основа скрипта,нужно только добавить что бы ипы брал и в конец очистка логов
Spoiler: ShowHide
#!/bin/bash
#set -x
[ -z $1 ] && (echo "Usage: $0 <sourceip>"; exit 1)
[ -x /usr/bin/at ] || (echo "Please, install 'at'"; exit 1)

#############
## OPTIONS
#

SOURCEIP="$1"
HOSTNAME=$(/bin/hostname -f)
BODYMAIL="/tmp/bodymailddos"
MODEVASIVE_DOSLogDir="/tmp"

FROM="Anti DDOS System <mail@mail.ru>"

# Multiple accounts separated by commas
TO="mail@mail.ru"

# Time-units can be minutes, hours, days, or weeks
BANNEDTIME="10 minute"

#
##
############

# Custom mail message
{
echo "Massive connections has been detected from this source IP: $SOURCEIP

The system has blocked the IP in the firewall for $BANNEDTIME. If the problem persist you should block that IP permanently.

- Anti DDOS System -"
} > $BODYMAIL

/sbin/iptables -I INPUT -s $SOURCEIP -j DROP
echo "/sbin/iptables -D INPUT -s $SOURCEIP -j DROP" | at now + $BANNEDTIME
cat $BODYMAIL | /usr/bin/mail -r "$FROM" -s "DDOS Attack Detected - $HOSTNAME" $TO
rm -f "$MODEVASIVE_DOSLogDir/dos-$SOURCEIP"
« Последнее редактирование: 21 Января 2015, 08:15:17 от wegas9393 »
 

Оффлайн endru

Re: mod_evasive не видит DOSSystemCommand
« Ответ #3 : 21 Января 2015, 09:40:44 »
Либо может кто сможет написать простенький скрипт

сроку в моём сообщении упустил?
подними fail2ban, напиши регулярное выражение и не парься с кроном.

Оффлайн wegas9393

  • Пользователь
  • *
  • Сообщений: 11
Re: mod_evasive не видит DOSSystemCommand
« Ответ #4 : 21 Января 2015, 20:58:13 »
Либо может кто сможет написать простенький скрипт

сроку в моём сообщении упустил?
подними fail2ban, напиши регулярное выражение и не парься с кроном.

Хорошо,попробую изучить fail2ban,просто не когда с ним не сталкивался

Сообщение объединено: 22 Января 2015, 00:41:34
Поставил fail2ban ну так толком и не разобрался,перечитал кучу манулов ну так и не вышло сделать что бы IP заносились в бан
Может кто помочь с mod_evasive либо помочь с fail2ban?
« Последнее редактирование: 22 Января 2015, 00:41:34 от wegas9393 »
 

Оффлайн ihammers

Re: mod_evasive не видит DOSSystemCommand
« Ответ #5 : 22 Января 2015, 05:40:08 »
В настройках fail2ban, нужно сказать, чтобы он проверял логи apache2. В /etc/fail2ban/jail.conf правте пункт <<HTTP servers>>, проверяйте путь до логов и ставьте true вместо false в параметре enabled. Также смотрите на параметр maxretry, который может потребуется понизить.

Насчёт mod_evasive, то тут проблема другая, apache2 запущен от пользователя www-data, а вызов iptables нужно от root. Есть костыль, но я бы его не использовал, а попробовал настроить без вызова DOSSystemCommand.
Ссылки по mod_evasive: 1, 2.

Может потребуется проверить настройку (mod_evasive), через различные скрипты, в ссылках выше используется perl. Ниже представлен скрипт на python с GET запросом (GET можно заменить на POST).
Код: (python) [Выделить]
import http.client
import urllib.parse

params = urllib.parse.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
headers = {"Content-type": "application/x-www-form-urlencoded",
            "Accept": "text/plain"}

for i in range(100):
    conn = http.client.HTTPConnection("URL")
    conn.request("GET", "", params, headers)
    response = conn.getresponse()
    print(response.status, response.reason, i)
    conn.close()

conn.close()
Debian GNU/Linux Stretch, kernel 4.9.0-5-amd64,
LXQt/KDE/OpenBox AMD Phenon X4 / 16Gb RAM / ATI HD7750 Silent
_______________________________
Debian GNU/Linux Stretch, kernel 4.9.0-5-amd64, LXQt/KDE/OpenBox
Acer Aspire One 722 AMD C60 / 4Gb RAM / ATI HD6290
 
Пользователи, которые поблагодарили этот пост: wegas9393

Оффлайн wegas9393

  • Пользователь
  • *
  • Сообщений: 11
Re: mod_evasive не видит DOSSystemCommand
« Ответ #6 : 22 Января 2015, 08:19:23 »
В настройках fail2ban, нужно сказать, чтобы он проверял логи apache2. В /etc/fail2ban/jail.conf правте пункт <<HTTP servers>>, проверяйте путь до логов и ставьте true вместо false в параметре enabled. Также смотрите на параметр maxretry, который может потребуется понизить.

Насчёт mod_evasive, то тут проблема другая, apache2 запущен от пользователя www-data, а вызов iptables нужно от root. Есть костыль, но я бы его не использовал, а попробовал настроить без вызова DOSSystemCommand.
Ссылки по mod_evasive: 1, 2.

Может потребуется проверить настройку (mod_evasive), через различные скрипты, в ссылках выше используется perl. Ниже представлен скрипт на python с GET запросом (GET можно заменить на POST).
Код: (python) [Выделить]
import http.client
import urllib.parse

params = urllib.parse.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
headers = {"Content-type": "application/x-www-form-urlencoded",
            "Accept": "text/plain"}

for i in range(100):
    conn = http.client.HTTPConnection("URL")
    conn.request("GET", "", params, headers)
    response = conn.getresponse()
    print(response.status, response.reason, i)
    conn.close()

conn.close()


С fail2ban решил не связываться
На счёт mod_evasive пробивал уже всё,включая то что указано по ссылкам что вы дали
Вся проблема в том что сама команда DOSSystemCommand не работает а причина так и не ясна
 

Оффлайн ihammers

Re: mod_evasive не видит DOSSystemCommand
« Ответ #7 : 22 Января 2015, 16:53:28 »
В студию:
/etc/sudoers
Debian GNU/Linux Stretch, kernel 4.9.0-5-amd64,
LXQt/KDE/OpenBox AMD Phenon X4 / 16Gb RAM / ATI HD7750 Silent
_______________________________
Debian GNU/Linux Stretch, kernel 4.9.0-5-amd64, LXQt/KDE/OpenBox
Acer Aspire One 722 AMD C60 / 4Gb RAM / ATI HD6290
 

Оффлайн wegas9393

  • Пользователь
  • *
  • Сообщений: 11
Re: mod_evasive не видит DOSSystemCommand
« Ответ #8 : 23 Января 2015, 00:06:47 »
В студию:
/etc/sudoers

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#i1cludedir /etc/sudoers.1
www-data ALL=NOPASSWD: /sbin/iptables *, /usr/bin/at *
www-data ALL=(ALL) NOPASSWD: /sbin/iptables -A INPUT -p tcp --dport 80 -s [0-9.]* -j DROP
 

Оффлайн ihammers

Re: mod_evasive не видит DOSSystemCommand
« Ответ #9 : 23 Января 2015, 19:55:22 »
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
...
www-data ALL=NOPASSWD: /sbin/iptables *, /usr/bin/at *
www-data ALL=(ALL) NOPASSWD: /sbin/iptables -A INPUT -p tcp --dport 80 -s [0-9.]* -j DROP
На выходных постараюсь на виртуалке проверить и написать мини инструкцию.

...Вот к чему пришел... В общем пока в apache2, которая в Debian GNU/Linux, команда DOSSystemcommand неработает. Данная ошибка существует с 2010 года для версий 1.10.1-1/3, bugs.debian.org.

Вывод: либо использовать собранную версию модуля, либо fail2ban, к которому потребуется написать свой фильтр, который будет брать данные от mod_evasive, или из другого места.

Дополнительная информация, мне посоветовали посмотреть в сторону ipset, вместо использования iptables, строк для блокировки. По некоторым иследованиям эта команда работает в 11 раз быстрее: 1, 2
« Последнее редактирование: 25 Января 2015, 17:58:40 от ihammers »
Debian GNU/Linux Stretch, kernel 4.9.0-5-amd64,
LXQt/KDE/OpenBox AMD Phenon X4 / 16Gb RAM / ATI HD7750 Silent
_______________________________
Debian GNU/Linux Stretch, kernel 4.9.0-5-amd64, LXQt/KDE/OpenBox
Acer Aspire One 722 AMD C60 / 4Gb RAM / ATI HD6290
 

Теги: