Установка Asterisk 13 из пакетов на CentOS 7 Minimal (+ настройка и защита)

Задача: сделать базовую установку Asterisk на CentOS 7 Minimal (виртуальный облачный сервер Hetzner CX11)

1. Создаем нового пользователя и ограничиваем настройки входа по SSH

Для начала устанавливаем редактор nano:

yum install nano

Установили редактор nano

Добавляем пользователя и назначаем ему новый пароль:

adduser -g users -d /home/astuser -s /bin/bash astuser
passwd astuser

Добавляем нового пользователя

Редактируем /etc/ssh/sshd_config. В целях безопасности, запрещаем логин из под root'а и разрешаем вход только нашему новому пользователю:

nano /etc/ssh/sshd_config

В конце файла добавляем:

PermitRootLogin no
AllowUsers astuser

Редактируем sshd_config

После чего перезагрузим службу SSH и заходим по SSH с новым пользователем:

systemctl restart sshd

2. Устанавливаем и настраиваем сетевой экран

По умолчанию, в Hetzner сервер предоставляется пользователю без сетевого экрана. Займемся его установкой. Нам понадобятся права суперпользователя:

su -
yum install firewalld
systemctl start firewalld
systemctl enable firewalld
systemctl status firewalld
firewall-cmd --permanent --zone=public --change-interface=eth0
firewall-cmd --zone=public --add-port=5060/udp --permanent
firewall-cmd --zone=public --add-port=5061/udp --permanent
firewall-cmd --zone=public --add-port=10000-20000/udp --permanent
firewall-cmd --zone=public --add-port=5060/tcp --permanent
firewall-cmd --zone=public --add-port=5061/tcp --permanent
systemctl restart firewalld

Мы добавили службу сетевого экрана в автозапуск. Установили зону "public" для интерфейса eth0. Последняя команда добавляет сервисы Asterisk в исключения для того, чтобы мы могли подключаться к АТС снаружи. Вывод команды "firewall-cmd --zone=public --list-all"

Вывод firewalld

 

3. Подключим репозиторий EPEL и установим libcodec2

Для установки Asterisk нам понадобится пакет "codec2", который мы можем установить из репозитория EPEL

yum install epel-release
yum install codec2

Установка Codec2

4. Установка Asterisk

Для начала нам понадобится wget

yum install wget

Установку Asterisk будем производить из пакетов по инструкции https://tucny.com/telephony/asterisk-rpms

4.1 Подключаем репозиторий

wget https://ast.tucny.com/repo/tucny-asterisk.repo
mv tucny-asterisk.repo /etc/yum.repos.d/
rpm --import https://ast.tucny.com/repo/RPM-GPG-KEY-dtucny

Отредактируем файл /etc/yum.repos.d/tucny-asterisk.repo и установим строку "enabled=0" в разделах [asterisk-common] и [asterisk-13]. В нашем случае мы устанавливаем Asterisk версии 13. При необходимости, в этом конфигурационном файле можно отметить нужную версию:

Редактируем tucny-astreisk.repo

4.2 Установка Asterisk с репозитория

yum install asterisk-core asterisk-addons-mysql asterisk-configs asterisk-odbc asterisk-sip asterisk-sounds-core-en-alaw asterisk-sounds-extra-en-alaw asterisk-sounds-core-ru-alaw asterisk-sounds-extra-ru-alaw asterisk-sounds-core-en-ulaw asterisk-sounds-extra-en-ulaw asterisk-sounds-core-ru-ulaw asterisk-sounds-extra-ru-ulaw

Установка Asterisk из пакетов

4.3 Добавляем Asterisk в автозапуск, запускаем и проверяем

systemctl enable asterisk
systemctl start asterisk
systemctl status asterisk

Статус Asterisk

asterisk -r
sip show peers

sip show peers

Astrerisk 13 установлен.

5. Настройка Asterisk

В нашей тестовой конфигурации мы создадим 5 внутренних номеров от 101 до 105. И настроим внутренние звонки между ними.

Для этого в файле /etc/asterisk/sip.conf добавляем наши внутренние номера в раздел [phones]:

allowguests=no

[phones](!)
        type=friend
        context=internal-calls
        directmedia=no
        host=dynamic
        dtfmmode=rfc2833
        disallow=all
        allow=alaw
        allow=ulaw
        nat=force_rport,comedia

