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

Как защитить ejabberd от атак грубой силы?

В логах пишет:

=INFO REPORT==== 2012-03-14 17:48:54 ===
I(<0.467.0>:ejabberd_listener:281) : (#Port<0.4384>) Accepted connection {{10,254,239,2},51986} -> {{10,254,239,1},5222}

=INFO REPORT==== 2012-03-14 17:48:54 ===
I(<0.1308.0>:ejabberd_c2s:784) : ({socket_state,tls,{tlssock,#Port<0.4384>,#Port<0.4386>},<0.1307.0>}) Failed authentication for USERNAME

=INFO REPORT==== 2012-03-14 17:48:54 ===
I(<0.1308.0>:ejabberd_c2s:649) : ({socket_state,tls,{tlssock,#Port<0.4384>,#Port<0.4386>},<0.1307.0>}) Failed authentication for USERNAME

Он не пишет IP с ошибкой.
И строки «Принятое соединение» и «Неудачная аутентификация ..» могут даже не стоять рядом (как я думаю, на сильно загруженных серверах), чтобы можно было использовать fail2ban.
Что делать? А как защищены jabber-серверы (использующие ejabberd)?

Вы можете использовать iptables, чтобы ограничить количество попыток подключения в минуту, которые может предпринять IP-адрес. Поскольку в большинстве случаев это автоматические атаки, сценарий переходит к поиску другой цели после ее блокировки.

Этот пример предназначен для TCP-порта 22 (ssh) и разрешает 3 попытки подключения в минуту перед сбросом пакетов с этого IP-адреса.

iptables -A INPUT -p tcp --dport 22 --syn -m limit --limit 1/m --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 --syn -j DROP

fail2ban предоставит полезный дополнительный логический уровень поверх iptables. Запрос на сайте эджабберда предложил возможный подход к использованию fail2ban, используя log_modsession. Он включен в ejabberd-модули.

Чтобы зарегистрировать неудачные попытки аутентификации, ядро ​​ejabberd должно быть исправлено. К счастью, log_modsession поставляется с этим патчем, поэтому вам просто нужно применить его и перекомпилировать ejabberd.

Другой способ - использовать тот же подход, что и fail2ban, поскольку они используют библиотеку монитора изменения файлов (fam), я думаю, мы можем создать настраиваемый демон, который будет отслеживать файл журнала ejabberd и выводить его в формате, совместимом с fail2ban, и есть привязки python и perl для этого.

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

Но ИМХО я бы пошел с кастомным демоном.