Fail2Ban довольно мощная программа для блокировки попыток взлома вашего сервера. Я уже писал в одной из прошлых статей как настроить fail2ban на vps для блокировки перебора паролей по ssh, а так же в админ-панель WordPress. В этой статье добавим возможность получать уведомления в Telegram.
Конечно в стандартной комплектации уже имеются скрипты для отправки уведомлений по электронной почте, но как по мне читать такие сообщения удобнее в мессенджере.
Регистрация бота Telegram
Первым делом необходимо зарегистрировать бота, именно он и будет отправлять вам сообщения с информацией о блокировках. В интернете полно инструкций как зарегистрировать бота. Не буду детально рассматривать этот процесс ограничусь лишь краткой инструкцией:
- Найти в Telegram бота @BotFather;
- Следуя простым инструкциям этого бота создать своего бота и получить Access Token. Этот токен нам понадобится в скрипте отправки сообщений.
После того как вы создали бота необходимо получить id вашей учетной записи в Telegram. Сделать это можно например с помощью бота @userinfobot. Он покажет вам ваш id или id любой другой учетной записи.
Скрипт отправки сообщений в Telegram
Данный скрипт нужно сохранить например в /usr/local/bin и дать ему права на выполнение например так chmod 755 telegram.sh
#!/bin/bash
token='ваштокен_полученный_при_создании_бота'
chat="ваш_id"
subj="Host banned"
message=`cat`
/usr/bin/curl -s --header 'Content-Type: application/json' --request 'POST' --data "{\"chat_id\":\"${chat}\",\"text\":\"${subj}\n${message}\"}" "https://api.telegram.org/bot${token}/sendMessage"
Скрипт принимает текст сообщения со стандартного ввода и отправляет его вместе с темой Host banned указанному в скрипте id. При желании можно модифицировать скрипт добавив переменную командной строки и передавать id в переменную chat из action скрипта fail2ban. Это понадобится если вы хотите отправлять уведомления нескольким получателям.
Следующим шагом создаем action скрипт для отправки сообщений из fail2ban. В debian/ubuntu они по умолчанию находятся в /etc/fail2ban/action.d. Создайте новый файл telegram.conf примерно такого содержимого (я взял за основу один из файлов sendmail.conf):
# Fail2Ban configuration file
#
# Author: Dyachenko Konstantin
# Telegram bot messaging
#
[Definition]
# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionban = printf %%b "[Fail2Ban] : banned <ip> from `uname -n`
The IP <ip> has just been banned by Fail2Ban after <failures> attempts against <name>." | /usr/local/bin/telegram.sh fail2ban
[Init]
# Default name of the chain
#
name = default
Ну и наконец добавим action в конфигурацию jail нужного нам сервиса. Например для WordPress выглядит так:
[wordpress-hard]
enabled = true
filter = wordpress-hard
action = iptables-allports[name=wordpress]
telegram[name=Wordpress, logpath=/var/log/fail2ban.log]
logpath = /var/log/auth.log
maxretry = 3
port = http,https
bantime = 3600
После всех манипуляций не забудьте перезагрузить демона fail2ban.
Внимание! Нажимая кнопку "Отправить комментарий" вы соглашаетесь с политикой конфиденциальности сайта.