Приблизительное время чтения: 5 минут
Для чего нужен Межсетевой Экран (МСЭ) #
Iptables — это файервол для операционной системы на базе Linux в нашем случае CentOS 7. Он удобен и сравнительно прост в использовании, поэтому пользоваться им могут все, а не только системные администраторы.
Программа отвечает за блокировку или пропуск сетевого трафика для вашего сервера телефонии. При установке соединения с устройством iptables сверяется со списком правил, после чего принимает решение о действии в каждом конкретном случае. Сетевой пакет (TCP или UDP) может передаваться дальше или отклоняться.
Для настройки МСЭ перейдите в раздел: УПРАВЛЕНИЕ Настройки МСЭ
Основные настройки для работы сервера телефонии
- Доступ к веб-интерфейсу BOXPBX порты TCP 80 (http) и 443 (https).
- Доступ к операционной системе CentOS 7 порт TCP 48659 (SSH) порт можно изменить при необходимости.
- Доступ для регистрации абонентских устройств порт UDP 49001 (SIP), если использовать порт UDP 5060, то его требуется включать для списка IP адресов!
- Доступ для голосового трафика телефонии, диапазон портов UDP с 10000 до 20000 (RTP), порты должны быть открыты в обязательном порядке!
Символ # выключает правило. В первой строке #!/bin/sh не нужно убирать этот символ.
#!/bin/sh
/sbin/iptables -F
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
/sbin/iptables -I INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset
/sbin/iptables -I INPUT -m conntrack --ctstate NEW -p tcp ! --syn -j DROP
/sbin/iptables -I INPUT -p icmp -f -j DROP
/sbin/iptables -A INPUT -p icmp --icmp-type fragmentation-needed -j ACCEPT
/sbin/iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -m state --state INVALID -j DROP
/sbin/iptables -A INPUT -p tcp --dport 48659 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT
/sbin/iptables -A INPUT -p udp --dport 49001 -j ACCEPT
#/sbin/iptables -A INPUT -p udp --dport 5060 -j ACCEPT
#/sbin/iptables -A INPUT -p udp -m udp -i eth0 -s 80.75.130.86 --dport 5060 -j ACCEPT
#/sbin/iptables -A INPUT -p udp -m udp -i eth0 -s 92.55.11.172 --dport 5060 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --syn --dport 48659 -m recent --name SSHLIMIT --set
/sbin/iptables -A INPUT -p tcp --syn --dport 48659 -m recent --name SSHLIMIT --update --seconds 30 --hitcount 3 -j DROP
/sbin/iptables-save > /etc/iptables_rules
Пример конфигурации МСЭ
Типы правил #
Существует три типа сетевых пакетов: входящие (отправленные на этот компьютер), исходящие (отправленные в сеть из этого компьютера) и проходящие (пересылаемые дальше). Фильтр iptables также делит пакеты на три цепочки, input, forward и output.
- Input. Обрабатываются входящие соединения и сетевые пакеты. Цепочка задействуется при попытке подключения к пользовательскому компьютеру по SSH или отправке сайтом контента через браузер.
- Output. Обрабатываются исходящие пакеты и соединения. Если выполнить пинг любого ресурса или зайти на любой сайт в браузере, iptables разрешит действие или запретит соединение, исходя из записанной цепочки правил.
- Forward. Обрабатываются проходящие соединения. Сетевые пакеты, которые проходят через компьютер и предназначены другому адресату, попадают в эту цепочку. Встречается, если использовать компьютер как маршрутизатор или при раздаче Wi-Fi.
- Не забывайте, что пинг внешних хостов требует не только отправки пакетов (input), но и получения ответа (input). Двусторонняя коммуникация — важное условие работы многих протоколов. Поэтому настройка iptables должна учитывать возможность полноценной работы с сервером по SSH. Зачастую forward оказывается невостребованным.
Стоит упомянуть еще два важных типа цепочек. Имеются в виду необходимая для первичной обработки и анализа абсолютно всех входящих пакетов цепочка Prerouting (сюда пакет попадает перед обработкой iptables), и завершающая работу с пакетами цепочка Postrouting (сюда после прохождения цепочки forward отправляются пакеты, которые нужно передать на другие узлы сети).
У каждого типа сетевых пакетов может быть набор правил, которые определяют, какое действие применить к конкретному пакету. Основными действиями являются:
- ACCEPT – Разрешить прохождение сетевого пакета дальше по цепочке правил;
- DROP – Удалить пакет;
- REJECT – Отклонить сетевой пакет, уведомив об этом отправителя;
- LOG – Запись о сетевом пакете в лог;
- QUEUE – Отправить сетевой пакет пользовательскому приложению.
Действия с соединениями #
Перед настройкой фильтра проверьте, какие условия выполняются по умолчанию. Если соединение не подпадает под существующие правила, будут выполниться действия, заданные по умолчанию. Узнать уже сконфигурированные правила можно командой в консоли сервера Linux: iptables -L -nv.
В рабочем варианте все три цепочки должны разрешать приём трафика. Это можно задать вручную так:
iptables –policy INPUT ACCEPT
iptables –policy OUTPUT ACCEPT
iptables –policy FORWARD ACCEPT
Можно запретить весь трафик, чтобы потом выборочно разрешить какой-то. Для этого используйте команды:
iptables –policy INPUT DROP
iptables –policy OUTPUT DROP
iptables –policy FORWARD DROP
Таблицы iptables #
Таблицы iptables имеют тот же набор цепочек i(nput, forward, output) и предназначены для выполнения модификации, фильтрации или других действий над сетевыми пакетами. Выделяют следующие таблицы:
- Raw – Для работы с пакетами, которые пока не прошли обработку;
- Mangle – Для модификации пакетов;
- Nat – Для поддержки работы NAT, если вы хотите использовать компьютер в качестве маршрутизатора;
- Filter – Используется по умолчанию для фильтрации пакетов.
Дополнительные настройки #
Если посмотреть на синтаксис утилиты, можно заметить, что команда обычно имеет следующий вид:
# iptables <-t таблица> <действие> <цепочка> <дополнительные_параметры>
Здесь «таблица» указывает таблицу, с которой нужно работать. «Действие» — указывает действие, которое нужно выполнить (например, создать/удалить правило). «Дополнительные параметры» описывают действие и правило, которое нужно выполнить. Какими бывают действия?
- -A. Добавить правило в цепочку;
- -С. Проверить все правила;
- -D. Удалить правило;
- -I. Вставить правило с нужным номером;
- -L. Вывести все правила в текущей цепочке;
- -S. Вывести все правила;
- -F. Очистить все правила;
- -N. Создать цепочку;
- -X. Удалить цепочку;
- -P. Установить действие по умолчанию.
Среди дополнительных настроек для правил выделим следующие:
- -p. Указать протокол, один из tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh;
- -s. Указать ip адрес устройства-отправителя пакета;
- -d. Указать ip адрес получателя;
- -i . Входной сетевой интерфейс;
- -o. Исходящий сетевой интерфейс;
- -j. Выбрать действие, если правило подошло.