0

asterisk

ASTERISK c поддержкой ODBC и защитой Fail2Ban

В данной статье я хотел бы описать процесс установки и настройки asterisk на Debian.

Asterisk будет работать с базой данных postgresql через ODBC.

Установка asterisk:
Обновим систему до актуального состояния

apt-get update && apt-get dist-upgrade

Установим все необходимые зависимости для сборки asterisk

apt-get install gcc g++ uuid-dev libsqlite3-dev libxslt1-dev libjansson-dev libxml2-dev \
libncurses5-dev unixodbc-dev libnewt-dev libssl-dev libsqlite3-dev build-essential

Скачиваем последнюю версию asterisk. На момент написания статьи это 13 версия

wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz

Распаковываем архив и переходим в папку с исходным кодом

tar -xvf asterisk-13-current.tar.gz
cd asterisk-13.6.0/

Запускаем процедуру проверки, собираем библиотеки и устанавливаем их в систему

./configure
make
make install

Установим скрипты запуска/останова

make config

Установим примеры конфигурационных файлов

make samples

Проверим что asterisk запускается через скрипты инициализации и подключимся к нему

service asterisk start
asterisk -R

P.S. Если после запуска asterisk в логах /var/log/asterisk/messages проскакивают ошибки вида

ERROR[27158] ari/config.c: No configured users for ARI
ERROR[27158] netsock2.c: getaddrinfo("debian-asterisk", "(null)", …): Name or service not known

то необходимо отключить поддержку ARI в файле /etc/asterisk/ari.conf

enabled = no ; When set to no, ARI support is disabled.

и перезапустить модуль res_ari

asterisk -rx 'module reload res_ari'

Итак, мы установили asterisk, однако необходимо сделать ряд первичных действий.

Во-первых, asterisk работает из-под пользователя root – настроим работу от непривилегированного пользователя:

Добавим системного пользователя и группу asterisk:

adduser --system --group --home /nonexistent --no-create-home asterisk

Изменим владельца и группу всех рабочих директорий asterisk

chown -R asterisk:asterisk /var/spool/asterisk/
chown -R asterisk:asterisk /var/run/asterisk/
chown -R asterisk:asterisk /var/log/asterisk/
chown -R asterisk:asterisk /var/lib/asterisk/
chown -R asterisk:asterisk /usr/lib/asterisk/

Укажем asterisk от имени какого пользователя пользователя и группы запускаться – эти параметры прописываются в файле /etc/asterisk/asterisk.conf

runuser = asterisk ; The user to run as.
rungroup = asterisk ; The group to run as.

Перезапустим asterisk

service asterisk restart

Во-вторых, конфигурация по умолчанию не предполагает никакой защиты от подключения нежелательных абонентов. В связи с этим, сделаем ряд настроек для улучшения безопасности:

По умолчанию, asterisk разрешает гостевые звонки сквозь себя без предварительной аутентификации вызываемой стороны. Гостевые вызовы запрещаются в /etc/asterisk/sip.conf одной строчкой

allowguest=no

Дополнительно изменим в /etc/asterisk/sip.conf контекст по умолчанию на default вместо public

context=default

и пропишем контекст default в /etc/asterisk/extensions.conf, добавив в него единственное правило запрета набора любых номеров. Вся работа по маршрутизации звонков будет происходить в других контекстах

[default]
exten => _X.,1,Hangup

Далее, отключим оповещения о неверном пароле – это необходимо чтобы asterisk “не засветил” валидных пользователей при попытках перебора паролей. При отключении данного оповещения ответ asterisk будет всегда однотипным независимо от того, валидный ли у нас пользователь или нет. В /etc/asterisk/sip.conf прописываем

alwaysauthreject=yes

После вышеприведенных изменений перезапустим перечитаем конфиги /etc/asterisk/sip.conf и /etc/asterisk/extensions.conf

asterisk -rx 'sip reload'

asterisk -rx 'dialplan reload'

