From: SG <sg@sg.tomsk.ru.>
Newsgroups: email
Date: Mon, 1 May 2006 18:21:07 +0000 (UTC)
Subject: Простое управление сложным фаерволом (netfilter/iptables)
Наверное каждый системный администратор хотя бы раз сталкивался с
громоздкими настройками фаервола. Не несколько строчек для защиты своего
персонального компьютера или сервера приложений, а сотни строк в каждой
таблице на маршрутизаторе сети. Кто сталкивался - тот знает, как
"удобно" править и как "легко" окинуть взором структуру этого
нагромождения правил в разных таблицах и цепочках. Кроме этого довольно
часто встречается ситуация, когда нужно добавить созданные скриптами
правила в netfilter. Обычно, в таких ситуациях получаются размазанные по
различным скриптам, хранящихся в невообразимых местах (у кого какая
фантазия :) наборы правил. И что же делать с этим ужасом, когда
требуется внести какие-то изменения и применить их? Каждый решает эту
проблему по-своему, но обычно каждое изменение уникально в том смысле,
что администратор забудет запустить вон тот скрипт или не в том порядке.
И неизвестно, что будет после ребута... А если вдруг этот администратор
куда-то делся и его заменяет другой... Какая до боли знакомая
ситуация? :)
В большинстве основанных на rpm дистрибутивах для пакета iptables
существует набор стартовых скриптов и конфигов типа:
В других дистрибутивах тоже должна быть какая-то точка отсчета. Но
проблема заключается в том, что правила netfilter загружаются с помощью
утилиты iptables-restore, которая крайне примитивная и например не
понимает присоединение дополнительных файлов правил с помощью директивы
include.
Я решил все эти проблемы простым способом: организовал дерево каталогов
и файлов с правилами, а собирается все это в стандартный конфиг, который
используется стартовым скриптом /etc/init.d/iptables. В результате
получилась удобная структура конфигов, которую можно легко понять, в
которую можно быстро вносить изменения и в которую могут добавляться
правила, сгенеренные какими-то скриптами.
Вот пример этого:
/etc/sysconfig/iptables-ipv4.d/
rules.create - скрипт для создания конфига
start - стандартный конфиг, который создается этим скриптом и используется
стандартным стартовым скриптом (/etc/init.d/iptables)
/etc/sysconfig/iptables-ipv4.d/filter/
begin
end
forward
input
output
/etc/sysconfig/iptables-ipv4.d/mangle/
begin
end
forward
input
output
postrouting
prerouting
/etc/sysconfig/iptables-ipv4.d/nat/
begin
end
output
postrouting
prerouting
Это шаблон, который должен быть всегда. Пусть большая часть файлов будет
поначалу пустая, но они должны быть.
begin - начало таблицы, тут описываются дефолтные правила. Пример для filter:
Остальные файлы по имени стандартных цепочек. Ну и разумеется, вы можете
там создавать свои файлы с таким же именем, как и название цепочки. Так
же можно поделить большую стандартную цепочку на несколько мелких.
Например:
В этот скрипт можно добавить какие-то дополнительные действия. Например,
у меня там генерится цепочка, которая пропускает трафик в городские сети
(бесплатный).
Попробуйте и часть ваших проблем и проблем ваших заместителей уйдет в прошлое.