Настройка iptables для работы asterisk

iptables для asterisk. Общие сведения

Iptables – это брандмауэр, который защищает компьютер от несанкционированных подключений (как от входящих подключений извне, так и несанкционированных подключений вовне с самого компьютера). Для астериска iptables дает возможность отключить подсети, из которых не должно быть подключений к asterisk, а также в связке с fail2ban iptables может закрыть сервер от подбора паролей к серверу (в частности, отключать тех, кто пытается подобрать пароли клиентов asterisk).

Для того, чтобы успешно работать в связке с fail2ban, iptables предварительно должен быть правильно настроен. Asterisk использует разные протоколы для разных целей (например, SIP для авторизации пользователей и инициирования сеансов связи, RTP для передачи голоса, IAX для связи с другими серверами, и т.д.). Для каждого из протоколов должно быть предусмотрено отдельное правило (или несколько правил) в настройках iptables.

С чего начать: просмотр настроенных правил iptables

Для просмотра имеющихся (уже настроенных) правил запустите команду:

iptables -L -n

Если у Вас не высвечивается никаких правил, то рекомендуется предварительно настроить политику iptables (например, правила для ssh доступа, web-сервера если он есть, и т.д.), после чего уже настраивать правила iptbales для asterisk.

Настройка из командной строки

Для работы по SIP протоколу (порт UDP 5060) выполните команду:

iptables -A INPUT -p udp -m udp --dport 5060 -j ACCEPT

если у Вас asterisk работает на другом порту или Вы используете протокол TCP вместо UDP, исправьте команду соответствующим образом.

Для работы по RTP протоколу (голосовой поток, по умолчанию порты UDP с 10000 по 20000) выполните команду:

iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT

В случае, если Вы ограничили в настройках asterisk диапазон портов (или полностью его сменили) не забудьте отразить это в правиле iptables!

Если Вы настроили соединение по IAX (точнее, IAX2) между двумя серверами asterisk (либо клиенты / пиры подключаются к астериску по IAX), не забудьте про правило для IAX в iptables:

iptables -A INPUT -p udp -m udp --dport 4569 -j ACCEPT

Если у Вас настроен asterisk AMI (Asterisk Manager Interface), то добавьте следующее правило:

iptables -A INPUT -p tcp -m tcp --dport 5038 -j ACCEPT

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

iptables-save > имя-файла-с-конфигурацией-iptables

например:

iptables-save > /etc/network/iptables-rules.conf

После чего в любой момент (например, после перезагрузки компьютера) Вы сможете восстановить правила командой:

iptables-restore < имя-файла-с-конфигурацией-iptables

например:

iptables-restore < /etc/network/iptables-rules.conf

Настройка через конфигурационные файлы

В операционной системе RHEL / CentOS уже предусмотрены конфигурационные файлы для iptables, они находятся здесь: /etc/sysconfig/iptables. Для IPv6 это будет: /etc/sysconfig/ip6tables.

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

apt install iptables-persistent

После установки пакета можно сохранить правила в файл с конфигурацией:

iptables-save > /etc/iptables/rules.v4

для IPv6 это будет:

ip6tables-save > /etc/iptables/rules.v6

В соответствующий конфигурационный файл добавьте следующие строки (обязательно ДО строки COMMIT !):

# Для работы по SIP протоколу (порт UDP 5060):

-A INPUT -p udp -m udp --dport 5060 -j ACCEPT



# Для работы по RTP протоколу (голосовой поток, по умолчанию порты UDP с 10000 по 20000):

-A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT



# соединение по IAX (точнее, IAX2) между двумя серверами asterisk :

-A INPUT -p udp -m udp --dport 4569 -j ACCEPT



# Asterisk AMI (Asterisk Manager Interface):

-A INPUT -p tcp -m tcp --dport 5038 -j ACCEPT

После сохранения файла необходимо перезагрузить демон iptables.

Для CentOS это просто:

service iptables restart

для Debian:

/etc/init.d/iptables-persistent restart

Если сервис успешно стартует, то правила применились. В случае ошибки в правилах сервис выдаст ошибку при запуске.



2018-10-31T10:13:40
Asterisk