(812) 448-38-99
Компания «Айти КУБ» предоставляет широкий спектр услуг по установке, интеграции и настройке IP-телефонии
Сертифицированные специалисты компании обладают многолетним
опытом, вежливы и компетентны
Несмотря на то, что Asterisk (Trixbox) - это телефонная система, он все же базируется на компьютерной платформе. Одна из проблем, с которыми мы сталкиваемся – это то, что клиенты и поставщики услуг VoIP, как правило, стыкуются через сеть Интернет; это означает, что определенные сервисы нашей системы являются открытыми для внешнего мира. В течение недели, пока писалась эта статья, вышло несколько новых скриптов, которые позволяют людям сканировать хосты в Интернет и находить системы под управлением Asterisk (Trixbox), получать список внутренних номеров и затем брутфорсить пароли. Эти инструменты позволяют хакеру подключаться к Вашему Asterisk (Trixbox) и производить мг/мн звонки. Известно множество случаев, когда компаниям выписывались счета на тысячи и даже десятки тысяч долларов. Именно по этой причине безопасность Asterisk (Trixbox) выходит на первый план. В этой статье, написанной Керри Гаризоном, мы сфокусируемся на том, как обеспечить безопасность нашего Asterisk (Trixbox)-сервера.
Начнем с настройки брандмауэра
Никогда не выставляйте Вашу Asterisk (Trixbox)-систему полностью открытой извне; обязательно удостоверьтесь, что она находится за брандмауэром. В то время как большинство людей думают, что если Asterisk (Trixbox) стоит на Linux, то это полностью безопасно, у Linux, как у любого другого ПО, есть свои слабые места, и если их не прикрыть должным образом, хакеру не составить труда скомпрометировать сервер. Есть хорошие общедоступные брандмауэры, такие как pfSense, Viata, и M0n0Wall. Любой доступ к системным службам, таким как HTTP или SSH, должен быть сделан только через VPN или использование псевдо-VPN, такого как Hamachi. Азы безопасности начинаются с того, чтобы выставить на доступ извне как можно меньше сервисов. Если у нас будут сотрудники, работающие удаленно, которые не могут использовать VPN, то мы будем вынуждены оставить SIP-порты открытыми, и следующий шаг будет в сторону обеспечение их безопасности.
Остановка ненужных служб
С тех пор Trixbox CE начал базироваться на дистрибутиве CentOS Linux, очень мало было сделано в системе для обеспечения безопасности. Эта брешь безопасности является намеренной, поскольку первый уровень защиты должен всегда быть обеспечен хорошим брандмауэром. До тех пор, пока есть люди, которые все еще настаивают на том, чтобы помещать систему в дата-центр без брандмауэра, обязательно необходимо заботиться о том, чтобы система была защищена настолько, насколько это возможно. Первый шаг - отключение любых запущенных служб, которые могут быть потенциальными слабыми местами в безопасности Asterisk (Trixbox).
Мы можем видеть список запущенных служб с помощью chkconfig.
[trixbox1.localdomain rules]# chkconfig --list
anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off
asterisk 0:off 1:off 2:off 3:off 4:off 5:off 6:off
avahi-daemon 0:off 1:off 2:off 3:off 4:off 5:off 6:off
avahi-dnsconfd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
bgpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
capi 0:off 1:off 2:off 3:off 4:off 5:off 6:off
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
dc_client 0:off 1:off 2:off 3:off 4:off 5:off 6:off
dc_server 0:off 1:off 2:off 3:off 4:off 5:off 6:off
dhcpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
dhcrelay 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ez-ipupdate 0:off 1:off 2:off 3:off 4:off 5:off 6:off
haldaemon 0:off 1:off 2:off 3:on 4:on 5:on 6:off
httpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
ip6tables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
isdn 0:off 1:off 2:off 3:off 4:off 5:off 6:off
kudzu 0:off 1:off 2:off 3:on 4:on 5:on 6:off
lm_sensors 0:off 1:off 2:on 3:on 4:on 5:on 6:off
lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off
mDNSResponder 0:off 1:off 2:off 3:on 4:on 5:on 6:off
mcstrans 0:off 1:off 2:off 3:off 4:off 5:off 6:off
mdmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mdmpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
memcached 0:off 1:off 2:on 3:on 4:on 5:on 6:off
messagebus 0:off 1:off 2:off 3:on 4:on 5:on 6:off
multipathd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
mysqld 0:off 1:off 2:off 3:on 4:on 5:on 6:off
named 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
netplugd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off
ntpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
ospf6d 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ospfd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
portmap 0:off 1:off 2:off 3:on 4:on 5:on 6:off
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off
restorecond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ripd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ripngd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rpcgssd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
rpcidmapd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
rpcsvcgssd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
snmpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
snmptrapd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
vsftpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
zaptel 0:off 1:off 2:on 3:on 4:on 5:on 6:off
zebra 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Чтобы убрать из автозапуска ненужные службы, используем команду chkconfig <имя службы> off:
chkconfig ircd off
chkconfig netfs off
chkconfig nfslock off
chkconfig openibd off
chkconfig portmap off
chkconfig restorecond off
chkconfig rpcgssd off
chkconfig rpcidmapd off
chkconfig vsftpd off
Мы можем также немедленно остановить службы без перезагрузки Asterisk (Trixbox):
service ircd stop
service netfs stop
service nfslock stop
service openibd stop
service portmap stop
service restorecond stop
service rpcgssd stop
service rpcidmapd stop
service vsftpd stop
Безопасность SSH
Вкорне неверным суждением является то, что используя подключение по SSH, мы по умолчанию полностью в безопасности. Безопасность доступа к SSH столь же важна как безопасность системы в целом. Очень часто взламываются системы только потому, что пароль на root очень прост для банального подбора. До тех пор, пока к SSH открыт доступ извне - это в определенной степени уязвимость. Наилучшим решением в таком случае будет изменение номера порта для доступа к SSH. Далее будут приведены несколько способов защиты нашего SSH-сервера.
Создайте отдельный логин для удаленного доступа по SSH
Прежде всего, мы должны создать пользователя в системе и дать ему права только на подключение по SSH. Имя пользователя должно быть таким, что только Вы его знаете и сложно угадываемым. Сейчас мы создадим пользователя trixuser и зададим ему пароль. Пароль должен содержать символы, числа и буквы (желательно верхнего и нижнего регистра). Хороший и простой инструмент для того, чтобы создать надежные пароли находится по адресу: http://www.pctools.com/guides/password/.
[trixbox1.localdomain init.d]# useradd trixuser
[trixbox1.localdomain init.d]# passwd trixuser
Теперь убедитесь, что новый пользователь может подключиться по SSH, к Trixbox-серверу. Если не получается войти, удостоверьтесь, что пароль набран правильно, или попытайтесь сбросить его и ввести заново.
Также необходимо отредактировать файл /etc/ssh/sshd_config и добавить к нему следующее:
AllowUsers trixuser
Далее запрещаем пользователю root подключаться к нашему серверу Asterisk (Trixbox) по SSH:
PermitRootLogin no
Изменяем порт SSH
Наконец, настоятельно рекомендуем, чтобы порт подключения по ssh (по умолчанию – 22), был изменен. Будьте внимательны при изменении номера порта: он не должен конфликтовать с уже открытыми в системе портами. В этом примере мы будем использовать 2222. Снова открываем /etc/ssh/sshd_config.
Удалите знак # перед изменением.
Port 2222
Далее мы должны перезапустить sshd для применения изменений, чтобы они вступили в силу. Для этого используйте следующую команду:
service sshd restart
Безопасность внутренних номеров
Каждый внутренний номер (SIP-юзер) имеет свой пароль. На практике это – очередная брешь в безопасности нашего любимого Asterisk (Trixbox). Удостоверьтесь, что Вы используете очень надежные пароли для каждого внутреннего номера. В следующем разделе мы рассмотрим ряд инструментов, которые могут Вам помочь защитить Вашу Asterisk (Trixbox)-систему от хакерских атак.
Дополнительная безопасность
Одним из самых популярных инструментов среди Asterisk (Trixbox)-пользователей является fail2ban. Имеется немало информации на asterisk-форумах о том, как настроить его. В данной статье мы собираемся обратить свой взор в сторону APF и BFD.
Следующая информация предоставлена Тимом Ярдли. Рекомендация Тима состоит в том, чтобы использовать APF и BFD для защиты Asterisk (Trixbox)-системы.
Ссылки на сайты этих программ приведены ниже:
APF: <http://rfxnetworks.com/apf.php>
BFD: <http://rfxnetworks.com/bfd.php>
APF используется для того, чтобы управлять iptables, открывать или закрывать порты. У APF есть дополнительные функции, которые заставляют его выделиться выше остальных: Reactive Address Blocking (RAB), поддержка QoS (TOS), интеграция с BFD и многое другое.
BFD расшифровывается как Brute Force Detection (обнаружение брутфорса). Он используется, чтобы контролировать любые неудавшиеся попытки входа в систему и блокировать IP-адреса. Он запускается как демон cron и отлично работает с APF.
Установка обеих программ очень проста. Вы можете загрузить их с сайтов, указанных выше, распаковать и запустить install.sh. Тим также создал скрипт инсталлятора, который устанавливает последнюю версию APF/BFD. Чтобы получить этот скрипт, Вы можете использовать wget. Зайдите под root и выполните следующие команды:
wget http://engineertim.com/install_apf_bfd.sh
chmod 755 install_apf_bfd.sh
./install_apf_bfd.sh
APF
Конфиг APF находится в /etc/apf/conf.apf
Чтобы начать редактировать файл, используйте следующую команду:
nano /etc/apf/conf.apf
Ставим the IFACE_IN иIFACE_OUT для сетевого интерфейса, смотрящего в Интернет. Для сетевого интерфейса, смотрящего в локальную сеть, ставим IFACE_TRUSTED.
Рекомендуется установить SET_TRIM=0 для интерфейса, смотрящего в Интернет.
SET_TRIM="0"
У APF есть способность поддерживать QoS. Для SIP и IAX необходимо установить следующее:
TOS_8="21,20,80,4569,5060,10000_20000"
Если бы Вы изменили порт SSH, необходимо отредактировать conf.apf файл, чтобы соответствовать этому новому порту.
HELPER_SSH_PORT="2222"
Удостоверьтесь, что заменили 2222 правильным числом порта, на котором Вы решили управлять SSH.
Фильтрация входящего трафика используется, чтобы открыть порты для доступа; у TCP и UDP есть отдельные параметры настройки. Для Asterisk (Trixbox) следующие порты должны быть открытыми; и TCP и UDP перечислены. Если Вы не используете TFTP, то не открывайте порт 69. Не забывайте изменять порт SSH. Иначе, Вы не сможете получить доступ; здесь мы используем порт 2222 из нашего последнего примера. Мы не включали порты IAX в эту установку. Есть легкий способ убедиться, что только определенные хосты могут использовать IAX, который мы откроем позже. Это удобно, если Вы используете IAX, чтобы поднять межстанционные транки, невидимые для внешнего мира.
IG_TCP_CPORTS="2222,69,80,5060,6600,10000_20000"
IG_UDP_CPORTS="69,5060,10000_20000"
Я не использую фильтрацию исходящего трафика, поэтому она не рассматривается в данной статье. Она установлено в EGF="0", отключена по умолчанию.
Чтобы увидеть список параметров командной строки, запустите apf без флагов.
[trixbox1.localdomain apf]# apf
apf(3402): {glob} status log not found, created
APF version 9.6 <
This email address is being protected from spambots. You need JavaScript enabled to view it.
>
Copyright (C) 1999-2007, R-fx Networks <
This email address is being protected from spambots. You need JavaScript enabled to view it.
>
Copyright (C) 2007, Ryan MacDonald <
This email address is being protected from spambots. You need JavaScript enabled to view it.
>
This program may be freely redistributed under the terms of the GNU GPL
usage /usr/local/sbin/apf [OPTION]
-s|--start ......................... load all firewall rules
-r|--restart ....................... stop (flush) & reload firewall rules
-f|--stop........ .................. stop (flush) all firewall rules
-l|--list .......................... list all firewall rules
-t|--status ........................ output firewall status log
-e|--refresh ....................... refresh & resolve dns names in trust
rules
-a HOST CMT|--allow HOST COMMENT ... add host (IP/FQDN) to
allow_hosts.rules and immediately load new rule into firewall
-d HOST CMT|--deny HOST COMMENT .... add host (IP/FQDN) to
deny_hosts.rules and immediately load new rule into firewall
-u|--remove HOST ................... remove host from
[glob]*_hosts.rules and immediately remove rule from firewall
-o|--ovars ......................... output all configuration options
Для старта APF мы используем следующие команды:
[trixbox1.localdomain apf]# apf -s
apf(3445): {glob} activating firewall
apf(3489): {glob} determined (IFACE_IN) eth0 has address 192.168.1.31
apf(3489): {glob} determined (IFACE_OUT) eth0 has address 192.168.1.31
apf(3489): {glob} loading preroute.rules
apf(3489): {resnet} downloading http://r-fx.ca/downloads/reserved.
networks
apf(3489): {resnet} parsing reserved.networks into
/etc/apf/internals/reserved.networks
apf(3489): {glob} loading reserved.networks
apf(3489): {glob} SET_REFRESH is set to 10 minutes
apf(3489): {glob} loading bt.rules
apf(3489): {dshield} downloading http://feeds.dshield.org/top10-2.txt
apf(3489): {dshield} parsing top10-2.txt into /etc/apf/ds_hosts.rules
apf(3489): {dshield} loading ds_hosts.rules
apf(3489): {sdrop} downloading http://www.spamhaus.org/drop/drop.lasso
apf(3489): {sdrop} parsing drop.lasso into /etc/apf/sdrop_hosts.rules
apf(3489): {sdrop} loading sdrop_hosts.rules
apf(3489): {glob} loading common drop ports
...........trimmed for this document.........
apf(3489): {glob} default (ingress) input drop
apf(3445): {glob} firewall initalized
apf(3445): {glob} !!DEVELOPMENT MODE ENABLED!! - firewall will flush
every 5 minutes.
Мы можем видеть, что APF стартанул, загрузил несколько правил с dshield.org и spamhaus.org. Теперь проведем тест захода на Asterisk (Trixbox)-сервер по SSH, чтобы убедиться, что Вы настроили все правильно. Если Вы не можете соединиться, необходимо подождать 5 минут, и затем APF снимет блокировку. Как только Вы уверены, что можете войти по SSH, мы можем изменить в conf.apf DEVEL_MODE = "1" на DEVEL_MODE = "0" и перезапустить APF. APF стартанет и не выдаст предупреждение о том, чтобы он находится в DEVELOPMETN_MODE.
APF: дополнительный тюнинг
apf -a 192.168.1.216
Это позволит системе 192.168.1.216 соединяться с любым портом на зафаерволенном сервере, таким образом, обходя правила брандмауэра. Если Вы управляете APF на обоих Asterisk (Trixbox), убедитесь, что сделали ту же самую вещь на другом хосте, использующем правильный IP-адрес.
APF также позволяет системному администратору блокировать хост или целую подсеть. Это удобно, если Вы видите, что кто-то пытается соединиться с Вашей машиной по FTP, Telnet, SSH и так далее. Чтобы заблокировать определенный хост, используйте следующее: убедитесь, что использовали IP-адрес, который Вы хотите заблокировать.
apf -d 192.168.1.216
Чтобы заблокировать полную подсеть (CIDR):
apf -d 202.86.128.0/24
APF не поддерживает QoS для UDP-пакетов. Только TCP. Есть легкий способ пофиксить это. В /etc/apf/internals есть файл functions.apf. Мы должны отредактировать этот файл вручную. Есть несколько мест, где мы должны добавить единственную строку. Ищем секцию TOS_ в functions.apf файле. Это будет похоже на это:
if [ ! "$TOS_0" == "" ]; then
for i in `echo $TOS_0 | tr ',' ' '`; do
i=`echo $i | tr '_' ':'`
$IPT -t mangle -A PREROUTING -p tcp --sport $i -j TOS --set-tos 0
done
fi
Мы должны добавить параметры настройки для UDP. Мы копируем одну строку и изменяем tcp на udp. Образец ниже.
if [ ! "$TOS_0" == "" ]; then
for i in `echo $TOS_0 | tr ',' ' '`; do
i=`echo $i | tr '_' ':'`
$IPT -t mangle -A PREROUTING -p tcp --sport $i -j TOS --set-tos 0
$IPT -t mangle -A PREROUTING -p udp --sport $i -j TOS --set-tos 0
done
fi
Эта дополнительная строка должна быть сделана для всех битов TOS, которые Вы используете.
BFD
Обнаружение брутфорса (атаки по словарю) используется, чтобы отследить несанкционированные попытки входа в систему.
Конфигурационный файл для BFD расположен в /usr/local/bfd и назван conf.bfd. Этот файл, как и для APF, содержит множество комментариев. Мы рассмотрим лишь некоторые параметры настройки.
Первая переменная конфигурации, на которую мы обратим внимание, - TRIG; это число неудавшихся попыток прежде, чем злоумышленник будет заблокирован. По умолчанию равно 15. Имейте в виду, что это число попыток не с одного аккаунта, а с одного IP-адреса. Так, если с 1 IP-адреса прихоидт 15 неудачных попыток входа, используя разные аккаунты, он все равно будет залочен.
У BFD есть хорошая фича - послать электронные письма при обнаружении брутфорса. Чтобы включить данную опцию, установите EMAIL_ALERTS в 1; не забудьте указать адрес, на который Вы хотите получать уведомления - EMAIL_ADRESS.
BFD запускается cron-ом каждые 3 минуты и находится в /etc/cron.d.
Вы можете получить список забаненных IP-адресов, используя команду:
bfd -a
Для старта BFD используйте следующую команду:
bfd -s
Резюме
В данной статье рассмотрены лишь основные принципы защиты Asterisk (Trixbox). Естественно, построение безопасных VoIP-систем этим не ограничивается.
С оригиналом статьи Вы можете ознакомиться по ссылке
http://www.packtpub.com/article/securing-your-trixbox-server