Pull to refresh

Comments 26

Пользуясь случаем и темой хотел бы узнать как отправить данные на сервер SIP? Пользуюсь программой Empathy в Ubuntu, оператор SIP — Мегафон (Мультифон). В стандартной Виндовской программе Мультифона есть пункт «Принимать звонки» на Телефон, Мультифон или на Телефон и Мультифон. А по умолчанию при подключении к SIP у Мегафона указана «Принимать звонки» на телефон.
Wireshark и исходники Empathy в помощь
6. Реализовывая голосовое меню (донабор добавочного номера), вы разрешаете набирать в том числе и внешние номера (номерные емкости прозваниваются на предмет возможности донабора номера)
7. Дорогие (МН) направления доступны в том числе и тем, кому они не нужны (по-умолчанию лучше их вообще отключать у провайдера связи от греха подальше)
8. Вы разрешили перевод звонка (опции t и T в Dial() ) через features.conf для удаленных абонентов (со стороны ТфОП)
9. Вы настроили ACL, но не настроили iptables
10. Вы настроили iptables, но не настроили ACL.
11. Вы настроили ACL и iptables, но на вашем сервере не стоит fail2ban с правилами для asterisk
12. Вы не используете опцию call-limit на SIP-пире или выставляете ее больше реальных возможностей устройства, которое будет на ней регистрироваться.
13. Названия SIP-пир совпадают с их номером
> 13. Названия SIP-пир совпадают с их номером

Упс. Я это делаю. Чем грозит?
Ну, во-первых, очевидно, что юзернеймы вида 101, 102, 103,… злоумышленник будет подбирать первым делом. Конечно, это несколько наивный подход, но, с учетом того, что каждая неудачная попытка играет против злоумышленника, оно того стоит.

Во-вторых, есть тонкость, связанная с тем, как asterisk авторизует пиры. Признаться, я прямо сейчас не готов привести сценарий, в котором возникают проблемы в этом случае — он достаточно экзотичный, но, тем не менее, я стараюсь избегать такого.
хм, это разве будет актуально при жестких acl и iptables и однозначной привязке номера к ip?
Ну, оно, конечно, излишне, однако в ситуации, когда за выходные через взломанный сервер может улететь трафика стоимостью, сопоставимой с годовой зарплатой его админа (случай из практики), достаточно трудно перестараться, не правда ли? :) Особенно если учесть, что никаких дополнительных телодвижений это, по сути не потребует, особенно с provisioning.

Ну и потом, никогда нельзя застраховаться от случаем, когда acl прописать забыли или ошиблись, iptables непостижимым образом оказались остановлены и т.д. VoIP в публичном интернете это реально война и спасает только глубокое эшелонирование обороны :)
ну с последним полностью согласен, так что делюсь:
acl и iptables генерируется автоматом. есть конечно ext вписанные вручную, но ручная правка конфигов при регулярной работе — удаление и добавление пользователя, изменение его параметров полностью исключена
в zabbix на iptables спец правило ( в агенте пинг на второй адрес zabbix-а и запрет пинга на него в iptables), так что выключение генерирует аварию

И есть ли тулза/скрипт, позволяющая находить и банить взломанных пользователей? типа
— лимитировать количество подключений с разных сетей
— лимитировать время и количество направлений
Такая политика успешно работала на порно серверах, где часто брутфорсили, а юзеры упорно ставили крайне простые пароли типа 123. А то бывало купят анлим и публикуют на форуме логин и пасс.
Насчет времени и направлений это, скорей, задача биллинга, нежели АТС. У нас, например, биллинг отслеживает резкое возрастание количества звонков на дорогие направления и высылает уведомление; плюс разумный дневной лимит по расходам на абонента, когда он заканчивается — бан и разбирательство.
7. По поводу МН направлений есть еще такая хитрая штука, что разрешив только +7 вы не ограничиваетесь Россией, внезапно Казахстан тоже +7.
Было дело злоумышленники сбрутили пароль на одного из юзеров и похоже подцепили атску к какому-то своему шлюзу где шли всякие разные звонки в Казахстан, именно это МН направление интересовало. Наверное знают распространенную дыру в конфигах такую.
Забавно было потом звонки послушать, благо call-limit не дал особо разорить контору ))
Спасибо за статью.
Подскажите, плз.
В trixbox по умолчанию анонимные звонки запрещены, тем неменее разрдажают вот такие деятели:
log
[Nov 5 16:51:04] VERBOSE[5489] logger.c: — Executing [s@from-sip-external:1] GotoIf(«SIP/XXX.XX.XX.X-0000009b», «0?from-trunk,5500972592264762,1») in new stack
[Nov 5 16:51:06] VERBOSE[5490] logger.c: — Executing [55500972592264762@from-sip-external:1] NoOp(«SIP/XXX.XX.XX.X-0000009c», «Received incoming SIP connection from unknown peer to 55500972592264762») in new stack
[Nov 5 16:51:06] VERBOSE[5490] logger.c: — Executing [55500972592264762@from-sip-external:2] Set(«SIP/XXX.XX.XX.X-0000009c», «DID=55500972592264762») in new stack
[Nov 5 16:51:06] VERBOSE[5490] logger.c: — Executing [55500972592264762@from-sip-external:3] Goto(«SIP/XXX.XX.XX.X-0000009c», «s,1») in new stack
[Nov 5 16:51:06] VERBOSE[5490] logger.c: — Executing [s@from-sip-external:1] GotoIf(«SIP/XXX.XX.XX.X-0000009c», «0?from-trunk,55500972592264762,1») in new stack
[Nov 5 16:51:07] VERBOSE[5491] logger.c: — Executing [555500972592264762@from-sip-external:1] NoOp(«SIP/XXX.XX.XX.X-0000009d», «Received incoming SIP connection from unknown peer to 555500972592264762») in new stack
[Nov 5 16:51:07] VERBOSE[5491] logger.c: — Executing [555500972592264762@from-sip-external:2] Set(«SIP/XXX.XX.XX.X-0000009d», «DID=555500972592264762») in new stack
[Nov 5 16:51:07] VERBOSE[5491] logger.c: — Executing [555500972592264762@from-sip-external:3] Goto(«SIP/XXX.XX.XX.X-0000009d», «s,1») in new stack
[Nov 5 16:51:07] VERBOSE[5491] logger.c: — Executing [s@from-sip-external:1] GotoIf(«SIP/XXX.XX.XX.X-0000009d», «0?from-trunk,555500972592264762,1») in new stack
[Nov 5 16:51:48] VERBOSE[5533] logger.c: — Executing [5555500972592264762@from-sip-external:1] NoOp(«SIP/XXX.XX.XX.X-000000ad», «Received incoming SIP connection from unknown peer to 5555500972592264762») in new stack
[Nov 5 16:51:48] VERBOSE[5533] logger.c: — Executing [5555500972592264762@from-sip-external:2] Set(«SIP/XXX.XX.XX.X-000000ad», «DID=5555500972592264762») in new stack
[Nov 5 16:51:48] VERBOSE[5533] logger.c: — Executing [5555500972592264762@from-sip-external:3] Goto(«SIP/XXX.XX.XX.X-000000ad», «s,1») in new stack
[Nov 5 16:51:48] VERBOSE[5533] logger.c: — Executing [s@from-sip-external:1] GotoIf(«SIP/XXX.XX.XX.X-000000ad», «0?from-trunk,5555500972592264762,1») in new stack
[Nov 5 16:52:07] VERBOSE[5552] logger.c: — Executing [50000972592264762@from-sip-external:1] NoOp(«SIP/XXX.XX.XX.X-000000b5», «Received incoming SIP connection from unknown peer to 50000972592264762») in new stack
[Nov 5 16:52:07] VERBOSE[5552] logger.c: — Executing [50000972592264762@from-sip-external:2] Set(«SIP/XXX.XX.XX.X-000000b5», «DID=50000972592264762») in new stack
[Nov 5 16:52:07] VERBOSE[5552] logger.c: — Executing [50000972592264762@from-sip-external:3] Goto(«SIP/XXX.XX.XX.X-000000b5», «s,1») in new stack


