Linux: IPTABLES — руководство: часть 3 — параметры правил

Автор: | 20/10/2014
 

netfilter_logo

IPTABLES — руководство: часть 1 — основы IPTABLES

IPTABLES — руководство: часть 2 — управление IPTABLES

IPTABLES — руководство: часть 4 — цели для правил

Содержание:

Ниже приведены параметры, которые могут использованы при создании правил и примеры с ними.

Основные параметры правил

-p, --protocol — правило сработает для протокола; имя протокола должно быть указано явно, в виде TCP, UDP или ICMP, и должно присутствовать в файле /etc/protocols;

Пример:

iptables -A INPUT -p tcp

-s, --src, --source — фильтр по исходному (source — источник) адресу; можно указать как один адрес — так и подсеть; при установленном флаге ! перед указанием фильтра — значение будет инвертировано (обратное значение: —source адрес является >  —source ! адрес не является);

Примеры:

iptables -A INPUT -s 192.168.1.1
iptables -A INPUT -s ! 192.168.1.1


-d, --dst, --destination - фильтр по адресу назначения (destination - назначение); остальные правила аналогичны --source;

Пример:
iptables -A INPUT -d 192.168.1.1

-i, --in-interface — правило для входящего трафика на указанном интерфейсе; используется только в цепочках INPUT, FORWARD и PREROUTING; допустимо использовать маски, например + — для всех интерфейсов, или eth+ — для всех интерфейсов eth0, eth1  и т.д.; допустимо использование инвертации;

Примеры:

iptables -A INPUT -i eth0
iptables -A INPUT -i eth+
iptables -A INPUT -i ! eth0

-o, --out-interface — правило для исходящего трафика на указанном интерфейсе; остальные правила аналогичны --in-interface;

Параметры правил TCP

--sport, --source-port — правило для порта-источника; если не указан порт — сработает для всех портов; можно указывать имя сервиса, либо порт в виде цифр; при указании имени сервиса — оно должно присутствовать в файле /etc/services; использование портов вместо имён сервисов уменьшит нагрузку и ускорит обработку; допустимо указать диапазон портов, например 80:1024 — для всех портов от 80 до 1024 включительно, либо :80 — для всех портов от 0 до 80 включительно; допустимо инвертирование значения (!);

Примеры:

iptables -A INPUT -p tcp --sport 22
iptables -A INPUT -p tcp --sport ssh
iptables -A INPUT -p tcp --sport 80:1024
iptables -A INPUT -p tcp --sport :80
iptables -A INPUT -p tcp --sport ! 80

--dport, --destination-port — правило для порта назначения; остальные правила аналогичны --source-port;

Пример:

iptables -A INPUT -p tcp --dport 22

--tcp-flags — правило сработает при наличии TCP-флагов;

Пример:

iptables -p tcp --tcp-flags SYN,FIN,ACK SYN

Параметры правил UDP

--sport, --source-port — аналогично --source-port TCP;

--dport, --destination-port  — аналогично --destination-port TCP;

Параметры правил ICMP

--icmp-type — проверяет соответствие типа ICMP-пакета; список смотрите тут>>>,

iptables -A INPUT -p icmp --icmp-type 8

Дополнительные модули и параметры

Перечислю только наиболее интересные и используемые.

Модули подключаются с помощью опции -m.

Addrtype — фильтрация на основе типа адреса.

--src-type — фильтр на основе типа адреса источника; можно указать один или несколько типов, разделив их запятой; допустимо инвертирование значения (!);

Примеры:

iptables -A INPUT -m addrtype --src-type UNICAST
iptables -A INPUT -m addrtype --src-type ! UNICAST
iptables -A INPUT -m addrtype --src-type MULTICAST, BROADCAST

—dst-type — то же самое, но для адреса получателя пакета;

Модуль Comment — добавление своего комментария к фильтру.

--comment — добавление своего комментария к фильтру; максимальное значение — 256 символов;

Пример:

iptables -A INPUT -m comment --comment "This is comment"

Модуль Connmark — действие на основе метки, установленной действием CONNMARK или MARK --set-mark (действия смотрите в следующей части).

--mark — фильтр на основе наличия указанной метки;

Пример:

iptables -A INPUT -m connmark --mark 12 -j ACCEPT

Модуль IP range — расширенный аналог --source и --destination. Позволяет указывать даиапазон IP.

