четверг, 26 июня 2014 г.

Маршрутизация в linux. Forward, default, stateful firewall

 Теория:  
  Форвардинг пакетов.
     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.
     Термин "stateful firewall" в применении к IPTables применяется довольно часто. Что это означает и что он дает? Обычно фильтрацию рассматривают на базе пакетов: идет сравнение ад­ресов отправителя/получателя и портов, и, в зависимости от результата сравнения, выполняются определенные действия.
     Модуль состояний (state) дает дополнительные возможности по фильтрации пакетов. Кроме адресов отправителя/получателя и портов, можно отслеживать контекст пакета: можно определить, какой это пакет, новый или ответ на уже посланный. Модуль состояний смотрит каждое соедине­ние и определяет его состояние. Соединение бывает в одном из четырех состояний:
  • NEW (новое) - попытка нового соединения. До этого не было пакетов, относящихся к этому соединению.
  • ESTABLISHED (установленное) - соединение установлено, отмечается поток пакетов в обоих направлениях.
  • RELATED (связано) - пакет связан с уже установленным со­единением. Наиболее типичным примером является ICMP-coобщение, которое было создано в ходе соединения, но не явля­ется его частью.
  • INVALID (недопустимый): пакет не идентифицирован. Как правило, эти пакеты отбрасываются.
     Отслеживание соединений отлично работает с TCP, так как он ориентирован на соединение протоколом. С UDP-дейтаграммами, которые отправляются без установки соединения, модуль состояний, если разобраться, отклоняется от определения соединения, представляя его как простую последовательность пакетов.      Следовательно, ICMP-сообщение «эхо ответ» относится к ICMP-сообщению «эхо запрос» и рассматривается как часть «соединения», такое соединение будет помечено как установленное. Эти соединения называют «псевдосоединениями».      Модуль state включается с помощью опции -m state, затем будет доступна опция -state, дающая возможность определять состояния соединений:
# 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

Комментариев нет:

Отправить комментарий

SEO: Эксперимент: как Яндекс и Google учитывают ключевые слова в URL

Эксперимент: как Яндекс и Google учитывают ключевые слова в URL Эксперимент: как Яндекс и Google учитывают ключевые слова в URL Дата пу...