Форвардинг пакетов.
NAT-правила не обеспечивают форвардинг трафика между интерфейсами, они непосредственно имеют дело с перезаписыванием адресов отправителя/получателя и портов. Для продвижения трафика используется цепочка FORWARD таблицы filter:
# iptables -A FORWARD -i <входящий интерфейс> -о <исходящий интерфейс> -j ACCEPT
Форвардинг - это прямое перенаправление пакетов с одного интерфейса на другой. Поскольку по умолчанию используется таблица filter, ее не нужно указывать с помощью опции -t.
На практике используется форвардинг не всех пакетов, а только определенных, к примеру пакетов с определенным номером порта (в частности, 80 и 443 для Web-сервера):
# iptables -A FORWARD -i <входящий интерфейс> -о <DMZ-интерфейс> -d <IP Web-сервера> --dport 80,443 -j ACCEPT
C помощью опции -р можно указать протокол, например -р tcp.
Политики по умолчанию.
Для каждой таблицы нужно определить политику по умолчанию, то есть действие, которое будет выполнено над пакетом, если он не совпал ни с одним правилом. Здесь возможны два варианта:
- По умолчанию можно принимать все пакеты, а позже создать правила, блокирующие нежелательные пакеты.
- По умолчанию отбрасывать все пакеты и создать правила, разрешающие определенные пакеты.
Термин "stateful firewall" в применении к IPTables применяется довольно часто. Что это означает и что он дает? Обычно фильтрацию рассматривают на базе пакетов: идет сравнение адресов отправителя/получателя и портов, и, в зависимости от результата сравнения, выполняются определенные действия.
Модуль состояний (state) дает дополнительные возможности по фильтрации пакетов. Кроме адресов отправителя/получателя и портов, можно отслеживать контекст пакета: можно определить, какой это пакет, новый или ответ на уже посланный. Модуль состояний смотрит каждое соединение и определяет его состояние. Соединение бывает в одном из четырех состояний:
- NEW (новое) - попытка нового соединения. До этого не было пакетов, относящихся к этому соединению.
- ESTABLISHED (установленное) - соединение установлено, отмечается поток пакетов в обоих направлениях.
- RELATED (связано) - пакет связан с уже установленным соединением. Наиболее типичным примером является ICMP-coобщение, которое было создано в ходе соединения, но не является его частью.
- INVALID (недопустимый): пакет не идентифицирован. Как правило, эти пакеты отбрасываются.
# iptables -A FORWARD -i <внешний интерфейс> -о <внутренний интерфейс> -d <IP Web-сервера> --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Состояние NEW описывает SYN-пакеты, но любой пакет может быть расценен как новый, если он не является частью установленного соединения. Это нежелательное поведение фильтра пакетов нужно обязательно пресекать:
# iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
Для отслеживания каждого соединения нужно 350 байтов оперативной памяти - в один мегабайт оперативной памяти «поместится» едва меньше 3000 соединений.
Чтобы модуль состояний не использовал всю оперативную память, на загруженных брандмауэрах вводят ограничение на количество соединений. Текущее максимальное количество соединений указано в файле
/proc /sys/net/ipv4/ip_conntrack_max:
$ cat /proc/sys/net/ipv4/ip_conntrack_max
32712
Когда максимальное число соединений будет превышено, в протоколе syslog появится сообщение в формате:
ip_conntrack: maximum limit of XXXX entries exceeded.
На современных компьютерах, где оперативной памяти стоит обычно больше 1 Гб, эта проблема не так критична, как раньше.
Вспомогательные модули.
Пакет Netfilter содержит вспомогательные модули, позволяющие решить некоторые проблемы: например, ip_conntrack_ftp (для отслеживания соединений) и ip_nat_ftp (для NAT). Загрузить модули можно с помощью команды modprobe:
# /sbin/modprobe ip_conntrack_ftp
# /sbin/modprobe ip_nat_ftp
После загрузки этих модулей FTP-данные будут помечены как RELATED, позволяя использовать состояния в правилах IPTables для ftp-данных.
http://webacademyexpert.blogspot.com/2014/06/linux-iptables.html
Комментариев нет:
Отправить комментарий