Tamkovich.com: Телеком/VoIP блог
Современные технологии: Asterisk, SIP, Kamailio, Linux, Cisco, Linksys
Asterisk: SIP и безопасность
17 апреля, 2009 by Сергей Тамкович
Asterisk, ITSP, Безопасность CDR, SIPВ начале года проскочило несколько новостей о хакерской активности в области IP-телефонии. Деятельность хакеров, как правило, сводится к поиску публично доступных шлюзов/прокси серверов и подбору паролей.
Лёгкость в установке и настройке Asterisk-a, привлекла большое количество низко квалифицированных IT-шников в сегмент IP-телефонии. Этим объясняются простые пароли для SIP логинов (или пароли, совпадающие с логином) и, соответственно, простота их подбора.
Наиболее заметными событиями в информационном поле стали: Публикация на сайте news.com.au о том, как маленькая Австралийская компания получила счёт на 120000$ после того как её корпоративную систему IP телефонии взломали и слили 11000 международных звонков за 46 часов и длиннющий тред в списке рассылки Asterisk-biz, начавшийся в начале февраля и закончившийся лишь к концу марта. Убыток во втором случае не столь впечатляющ, всего лишь 2000$. Однако последующее обсуждение имеет большую ценность.
Многие участники рассылки, используют программу fail2ban, которая умеет парсить лог-файлы различного формата и добавлять засветившиеся там IP адреса в iptables для блокирования. Подробную инструкцию как настроить Asterisk и fail2ban на совместную работу, можно прочитать здесь. Данная схема замечательна, заслуживают самого пристального внимания и оперативного внедрения. Однако я бы хотел обратить внимание на некоторые моменты:
Не доверяйте автоматике на 100%
Автоматической системе на основе fail2ban нельзя доверять на 100%. Дело в том, что использую SIP в Asterisk, мы используем протокол UDP. Реальность такова, что UDP пакеты с поддельным IP адресом отправителя без каких либо проблем проходят несколько автономных систем. Таким образом, автоматическая система на основе fail2ban может быть использована против Вас для отказа в обслуживании Ваших клиентов.
Автоматическую систему на основе fail2ban следует дополнить списком «белых» IP, которые будут игнорироваться при создании блокирующих правил iptables. Все результаты деятельности fail2ban следует регулярно проверять.
Сохраняйте IP адреса для каждого SIP звонка внутри CDR
Стандартные CDR Asterisk-а не содержат IP адреса, с которого был совершён звонок. Это легко исправить. Если Вы используете cdr_addon_mysql для хранения CDR в базе данных, добавьте поле в таблицу cdr:
alter table cdr add column remote_signal_ip varchar(16) not null default '' |
Теперь измените свой диалплан так, что бы cdr переменная remote_signal_ip инициализировалась перед исходящим звонком. Например, вот так:
context dialout { _X. => { Noop(); Set(CDR(remote_signal_ip)=${SIPCHANINFO(recvip)}); Dial(SIP/myprovider/${EXTEN}); } } |
Вот и всё! Функция SIPCHANINFO(recvip) вернёт IP адрес, с которого клиент производит вызов, а по окончании вызова модуль cdr_addon_mysql сохранит все переменные, имена которых совпадают с названиями колонок в таблице cdr.
Сохранение IP адреса для каждого звонка открывает большой потенциал для изучения миграции клиентов по IP сетям, выявления приоритетных партнёров для пиринга IP трафиком, решения проблем с утечками паролей и много чего ещё.
Используйте встроенные access-листы
chan_sip и некоторые другие модули сетевых протоколов имеют поддержку списков доступа в зачаточном состоянии. С помощью директив permit и deny вы можете ограничивать возможные IP адреса для каждого SIP аккаунта. Если у вас есть офисные номера, работающие в интранете, не ленитесь, пропишите для каждого аккаунта
deny=0.0.0.0/0.0.0.0 permit=192.168.1.0/255.255.255.0 |
Возможно, это спасёт Вас от судьбы той компании из Австралии.
Подходите к вопросу творчески: комбинируйте, изобретайте!
Не стоит сидеть, сложа руки и ждать, пока появятся проблемы. Лучше потратить немного усилий на превентивные меры, что бы обезопасить себя от форс-мажора. В вопросе безопасности, надо всегда быть на шаг впереди. Анализируйте свой трафик — каждый всплеск мг/мн трафика должен быть тщательно расследован. Не работайте по шаблонам — комбинируйте и изобретайте. Например, можно написать скрипт, который раз в месяц анализирует IP адреса из вашей таблицы cdr, и автоматически генерирует списки доступа (acess-list) для тех аккаунтов, чьи IP не менялись за прошедший месяц. Будьте креативными!
- Fail2ban
- Fail2Ban (with iptables) And Asterisk
- Small business gets $120,000 phone bill after hackers attack VoIP phone
- [asterisk-biz] PBX got Hacked
Asterisk, ITSP, Безопасность CDR, SIP
Нет, ну то что лучше перебдеть чем недобдеть — это всегда справедливо было. А вообще интересно — астериск уже в продакшене можно упскать или нет.
Asterisk давно готов и используется для production.
Спасибо за очень интересную статью.
Правда, у меня так и не получилось добавить логирование IP-адресов с CDR. Поле в таблице добавил, в extensions инициализацию переменной добавил, но в таблицу IP все равно не пишется (хотя в консоли виден).
Версия астериска у меня 1.4.
Стас, Asterisk 1.4 не умеет сохранять произвольные поля в БД.
Вы можете попробовать сохранять IP адрес в поле с именем userfield.
enjoy
http://rrabochiy.livejournal.com/28150.html
sipvicious рулит:)
Вышеописанная операция с логгированием ip-адреса работает и в самой обычной версии астериска, если задействовать cdr_custom и func_cdr.
# cat /etc/Asterisk/cdr_custom.conf
[mappings]
Master.csv => «${CDR(clid)}»,»${CDR(src)}»,»${CDR(dst)}»,»${CDR(dcontext)}»,»${CDR(channel)}»,»${CDR(dstchannel)}»,»${CDR(lastapp)}»,»${CDR(lastdata)}»,»${CDR(start)}»,»${CDR(answer)}»,»${CDR(end)}»,»${CDR(duration)}»,»${CDR(billsec)}»,»${CDR(disposition)}»,»${CDR(amaflags)}»,»${CDR(accountcode)}»,»${CDR(uniqueid)}»,»${CDR(userfield)}»,»${CDR(remote_signal_ip)}»
bako, спасибо за полезное дополнение. Думаю этот совет — многим пригодится.