Межсетевые экраны: теория
Вспомним о том, что мы говорили о компьютерных сетях и стеке протоколов TCP/IP. В частности, говорилось о задаче маршрутизации, говорилось о том, что маршрутизацией обычно занимаются выделенные для этого устройства --- маршрутизаторы. В роли маршрутизатора может выступать и обычный компьютер. Для того, чтобы компьютер под управлением ОС Linux был маршрутизатором, нужно выставить параметр ядра ip_forwarding.
Маршрутизация может быть рассмотрена как частная задача. Более общей задачей является задача ограничения, перераспределения и преобразования сетевого трафика (под трафиком понимается обобщенный массив передаваемых по сети данных). То есть, компьютер должен манипулировать данными, которые проходят через него (возможно, он и посылает эти данные, или они направлены ему), каким-либо образом модифицировать эти данные и накладывать на трафик ограничения, начиная от простой фильтрации данных, поступающих с определенного компьютера или относящихся к определенному протоколу и заканчивая более тонкими ограничениями, например, на объём передаваемого трафика (шейпинг).
Итак, мы имеем следующие задачи:
- Ограничение (фильтрация и шейпинг)
- Перераспределение (маршрутизация, перенаправление, балансировка)
- Преобразование
Это задачи межсетевого экрана.
Некоторые из этих задач выполняются, в некотором роде, автоматически. Если установлен соответствующий параметр ядра и таблицы маршрутизации правильные, то корректная маршрутизация будет производиться ядром сразу. Также, если послать пакет на недоступный адрес, то он не передастся. Это некоторое "естественое" ограничение трафика.
Все три из упомянутых задач могут возникнуть на любом из 4 уровней стека TCP/IP. Межсетевой экран --- это некий совокупный инструмент для их решения, он может состоять из многих программ и аппаратных средств. Рассмотрим подробнее задачи межсетевого экрана на каждом из уровней TCP/IP.
Интерфейсный уровень
Ограничение
Ограничение на интерфейсном уровне. Примером задачи может служить фильтрация по MAC-адресам. Средства такой фильтрации есть в iptables.
Перераспределение
Обычно распределение на интерфейсном уровне делается следующим образом: в среде передачи данных создается искуственным образом виртуальные сети (VLAN), например, добавлением байта в теле Ethernet-фрейма, указывающего номер виртуальной сети. На маршрутизаторе регистрируются виртуальные интерфейсы, соответствующие VLAN, и таким образом задача перераспределения переносится с интерфейсного уровня на сетевой. Это делается с помощью специального модуля ядра (vlanutils) и iptables.
Преобразование
Преобразование таким же образом выносится на уровень выше посредством VLAN.
Обычно эти задачи на интерфейсном уровне не очень востребованы и решаются не компьютерами, а специальными аппаратными средствами.
Сетевой уровень
Ограничение
Наиболее часто здесь решается задача фильтрации по IP-адресам. У пакета есть отправитель и получатель, на основе их адресов принимается решение, что делать с пакетом. Также иногда ограничиваются некоторые виды ICMP-сообщений. Делается это с помощью iptables.
Перераспределение
Распределение на уровне IP всегда нужно --- это, в частном случае, маршрутизация, основная задача на этом уровне. Нужно создать некоторое множество правил, согласно которым управлять пакетами. Иногда эта система правил может оказаться очень сложной. Выполняют эту задачу iptables и iproute2.
Преобразование
Преобразование IP-адресов --- также очень часто встречающаяся задача. Каким образом, например, компьютеры локальной сети, могут подключаться к серверам в Интернете, если они имеют локальный адрес? Один метод -- это использование proxy, но он неудобен. Обычно используется NAT (Network Address Translation --- преобразование сетевых адресов). Если машина из внутренней сети посылает пакет наружу, на маршрутизаторе IP-адрес этой машины подменяется IP-адресом машрутизатора во внешней сети, и, когда поступает ответ, адрес преобразуется обратно. Делается это опять-таки с помощью iptables.
Траспортный
Ограничение
Ограничение по портам, типичное ограничение на этом уровне, производится с помощью iptables. Ограничение по объёму, traffic control, входит в пакет iproute2 (программа tc).
Распределение
Одна из основных задач на этом уровне --- проброс портов (port forwarding), позволяет перенаправлять данные с какого-либо порта одного компьютера на какой-либо порт другого. Здесь также используется iptables.
Преобразование
NAT работает и на транспортном уровне, т.к. задействует некоторые свойства пакета, связанные с этим уровнем. Этим занимается iptables.
Прикладной
Ограничение
Фильтрация. Для этого существуют различные программы для различных протоколов, например, squid может фильровать HTTP-соединения по адресу прикладного уровня, URL. Для запрета конкретных протоколов, наприер, ICQ, есть инструмент l7filter для netfilter (iptables). Он по последовательности пакетов определяет, какой протокол ими реализуется. Простейшее взаимодействие с прикладным уровнем есть также и в iptables. Еще одна задача, относящаяся к этому уровню и часто встречающаяся --- антиспам. Анализируется адрес протокола прикладного уровня SMTP, то есть e-mail, анализируется содержимое прикладного уровня, содержимое письма.
Фактически, фильтрация на этом уровне --- это чаще всего дело отдельного специального приложения.
Распределение
Если речь идет о распределении на уровне прикладного протокола, значит, оно должно быть реализовано в этом самом протоколе. Допустим, пересылка почты реализуется на уровне e-mail адресов, доменов, и т.д.
Преобразование
То же самое: реализуется обычно отдельным приложением. Хотя преобразование на прикладном уровне делает также iptables. Когда в прикладном протоколе используется адрес клиента (примером может служить FTP), то нельзя, чтобы туда просочился локальный адрес. Iptables с этим справляется.
Сводная таблица:
|
Интерфейсный уровень |
Сетевой |
Транспортный |
Прикладной |
Ограничение |
iptables |
iptables |
iptables, iproute2 |
l7-filter, iptables, squid, спам-фильтры, ... |
Перераспределение |
iptables |
iptables, iproute2 |
iptables, iproute2 |
... |
Преобразование |
? |
iptables |
iptables |
iptables, ... |
Мы видим, что основным инструментом в нашей задаче является iptables, поэтому мы и рассмотрим его подробнее. Но нельзя забывать, что для решения этой задачи могут потребоваться и другие инструменты.
Достаточно неплохо введение в эту тему изложено в "Курячем-Маслинском", в соответствующей главе (Настройка сети: Межсетевой экран).
Сведения о ресурсах
Готовность (%) |
Продолжительность (ак. ч.) |
Подготовка (календ. ч.) |
Полный текст (раб. д.) |
Предварительные знания |
Level |
Maintainer |
Start date |
End date |
90 |
1 |
1 |
1 |
|
1 |
|
|