Межсетевые экраны: теория

Вспомним о том, что мы говорили о компьютерных сетях и стеке протоколов 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, поэтому мы и рассмотрим его побробнее. Но нельзя забывать, что для решения этой задачи могут потребоваться и другие инструменты.

Достаточно неплохо введение в эту тему излождено в Курячем-Маслинском, в соответствующей главе(ссылка?).

Я так понимаю, про iptables подробнее в следующей лекции. Если неправильно понимаю, напишите --- переведу оставшееся -- -- VladimirLysikov 2008-07-13 02:36:09


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

20

1

1

1

1

PavelSutyrin, VladimirLysikov, MaximByshevskiKonopko