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

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

Компоненты правил IPTables(общие)

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

В разных документах и руководствах по iptables используются разные обозначения для тех или иных описаний правил iptables.      Например, в IPTables Tutorial компоненты правил называют критерием выделения пакетов.

     Мы будем называть обозначение компонентов правил совпадением.

     Совпадением назовем пару, состоящую из объекта сравнения (то есть того, что сравнивается, в частности адрес отправителя) и его значения-образца (с этим значением будет сравниваться соответствующее объекту поле заголовка).

     Так как объект совпадения зависит от определенных полей заголовка, некоторые совпадения можно использовать только для пакетов определен­ных типов. Другие же совпадения можно использовать для всех IP-пакетов.


     Для иллюстрации той или иной опции будет приводиться полная команда iptables, чтобы было понятно, в каком контексте использовать эту опцию, например:

# iptables -A INPUT -s 1.2.3.4 -j DROP

     Здесь демонстрируется опция -s (совпадение с адресом отправителя). Не надо думать, что она должна использоваться только с цепочкой INPUT и действием DROP. Общий синтаксис этой команды выглядит следующим образом:

iptables [-t <таблица>] [-A|-D|-X] <цепочка> -s 1.2.3.4 [-j <цель>]

     Общие совпадения.

     Общие совпадения можно использовать в любых правилах, так как они не зависят от типа протокола и не загружают никаких модулей расширения. Рассмотрим эти совпадения более подробно.

-s (--src, --source) <адрес>

     Опция -s задает адрес отправителя пакета, например:

# iptables -A INPUT -s 1.2.3.4 -j DROP

     Как правило, используется для цепочки INPUT, но порой может использоваться и для цепочки OUTPUT - если у машины несколько IP-адресов.

     В качестве адреса можно указать доменное имя - перед добавлением в правило оно будет разрешено в IP-адрес. Или диапазон IP-адресов:

# iptables -A INPUT -s 172.16.0.0/24 -j DROP

     Здесь видно, что адрес отправителя может быть в диапазоне 172.16.0.0-172.16.0.255.

     Можно инвертировать условия - для этого используется восклицательный знак. В частности, следующее правило совпадет с лю­бым пакетом, адрес отправителя которого не равен 10.0.0.5:

# iptables -A INPUT -s ! 10.0.0.5 -j DROP

-d (--dst, --destination) <адрес>

     Действие такое же, как и с опцией -s, но сравнение пакета выполняется по адресу получателя. В большинстве случаев используется для цепочки OUTPUT.      Как и в случае с -s, можно указывать как доменное имя, так и IP-адрес или диапазон адресов (отрицание также можно исполь­зовать):

# iptables -A OUTPUT -d ! 172.16.10.4 -j REJECT

-i (--in-interface) <адрес>

     Опция -i задает входящий интерфейс, с которого был получен пакет, в частности eth0. Эту опцию можно использовать для цепочек PREROUTING, INPUT и FORWARD. Как правило использу­ется для запрещения адресов отправителя, которые не типичны для это­го интерфейса.

     В частности, если интерфейс eth0 подключен к сети 172.16.0.0, то по нему придут пакеты из этой сети. Если по этому интерфейсу пришли пакеты с другой сети, значит, они считаются подоз­рительными и их нужно отбросить. При указании интерфейсов можно ис­пользовать + как маску:

# iptables -A INPUT -i eth+ -j DROP

     Данное правило будет отбрасывать все пакеты, пришедшие с интерфейсов eth0, eth1, eth2 и т.д. Это значение также может быть инвертировано с помощью знака восклицания.

-o (--out-interface) <адрес>

     Опция задает исходящий интерфейс. Ее также можно использовать для цепочек POSTROUTING, OUTPUT и FORWARD. Можно использовать символы + и !.

# iptables -A OUTPUT -о ! eth0 -j ACCEPT

-f (--fragment)

     Опция -f используется для создания специального правила для второго и последующих фрагментов, то есть будут обрабатываться все фрагменты как единое целое, а не только основной фрагмент.

     Фрагментация временами необходима, если получаемый пакет чересчур большой для транспортировки - в этом случае он разбивается на фрагменты. Но фрагментация может использо­ваться для DoS-атак. Ядро в большинстве случаев сконфигурировано на автоматическую сборку фрагментов в единое целое (поведение ядра можно изменить с помо­щью параметров в /ргос), делая эту опцию бесполезной.

-p (--protocol)

     Опция позволяет задать используемый протокол. Можно применять эту опцию по своему усмотрению, например для отсеивания UDP-пакетов:

# iptables -A INPUT -p udp -j DROP

Используемый протокол можно указать с помощью одной из следующих строк:

  • TCP;

  • UDP;
  • ICMP;
  • ALL (все протоколы).
     Если явно не задавать тип протокола или задать 0, то будут использоваться все протоколы, то есть опция -p ALL.

     Также протокол можно задать числом, которое определено в файле /etc/protocols. Например:

# iptables -A INPUT -p 106 -j LOG

     Можно использовать символ отрицания:

# iptables -A INPUT -р ! tcp

В данном примере остаются протоколы UDP и ICMP, поскольку пакеты TCP отброшены.

Для более глубокого ознакомления с фильтром пакетов IPTables настоятельно рекомендуется ознакомиться с документом IPTables Tutorial. Последняя переведенная на русский версия - [dc]IPTables Tutorial 1.1.19[/dc].