Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Общий синтаксис команды IPTables (продолжение).

Рубрика: Безопасность -> Брандмауэр
Метки: | | |
Понедельник, 16 февраля 2009 г.
Просмотров: 16618

SNAT.

     SNAT использует такой синтаксис:

# iptables -t nat -A POSTROUTING --out-interface <интерфейс> -j MASQUERADE

     Указываем таблицу (NAT), цепочку (в SNAT используется только це­почка POSTROUTING), исходящий интерфейс (внешний интерфейс) и цель - в этом случае MASQUERADE (маскарадинг). MASQUERADE полезен для соединений с динамическими или по­лудинамическими IP-адресами. Если хватает статических адресов, SNAT может быть реализован следующим образом:

# iptables -t nat -A POSTROUTING --out-interface <интерфейс> -j SNAT --to-source <адрес>

     В этом случае мы должны указать реальный адрес нашего внешнего интер­фейса.


     Форвардинг пакетов.

     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-данных.