Программа ebtables является средством фильтрации пакетов для мостов с поддержкой функций межсетевого экранирования (bridging firewall). Фильтрация осуществляется на основании значений полей в заголовках кадров Ethernet (канальный уровень модели OSI). Кроме фильтрации пакетов программа также может изменять MAC-адреса в кадрах Ethernet и выполнять функции моста-маршрутизатора.
Для использования ebtables требуется стандартное ядро версии 2.6.
ebtables представляет собой программу пользовательского пространства, поддерживающую таблицы правил для кадров Ethernet в ядре Linux. Эта программа работает аналогично программам пользовательского пространства iptables, но значительно проще в использовании.
Для использования программы в ядре должна быть включена опция Ethernet Bridge tables (ebtables) support. При выборе для опции значения M потребуется также загрузить модуль ebtables. В зависимости от деталей использования программы может потребоваться поддержка ядром дополнительных опций и загрузка других модулей, как указано ниже
Цепочки ebtables
Программа поддерживает в ядре Linux три таблицы с цепочками правил для кадров Ethernet. Таблицы ядра используются для распределения функциональности по нескольким наборам правил, называемых цепочками. Каждая цепочка представляет собой упорядоченных правил соответствия для кадров Ethernet. Если данный кадр соответствует правилу, для этого кадра применяется заданная правилом операция (target). Если же кадр не соответствует спецификации данного правила, этот кадр передается следующему правилу цепочки и т. д. Пользователь может создавать свои цепочки, которые могут служить в качестве операций для встроенных и пользовательских цепочек.
Таблицы ebtables
Как было сказано выше в ядре Linux программа поддерживает три таблицы для кадров Ethernet - filter, nat и broute. По умолчанию все операции (правила) ebtables относятся к таблице filter. Для работы с другими таблицами используется опция
-t <имя таблицы>
в строке спецификации правила. Опция -t должна использоваться в начале строки правила (сразу же после ebtables)
Таблица filter
Используемая по умолчанию таблица filter содержит 3 встроенных цепочки - INPUT (для кадров, адресованных данному хосту), OUTPUT (для кадров, сгенерированных данным хостом) и FORWARD (для пересылаемых мостом кадров).
Для использования таблицы фильтрации в ядре должна быть включена опция ebt: filter table support. При выборе для опции значения M потребуется также загрузка модуля ebtable_filter.
Таблица nat
Таблица nat служит для изменения MAC-адресов и содержит 3 встроенных цепочки1 - PREROUTING (изменение кадров на входе), OUTPUT (изменение локально сгенерированных кадров до передачи их мосту) и POSTROUTING (изменение кадров на выходе).
Для работы с таблицей nat в ядре должна быть включена опция ebt: nat table support. Если для опции было выбрано значение M, потребуется также загрузка модуля ebtable_nat.
Таблица broute
Таблица broute служит для выполнения функций моста-маршрутизатора (brouter) и включает 1 цепочку - BROUTING. Операции DROP и ACCEPT для таблицы broute имеют отличный от общепринятого смысл. DROP означает, что кадр будет маршрутизироваться, а ACCEPT говорит об использовании для кадра функций моста. Цепочка BROUTING используется на самых ранних этапах обработки пакетов. В эту цепочку передаются только пакеты, принимаемые через интерфейсы моста, которые находятся в состоянии forwarding (пересылка пакетов). Обычно для пересылки кадров используются функции моста, но вы можете поступить иначе. Для этого очень удобна операция redirect.
Для работы с этой таблицей в ядре должна быть включена опция ebt: broute table support. При выборе для опции значения M потребуется также загрузить модуль ebtable_broute.
Операции ebtables
Правила межсетевого экранирования задают критерии (условия) для кадров Ethernet и операции (target), выполняемые ядром при соответствии кадра заданным условиям. В качестве действий в правилах могут использоваться встроенные операции ACCEPT, DROP, CONTINUE, RETURN, дополнительные операции (extension) и пользовательские цепочки правил.
Операция ACCEPT означает восприятие кадра с передачей обработки на следующий этап (в другую цепочку или программу). DROP прерывает обработку кадра и удаляет этот кадр. CONTINUE передает кадр следующему правилу цепочки (такая операция может быть полезна для подсчета кадров или записи их в журнальные файлы системы). Операция RETURN завершает обработку кадра в данной цепочке и возвращает его в точку вызова этой цепочки. Дополнительные операции описываются в отдельной статье.
Команды и опции ebtables
Основные команды
Аргументы и опции команд ebtables определяет спецификации правил и выполняемые этими правилами действия для таблицы, заданной параметром -t2. В каждой строке (команде Linux) может использоваться только одна из перечисленных в этом параграфе основных опций. Исключением из этого являются только опции -Z и –atomic-file, которые могут использоваться в дополнение к другим основным опциям.
-A, --append
добавляет правило в конец указанной цепочки.
-D, --delete
удаляет заданное правило из указанной цепочки. Удаляемое правило можно указать по его номеру3 или использовать в команде спецификацию условий и действие, в точности соответствующие правилу, которое нужно удалить. При удалении правил по номеру можно удалить сразу несколько правил, задав диапазон номеров в форме
start_nr[:end_nr]
При удалении правил по номерам допускается использовать отрицательные значения номеров, смысл которых разъясняется в описании команды -I.
-I, --insert
вставляет правило в указанную номером строку списка. Если в цепочке имеется N правил, в качестве параметра команды I можно использовать значения от -N до N+1. Для случая положительных значений i, позиции с номером i-N-1 и i. Нулевое значение задает вставку правила вслед за последним из имеющихся в таблице правил как по команде -A.
-P, --policy
задает политику для данной цепочки. В качестве политики могут использоваться операции ACCEPT, DROP и RETURN4.
-F, --flush
удаляет все правила из указанной цепочки. Если цепочка не указана, удаляются правила из всех цепочек. Удаление из цепочки всех правил не меняет выбранной для этой цепочки политики.
-Z, --zero
устанавливает нулевые значения счетчиков пакетов и байтов для указанной цепочки. Команду -Z можно использовать вместе с командой просмотра списка правил -L. При таком использовании команд на экран выводится список правил с текущими значениями счетчиков, после чего все счетчики сбрасываются.
-L, --list
выводит на экран список правил указанной цепочки. Команда -L поддерживает ряд опций:
--Ln
для вывода номера строки в начале каждого правила.
--Lc
показывает значения счетчиков пакетов и байтов в конце каждого выводимого правила.
--Lx
позволяет вывести список команд, использованных для создания правил цепочки. Эту команду можно использовать в сценариях загрузки или перезагрузки для ввода набора правил ebtables. Отметим, что опция --Lx несовместима с опциями --Ln и --Lc.
--Lmac2
выравнивает размер MAC-адресов, добавляя при необходимости нули слева. По умолчанию нули в начале адресов отбрасываются, если в них нет необходимости.
При использовании команды -L --Lx без имени цепочки выводится полный список команд, использованных для создания и переименования стандартных и пользовательских цепочек ebtables.
-N, --new-chain
создает новую пользовательскую цепочку с заданным именем. Имя цепочки может содержать до 31 символа, число пользовательских цепочек не ограничено.
-X, --delete-chain
удаляет указанную пользовательскую цепочку. Удалить можно только те цепочки, которые не используются в качестве операции в какой-либо из остающихся цепочек. Если команда вводится без имени цепочки ebtables будет удалять все неиспользуемые пользовательские цепочки.
-E, --rename-chain
переименовывает указанную цепочку. В отличие от iptables программа ebtables позволяет менять имена не только у пользовательских, но и у встроенных цепочек. Например, вы можете переименовать в PREBRIDGING цепочку PREROUTING, с помощью команды -E PREROUTING. Переименование цепочек не оказывает никакого влияния на работу ebtables5.
--init-table
сбрасывает все цепочки таблицы в исходное (только пустые встроенные цепочки) состояние.
--atomic-init
копирует инициализационные данные для таблицы в файл. Эту команду можно использовать для сохранения инициализационной таблицы с целью последующего добавления в нее команд. Файл задается с помощью опции --atomic-file или указывается в переменной окружения EBTABLES_ATOMIC_FILE.
--atomic-save
копирует текущую информацию из таблицы ядра в файл. Эту команду можно использовать для сохранения текущей таблицы с целью последующего добавления в нее команд. Файл задается с помощью опции --atomic-file или указывается в переменной окружения EBTABLES_ATOMIC_FILE.
--atomic-commit
заменяет таблицу ядра данными из указанного файла. Эта команда может быть весьма полезна при настройке правил, когда вы можете загрузить таблицы из сохраненного ранее файла и вносить в нее пошаговые изменения. Загружаемые таблицы должны быть записаны в файл с помощью команды --atomic-init или --atomic-save. Файл, с которым работает данная команда, задается с помощью опции --atomic-file или указывается в переменной окружения EBTABLES_ATOMIC_FILE.
--atomic-file -Z
Команда --atomic-file может использоваться вместе с командой -Z для обнуления значений счетчиков при записи в файл. Обнуление счетчиков возможно и с помощью переменной окружения EBTABLES_ATOMIC_FILE.
Дополнительные команды
-V, --version
выводит информацию о номере версии программы ebtables.
-h, --help
выдает краткую справку о синтаксисе команд ebtables.
-j, --jump target
служит для задания действия, выполняемого правилом при соответствии пакета заданным условиям. В качестве действий могут служить основные операции ACCEPT, DROP, CONTINUE, RETURN (см. параграф 5.2.3 на стр. 183), дополнительные операции или пользовательские цепочки.
--atomic-file file
эта команда служит для задания имени файла, с которым работают команды atomic-init, --atomic-save и –atomic-commit. Данная команда должна быть указана в спецификации правила до команды, которая будет работать с файлом.
-M, --modprobe program
служит для автоматической загрузки требуемых модулей ядра.
Примечание:
|