artem
01.03.2013
17484

Защита Asterisk с помощью iptables

Netfilter — штатный файрвол linux, а iptables — интструмент, используемый для его настройки. Netfilter включает в себя 4 таблицы — raw, filter, mangle и nat. Все правила, которые будут описаны в этой статье, относятся к таблице filter, т.к. решение о том, будет пакет пропущен или нет, следует принимать в ней.

 
   По умолчанию, в таблицу filter входят цепочки INPUT, FORWARD и OUTPUT. Цепочку INPUT проходят пакеты, адресованные самому хосту, FORWARD — пакеты, адресованные другому хосту, OUTPUT — пакеты, отправляемые хостом. В дополнение к основным цепочкам пользователь может создавать свои цепочки с произвольными названиями.
   Цепочки состоят из правил, в которых могут производиться проверки определенных параметров пакета (например адрес отправления, протокол, порт назначения и т.д.), если проверяемые параметры пакета удовлетворяют правилу, к пакету применяется действие, описанное в правиле (ACCEPT — пропустить, DROP — сбросить пакет, REJECT — сбросить пакет и проинформировать об этом отправителя).
   Каждый пакет проходит правила цепочки по порядку, пока не найдется правило, по которому пакет будет пропущен или сброшен. Если ни одно правило основной цепочки не подходит, то к пакету применяется политика цепочки. По умолчанию, политика всех цепочек таблицы filter равна ACCEPT, это означает, что пакеты, не подходящие ни к одному правилу, будут пропущены.

   Далее рассмотрим настройку правил iptables для хоста Asterisk на конкретном примере.
   У хоста Asterisk две сетевые карты:
eth0, IP-адрес — 192.168.1.100, подключение к локальной сети.
eth1, IP-адрес — 11.11.11.11, подключение к сети Интернет.
IP-телефоны находятся в подсетях 192.168.1.0/24 и 192.168.2.0/24, а также подключаются из удаленного офиса с IP-адреса 1.2.3.4. Администратор подключается к станции с IP-адресов 192.168.3.254 и 5.6.7.8. IP-адрес SIP-провайдера — 22.22.22.22.

Настройка файрвола:

Для начала, создадим дополнительные цепочки для различных пакетов.
В цепочку ADMIN будут направляться SSH, HTTP и HTTPS трафик.

iptables -N ADMIN
iptables -A ADMIN -s 192.168.3.254 -j ACCEPT
iptables -A ADMIN -s 5.6.7.8 -j ACCEPT

В цепочку PHONES будут направляться пакеты от IP-телефонов.

iptables -N PHONES
iptables -A PHONES -s 192.168.1.0/24 -j ACCEPT
iptables -A PHONES -s 192.168.2.0/24 -j ACCEPT
iptables -A PHONES -s 1.2.3.4 -j ACCEPT

В цепочку SIP будет направляться SIP и RTP трафик.

iptables -N SIP
iptables -A SIP -j PHONES
iptables -A SIP -s 22.22.22.22 -j ACCEPT

Теперь напишем правила для цепочки INPUT.

Данное правило разрывает TCP-соединение с отправкой RST-пакета, если первым пакетом в этом соединении был SYN-ACK. Подобное поведение файрвола не позволит злоумышленникам использовать IP-адрес хоста в атаках с использованием IP спуфинга.

iptables -A INPUT -p tcp -m state –state NEW –tcp-flags SYN,ACK SYN,ACK -j REJECT –reject-with tcp-reset

Сбрасываем первый пакет TCP-соединения, если он не является SYN-пакетом.

iptables -A INPUT -p tcp -m state –state NEW! –syn -j DROP

Принимаем пакеты в состоянии RELATED и ESTABLISHED, сбрасываем пакеты в состоянии INVALID.

iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state –state INVALID -j DROP

Принимаем весь трафик с локального интерфейса

iptables -A INPUT -i lo -j ACCEPT

Принимаем SSH, HTTP и HTTPS трафик только с IP-адресов администратора.

iptables -A INPUT -p tcp -m multiport –dport 80,443 -j ADMIN
iptables -A INPUT -p tcp –dport 22 -j ADMIN

Принимаем SIP и RTP трафик с IP-адресов провайдера и IP-телефонов.
(в нашем случае, диапазон портов для RTP трафика — 10000-20000)