Список вышеприведенных действий по обеспечению безопасности можно продолжить исходя из своих реалий/предпочтений, например, предоставлению каждому пиру уникального сложному паролю, использование директив permit/deny для явного указания сетей, из которых разрешено регистрироваться, использование нестандартного порта для SIP/IAX2 и прочее. От себя я лишь опишу процесс настройки fail2ban для блокирования “переборщиков”:

Сначала перенастроим логирование asterisk в соответствие с форматом ISO 8601. Для этого нам нужен файл /etc/asterisk/logger.conf

dateformat=%F %T

Включим логирование security events в отдельный файл security

security => security

Перезапустим модуль логирования

asterisk -rx "logger reload"

Установим fail2ban

apt-get install fail2ban

Создадим “кастомный” файл /etc/fail2ban/jail.local и активируем в нем правила для asterisk

[asterisk]
enabled = true
filter = asterisk
logpath = /var/log/asterisk/messages
/var/log/asterisk/security
port = 5060,5061
protocol = udp
maxretry = 3
bantime = 86400 ; 1 day
findtime = 3600 ; 1 hour
ignoreip = 127.0.0.1/8

Прикажем fail2ban перечитать конфигурацию

service fail2ban reload

В случае успеха в iptables должны появиться соответствующие правила, наподобие следующих

root@debian-asterisk:~# iptables -L -vn

Chain INPUT (policy ACCEPT 27 packets, 1844 bytes)

pkts bytes target prot opt in out source destination
0 0 fail2ban-asterisk-security udp — * * 0.0.0.0/0
0.0.0.0/0 multiport dports 5060,5061
0 0 fail2ban-asterisk udp — * * 0.0.0.0/0
0.0.0.0/0 multiport dports 5060,5061
29 1948 fail2ban-ssh tcp — * * 0.0.0.0/0 0.0.0.0/0
multiport dports 22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 18 packets, 2024 bytes)
pkts bytes target prot opt in out source destination

