Астериск при отсутсвии должного внимания к проблеме безопасности, становится легкой добычей. Через такой сервер сливается многочасовой трафик по экзотическим направлениям.  Ниже я приведу мои личные наблюдения и рекомендации, которые позволят свести к минимуму возможность взлома вашего сервера.

Если вы используете готовые сборки – 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();

Если Вы знаете еще способы противодействия  кул-хакерам, не указанных в статье, просьба указывать в комментариях. Я буду рад. Долгой работы вашим серверам:)