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