iptables -A INPUT -p udp -m multiport –dport 5060,10000-20000 -j SIP

Принимаем TFTP-запросы от телефонов.
(TFTP-сервер часто используется при провижининге IP-телефонов)

iptables -A INPUT -p udp –dport 69 -j PHONES

Принимаем NTP-запросы от телефонов.
(в нашем случае IP-телефоны будут синхронизировать время со станцией)

iptables -A INPUT -p udp –dport 123 -j PHONES

Принимаем ICMP-пакеты типа 3, код 4 (необходима фрагментация, но установлен флаг DF) — это необходимо для работы механизма «Path MTU Discovery».

iptables -A INPUT -p icmp –icmp-type fragmentation-needed -j ACCEPT

Принимаем ICMP-пакеты типа 11 (TTL пакета истекло)

iptables -A INPUT -p icmp –icmp-type time-exceeded -j ACCEPT

Принимаем ICMP-пакеты типа 8 (эхо-запрос, пинг). Для предотвращения пинг флада будем пропускать 10 пакетов в секунду

iptables -A INPUT -p icmp –icmp-type echo-request -m limit –limit 10/sec -j ACCEPT

Все остальные пакеты можно сбрасывать, ставим политику цепочки INPUT в DROP

iptables -P INPUT DROP

Политику цепочки FORWARD тоже можно, на всякий случай, установить в DROP, т.к. хост не будет выступать в роли маршрутизатора.

iptables -P FORWARD DROP

Цепочку OUTPUT можно не трогать, но можно и запретить в ней отправку пакетов на определенные IP-адреса, если это требуется.

Если на хосте включен протокол IPv6, но его использование не планируется, следует запретить весь IPv6 трафик с помощью утилиты ip6tables.

ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT DROP

Ниже приведен скрипт целиком, для изменения настроек iptables можно просто вносить изменения в этот скрипт и запускать его.

IPTABLES=/sbin/iptables

IP6TABLES=/sbin/ip6tables

$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT

$IP6TABLES -P INPUT DROP
$IP6TABLES -P FORWARD DROP
$IP6TABLES -P OUTPUT DROP

$IPTABLES -F
$IPTABLES -X ADMIN 2>/dev/null
$IPTABLES -X PHONES 2>/dev/null
$IPTABLES -X SIP 2>/dev/null

$IPTABLES -N ADMIN
$IPTABLES -A ADMIN -s 192.168.3.254 -j ACCEPT
$IPTABLES -A ADMIN -s 5.6.7.8 -j ACCEPT

$IPTABLES -N PHONES
$IPTABLES -A PHONES -s 192.168.1.0/24 -j ACCEPT
$IPTABLES -A PHONES -s 192.168.2.0/24 -j ACCEPT
$IPTABLES -A PHONES -s 1.2.3.4 -j ACCEPT

$IPTABLES -N SIP
$IPTABLES -A SIP -j PHONES
$IPTABLES -A SIP -s 22.22.22.22 -j ACCEPT

$IPTABLES -A INPUT -p tcp -m state –state NEW –tcp-flags SYN,ACK SYN,ACK -j REJECT –reject-with tcp-reset
$IPTABLES -A INPUT -p tcp -m state –state NEW! –syn -j DROP
$IPTABLES -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -m state –state INVALID -j DROP
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A INPUT -p tcp -m multiport –dport 80,443 -j ADMIN
$IPTABLES -A INPUT -p tcp –dport 22 -j ADMIN
$IPTABLES -A INPUT -p udp -m multiport –dport 5060,10000-20000 -j SIP
$IPTABLES -A INPUT -p udp –dport 69 -j PHONES
$IPTABLES -A INPUT -p udp –dport 123 -j PHONES
$IPTABLES -A INPUT -p icmp –icmp-type fragmentation-needed -j ACCEPT
$IPTABLES -A INPUT -p icmp –icmp-type time-exceeded -j ACCEPT
$IPTABLES -A INPUT -p icmp –icmp-type echo-request -m limit –limit 10/sec -j ACCEPT

$IPTABLES -P INPUT DROP

Примечание: Правильно настроенный файрвол не является гарантией безопасности IP-АТС. Рекомендуется еще установка программы Fail2Ban для устранения возможности длительного подбора паролей.

 
avatar
  Подписаться  
Уведомление о

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices