Компоненты правил IPTables(общие)
Метки: IPTables Tutorial 1.1.19
Вторник, 17 февраля 2009 г.
Просмотров: 3096
В разных документах и руководствах по 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 (все протоколы).
Также протокол можно задать числом, которое определено в файле /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].
- Компоненты правил IPTables(общие)