Main > Linux | PHP > Защита dbmail с помощью fail2ban

Защита dbmail с помощью fail2ban

04.08.2013 0 comments » Views: 3,252

Fail2Ban и DBMail

Пару дней назад, по чистой случайности заметил на одном из серверов подозрительную активность. А именно, кто-то брутил pop3 авторизацию, атака шла с одного ip поэтому я забанил его, написал владельцу подсети и благополучно забыл об этом..

Делается это такой командой:

где, 255.255.255.255 - ip адрес атакующего.

Сегодня решил проверить как там обстоят дела.. К сожалению, атакующий не успокоился, сменил ip и продолжил свое черное дело..

В логах dbmail-а, были вот такие записи:

 

Т.к. я в первую очередь программист, то решил написать скрипт, который будет парсить лог и банить атакующих. Это сделать было просто, т.к. у всех кто пользовался почтой на этом сервере, были постоянные и известные мне ip адреса, поэтому я мог применить фильтрацию "забанить всех, кроме разрешенных".. Через пол часа был готов простенький скрипт:

Вкратце, скрипт работает так: берет из лога последние 500 строк, ищет в них ip адреса по маске, далее если ip адрес встретился больше чем 5 раз за выборку, он банится с помощью iptables.

Такой скрипт надо поставить в крон от рута на запуск раз в 15 минут, и проблема с атакующими решена. Во всяком случае, от брутфорса защита будет работать отлично.

Разумеется, сам скрипт можно быстро переписать вообще под любой анализ логов и любое действие, принцип один и тот же. Именно поэтому я его и выложил здесь.

Поигравшись чуть чуть со своим скриптом, я вспомнил, что у меня на сервере установлен fail2ban, и он уже успешно защищает ssh и ftp от всяких слоупоков. Я никогда раньше не писал фильтры для fail2ban, однако покурив ман и посмотрев заготовленные конфиги, за 5 минут написал правило для всё тех же действий - выдачу банов атакующим. Итак, первое что нужно сделать, это создать файл фильтра:

В него записываем следующее:

Тут есть всего два интересующих нас параметра:

  • failregex - регулярка, для поиска IP адресов. IP адрес заменяется на директиву <HOST>
  • ignoreregex - регулярка позволяющая исключить некоторые строки по подстроке

Если Вам понадобится что-то посложнее, посмотрите другие фильтры в папке:
/etc/fail2ban/filter.d/

Теперь можно протестировать наш фильтр на конкретном лог файле, делается это так:

Если все ок, нам покажут простыню текста, типа этого:

Когда мы убедились что регулярка работает, добавляем наш фильтр в конфиг fail2ban-а:

Нужно добавить такой текст в конец:

Параметры описывать не буду, по их названиям и так все ясно, да и гугл работает.

После этих изменений перезапускаем fail2ban:

в моем случае в логе (/var/log/fail2ban.log), сразу появилась запись:

Что говорит о том, что атакующий забанен.

Как показывает практика, любую задачу можно решать разными способами. Изобретать велосипеды, конечно, занимательно, но намного дольше чем использовать готовые инструменты.

Author: | Rating: 4/5 | Tags: ,

Leave a Reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>