--src-range — диапазон IP источников; в отличии от --source и --destination позволяет указать диапазон между двумя конкретными адресами, а не подсетью; допустимо инвертирование (!);

Пример:

iptables -A INPUT -p tcp -m iprange --src-range 192.168.1.13-192.168.2.19

--dst-range — аналогично --src-range, но для адресов назначения;

Модуль Length — фильтрация по длине пакета.

--length — допустимо указание диапазона размеров, например 1400:1500; допустимо инвертирование значения;

Примеры:

iptables -A INPUT -p tcp -m length --length 1400

iptables -A INPUT -p tcp -m length --length 1400:1500

Модуль Limit — ограничение количества пакетов в единицу времени. Хорошо описан тут>>>.

--limit — средняя скорость заполнения «счётчика»; это же значение учитывается для уменьшения счётчика в --limit-burst; указывается в виде число пакетов/время, где время указывается в виде /second /minute /hour /day; по-умолчанию 3 пакета в час, или 3/hour; использование инвертирования невозможно;

Пример:

iptables -A INPUT -m limit --limit 3/hour

--limit-burst — максимальное значение счётчика для срабатывания правила;  каждый раз, когда значение  --limit превышается — счётчик увеличивается на единицу, пока не достигнет --limit-burst, после чего срабатывает правило, в котором используется --limit-burst;

Пример:

iptables -A INPUT -m limit --limit-burst 5

Модуль Mac — фильтрация по MAC (Ethernet Media Access Control).

--mac-sourceMAC-адрес источника; допустимо использование инвертирования (!); используется только в цеочках PREROUTING, FORWARD и INPUT;

Пример:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01

Модуль Mark — фильтр на основе метки (действия CONNMARK и MARK см. в следующем посте).

--mark — метка, установленная MARK;

Пример:

iptables -t mangle -A INPUT -m mark --mark 1

Модуль Multiport — фильтр по нескольким портам. В отличии от --sport  допускает использование нескольких независимых портов, а не диапазона.

--source-port — список портов источника; максимум 15 значений, разделённых запятыми; должен использоваться только с -p tcp или -p udp;

Пример:

iptables -A INPUT -p tcp -m multiport --source-port 22,53,80,110

--destination-port — аналогично --source-port, но для портов назначения;

Пример:

iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110

--port — аналогично для обоих значений --source-port  и --destination-port, для обоих направлений; сработает только в случае, если порт источника и порт назначения идентичны;

Пример:

iptables -A INPUT -p tcp -m multiport --port 22,53,80,110

Модуль Owner — фильтры на основе владельца пакета.

--cmd-owner — фильтр по имени сервиса, который сгенерировал пакет; допустимо использование инвертации с помощью(!);

Пример:

iptables -A OUTPUT -m owner --cmd-owner httpd

--uid-owner — фильтр по UID (User ID) пользователя, который сгенерировал пакет;

Пример:

iptables -A OUTPUT -m owner --uid-owner 500

--gid-owner — аналогично, но для GID (Group ID);

Пример:

iptables -A OUTPUT -m owner --gid-owner 0

--pid-owner — аналогично, но для PID (Process ID);

Пример:

iptables -A OUTPUT -m owner --pid-owner 78

--sid-owner — аналогично, но для SID (Service ID);

Пример:

iptables -A OUTPUT -m owner --sid-owner 100

Модуль Packet type — фильтры на основе типа адресации пакета.

--pkt-type — допустимо использование  unicast , broadcast или multicast типов; допустим использование инвертации;

Пример:

iptables -A OUTPUT -m pkttype --pkt-type unicast

Модуль State — фильтры на основе состояния соединения.

--state — указывает состояние пакета в соединении; могут быть использованы четыре тип состояния — INVALID, ESTABLISHED, NEW и RELATED. INVALID означает, что пакет ассоциируется с неизвестным стримом или соединением и может содержать некорретные данные или заголовки. ESTABLISHED — пакет принадлежит к уже установленному в обоих направлениях соединению и полностью валиден. NEW — пакет устанавливает или будет устанавливать новое соединение, или пакет соединения,у которого ещё не было передачи данных в обоих направлениях; RELATED — пакет, который устанавливает новое соединение, которое ассциировано с уже установленным соединением (пример — пассивный режим FTP, или ошибка ICMP, связанная с каким-то TCP или UDP соединением );

Пример:

iptables -A INPUT -m state --state RELATED,ESTABLISHED