IPTABLES – руководство: часть 1 – основы IPTABLES
IPTABLES – руководство: часть 2 – управление IPTABLES
IPTABLES – руководство: часть 4 – цели для правил
Содержание:
- Основные параметры правил
- Параметры правил TCP
- Параметры правил UDP
- Параметры правил ICMP
- Дополнительные модули и параметры
Ниже приведены параметры, которые могут использованы при создании правил и примеры с ними.
Содержание
Основные параметры правил
-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-source
– MAC-адрес источника; допустимо использование инвертирования (!); используется только в цеочках 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