- PVSM.RU - https://www.pvsm.ru -

Установка Asterisk 13 на debian 8 и минимальная защита

Установка требуемого ПО и зависимостей:

apt-get install -y build-essential linux-headers-`uname -r` openssh-server apache2 mysql-server
    mysql-client bison flex php5 php5-curl php5-cli php5-mysql php-pear php5-gd curl sox
    libncurses5-dev libssl-dev libmysqlclient-dev mpg123 libxml2-dev libnewt-dev sqlite3
    libsqlite3-dev pkg-config automake libtool autoconf git unixodbc-dev uuid uuid-dev
    libasound2-dev libogg-dev libvorbis-dev libcurl4-openssl-dev libical-dev libneon27-dev libsrtp0-dev
    libspandsp-dev sudo libmyodbc subversion vim mc autotools-dev libtool-bin python-pyrex

Не забудьте установленный вами пароль для mysql
Доставляем нужные зависимости:

pear install Console_Getopt

Устанавливаем нужные зависимости из исходников:
Компиляция iksmel (необходим для google voice, yandex speech)

cd /usr/src
 git clone https://github.com/meduketto/iksemel.git 
cd iksemel
./autogen.sh 
./configure 
make 
make install
ldconfig

Скачиваем исходники Asterisk


cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
wget -O jansson.tar.gz https://github.com/akheron/jansson/archive/v2.7.tar.gz
wget http://www.pjsip.org/release/2.4/pjproject-2.4.tar.bz2

Компиляции DAHDI (собирать если необходима работа с картами E1)

cd /usr/src
tar xvfz dahdi-linux-complete-current.tar.gz
cd dahdi-linux-complete-*
make all
make install
make config
cd /usr/src
tar xvfz libpri-current.tar.gz
cd libpri-*
make
make install

Компиляция pjproject

cd /usr/src 
tar -xjvf pjproject-2.4.tar.bz2
cd pjproject-2.4 CFLAGS='-DPJ_HAS_IPV6=1' 
./configure --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr 
make dep 
make 
make install

Компиляция jansson

cd /usr/src
tar vxfz jansson.tar.gz
cd jansson-*
autoreconf -i
./configure
make
make install

Компиляция Asterisk

cd /usr/src
tar xvfz asterisk-13-current.tar.gz
cd asterisk-*
contrib/scripts/get_mp3_source.sh
contrib/scripts/install_prereq install
./configure
make menuselect

Выбираем нужные модули.

make
make install
make config
ldconfig
update-rc.d -f asterisk remove

Установка Freepbx


useradd -m asterisk
chown asterisk. /var/run/asterisk
chown -R asterisk. /etc/asterisk
chown -R asterisk. /var/{lib,log,spool}/asterisk
chown -R asterisk. /usr/lib/asterisk
rm -rf /var/www/html

Настройка Apache



sed -i 's/(^upload_max_filesize = ).*/120M/' /etc/php5/apache2/php.ini 
cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig 
sed -i 's/^(User|Group).*/1 asterisk/' /etc/apache2/apache2.conf 
sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf 
a2enmod rewrite.load
service apache2 restart

Configure ODBC

cat >> /etc/odbcinst.ini 
<< EOF
[MySQL] Description = ODBC for MySQL Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so 
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so 
FileUsage = 1 
EOF

 cat >> /etc/odbc.ini
 << EOF
[MySQL-asteriskcdrdb] 
Description=MySQL connection to 'asteriskcdrdb'
database driver=MySQL 
server=localhost
database=asteriskcdrdb
Port=3306
Socket=/var/run/mysqld/mysqld.sock option=3 

EOF 
cd /usr/src
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-13.0-latest.tgz
tar vxfz freepbx-13.0-latest.tgz
cd freepbx
./start_asterisk start 
./install

Настройка fail2ban


apt install fail2ban

Добавить в файл /etc/fail2ban/filter.d/asterisk.conf строку

 ^(%(__prefix_line)s|[]s*)%(log_prefix)s Request from '.*' failed for '<HOST>(:[0-9]{1,5})?' (.*) - (No matching endpoint found)$

Добавить в файл /etc/fail2ban/jail.conf строки


[asterisk]
 enabled = true
 filter = asterisk
 action = iptables-multiport[name=asterisk-tcp, port="5060,5160", protocol=tcp] iptables-multiport[name=asterisk-udp, port="5060,5160", protocol=udp] sendmail-whois[name=Asterisk, dest=root@localhost, sender=fail2ban@localhost]
 logpath = /var/log/asterisk/messages
 maxretry = 3
 bantime = 259200

Добавить в файл /etc/asterisk/logger_logfiles_custom.conf следующие строки:


messages => notice,warning,error

выполнить команду:

asterisk -rx "logger rotate" /etc/init.d/fail2ban restart

Проверяем, что все правило исполнились

fail2ban-client status asterisk

будет примерно так:

rtp-proxy# fail2ban-client
 status asterisk Status for the jail: asterisk |- filter | |- File list: /var/log/asterisk/messages | |- Currently failed: 0 | `- Total failed: 0 `- action |- Currently banned: 0 | `- IP list: `- Total banned: 0

Проверка fail2ban (ВАЖНО МОЖЕТЕ ЗАБЛОКИРОВАТЬ СЕБЯ):

apt install sipsak 
sipsak -U -s sip:s@ip_sip_server:5060 or sipsak -U -s sip:s@ip_sip_server:5160

в ответ получите:


