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

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

Расширения правил IPTables.

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

Расширения Iptables дают возможность установки дополнительных критериев отбора паке­тов. Их еще называют явными критериями отбора пакетов.

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

     Чтобы использовать эти расширения, их нужно загрузить с помощью ключа -m или --match. После опции -m указывается имя расширения и параметры расширения.

     Например, если используется критерий state, то он явно указывается в строке правила: -m state перед используемым критерием.


-m --tos <число или имя>

     Type of Service (ToS) - это 8-битное поле IP-заголовка. Используется для задания типа обслуживания (приоритета) пакета. На практике ToS ред­ко используется, обычно он используется для маршрутизации пакета. ToS нужно указывать, задав имя или соответствующее ему число - как в десятичном, так и в шестнадцатеричном виде.

     Ниже приводится небольшая таблица по значениям ToS.

Имя

Десятичное число

Шестнадцатеричное число

Типичное использование

Minimize-Delay (минимизировать задержку)

16

0x10

Telnet, SSH

Maximize-Throughput (максимизировать производительность)

8

0x08

FTP

Maximize-Reliability (максимизировать надежность)

4

0x04

DHCP, BOOTP

Minimize-Cost (минимизировать стоимость)

2

0x02

Потоковое видео/ аудио

Normal-Service

0

0x00

Без приоритета

     Примеры:

# iptables -A INPUT -p tcp -m tos --tos Minimize-Delay -j REJECT

# iptables -A INPUT -p tcp -m tos --tos 0x20 -j LOG

-m -ttl --ttl <имя>

     TTL (Time To Live) пакета определяет, через какое количество маршрути­заторов может пройти пакет. Каждый маршрутизатор уменьшает TTL на единицу. Когда TTL становится равным 0, пакет уничтожается, а отправителю отсылается ICMP-сообщение типа 11 с кодом 0 или с кодом 1.

     Значение TTL по умол­чанию для Linux-машины равно 64 (его можно изменить в файле /ргос/sys/net/ipv4/default_ttl). Отправлять пакеты на более чем 64 перехода приходится редко, поэтому это значение можно не менять . Если TTL меньше 64, то это значит, что узел неправильно настроен. Нужно обязательно протоколировать все пакеты со странными значениями TTL:

# iptables -a OUTPUT -p tcp -m ttl —ttl 1 -j LOG

# iptables -a OUTPUT -p tcp -m ttl --ttl 2 -j LOG

и так далее....

     Современные ОС, как правило используют значение TTL, больше 64, к примеру 128. Раньше TTL использовали даже для определения операционной системы, но, так как опера­ционная система умеет изменять значение TTL, этот метод потерял свое значение.

     Этот метод также можно применять при наладке локальной сети, для поиска троянов, для поиска машин с неправильной конфигурацией ОС.

-m multiport

     С помощью расширения -m multiport можно указать до 15 различ­ных портов в опциях --dport и --sport:

# iptables -A INPUT -p tcp -m multiport --dport 21,22,79,113 -j REJECT

# iptables -A INPUT -p tcp -m multiport --sport 1,2,3 -j LOG

     Это расширение также дает специальную опцию -port, которая дает возможность задать один и тот же номер для порта отправителя и получателя. Данная опция похожа на использование опций --sport 1024 и --dport 1024 одновременно:

# iptables -A INPUT -p tcp -m multiport --port 1024 -j ACCEPT

-m owner <--uid-owner | --gid-owner | --pid-owner | --sid-owner>

     Довольно спорная опция, да и в применении очень сложная. Поскольку в настоящее время нет реального механизма передачи информации о владельце пакета по сети, то эта опция применяется в основном на локальной машине. С помощью нее можно написать систему билинга или проверку сервиса на предмет перезапуска упавшего процесса. До поры до времени ее лучше не применять.

     Данная опция позволяет отобрать пакеты, основанные на идентификаторе пользователя (UID), группы (GID), процессов (PID) или сессии (SID). Это расширение можно использовать только для отбора локальных пакетов, созданных на данной машине, поскольку эта информация не вы­ходит за пределы машины при отправке пакета в сеть:

# iptables -A OUTPUT -m owner --uid-owner 100 -j ACCEPT

# iptables -A OUTPUT -m owner --gid-owner 37 -j ACCEPT

# iptables -A OUTPUT -m owner --pid-owner 3487 -j ACCEPT

# iptables -A OUTPUT -m owner --sid-owner 200 -j ACCEPT

-m --mac-source <MAC-адрес>

     Расширение -m mac --mac-source дает возможность выбрать пакеты по МАС-адресу, следовательно, его нужно применять только для 802.х-сетей (Ethernet, WiFi, кабельных модемов, Bluetooth) и только для цепочек INPUT, FOR­WARD и PREROUTING:

# iptables -A INPUT -m mac --mac-source 00:02:A5:54:7C:29 -j ACCEPT

-m mark --mark <число>

     Позволяет выбирать пакеты, помеченные с помощью специального поля MARK, которое связывается с определенным пакетом. 

Может использоваться для ограничения трафика.

# iptables -A INPUT -m mark --mark 1 -j LOG

-m state --state <опции>

     Так называемый механизм отслеживания соединений Stateful firewall. Подробно описан в этой статье. Пример использования расширения:

# iptables -A INPUT -m state --state INVALID -j LOG

-m limit --limit <частота> [--limit-burst <число>]

     Правила ограничения частоты позволяют получать или отправлять пакеты только с заданной частотой. Без знания и понимания механизма лучше не применять. Более подробно написано в IPTables Tutorial 1.1.19. Например:

# iptables -A INPUT -p icmp -m limit --limit 3/second -j ACCEPT

     Здесь указывается, что будут приниматься не более трех IСМР-пакетов в секунду. Вместо секунд можно задать минуты (minute), часы (hour) и дни(day). Другой пример:

# iptables -A INPUT -p icmp -m limit --limit 180/minute -j ACCEPT

     Это правило похоже на предыду­щее (60 секунд умножить на 3 пакета, выходит 180 пакетов за минуту), но для IPTables - это совершенно другое правило. Будет получе­но 179 пакетов за 3 секунды и всего 1 пакет за оставшееся время (57 секунд). Вот такая вот разница. И здесь ни в коем случае нельзя ошибаться, иначе очередь заполнится, и оставшиеся пакеты будут потеряны. С этим правилом также можно использовать отрицание !:

# iptables -A INPUT -p icmp -m limit ! --limit 3/second -j LOG

     Здесь действие будет выполнено только тогда, когда будет превышена указанная частота. В этом примере, если за секунду придет больше 3 пакетов, то пакеты сверх того будут запротоколиро­ваны.

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

     Еще одна полезная опция данного механизма - это опция --limit-burst, которая точно ограничивает частоту пакетов, к примеру, не более 10 пакетов в секунду и не более 30 пакетов в минуту:

# iptables -A INPUT -p icmp -m limit --limit 10/s --limit-burst 30/m