Защита IP-АТС Asterisk от взлома через Fail2Ban: блокировка брутфорса
Кошмар сисадмина: миллионный счет за международные звонки
Хакеры круглосуточно сканируют интернет сканерами (SIPVicious, Friendly-Scanner) в поисках серверов с открытым портом UDP 5060. Подобрав слабый пароль к одному из внутренних номеров (например, номер 101 с паролем 101 или 123456), ботнет начинает генерировать тысячи звонков в минуту на платные спутниковые направления (Куба, Сомали, Гаити), принося владельцу АТС колоссальные убытки.
Типичные признаки идущей атаки в консоли Asterisk
| Признак атаки | Запись в логе /var/log/asterisk/full | Что делает хакер |
|---|---|---|
| Массовый перебор паролей | Registration from '<sip:100@...>' failed for '198.51.100.23' - Wrong password | Подбор пароля по словарю |
| Попытка неавторизованного звонка | Call from 'friendly-scanner' to extension '9001123456' rejected because extension not found | Поиск «дыр» в открытом контексте |
Пошаговая настройка защиты Fail2Ban для Asterisk (Ubuntu/Debian)
Утилита Fail2Ban в реальном времени читает лог-файлы АТС. Как только с одного IP-адреса фиксируется 3–5 неудачных попыток ввода пароля за минуту, Fail2Ban моментально отправляет этот IP в бан системного фаервола iptables на сутки.
- Шаг 1. Установка утилиты:
sudo apt update && sudo apt install fail2ban iptables-persistent -y - Шаг 2. Создание фильтра для поиска атак Asterisk:
Создайте файл фильтра
/etc/fail2ban/filter.d/asterisk.conf:[INCLUDES] before = common.conf [Definition] failregex = ^(%(__prefix_line)s)?.*SECURITY.* SecurityEvent="InvalidAccountID".*RemoteAddress=".*?/<HOST>/[0-9]+".*$ ^(%(__prefix_line)s)?.*SECURITY.* SecurityEvent="FailedACL".*RemoteAddress=".*?/<HOST>/[0-9]+".*$ ^(%(__prefix_line)s)?.*SECURITY.* SecurityEvent="InvalidPassword".*RemoteAddress=".*?/<HOST>/[0-9]+".*$ ^(%(__prefix_line)s)?.*SECURITY.* SecurityEvent="ChallengeResponseFailed".*RemoteAddress=".*?/<HOST>/[0-9]+".*$ ignoreregex = - Шаг 3. Включение правила бана (jail.local):
Отредактируйте файл
/etc/fail2ban/jail.local:[asterisk] enabled = true port = 5060,5061 protocol = all filter = asterisk logpath = /var/log/asterisk/messages maxretry = 4 ; Блокировать после 4 неудачных попыток findtime = 600 ; В интервале 10 минут bantime = 86400 ; Бан на 24 часа (в секундах) ignoreip = 127.0.0.1/8 192.168.1.0/24 ; Ваш доверенный белый IP - Шаг 4. Перезапуск и проверка статуса бана:
sudo systemctl restart fail2ban # Проверить список заблокированных хакеров: sudo fail2ban-client status asterisk
Базовые правила безопасности: Никогда не используйте номер добавочного в качестве пароля! Устанавливайте пароли длиной не менее 12 символов (например: wK9#mX2$vL8!pQ) и обязательно закрывайте международные направления (00 / +) на стороне вашего оператора связи.
Частые вопросы (FAQ)
Как вручную разблокировать IP-адрес своего сотрудника, если он ошибся паролем?
Выполните команду: <code>sudo fail2ban-client set asterisk unbanip IP_АДРЕС_СОТРУДНИКА</code>.
Поможет ли смена стандартного SIP порта 5060 на нестандартный (например, 5160 или 49560)?
Да! Смена стандартного порта отсекает до 95% примитивных автоматических сканеров, которые опрашивают интернет только по порту 5060.
Что такое параметр alwaysauthreject в Asterisk?
Включение <code>alwaysauthreject = yes</code> заставляет Asterisk отвечать одинаковой ошибкой «401 Unauthorized» как на неверный пароль, так и на несуществующий логин, не давая хакеру просканировать список активных номеров.
Как ограничить права звонков по странам на уровне провайдера?
Зайдите в личный кабинет вашего SIP-оператора (МТТ, Ростелеком, Манго) и отключите возможность совершения международных вызовов, оставив только звонки по РФ.