Последнее изменение файла: 2007.02.08
Скопировано с www.bog.pp.ru: 2022.03.18
Bog BOS: ipchains: фильтрация пакетов в Linux: принципы работы, установка и настройка
ipchains предоставляет встроенные в ядро Linux 2.2 средства
фильтрации пакетов и программы (ipchains, ipchains-save, ipchains-restore)
управления ими. Может быть использован для организации сетевого экрана (брандмауэра, firewall)
класса фильтрации пакетов или усиления защиты сервера.
Необходимо иметь ядро 2.1.102 или более новое, при генерации которого
включены FIREWALL и IP_FIREWALL (появляются /proc/net/ip_fwchains
и /proc/net/ip_fwnames). Настойчиво
рекомендуется дефрагментировать все пакеты (/proc/sys/net/ipv4/ip_always_defrag
или IP_ALWAYS_DEFRAG, в зависимости от версии ядра).
Каждый проверяемый IP-пакет проходит по цепочке ("сквозь строй")
правил, определяющих, что с ним делать. Правило состоит из шаблона и действия.
Каждая цепочка имеет действие по умолчанию. Задействованы цепочки с именами:
input - обрабатываются пакеты, приходящие снаружи, в том числе и передаваемые дальше,
после этого производится проверка на необходимость демаскарадинга (результат
передаётся в цепочку output), затем принимается решение о необходимости маршрутизации
forward - обрабатываются пакеты, чьи исходные и конечные адреса лежат снаружи,
в т.ч. посланные изнутри на локальный интерфейс
output - обрабатываются пакеты, уходящие наружу (в т.ч. после маршрутизации
и преобразования адресов)
определенные пользователем - используются в качестве подпрограмм, есть
отлов циклов, имя не длинее 8 символов
Общая схема обработки пакетов (взята из NAG2):
Действия (действие в недопустимом месте эквивалентно DENY):
MASQ - только для цепочки forward - подменить адрес отправителя на свой,
номер порта на случайновыбранный и запомнить в таблицах ядра, чтобы обратный
пакет преобразовывался автоматически;
REDIRECT - только для цепочки input, TCP или UDP - несмотря на то, что
пакет чужой, послать его локальному процессу на указанный порт;
имя пользовательской цепочки - переход на подпрограмму;
RETURN - конец цепочки (как бы возврат из пользовательской цепочки-подпрограммы);
пусто - только увеличить счетчики байтов и пакетов и перейти к следующему
правилу в цепочке, счетчики - 64-битные.
Управление цепочками производится с помощью программ ipchains,
ipchains-save (сохранение
текущей конфигурации на stdout), ipchains-restore (чтение сохраненной ранее
конфигурации с stdin). После загрузки определены цепочки input (ACCEPT),
output (ACCEPT), forward (ACCEPT). Основные опции ipchains:
-N имя-цепочки (создать цепочку)
-X имя-цепочки (удалить пустую цепочку, на которую нет ссылок)
-L [ -v ] [имя-цепочки] (показать список правил
и счетчики)
-A имя-цепочкиправило(добавить правило к цепочке)
-D имя-цепочкиномер (удалить правило с указанным
номером, нумерация с 1)
-D имя-цепочкиправило (удалить правило по текстуальному совпадению)
-F имя-цепочки (удалить все правила из цепочки)
-I имя-цепочкиномерправило (вставить
правило в цепочку перед правилом с указанным номером, нумерация с 1)
-R имя-цепочкиномерправило (заменить)
-M -L (показать текущие маскарадные соединения)
-M -S tcptcpfinudp (установить соответствующие
timeout в секундах)
-P имя-цепочкидействие (изменить действие по умолчанию)
Шаблон правила может включать (если в качестве адреса хоста указывается
имя, соответствующее нескольким адресам, то добавляется соответствующее
количество правил; восклицательный знак инвертирует шаблон):
--proto | -p [!] протокол (tcp/udp/icmp/all)
--bidirectional | -b (добавляется два правила: прямое и обратное)
--source | -s | --src [!] address[/mask] [!] [port[:port]] (маска может быть записана как в виде 4-х десятичных чисел через точку, так и в виде одного числа)
--interface | -i [!] имя[+] (ppp0,
lo, eth0; + - соответствует любой подстроке)
--jump | -jдействие [port](номер
порта для REDIRECT)
--mark | -m [+-]число (пометить пакет
для QoS)
--log | -l (запись о пакете в журнал)
--numeric | -n (выводить адреса и порты в числовом виде)
--output | -o [maxsize] (вывести пакет на устройство netlink)
-v (повысить болтливость)
[!] --fragment | -f (только для последующих кусков
фрагментированных пакетов)
[!] --syn | -y (имеет смысл только для TCP: только
пакеты с установленным флагом SYN, отрицание означает установленный флаг
ACK)
--TOS | -tandmaskxormask (управление битами TOS - type of service)
Тщательно составленные и отлаженные цепочки сохранять по ipchains-save
(ipchains.transparent_proxy_and_firewall) и восстанавливать при
загрузке по ipchans-restore (/etc/rc.d).