Asterisk iptables

В этой статье рассматривается простой пример конфигурации iptables для работы с Asterisk Проверим установлено ли IPTables
[root@localhost ~]# rpm -q iptables iptables-1.3.5-5.3.el5_4.1 Посмотрим текущие правила используя команду -L
[root@localhost ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination Настройка общих правил. Создадим новые правила # iptables -P INPUT ACCEPT Эта команда разрешит все входящие подключения что позволит нам избежать блокировки нашего соединения, если конфигурирование производится через ssh. # iptables -F Данная команда сбросит все текущие правила по умолчанию и применит только созданное нами правило. # iptables -A INPUT -i lo -j ACCEPT Это простое правило разрешает все подключения на адаптер loopback. Интерфейс loopback определяется системой как lo и по умолчанию имеет адрес 127.0.0.1 Команда -А добавляет новое правило в конец заданной цепочки INPUT. Опция -i вместе именем интерфейса lo разрешает все виды трафика через заданный интерфейс. Опция -j указывает на цель данного правила ACCEPT, принять все подключения. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT Некоторые части этого правила уже вам знакомы. Далее присутствует опция -m которая используется для загрузки модуля state. Модуль state проверяет состояние пакета и определяет является ли он новым-NEW, уже созданным-ESTABLISHED или новым, но связанным-RELATED с уже установленным соединением. Состояние ESTABLISHED указывает на то, что пакет принадлежит уже установленному соединению через которое пакеты идут в обоих направлениях. Признак NEW подразумевает, что пакет открывает новое соединение или пакет принадлежит однонаправленному потоку. Признак RELATED указывает на то что пакет принадлежит уже существующему соединению, но при этом он открывает новое соединение. iptables -A INPUT -p tcp --dport 22 -j ACCEPT Это правило добавляется к цепочке INPUT и говорит, что все пакеты, приходящие по протоколу TCP (-p tcp), на порт 22 (–dport 22), должны быть приняты(-j ACCEPT). Используется для подключения по ssh c портом по умолчанию. Если вам требуется открыть доступ к веб серверу цепочка будет выглядеть также, за исключением номера порта. iptables -A INPUT -p tcp --dport 80 -j ACCEPT Хочу заметить, что php приложения являются очень уязвимым местом часто используемым для взлома Asterisk. iptables -P INPUT DROP Помните, первое правило? Когда мы устанавливаем политику по умолчанию для входных цепей принять? Это правило меняет политику по умолчанию для входных цепочек обратно в DROP, что и требуется, если вы хотите на самом деле блокировать трафик поступающий на ваш сервер. iptables -P FORWARD DROP Запретим маршрутизацию трафика iptables -P OUTPUT ACCEPT Разрешим весь исходящий трафик. service iptables save Сохраним созданные правила. Правила для Asterisk Рассмотрим правила для SIP, RTP, IAX, AMI iptables -A INPUT -p udp -m udp --dport 5060 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 5061 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 4569 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 5038 -j ACCEPT Если вы используете TCP: iptables -A INPUT -p tcp -m tcp --dport 5060 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 5061 -j ACCEPT iptables -A INPUT -p udp -m udp –dport 5060 -j ACCEPT – это правило разрешает инициацию SIP подключений к вашему серверу Asterisk от удаленных пользователей или провайдера. Если у вас нет удаленных пользователей, а например только sip транк от провайдера, хорошая идея разрешить инициацию только с определенных ip адресов или сетей. iptables -A INPUT -p udp -m udp -s 123.123.123.123 --dport 5060 -j ACCEPT iptables -A INPUT -p udp -m udp -s 192.168.0.0/24 --dport 5060 -j ACCEPT Первое правило разрешает соединение только с адреса 123.123.123.123, второе только с адреса 125.125.125.125. Третье из сети 192.168.0.XXX для ваших локальных абонентов. iptables -A INPUT -p udp -m udp –dport 10000:20000 -j ACCEPT – Данное правило разрешает RTP трафик. Кода иницировано SIP соединение по порту 5060 голосовые потоки направляются на порты из указанного диапазона. Хочу также заметить что многие АТС используют для инициации SIP соединения и для RTP трафика разные интерфейсы. Т.е. если адрес SIP сервера вашего провайдера 123.123.123.123, то RTP трафик, к примеру, может исходить с ip адреса 123.123.123.124 и т.п. Диапазон rtp портов задается в файле /etc/asterisk/rtp.conf. iptables -A INPUT -p udp -m udp –dport 4569 -j ACCEPT – Разрешает подключения по протоколу IAX. В отличие от SIP для инициации соединения и для голосовых пакетов RTP используется один и тот же порт. iptables -A INPUT -p tcp -m tcp –dport 5038 -j ACCEPT – Разрешает подключения к Asterisk Manager Interface. service iptables save Сохраним новые правила в debian и ubuntu добавили пакет iptables-persistent который использует iptables-save/iptables-restore #service iptables-persistent Usage: /etc/init.d/iptables-persistent {start|restart|reload|force-reload|save|flush} Фильтрация по именам сканеров iptables -I INPUT -p udp --dport 5060 -m string --string "friendly-scanner" --algo bm -j DROP iptables -I INPUT -p udp --dport 5060 -m string --string "sip-scan" --algo bm -j DROP iptables -I INPUT -p udp --dport 5060 -m string --string "sundayddr" --algo bm -j DROP iptables -I INPUT -p udp --dport 5060 -m string --string "iWar" --algo bm -j DROP iptables -I INPUT -p udp --dport 5060 -m string --string "sipsak" --algo bm -j DROP iptables -I INPUT -p udp --dport 5060 -m string --string "sipvicious" --algo bm -j DROP Настройка IPtables в несколько кликов Смотрите также: NAT, SIP и Asterisk Asterisk + Fail2Ban iptables, asterisk artikle/iptables.txt · 

Поиск по этому блогу