То есть trix рубит эти звонки, но все равно раздражает.
Какой самый простой и быстрый способ выяснить IP адрес такого дозвонщика?

Добавьте в этот контекст Noop(SIP packet from ${SIPCHANINFO(recvip)}) и в логах будете видеть IP, с которого приходят пакеты. Можно автоматизировать бан таких хостов с помощью фильтра в fail2ban.

А чтобы жизнь сахаром не казалась, можно перед Hangup() сделать Wait(60).
Кстати, для поиска уязвимостей в вашей АТС, можно воспользоваться SIPVicious
Картинку к посту надо было перевернуть :)
Ага… И палку добавить… :)
+ я бы еще если это внутренний VoIP не выпускал его наружу, как минимум — VPN или шлюзы у местных gsm, тогда останется только донабор…
А как оставить allowguest=yes чтобы могли нам звонить по внутренний_номер@ip но сбрасывать входящие типа +79112792211@ip?
Уточните, малость, свой вопрос. Вам нужно разрешить лишь локальные гостевые вызовы и блокировать возможность набирать город?
Чтобы не проходил трюк описанный в статье «любой желающий, отправивший запрос на номер_телефона@ваш_домен сможет за ваш счет позвонить по межгороду», но можно было звонить из интернета нашим внутренним абонентам по 666@8.8.4.4 например. Тоесть надо блокироваь возможность принимать звонки вида 79112792211@8.8.4.4
а то в логе появляются подозрительные строки Executing [+9810972549304353@from-sip-external:1] NoOp(«SIP/наш.ip-00000066», «Received incoming SIP connection from unknown peer to +9810972549304353») in new stack
Ну если я верно понял, то звонки приходят в контекст [from-sip-external]. Попробуйте добавить туда такого вида диалплан:

[from-sip-external]
...
exten => _6XX,1,NoOp(Local Call Accepted)
same => n,Dial(...)
...
exten => s,1,NoOp(Other Call Blocked)
same => n,Background(...)
same => n,Hangup(...)
Я гостевые звонки напрочь блокирую. А для тех кто ломится:

[default]
exten => i,1,Answer() 
	same => n,System(echo ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} -- \\"${CUT(INVALID_EXTEN,-,2)}\\" -- \\"${CALLERID(num)}\\" ==\\> \\"${CUT(INVALID_EXTEN,-,1)}\\" >> /var/log/asterisk/forbidden.log)
	same => n,Wait(1) 
	same => n,Playback(invalid) 
	same => n,Hangup()
Либо посмотрите что выводят переменные ${EXTEN} и ${CALLERID(all)} при таких «гостевых» звонках. А там можно логикой рубить по условию.
sngrep очень помогает в диагностике
getccna, а можете ответить на вопрос когда Asterisk находится за NAT, также настроен WAN Failover (https://youtu.be/MMu6BWNXgHA).
И при переключении провайдеров часть транков упорно не хочет регистрироваться через резервного провайдера?

PFSense----LAN----asterisk----IP-Phones
|
|----WAN1
|----WAN2


Ну конечно если сбросить кеш соединений на pfsense и перезагрузить asterisk — то все переключится на резевного провайдера. Но как-то хочется чтобы это автоматически переключалось.
Sign up to leave a comment.

Articles