Защита asterisk от взлома
Как я уже как-то раз рассказывал, довелось мне вывести неподготовленный астериск в интернет и забыл об этом.. Буквально после несколько недель мне об этом напомнили счета от SIP-провайдера, где красовались значительные суммы. Мне опять повезло, что провайдер заблокировал аккаунт по достижении лимита кредита и мы не ушли в большой и удаленный… Хмм… Минус:) Во избежание повторения проблем, я опишу примерный перечень мероприятий, которые я с тех пор провожу над астериск накануне выводом его в интернет.
В интернете гуляет кучу историй о взломах астериска и последующей кары от оператора. Где-то лежала байка о некой маленькой компании в Австралии, которую угораздило залететь на $15000-20000. Думаю никто не хочет оказаться в подобной ситуации. Гораздо лучше, не дожидаясь беды, провести некоторый комплекс мероприятий, который сильно сократит число вариантов взлома и минимизирует риск.
Оборона динамическими правилами фаэрвола
Я уже писал про защиту программой fail2ban. Работает тоже довольно эффективно, однако существует некоторая загвоздка. Астериск не поддерживает таймаут между попытками регистрации и по-этому злодей за весьма короткий период времени (несколько секунд), пока реагирует fail2ban, может успевать провести гораздо больше попыток подбора, чем мы указываем в настройках. У меня есть примеры, когда блокировка происходила на ~95й попытке подбора, что не есть гуд.
Нестандартный порт вместо 5060
Если имеется техническая возможность – НЕПРЕМЕННО меняйте стандартный порт 5060 на любой другой. Чем он будет больше непохож на стандартный – тем лучше. Злоумышленники крайне проворно найдут ваш астериск обычным сканированием портов по диапазону адресов. Это произойдет крайне быстро – первые попытки подбора пароля у меня обнаружились уже после 3 дня после вывода астериск в интернет.
Настройка порта производится в файле sip. Conf в секции general:
Bindport=5060 => bindport=5172
После таких действий, число подборщиков уменьшится практически предварительно нуля.
Отключаем guest-звонки
Ежели у вас нет необходимости принимать звонки без регистрации, непременно выключите следующую опцию в sip.conf:
Allowguest=yes => allowguest=no; Allow or reject guest calls (default is yes)
Отключаем оповещение о неверном пароле
Практически у всех существуют аккаунты asterisk вида 100, 200, 700 и т.п. По умолчанию астериск выдает одну ошибку о неверном пароле для существующего аккаунта и другую для несуществующего аккаунта. С через спец. Софта для подбора паролей, преступник может скоро перебрать все короткие номера и выбирать пароли только к существующим аккаунтам, которые ответили “неверный пароль”. Чтобы помешать этому, меняем опцию в sip.conf:
Alwaysauthreject = no => alwaysauthreject = yes
После такой настройки, астериск будет давать согласный отбой для любых неверных авторизаций.
Используем сложные пароли для аккаунтов
Любой пароль возможно подобрать, вопрос исключительно во времени. Поскольку настройка sip-устройств производится один раз и надолго, не скупитесь на сложные пароли. Для себя я использую длинные пароли с комбинациями больших и маленьких букв + цифр такого вида:
Secret=f64GCD74ssdZ42
НЕПРЕМЕННО уберите все пароли совпадающие с логинами. Это – первые пароли, используемые для паролей.
Используем deny/permit для аккаунтов
Необходимый момент! Указываем для всех аккаунтов, которые не подразумевают подключение из интернета следующие строки:
100…
Deny=0.0.0.0/0.0.0.0
Permit=10.1.1.1/24
Permit=10.1.2.1/24
Где 10.1.1.1,10.1.2.1 – диапазоны локальных адресов, с которых будет производится подключение. Подключения с других адресов asterisk принимать не будет.
Устанавливаем лимит звонков
В случае взлома, для уменьшения затрат, рекомендую установить лимит одновременных звонков для аккаунтов в 1, чтобы злодей не мог одновременно звонить на множество направлений и, тем самым, быстрее тратить ваши средства.
100
Call-limit=1…
Не используем default-экстеншн без необходимости
Не надо оно нам:) Все, что должно быть в дефолте:
Default
Exten => _X.,1,Hangup
Не делаем одно универсальное норма для всех звонков
Скажем нет правилам вида:
Exten => _X.,1,Dial(SIP/$EXTEN@operator)
Прописываем четко все необходимые комбинации номеров, передаваемых оператору. Ежели нет необходимости пользоваться международную связь – не описывайте правила для нее вообще. Практически все случаи взломов используются для звонков заграницу.; Экстренные службы
Exten => _0X,1, Dial(SIP/$EXTEN@operator)
Exten => _0X,n, Hangup;Москва
Exten => _8495XXXXXXX,1, Dial(SIP/$EXTEN@operator)
Exten => _8495XXXXXXX,n, Hangup
Exten => _8499XXXXXXX,1, Dial(SIP/$EXTEN@operator)
Exten => _8499XXXXXXX,n, Hangup
Exten => _XXXXXXX,1, Dial(SIP/$EXTEN@operator)
Exten => _XXXXXXX,n, Hangup; Межгород Россия/Мобильные
Exten => _8XXXXXXXXXX,1, Dial(SIP/$EXTEN@operator)
Exten => _8XXXXXXXXXX,n, Hangup
На этом пожалуй закончим:)








чего уж там компания в Австралии, наш шлюз в Москве взломали на 33 000$