Вопрос 21
IPTables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) NETFilter для ядер Linux, начиная с версии 2.4. Для использования утилиты IPTables требуются привилегии суперпользователя (root). Иногда под словом IPTables имеется в виду и сам межсетевой экран NETFilter.
Все пакеты приходящие на сетевую карту проходят все 5(7) уровней модели OSI, iptables начинает обработку пакетов с 3-го(сетевого) уровня, после того как пакет по кабелю попал на сетевую карту, он передается в ядро ОС, а именно в netfilter, далее пакет проходит ряд таблиц и только после этого попадает в приложение(или не попадает, если пакет шел транзитом), которому он был адресован. Именно таблицами и правилами netfilter`а управляет утилита iptables.
С точки зрения iptables трафик бывает 3х типов: Входящий, Транзитный, Исходящий.
Основные ключи iptables:
-t (--table) <таблица> - правило указывает таблицу, в которую будут вноситься изменения, без указания этого ключа используется таблица filter
-A (--append) <цепочка> - добавление новой записи в конец цепочки
-D (--delete) <цепочка> - удаление правила
-I (--insert) <цепочка> <номер> - вставляет правило над цепочкой с указанным номером
-R (--replace) <цепочка> <номер> - заменяет определенные критерии цепочки с номером <номер>
-L (--list) <цепочка> - листинг правил цепочки
-F (--flush) <цепочка> - удаление всех правил из цепочки
-P (--policy) <цепочка> - задать действие по умолчанию, действие будет выполняться на все пакеты, которые не подошли по каким-либо параметрам в другие правила.
Ключи классификации и выделения пакетов
-p (--protocol) - используется для указания конкретного протокола для обработки, список всех протоколов можно посмотреть в /etc/protocols/
-s(--src, --source) - адрес исходящих пакетов для фильтрации.
-d (--dst, --destination) - адрес назначения пакетов для фильтрации.
-i (--in-interface) - интерфейс с которого приходит пакет
-o (--out-interface) - интерфейс на который уходит пакет
--sport (--source-port) (может использоваться с ключами -p tcp и -p udp) - порт с которого был отправлен пакет
--dport (--destination-port) (может использоваться с ключами -p tcp и -p udp) - порт на который отправляется пакет
Так же есть ключ, который указывается, когда мы работаем с протоколом icmp (-p icmp):
--icmp-type <тип icmp пакета> - указывается над каким конкретно типом ICMP пакета проводить операцию. Типы ICMP описаны в RFC 792.
Посредством команд мы сообщаем iptables что мы предполагаем сделать. Обычно предполагается одно из двух действий — это добавление нового правила в цепочку или удаление существующего правила из той или иной таблицы.
Команды:
В следующем примере предполагается, что диапазон IP-адресов 192.168.0.1 - 192.168.0.254 принадлежит вашей подсети ЛВС, к которой подключен интерфейс eth1, и что интерфейс eth0 является соединением с Интернетом или ГВС.
Начните с удаления всех существующих правил с помощью команды Flush:
iptables -F FORWARD
Это стирает все правила цепочки FORWARD, являющейся основной "воронкой" для всех пакетов, пытающихся пройти черезмежсетевой экран.
Очистите другие цепочки:
iptables -F INPUT
iptables -F OUTPUT
Эти команды стирают все правила на пути пакетов, направленных в локальную машину, и в выходной цепочке.
Поместите стандартную инструкцию "запретить все" в самое начало.
iptables -P FORWARD DROP
iptables -A INPUT -i eth0 -j DROP
Решение о допуске фрагментированных пакетов в Iptables необходимо оформить явным образом:
iptables -A FORWARD -f -j ACCEPT
Команда |
-A, --append |
Описание |
Добавляет новое правило в конец заданной цепочки. |
Команда |
-D, --delete |
Описание |
Удаление правила из цепочки. Команда имеет два формата записи, первый -- когда задается критерий сравнения с опцией -D (см. первый пример), второй -- порядковый номер правила. Если задается критерий сравнения, то удаляется правило, которое имеет в себе этот критерий, если задается номер правила, то будет удалено правило с заданным номером. Счет правил в цепочках начинается с 1. |
Команда |
-R, --replace |
Описание |
Эта команда заменяет одно правило другим. В основном она используется во время отладки новых правил. |
Команда |
-I, --insert |
Описание |
Вставляет новое правило в цепочку. Число, следующее за именем цепочки указывает номер правила, перед которым нужно вставить новое правило, другими словами число задает номер для вставляемого правила. В примере выше, указывается, что данное правило должно быть 1-м в цепочке INPUT. |
Команда |
-L, --list |
Описание |
Вывод списка правил в заданной цепочке, в данном примере предполагается вывод правил из цепочки INPUT. Если имя цепочки не указывается, то выводится список правил для всех цепочек. Формат вывода зависит от наличия дополнительных ключей в команде, например -n, -v, и пр. |
Команда |
-F, --flush |
Описание |
Сброс (удаление) всех правил из заданной цепочки (таблицы). Если имя цепочки и таблицы не указывается, то удаляются все правила, во всех цепочках. (Хочется от себя добавить, что если не указана таблица ключом -t (--table), то очистка цепочек производится только в таблице filter, прим. перев. ) |
Команда |
-Z, --zero |
Описание |
Обнуление всех счетчиков в заданной цепочке. Если имя цепочки не указывается, то подразумеваются все цепочки. При использовании ключа -v совместно с командой -L, на вывод будут поданы и состояния счетчиков пакетов, попавших под действие каждого правила. Допускается совместное использование команд -L и -Z. В этом случае будет выдан сначала список правил со счетчиками, а затем произойдет обнуление счетчиков. |
Команда |
-N, --new-chain |
Описание |
Создается новая цепочка с заданным именем в заданной таблице В выше приведенном примере создается новая цепочка с именем allowed. Имя цепочки должно быть уникальным и не должно совпадать с зарезервированными именами цепочек и действий (такими как DROP, REJECT и т.п.) |
Команда |
-X, --delete-chain |
Описание |
Удаление заданной цепочки из заданной таблицы. Удаляемая цепочка не должна иметь правил и не должно быть ссылок из других цепочек на удаляемую цепочку. Если имя цепочки не указано, то будут удалены все цепочки заданной таблице к |