Chain fail2ban-asterisk (1 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all — * * 0.0.0.0/0 0.0.0.0/0

Chain fail2ban-ssh (1 references)
pkts bytes target prot opt in out source destination
29 1948 RETURN all — * * 0.0.0.0/0 0.0.0.0/0

Дополнительно настроим ротацию логов /var/log/asterisk/messages и /var/log/asterisk/security, так как они могут очень быстро наполняться.
Для этого создадим в каталоге /etc/logrotate.d/ файл asterisk со следующим содержимом

/var/log/asterisk/messages /var/log/asterisk/security {
weekly
missingok
rotate 4
compress
nocreate
postrotate
/usr/sbin/asterisk -rx 'logger reload'
endscript
}

Настройка взаимодействия asterisk с postgresql через ODBC:

Установим postgresql-server

apt-get install postgresql

Создадим пользователя asterisk посредством которого мы будем подключаться и управлять базой данных. Для этого, сначала переключимся на пользователя postgres

su - postgres

Затем запустим следующую команду для создания роли asterisk в базе данных и установки для привелегий:

postgres@debian-asterisk:~$ createuser --interactive -P asterisk

Введите пароль для новой роли:

Повторите его:

Должна ли новая роль иметь полномочия суперпользователя? (y – да/n – нет) n

Новая роль должна иметь право создавать базы данных? (y – да/n – нет) y

Новая роль должна иметь право создавать другие роли? (y – да/n – нет) n

Создадим базу astersik и назначим ей в качестве владельца роль asterisk

createdb --owner=asterisk asterisk

Проверим подключение под ролью asterisk к базе данных

psql -h 127.0.0.1 -U asterisk

Пароль пользователя asterisk:

psql (9.4.5)

SSL-соединение (протокол: TLSv1.2, шифр: ECDHE-RSA-AES256-GCM-SHA384, бит: 256, сжатие: выкл.)
Введите "help", чтобы получить справку.
asterisk=>

Если unixODBC не подтянулся по зависимостям, то установим его явно

apt-get install postgresql

Установим PostgreSQL ODBC connector

apt-get install odbc-postgresql

Настроим PostgreSQL ODBC driver, прописав в файл /etc/odbcinst.ini следующие данные

[PostgreSQL]
Description=ODBC for PostgreSQL
Driver=psqlodbca.so
Setup=libodbcpsqlS.so
FileUsage=1

Убедимся что система видит наш драйвер с помощью следующей команды. В случае успеха нам должна вернуться метка PostgreSQL

odbcinst -q -d

[PostgreSQL]

Затем настроим файл /etc/odbc.ini, который используется для создания идентификатора, на который asterisk будет ссылаться в своей конфигурации

[asterisk-connector]
Description = PostgreSQL connection to 'asterisk' database
Driver = PostgreSQL
Database = asterisk
Servername = localhost
Port = 5432
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No
ConnSettings =

Проверим наше соединение к базе, использую программу isql. Вывод echo через канал направляется в isql, которое будет подключаться используя секцию asterisk-connector, ранее настроенную в /etc/odbc.ini. Подключение будет происходить под ранее созданной ролью asterisk с указанием пароля. В случае успеха, мы получим примерно следующий вывод

echo "select 1" | isql -v asterisk-connector asterisk some_secret_password
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select 1
+------------+
| ?column? |
+------------+
| 1 |
+------------+
SQLRowCount returns 1
1 rows fetched
[PostgreSQL]

Теперь, когда мы настроили взаимодействие ODBC и postgresql, настроим asterisk к ODBC – для этого нам понадобится сконфигурировать файл /ect/asterisk/res_odbc.conf. Этот файл содержит набор параметров, которые различные модули asterisk’а используют для соединения с базой данных. Добавим в этот файл следующую секцию

[asterisk-conn]
enabled => yes
dsn => asterisk-connector
username => asterisk
password => asterisk
pooling => no
limit => 1
pre-connect => yes

Параметр dsn ссылается на соединение к базе данных, настроенное в /etc/odbc.ini. Параметр pre-connect говорит asterik’у подключиться к базе сразу же после загрузки модуля res_odbc.so.

Перезапустим модуль res_odbc

asterisk -rx 'module reload res_odbc.so'

Проверим подключение к базе дынных

asterisk -rx 'odbc show'

ODBC DSN Settings

Name: asterisk-conn
DSN: asterisk-connector
Last connection attempt: 1970-01-01 05:00:00
Pooled: No
Connected: Yes

Теперь мы можем в полный рост работать с базой данных, например, использовать Realtime.

 Взято тут

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

mikrotik
Previous Story

Заблокировать сайт в микротик

gitlab
Next Story

Создать проект/репозиторий GitLab из командной строки

Latest from Blog

Настройка роутера MikroTik с BGP для просмотра потокового видео дома

Про сервис antifilter.download Из-за большого наплыва пользователей после блокировки YouTube сервис испытывает перегрузки. Обещают починить. Изначально я пользовался именно сервисом antifilter.download, но по непонятным для меня причинам он перестал у меня работать. Я

Решаем проблему блокировок (и YouTube) за 5 минут на роутере Mikrotik через контейнеры и без VPN

как ускорить ютуб и разблокировать доступ к некоторым заблокированным ресурсам прямо на роутере Mikrotik и без VPN. В моем случае используется MikroTik hAP ax3. Стоит упомянуть, что подойдут только роутеры с архитектурой

Mikrotik — несколько ip на внешнем интерфейсе

Рассмотрим ситуацию, когда провайдер выдал нам один шнурок и несколько ip в нем (например, /29 подсеть). И за нашим роутером находится несколько разных подсетей, которые надо выпускать наружу с разными src-ip; также

Игра системный администратор

docker run -p 8080:8080 -p 3390:3389 –name play-adobe-flash-after-eol jchprj/play-adobe-flash-after-eolзайти localhost:8080, и открыть эту страницу, или https://serveradmin.ru/files/sysadmin.swf

Что делать, когда на сервере кончаются файловые дескрипторы (inode)

Нередки случаи, когда причиной проблем на сервере становится переполнение файловых дескрипторов (inode). Симптомы точно такие же, как при переполнившемся диске, только вот диск при этом может оказаться свободным. Количество inode каждой файловой системы определяется при разворачивании ОС.
Go toTop