rtp-proxy# sipsak -U -s sip:s@voip.planeta.tc:5060
warning: ignoring -i option when in usrloc mode received: SIP/2.0 403 Forbidden (Bad auth) Via: SIP/2.0/UDP 127.0.0.1:40283;branch=z9hG4bK.27316dcd;alias;received=172.16.175.2;rport=40283 From: sip:s@voip.planeta.tc:5060;tag=4e5661 To: sip:s@voip.planeta.tc:5060;tag=as7c5607f6 Call-ID: 5133921@127.0.0.1 CSeq: 2 REGISTER Server: ITMH Softswitch Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH Supported: replaces, timer Content-Length: 0 error: didn't received '200 OK' on register (see above). aborting

Дополнительная защита Astreisk. (Защита от «горе» хакеров )
Блокировка по названию сканера:


iptables -I INPUT -p udp -m multiport --dport 5060,5160 -m string --string "friendly-scanner" --algo bm -j DROP
iptables -I INPUT -p udp -m multiport --dport 5060,5160 -m string --string "sip-scan" --algo bm -j DROP
iptables -I INPUT -p udp -m multiport --dport 5060,5160 -m string --string "sundayddr" --algo bm -j DROP
iptables -I INPUT -p udp -m multiport --dport 5060,5160 -m string --string "iWar" --algo bm -j DROP
iptables -I INPUT -p udp -m multiport --dport 5060,5160 -m string --string "sipsak" --algo bm -j DROP
iptables -I INPUT -p udp -m multiport --dport 5060,5160 -m string --string "sipvicious" --algo bm -j DROP

Правило iptables которое банит ip-адресс, если с него пришло более 10 пакетов в 1 секунду

iptables -N BLACKLIST
iptables -A BLACKLIST -m recent --set --name blacklist
iptables -A BLACKLIST -j DROP
iptables -N SIP
iptables -A SIP -m recent --rcheck --name blacklist --seconds 3600 --hitcount 1 -j DROP
iptables -A SIP -m recent --set --name sip iptables -A SIP -m recent --update --seconds 1 --hitcount 10 --name sip -m limit --limit 10 -j LOG --log-prefix=SIP_BRUTEFORCE_
iptables -A SIP -m recent --update --seconds 1 --hitcount 10 --name sip -j BLACKLIST
iptables -A SIP -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp --dport 5060 -j SIP

режем весь ipv6 трафик, если он НАМ не нужен.


ip6tables -P INPUT DROP

Общие правила защиты:

Защита динамическими правилами фаэрвола

Fail2Ban рааботает довольно эффективно, однако существует проблема. Asterisk не поддерживает таймаут между попытками регистрации и по-этому злоумышленник за очень короткий период времени (несколько секунд), пока реагирует fail2ban, может успеть провести гораздо больше попыток подбора, чем мы указываем в настройках.
Отключаем guest-звонки

Если у вас нет необходимости принимать звонки без регистрации, обязательно выключите следующую опцию в sip.conf:

allowguest=yes => allowguest=no; Allow or reject guest calls (default is yes)

Отключаем оповещение о неверном пароле

Практически у всех существуют аккаунты asterisk вида 100, 200, 700 и т.п. По умолчанию астериск выдает одну ошибку о неверном пароле для существующего аккаунта и другую для несуществующего аккаунта. С помощью спец. софта для подбора паролей, злоумышленник может быстро перебрать все короткие номера и подбирать пароли только к существующим аккаунтам, которые ответили «неверный пароль». Чтобы препятствовать этому, меняем опцию в sip.conf:

alwaysauthreject = no => alwaysauthreject = yes

После такой настройки, астериск будет давать одинаковый отбой для любых неверных авторизаций.

Используем сложные пароли для аккаунтов

Любой пароль можно подобрать, вопрос только во времени. Поскольку настройка sip-устройств производится один раз и надолго, не скупитесь на сложные пароли. Для себя я использую длинные пароли с комбинациями больших и маленьких букв + цифр такого вида:

secret=f64GCD74ssdZ42

ОБЯЗАТЕЛЬНО уберите все пароли совпадающие с логинами. Это – первые пароли, используемые для паролей.

Используем deny/permit для аккаунтов

Обязательный момент! Указываем для всех аккаунтов, которые не подразумевают подключение из интернета следующие строки:

[100]

deny=0.0.0.0/0.0.0.0
permit=10.1.1.1/24
permit=10.1.2.1/24

Где 10.1.1.1,10.1.2.1 – диапазоны локальных адресов, с которых будет производится подключение. Подключения с других адресов asterisk принимать не будет.

Устанавливаем лимит звонков

В случае взлома, для уменьшения затрат, рекомендую установить лимит одновременных звонков для аккаунтов в 1, чтобы злоумышленник не мог одновременно звонить на много направлений и, тем самым, быстрее расходовать ваши деньги.

[100]
call-limit=1

Не делаем одно универсальное правило для всех звонков

Скажем нет правилам вида:

exten => _X.,1,Dial(SIP/${EXTEN}@operator)

Прописываем четко все необходимые комбинации номеров, передаваемых оператору. Если нет необходимости использовать международную связь – не описывайте правила для нее вообще. Практически все случаи взломов используются для звонков заграницу.

;Экстренные службы
exten => _0X,1, Dial(SIP/${EXTEN}@operator)
exten => _0X,n, Hangup
;Межгород Россия/Мобильные
exten => _8XXXXXXXXXX,1, Dial(SIP/${EXTEN}@operator)
exten => _8XXXXXXXXXX,n, Hangup

Автор: Возле ректора

Источник [1]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/asterisk/260696

Ссылки в тексте:

[1] Источник: http://habrahabr.ru/sandbox/110146/