Установим Fail2ban.
CentOS 6 32-Bit
wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpmCentOS 6 64-Bit
rpm -ivh epel-release-6-8.noarch.rpmyum install fail2ban python iptables
wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
yum install fail2ban python iptables
CentOS 7
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-*.noarch.rpm
yum install fail2ban-firewalld fail2ban-systemd
Далее правим правила fail2ban для Asterisk:
nano /etc/fail2ban/filter.d/asterisk.conf
# Fail2Ban configuration file
#
#
# $Revision: 250 $
#
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# common.local
#before = common.conf
[Definition]
#_daemon = asterisk
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#
failregex = NOTICE.* .*: Registration from '.*' failed for ':.*' - Wrong password
NOTICE.* .*: Registration from '.*' failed for ':.*' - No matching peer found
NOTICE.* .*: Registration from '.*' failed for ':.*' - Username/auth name mismatch
NOTICE.* .*: Registration from '.*' failed for ':.*' - Device does not match ACL
NOTICE.* failed to authenticate as '.*'$
NOTICE.* .*: No registration for peer '.*' \(from \)
NOTICE.* .*: Host failed MD5 authentication for '.*' (.*)
NOTICE.* .*: Failed to authenticate user .*@.*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#ignoreregex =
Основной конфигурационный файл Fail2Ban находится /etc/fail2ban/jail.conf. В самый низ данного файла добавим следующий блок:
nano /etc/fail2ban/jail.conf
[asterisk-iptables]
enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, dest=root, sender=fail2ban@asterisk]
logpath = /var/log/asterisk/fail2ban
maxretry = 3
bantime = 3600
Описание параметров:
enabled — значение true указывает что данный jail активен, false выключает действие изолятора.
filter — имя фильтра с регулярными выражениями, по которым идёт поиск.
logpath — путь к файлу логам FreeSWITCH, который программа Fail2ban будет обрабатывать с помощью заданного ранее фильтра.
action – операция, которая должна быть выполнена, если значение счётчика стало равным значению параметра maxretry.
maxretry - количество неудачных запросов за которое банится хост.
bantime - промежуток времени по умолчанию в секундах на которое банится провинившийся хост.
Добавим в конфигурацию логирования Asterisk запись в отдельный лог-файл:
nano /etc/asterisk/logger.conf
fail2ban => notice
Применяем изменения:
asterisk -rx "logger rotate"
Теперь перезагрузим fail2ban и добавим в автозагрузку:
CentOS 6
/etc/init.d/fail2ban restart
chkconfig fail2ban on
CentOS 7
systemctl restart fail2ban
systemctl enable fail2ban.service
На этом настройка закончена, теперь fail2ban будет обнаруживать и предотвращать атаки на Asterisk.
Если вы в статье нашли ошибки или несоответствия, мы будем благодарны, если вы напишите нам о них в комментариях.