Автор : Сукиязов Сергей Александрович (2005г.)
Модель безопасности в сети VPN реализуется с помощью настройки правил брандмауэра (FireWall).
Правила брандмауэра определяют порядок фильтрации сетевых пакетов в соответствии с принятой политикой безопасности.
Модель безопасности строится на трёх основных понятиях – уровень доступа, сервис и сетевой интерфейс. Охарактеризуем подробнее эти понятия.
Первое понятие - уровень доступа, определяет полномочия хоста в корпоративной сети. Уровень доступа имеющий меньший номер соответствует более высоким привилегиям. Нулевой уровень доступа соответствует отсутствию контроля привилегий, т.е. администраторский доступ. Модель безопасности включает шесть уровней доступа:
Каждый уровень доступа, кроме нулевого, включает в себя уровень привелегий предыдущего уровня доступа. Другими словами, уровень доступа M - 1, обладает теми же привилегиями что и уровень M.
Второе понятие – сервис, определяет набор параметров сетевого пакета, позволяющих однозначно идентифицировать доступ к определённому ресурсу сети. Каждый из сервисов сопоставляется с определённым уровнем доступа. Другими словами, чтобы получить доступ к определённому сервису сети, необходимо иметь уровень доступа не ниже уровня доступа заданного для этого сервиса.
Третье понятие – сетевой интерфейс, определяет набор параметров сетевого пакета, позволяющих однозначно идентифицировать сетевое устройство хоста через которое предавался или будет передаваться сетевой пакет. Обычно сетевой интерфейс соответствует реальному или виртуальному устройству передачи данных хоста, если речь идёт о модели безопасности хоста. В случае модели безопасности шлюза или маршрутизатора, сетевой интерфейс, соответствует паре реальных или виртуальных устройств передачи данных хоста, однозначно идентифицирующих маршрут передачи данных.
Сетевой интерфейс связывается со списком сервисов, к которым разрешается доступ с использованием соответствующего сетевого устройства. Если необходимо разрешить доступ ко всем сервисам доступным через указанное сетевое устройство для определённого уровня доступа, то сетевой интерфейс связывается напрямую с требуемым уровнем доступа. В этом случае со всех хостов, удовлетворяющих требуемому уровню доступа, будет разрешён доступ ко всем сервисам, доступным черезсетевой интерфейс.
Таким образом, структура модели безопасности будет иметь следующий вид:
Все понятия модели безопасности разделяются на две группы правил:
Правила этих двух групп формируются независимо друг от друга. Т.о. некоторый хост может иметь администраторские привилегии в сети и обычные привилегии при доступе к самому маршрутизатору.
Совокупность всех правил в обоих группах образует политику безопасности.
Для реализации модели безопасности используется пакет iptables. Пакет iptables может быть загружен с домашней страницы проекта Netfilter (http://www.netfilter.org/). Кроме того, для работы iptables соответствующим образом должно быть сконфигурировано ядро Linux-системы.
Iptables используется для настройки, управления и мониторинга таблиц правил фильтрации IP пакетов в ядре ОС Linux. Каждая таблица содержит несколько встроенных цепочек и может также содержать цепочки определённые пользователем.
Каждая цепочка представляет собой список правил, которые должны совпадать с набором пакетов. Каждое правило определяет что нужно делать если пакет совпал с условием. Это действие называется 'цель', которое, в свою очередь, может быть переходом к цепочке определённой пользователем в этой же таблице.
В реализации модели безопасности для каждого из понятий создаётся отдельная цепочка определённая пользователем. Взаимодействие понятий модели безопасности реализуется посредством переходов между этими цепочками.
Рассматриваемая структура модели безопасности позволяет организовать цепочки, определённые пользователем, таким образом, чтобы порядок правил внутри каждой из цепочек не имел значения.
Цепочки определяющие уровни доступа в группе правил хоста имеют следующие имена:
host-access-level-0
host-access-level-1
host-access-level-2
host-access-level-3
host-access-level-4
host-access-level-5
Все правила в этих цепочках должны заканчиваться переходом к цели ACCEPT (сетевой пакет должен приниматься) и определять параметры сетевого пакета, таким образом, чтобы максимально однозначно идентифицировать хост.
Другими словами, если определённому хосту соответствует уровень доступа M, то в цепочке host-access-level-M
должно присутствовать правило, при совпадении условий которого выполняется переход на цель ACCEPT.
В этих цепочках выполняется проверка только на принадлежность сетевого пакета определённому хосту. Т.к. каждый уровень доступа, кроме нулевого, включает в себя уровень привилегий предыдущего уровня доступа, то каждая из цепочек host-access-level-[1..5]
должна включать в себя правило обеспечивающее безусловный переход на цепочку предыдущего уровня. Например:
iptables -t filter -A host-access-level-1 -j host-access-level-0
iptables -t filter -A host-access-level-1 -j ACCEPT \
-s 176.31.0.18 -m mac –mac-source 00:11:11:9f:49:15
Цепочки определяющие уровни доступа в группе правил маршрутизатора имеют аналогичные имена. В именах этих цепочек слово host заменяется на слово forward.
Цепочки определяющие сервисы в группе правил хоста имеют следующие имена: host-service-<имя сервиса>
. Например для сервиса SSH имя цепочки будет иметь вид:host-service-sshd
.
В такую цепочку вставляется группа правил однозначно идентифицирующая обращение к заданному сервису. Правила в этой цепочке должны заканчиваться переходом на одну из цепочек, определяющих уровни доступа к сервису. Если сервис является общедоступным, то правила могут заканчиваться переходом к цели ACCEPT.
Сервис SSH требует нулевого уровня доступа (только администраторы) и определяет факт обращения к сервису SSH по условиям: протокол TCP и порт назначения 22. Пример формирования цепочек Iptables:
iptables -t filter -A host-service-ssh -j host-access-level-0 \
-m tcp -p tcp –dport ssh
Цепочки определяющие сервисы в группе правил маршрутизатора имеют аналогичные имена. В именах этих цепочек слово host заменяется на слово forward. Правила в этих цепочках завершаются переходом к одной из цепочек frward-access-level-[0-5]
.
Цепочки определяющие интерфейсы в группе правил хоста имеют следующие имена: host-input-<имя интерфейса>
для входящих на сетевой интерфейс пакетов и host-output-<имя интерфейса>
для исходящих из сетевого интерфейса пакетов. Например для сетевого интерфейса eth0 будут созданы две цепочки:
host-input-eth0
host-output-eth0
Т.к. сетевые интерфейсы могут появляться и убираться из системы динамически, необходимо создать специальные цепочки host-input
и host-output
. Безусловные переходы на эти цепочки добавляются в предопределённые цепочки INPUT
и OUTPUT
соответственно. Перед переходом на щепочку host-input
в предопределенной цепочке INPUT
выполняется переход на цепочки обрабатывающие “связанные” пакеты и пакеты DHCP. После перехода на цепочки host-input
и host-output
в предопределенных цепочках INPUT
и OUTPUT
соответственно добавляется безусловный переход к цели REJECT. Такая структура позволяет добиться независимости от порядка следования прави в цепочках host-input
и host-output
и отвержению всех пакетов непрошедших фильтрацию. В цепочки host-input
и host-output
будут динамически добавляться/удаляться правила обеспечивающие переходы на соответствующие цепочки сетевых интерфейсов.
Например:
iptables -t filter -A INPUT -j host-allow-related
iptables -t filter -A INPUT -j host-allow-bootp
iptables -t filter -A INPUT -j host-input
iptables -t filter -A INPUT -j REJECT
iptables -t filter -A host-input -j host-input-eth0 -i eth0
iptables -t filter -A OUTPUT -j host-output
iptables -t filter -A OUTPUT -j REJECT
iptables -t filter -A host-output -j host-output-eth0 -o eth0
В каждую из цепочек обрабатывающих входящие пакеты для сетевого интерфейса добавляются безусловные переходы на цепочки сервисов.
Эти переходы определяют какие сервисы будут доступны с этого сетевого интерфейса. Например, следующее правило разрешает доступ к сервису SSH с сетевого интерфейса eth0:
iptables -t filter -A host-input-eth0 -j host-service-ssh
Если для какого-нибудь уровня доступа разрешается доступ к любому сервису, то в цепочку обрабатывающую пакеты интерфейса добавляется безусловный переход на цепочку уровня доступа. Например:
iptables -t filter -A host-input-eth0 -j host-access-level-0
В каждую из цепочек обрабатывающих исходящие пакеты для сетевого интерфейса добавляются безусловные переходы на цель ACCEPT.
В качестве интерфейсы в группе правил маршрутизатора принимается направление передачи пакета от одного сетевого интерфейса к другому. Цепочки определяющие интерфейсы в группе правил маршрутизатора имеют следующие имена: forward-<входящий интерфейс>-<исходящий интерфейс>
.
Т.к. сетевые интерфейсы могут появляться и убираться из системы динамически, необходимо создать специальную цепочку forward-forward
. Безусловный переход на эту цепочку добавляется в цепочку FORWARD
. Перед переходом на щепочку forward-forward
в предопределённой цепочке FORWARD
выполняется переход на цепочки обрабатывающие “связанные” пакеты и пакеты DHCP. После перехода на цепочку forward-forward
предопределённой цепочке FORWARD
добавляется безусловный переход к цели REJECT. Такая структура позволяет добиться независимости от порядка следования прави в цепочке forward-forward
и отвержению всех пакетов не прошедших фильтрацию. В цепочку forward-forward
будут динамически добавляться/удаляться правила обеспечивающие переходы на соответствующие цепочки сетевых интерфейсов.
Например, если необходимо разрешить доступ по протоколу SSH из сети, подключённой к сетевому интерфейсу eth0, в сеть, подключённую к сетевому интерфейсу eth1:
iptables -t filter -A FORWARD -j forward-allow-related
iptables -t filter -A FORWARD -j forward-allow-bootp
iptables -t filter -A FORWARD -j forward-forward
iptables -t filter -A FORWARD -j REJECT
iptables -t filter -A forward-forward -j forward-eth0-eth1 \
-i eth0 -o eth1
iptables -t filter -A forward-eth0-eth1 -j forward-service-sshd