Позвольте мне начать с того, что я новичок, и то, что я понял до сих пор, было только тем, что я спотыкался через это. Я погуглил, и решение, возможно, уже есть, но, вероятно, все это было просто над моей головой, поэтому ПОЖАЛУЙСТА, включите как можно больше подробностей в свое решение.
У меня есть сервер Ubuntu 10.04 с Asterisk для автоматизированной телефонной системы. Его единственная цель - входящие звонки, и он никогда не соединяется с человеком. Это система лицензирования для телефонов, поэтому они вводят информацию о своем продукте, а мы выводим код разблокировки, чтобы они могли ввести его в программу. Когда вызов получен, он выполняет сценарий Perl с AGI, сценарий представляет собой серию запросов, за которыми следует вывод кода разблокировки.
Все это отлично работает. Однако иногда казалось, что он перестает работать. Я просмотрел журналы Asterisk и нашел ТОННУ таких записей:
[May 22 10:51:27] NOTICE[10663] chan_sip.c: Registration from '"guest12345"<sip:guest12345@xx.xx.xx.xx>' failed for 'yy.yy.yy.yy' - No matching peer found
Очевидно, это попытки вторжения. xx.xx.xx.xx - это IP-адрес моего сервера, а yy.yy.yy.yy - предположительно IP-адрес злоумышленника.
Я немного исследовал Google и нашел решение, настроив Fail2Ban, который, похоже, работает. Сегодня утром он заблокировал два IP-адреса после 5 неудачных попыток вторжения.
Я почти уверен, что никто не сможет войти всего за 5 попыток, но это все еще кажется менее безопасным, чем хотелось бы.
Насколько я понимаю, служба Asterisk, работающая на моем сервере, время от времени выходит из строя и регистрируется у моего VoIP-провайдера, чтобы сообщить ему, что он все еще подключен и готов принимать звонки. Насколько мне известно, это единственная необходимая «регистрация», так что есть ли способ заблокировать все попытки регистрации извне?
Возможно, я ошибаюсь в этом, но мне кажется, что они пытаются зарегистрироваться на моем сервере, как если бы мой сервер был провайдером VoIP. Возможно, именно так у вас настоящий телефон для подключения к серверу Asterisk? Поскольку на моем конце нет реальных телефонов (только входящие вызовы, никогда не переданные человеку), могу ли я полностью отключить эту часть?
registerattempts=0 ; Number of registration attempts before we give up
; 0 = continue forever, hammering the other server
; until it accepts the registration
; Default is 0 tries, continue forever
register => 1111111:password:1111111@sip.inphonex.com:5060/700
[inphonex]
type=peer
username=1111111
fromuser=1111111
secret=password ; password used to login their website (same as in register =>)
host=sip.inphonex.com
fromdomain=sip.inphonex.com
nat=yes ; my asterisk is behind nat
canreinvite=yes
qualify=yes
context=inbound-inphonex; context to be used in extensions.conf for inbound calls from inphonex
disallow=all
allow=ulaw
allow=alaw
allow=gsm
insecure=port,invite
Разрешаете ли вы анонимные sip-звонки или вы регистрируетесь на сервере, который передает пользователя, ищущему свой код разблокировки?
Если ваш сервер asterisk регистрируется в службе SIP, вы можете изолировать свои порты SIP, чтобы разрешать только входящие соединения из вашего реестра SIP, пока они остаются посередине. В ответ на вашу озабоченность по поводу того, чтобы система оставалась работоспособным веб-сервером, вы все равно можете оставить порт 80 открытым для всех входящих подключений.
Если вы разрешаете входящие анонимные sip-соединения, вы находитесь в более трудном положении. Очевидно, вы не можете ограничить SIP-соединения по IP. Убедитесь, что у всех ваших регистраций есть сложные пароли, и создайте путь черной дыры, который сбрасывает любой вызов, не соответствующий URI вашего приложения. Fail2Ban, как будто у вас уже есть настройка, также является лучшим ответом, с которым я столкнулся, для ограничения атак.
Вы можете использовать брандмауэр iptables, чтобы блокировать ВСЕ входящие соединения, кроме SIP, с IP-адреса, используемого вашим поставщиком соединительных линий.
iptables поставляется, например, с AsteriskNow, но его также можно загрузить и установить отдельно.
Я не эксперт по iptables, поэтому не буду пытаться дать вам полную информацию о том, как его настроить, на случай, если я ошибаюсь, но есть масса информации, которая находится всего в одном клике Google, и поскольку ваши правила будут довольно простыми, это не должно быть слишком сложно настроить
если ты НЕОБХОДИМОСТЬ для разрешения SIP-соединений с произвольных внешних адресов настройка Fail2Ban, вероятно, является вашим лучшим решением в сочетании с ДЛИННЫЙ SIP Secrets (минимум 10-11 символов). Предполагая, что вы настроили все устройства, которые подключаются к вашему серверу, законным пользователям никогда не нужно будет вводить свой секрет SIP.
В противном случае, как предлагали другие, вы действительно хотите максимально заблокировать доступ к VOIP-серверу - ограничьте входящие SIP-соединения минимальным набором адресов, которые необходимо подключать, и, возможно, заставьте удаленных пользователей проходить через VPN, чтобы доступ к SIP-серверу (если это не убивает качество звука).
Замечание об общей безопасности: Asterisk довольно хорошо известен своими дырами в безопасности и скрытыми ошибками - Этот парень немного увлекся поиском новых и интересных поломок в Asterisk.
В дополнение к шагам, описанным выше для защиты Asterisk от взлома, я бы посоветовал максимально изолировать модуль VOIP (в его собственной подсети, в собственной VLAN), чтобы защитить остальную часть вашей инфраструктуры на случай, если кто-то найдет способ и пытается сделать что-нибудь гадкое.
Вы правы в том, что «именно так вы получаете реальный телефон для соединения с сервером Asterisk». Телефоны регистрируются на сервере через тот же порт, который используется для регистрации у провайдера.
Если вы используете SIP только для разговора с провайдером, просто настройте брандмауэр, чтобы разрешить SIP только от провайдера.
Fail2Ban - одно из решений, но дает злоумышленникам 5 шансов, когда они не должны получать ни одного.