[101](phones)
        secret=dVYD24M72j
[102](phones)
        secret=Dsx2S9Nxh8
[103](phones)
        secret=VUS7XvbGRm
[104](phones)
        secret=S3qyCYnL8S
[105](phones)
        secret=r4aRThWf9W

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

В файле /etc/asterisk/extensions.conf определяем контекст "internal-calls". Полное содержание файла:

[general]
static=yes
writeprotect=no
[globals]
[default]

[internal-calls]
;Звонок на внутренний номер
exten => _XXX,1,Dial(SIP/${EXTEN})

6. Проверка Asterisk

Подключим 2 номера для проверки. Для этого отлично подойдет Zoiper for Windows. Для подключения используем IP-адрес сервера, внутренний номер и пароль. После подключения с помощью команды "sip show peers" увидим пиры:

Вывод команды sip show peers

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

zoiper_incoming_call.png

Базовая настройка выполнена.

7. Защищаем сервер Asterisk с помощью Fail2Ban

Сервер Asterisk, который находится в "открытом" интернете, постоянно подвергается попыткам примитивного взлома от "ботов", которые пытаются подобрать пароль от SSH или подлючиться к АТС. Для борьбы с ними, необходимо:

  1. Использовать сложные пароли. Обязательно!
  2. Использовать Fail2Ban, который будет временно блокировать IP-адреса, с которых осуществляется попытка взлома.

7.1 Включаем security-log в Asterisk

Руководствуемся инструкцией: https://www.fail2ban.org/wiki/index.php/Asterisk

nano /etc/asterisk/logger.conf

Включим security-лог Asterisk и настроим чтобы он записывался в отдельный файл. Кроме этого, поменяем формат даты в логах. Для этого, раскоментируем в файле "/etc/asterisk/logger.conf" 2 строки:

dateformat=%F %T       ; ISO 8601 date format
security => security

Перезагрузим настройки логгера Asterisk:

asterisk -rx "logger reload" 

7.2 Установка Fail2Ban

Для установки Fail2Ban в CentOS 7 должен быть подключен репозиторий EPEL. Мы это уже сделали в предыдущих пунктах. Установим Fail2Ban и активируем в качестве службы:

yum install fail2ban-firewalld
systemctl enable fail2ban
systemctl start fail2ban

7.3 Настройка Fail2Ban

Файл настроек лежит по адресу "/etc/fail2ban/jail.conf". однако, разработчики рекомендуют использовать не его копию по адресу "/etc/fail2ban/jail.conf", которая будет иметь приоритет. Итак:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

В нашем примере на сервере используются 2 службы: SSH и Asterisk. Обе они поддерживают авторизацию и подвержены бруфорсу и требуют защиты. Найдем и отредактируем в файле "jail.local" 2 секции [sshd] и [asterisk]:

[sshd]

# Активируем более агрессивный фильтр SSHD
enabled = true
filter  = sshd-aggressive
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
action   = %(banaction_allports)s[name=%(__name__)s-tcp, port="%(port)s", protocol="tcp", chain="%(chain)s", actname=%(banaction)s-tcp]

[asterisk]

enabled  = true
port     = 5060,5061
action   = %(banaction_allports)s[name=%(__name__)s-tcp, port="%(port)s", protocol="tcp", chain="%(chain)s", actname=%(banaction)s-tcp]
           %(banaction_allports)s[name=%(__name__)s-udp, port="%(port)s", protocol="udp", chain="%(chain)s", actname=%(banaction)s-udp]
logpath  = /var/log/asterisk/security ; Путь к журналу security Asterisk
maxretry = 10 ; Допустимое число не успешных попыток
bantime  = 3600 ; Время в секундах на которое блокируется IP-адрес

В параметр ignoreip можно вписать IP-адреса, которые блокировать не требуется (свои подсети и т. д.). Добавим в файл "jail.local":

#Добавляем через пробел IP-адреса, которые блокировать не надо в любом случае (свои подсети и др.)
ignoreip = 127.0.0.1/8 1.2.3.0/24

Сохраним файл и перезапустим службу fail2ban:

systemctl restart fail2ban

7.4 Проверка Fail2Ban

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

fail2ban-client status asterisk

После некоторого времени, начинает появлятся первый "улов". На картинке снизу наблюдаем 3 заблокированных IP-адреса:

fail2ban-client status asterisk


Похожие материалы

Комментарии