Железо
ВНИМАНИЕ!!! Карта 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 файл, в нашем случае, выглядит так (Внимание! Приведена только часть файла!):
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 (по ссылке выше указан нерабочий файл, так что копируйте мой вариант).
# $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 добавляем следующие строчки (обратите внимание на путь к логам и адрес отправителя):
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 – раскомментируем
dateformat=%F %T
Добавляем в автозагрузку fail2ban, перезагружаем сервер, и проверяем, что цепочки добавлены в iptables.
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.