Cервер, телефоны и инсталляция Linux 18.04.2011

Железо


ВНИМАНИЕ!!! Карта AEX440BF требует дополнительного питания через 4-х пиновый 12-ти вольтовый разъем (такими подключались IDE винчестеры), при этом у сервера такого разъема нет. Мы пробуем решить проблему, о результатах обязательно напишу здесь.

Будьте осторожны. Возможно, лучше купить другую карту.


Над выбором сервера пришлось подумать. Дело в том, что требования к железу, разумеется, сильно зависят от используемых возможностей Asterisk, а именно эти-то возможности, которые мы будем использовать, и непонятны. В любом случае, рекомендую прочитать статью на сайте voip-info.org, посвященную выбору железа сервера, хотя она и изрядно устарела.

В итоге, было выбрано:

  • Плата Digium 1TE220BF - 2 потока T1/E1 с эхоподавлением на 64 канала. Она нам понадобится для подключения к провайдеру и, возможно, для маршрутизации потока между нашей АТС, астериском и миром в переходный период. Именно поэтому плата на 2 порта.
  • Плата Digium 1AEX440BF для ip-телефонии AEX 410P с 4 модулями FXS, мы будем использовать ее для наших 4-х факсов.
  • Сервер HP Proliant DL180G6 E5620 - 1 XeonQC 2.4Ghz(12Mb), 8 Гб памяти, рейд.
  • 2 SATA винчестера на 250 Гб. По моим прикидкам, этого должно хватить с избытком.
  • Райзер-карта, чтобы воткнуть платы Digium – оказалась ненужно, т.к. в самом сервере уже стояла вместе с контроллером.

Так как поставщик немного подвел нас с платами Digium, то было решено для начала собрать сервер без них, проинсталлировать Linux и asterisk, а платы доставить потом.

внешний вид телефона
внешний вид телефона
В качестве тестовых телефонов, и как потенциальные телефоны на офис, были выбраны Atcom AT-610R. Основные критерии были: дешевизна, возможность подключения гарнитуры и возможность работы в качестве свича (т.е., в этом случае, не придется подводить по 2 провода на рабочее место).

Под телефоны на нашем DHCP сервере была сразу выделена зона 10.62.20.0/24.

DHCP файл, в нашем случае, выглядит так (Внимание! Приведена только часть файла!):

# класс, отфильтровывающий телефоны по mac адресу
class "ip_phones"
{
    match if substring(hardware,1,3) = 00:09:45;
}
shared-network rittal_office
{
    subnet 10.62.20.0 netmask 255.255.255.0 {
        option domain-name "phones.moscow.rittal.ru"; # имя домена
        option domain-name-servers 10.62.20.22; # наш DNS, с созданным доп. адресом.
        option ntp-servers 10.62.20.20; # это будет адресом сервера asterisk
        option time-servers 10.62.20.20; # это будет адресом asterisk, time-server
        option subnet-mask 255.255.255.0;
        option routers 10.62.20.1; # это наш роутер для этой подсети
        option tftp-server-name "10.62.20.20"; #адрес asterisk, понадобится при заливке прошивок.
        ddns-updates on;
        ddns-domainname "phones.moscow.rittal.ru";
    pool
        {
        range 10.62.20.30 10.62.20.240;
        allow members of "ip_phones";
        }
    }
}

Телефоны уже получили IP, правда, пока что не получили время.

Начнем установку Linux. В качестве дистрибутива выбран CentOS 5.5 x64.

Установка стандартная, описывать ее подробно нет смыла. Я выбрал минимальный набор пакетов, рассчитывая доставить остальные позднее.

Устанавливаем жесткий IP для нашего сервера (в моем случае 10.62.20.20, недолюбливаю я DHCP) – и понеслась.

После установки, сервер вешается в стойку, заходим через ssh и начинаем танцы.

Начальная настройка Linux

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

Сразу после установки отключаем selinux. Дело в том, что я не очень разобрался в его работе и немного его недолюбливаю. В Centos для этого необходимо подправить /etc/selinux/config. В нем прописываем SELINUX=disabled и перезагружаем сервер.

Следующим этапом – отключаем сервисы, которые не понадобятся – например Bluetooth и тд.

Ставим Asterisk. В моем случае – из репозитория. Как это сделать – подробно описано здесь. Я решил установить последнюю версию – 1.8 (по ссылке указано, как ставить 1.6).

Доставляем ntpd - с него будет устанавливаться время на телефонах и tftp – для обновления прошивок и конфигов. Ntpd настраиваем на синхронизацию с каким-либо тайм-сервером.

Не забудьте прописать UDP порты 123 (ntpd) и 69 (tftp) в iptables и разрешить tftp в xinetd.

Теперь пришло время установить fail2ban, чтобы отключать хосты, бомбардируюущие наш сервер. Я воспользовался репозиторием EPEL.

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

Создаем конфигурационный файл для fail2ban - /etc/fail2ban/filter.d/asterisk.conf (по ссылке выше указан нерабочий файл, так что копируйте мой вариант).

# Fail2Ban configuration file
# $Revision: 250 $
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# common.local
#before = common.conf
[Definition]
#_daemon = asterisk
# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P\S+)
# Values:  TEXT
failregex = NOTICE.* .*: Registration from '.*' failed for '<HOST>' - Wrong password
            NOTICE.* .*: Registration from '.*' failed for '<HOST>' - No matching peer found
            NOTICE.* .*: Registration from '.*' failed for '<HOST>' - Username/auth name mismatch
            NOTICE.* .*: Registration from '.*' failed for '<HOST>' - Device does not match ACL
            NOTICE.* <HOST> failed to authenticate as '.*'$
            NOTICE.* .*: No registration for peer '.*' \(from <HOST>\)
            NOTICE.* .*: Host <HOST> failed MD5 authentication for '.*' (.*)
            NOTICE.* .*: Failed to authenticate user .*@<HOST>.*
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
ignoreregex =

В /etc/fail2ban/jail.conf добавляем следующие строчки (обратите внимание на путь к логам и адрес отправителя):

[asterisk-iptables]
enabled  = true
filter   = asterisk
action   = iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, dest=root, sender=asterisk@....]
logpath  = /var/log/asterisk/messages
maxretry = 5
bantime = 259200

Так же можно добавить список безопасных ip в раздел [DEFAULT]ignoreip.

Наконец, настраиваем лог астериска /etc/asterisk/logger.conf – раскомментируем

[general]
dateformat=%F %T

Добавляем в автозагрузку fail2ban, перезагружаем сервер, и проверяем, что цепочки добавлены в iptables.

[root@asterisk fail2ban]# iptables -L -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination
   58  7635 fail2ban-ASTERISK  all  --  any    any     anywhere             anywhere

На этом настройка предварительная настройка сервера закончена, можно настроить телефоны и переходить к настройке asterisk.