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
Если сервис успешно стартует, то правила применились. В случае ошибки в правилах сервис выдаст ошибку при запуске.