Астериск при отсутсвии должного внимания к проблеме безопасности, становится легкой добычей. Через такой сервер сливается многочасовой трафик по экзотическим направлениям. Ниже я приведу мои личные наблюдения и рекомендации, которые позволят свести к минимуму возможность взлома вашего сервера.
Если вы используете готовые сборки — Elastix, TrixBox, PiAF и т.д. сразу же закрывайте доступ к запущенным службам: вебу (tcp:80), мускулю(tcp:3306), SIP(tcp/udp:5060), IAX2(tcp/udp:4569), AMI(tcp:5038) и меняйте стандартные пароли.
Если по каким то причинам закрыть доступ нельзя, то следующие советы помогут убереч Астериск.
- всегда используйте стойкие пароли к sip/iax2 аккаунтуам.
- добавьте в sip.conf параметр
alwaysauthreject = yes
- используйте ACL в описании пиров
deny=0.0.0.0/0.0.0.0 permit=192.168.1.0/255.255.255.0
- всегда разделяйте телефонные направления по контекстам. К примеру локальные звонки обрабатываем в одном, исходящие в другом, а входящие в третьем. Для связи между собой используйте инклуды и goto.
- Используйте Fail2Ban против перебора паролей.
- измените дефолтный контекст, куда попадают гостевые и анонимные звонки, следующим образом.
[default] exten => _X.,1,NoOp(--> call from ${CALLERID(number)} to ${EXTEN} -${SIPUSERAGENT}- -${SIPCHANINFO(recvip)}- -${SIPCALLID}- -${SIPDOMAIN}- <--) same => n,Ringing() same => n,Answer() same => n,Set(CDR(userfield)=BAD_IP_${CHANNEL(recvip)}) same => n,System(/var/lib/asterisk/agi-bin/bad_clients/bad_clinets.pl ${CHANNEL(recvip)}) same => n,Hangup
Данное правило размещайте в конце дефолтного контекста,чтобы не попали звонки с доверенных направлений. Сюда будут приходить все звонки где происходит подбор кода для набора междугородки. При входящем звонки, мы выбираем IP адрес, которого пришел звонок, заносим его в базу CDR и блокируем в Iptables.
Скрипт, который при этом вызывается имеет вид
#!/usr/bin/perl # Hello bad guys )) # Developed by Belobrov M. # use strict; use warnings; use Sys::Syslog; my $bad_ip = $ARGV[0]; system("/sbin/iptables -I INPUT 2 -s $bad_ip -j DROP"); syslog("info", " Iptables drop ip $bad_ip"); exit();
Если Вы знаете еще способы противодействия кул-хакерам, не указанных в статье, просьба указывать в комментариях. Я буду рад. Долгой работы вашим серверам:)