В простейшем случае брандмауэр - это фильтрующий маршрутизатор, который блокирует нежелательный трафик. Используйте возможности маршрутизации многосетевого узла под управлением Linux и функции фильтрации iptables для создания фильтрующего маршрутизатора.

Ядро Linux делит трафик маршрутизатора на три категории и применяет для каждой из категорий отдельный набор правил фильтров:

INPUT - Входящий трафик, адресованный процессу локальной системы, должен пройти через правила фильтра INPUT, прежде чем будет принят системой.

OUTPUT - Исходящий трафик, источником которого является локальная система, должен пройти через правила фильтра OUTPUT, прежде чем будет отправлен.

FORWARD - Трафик, исходящий от внешней системы и адресованный другой внешней системе, должен пройти через правила фильтра FORWARD.

Правила INPUT и OUTPUT используются в случае, когда система выступает в роли узла. Правила FORWARD используются, когда система выступает и роли маршрутизатора. Помимо трех стандартных категорий, iptables позво ляет пользователям создавать собственные категории.

Создание фильтрующих правил iptables

Ядро Linux хранит список правил для каждой из описанных категорий. Работа со списком правил осуществляется при помощи команды iptables. Используйте ключи команды iptables, описанные в табл. 12.2, для создания или удаления пользовательских цепочек правил, добавления правил в цепочку, удаления правил из цепочки, а также для изменения порядка следования правил в цепочке.

Таблица 12.2. Ключи командной строки iptables

Ключ Назначение
-A Добавляет правила в конец набора
-D Удаляет правила из набора
Изменяет имя набора
-F Удаляет все правила из набора
-I Вставляет правило в указанной точке цепочки (набора)
-L Перечисляет все правила набора
-N Создает пользовательский набор правил с указанным именем
-P Устанавливает область применения цепочки
-R Заменяет правило цепочки
-X Удаляет указанный пользовательский набор правил
-Z Обнуляет все счетчики пакетов и байтов

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


ACCEPT - Разрешает передачу пакета через брандмауэр.

DROP - Предписывает удалить пакет.

QUEUE - Предписывает передать пакет в область пользовательских процессов для обработки.

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

Команды iptables создают фильтры, применяемые в зависимости от протокола, адресов источника и адресата либо сетевого интерфейса, через который поступил пакет. Этой цели служат многочисленные ключи командной строки. Ниже описаны основные ключи iptables для создания фильтров:

-р протокол - Определяет протокол, для которого справедливо правило. В качестве значения аргумента протокол может выступать любой номер из файла /etc/ protocols либо одно из ключевых слов: tcp, udp, icmp.

-s адрес[/маска] - Определяет адрес источника пакетов, для которых справедливо правило. адрес может быть представлен именем узла, именем сети либо адресом IP.

--spor t [порт[\порт]] - Определяет исходный порт пакетов, для которых справедливо правило. порт может быть представлен именем или номером из файла /etc/services. Синтаксис порт: порт позволяет определить диапазон портов. Если значение порта не указано, правило применяется для всех исходных портов.

-d адрес[/маска] - Определяет конечный адрес пакетов, для которых справдливо правило. адрес может быть представлен именем узла, именем сети либо адресом IP.

--dport [порт[:порт] - Определяет целевой порт пакетов, для которых справедливо правило. Правило фильтрует весь трафик, проходящий через указанный порт, порт определяется по правилам, описанным для ключа --sport.

--icmp-type тип - Определяет тип ICMP, для которого справедливо правило, тип может быть представлен любым именем или номером типа сообщения ICMP.

-i имя - Определяет имя входящего сетевого интерфейса, для которого справед- ливо правило. Правило действует только на пакеты, полученные через этот интерфейс. Символ + в конце имени позволяет задавать интерфейсы по маске (eth+ соответствует всем Ethernet-интерфейсам, имена которых начинаются с eth).

-о имя - Определяет имя исходящего сетевого интерфейса, для которого справедливо правило. Правило действует только на пакеты, передаваемые через этот интерфейс. Символ + в конце имени позволяет задавать интерфейсы по маске (eth+ соответствует всем Ethernet-интерфейсам, имена которых начинаются с eth).

-f - Указывает, что правило относится только ко второму и последующим фрагментам пакета, разбитого на несколько частей.