Differences between revisions 8 and 9
Revision 8 as of 2008-07-10 04:00:26
Size: 25793
Editor: eSyr
Comment:
Revision 9 as of 2008-07-12 23:36:13
Size: 20035
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
Это тематика позапрошлого дня, когда мы гворили про сеть. Мы потрогали стек протоколов, в том числе, гворили о маршрутизации, и ещё лектор говорил о том, что
Line 5: Line 4:
Для того, чтобы компьютер был маршрутизатором, нужно выставить системную переменную, параметр ядра (ip forwarding), чтобы оно занималось перекладыванием пакетов из одной СПД в другую. Надо сказать, что перекладывание из одного интерфейса в лругой (маршрутизация) каких-то пакетов — задача частная, которая в общем случае выглядит следующим образом: есть задача по перераспределению, преобразованию и ограничению трафика. Вспомним о том, что мы говорили о компьютерных сетях и стеке протоколов TCP/IP. В частности, говорилось о задаче маршрутизации, говорилось о том, что маршрутизацией обычно занимаются выделенные для этого устройства --- маршрутизаторы. В роли маршрутизатора может выступать и обычный компьютер. Для того, чтобы компьютер под управлением ОС Linux был маршрутизатором, нужно выставить параметр ядра ip_forwarding.
Line 7: Line 6:
То есть, манипулировать какими-то данными, которые проходят через маршрутизатор (возможно, они и зарождаются в нём, возможно, они ему направлены), модифицировать этот трафик сообразно нашим нуждам, и, третье, накладывать ограничения на трафик, начиная просто фильтрацией, когда мы просто не допускаем какой-то вид сетевой активности, и заканчивая более тонкими ограничениями, например, на объём передаваемого траффика (шейпинг), и т.д. Под трафиком имеется в виду обобщенный массив передаваемых по сети данных. Маршрутизация может быть рассмотрена как частная задача. Более общей задачей, которую мы и будем рассматривать, является задача ограничения, перераспределения и преобразования сетевого траффика(под трафиком понимается обобщенный массив передаваемых по сети данных). То есть, компьютер должен манипулировать данными, которые проходят через него(возможно, он и посылает эти данные, или они направлены ему), каким-либо образом модифицировать эти данные и накладывать на траффик ограничения, начиная от простой фильтрации данных, поступающих с определенного компьютера или относящихся к определенному протоколу и заканчивая более тонкими ограничениями, например, на объём передаваемого траффика (шейпинг).
Line 9: Line 8:
Итак:
Итак, мы имеем следующие задачи:
Line 14: Line 12:
Это задачи межсетевого экрана.
Line 15: Line 14:
Обратите внимание, что кое-какие вещи, например, простейшая маршрутизация, делаются более или менее автоматически. Если соответствующиq параметр ядра включён и если таблицы маршрутизации правлиьные, то оно будет работать автоматически, но нужно понимать, что номенклатурно эта уже функция некоторого сетевого устройства, которое заточено под некоторые задачи из приведенного выше списка. То же относительно ограничения. Если без дополнительных настроек пытаться передать данные по адресам, которые недоступны в локальной сети, они не передадутся и фактически будет реализовано некоторое ограничение трафика. Хотя мы явно его не вводили. Некоторые из этих задач выполняются в некотором роде автоматически. Если установлен соответствующий параметр ядра и таблицы маршрутизации правильные, то маршрутизация будет производиться ядром автоматически. Также, если послать пакет на недоступный адрес, то он не передастся. Это некоторое "естественое" ограничение траффика.
Line 17: Line 16:
В принципе, межсетевой экран как инструмент — штука совокупная. Особенно, когда вспоминаем, что в стеке протоколов 4 уровня. По всей видимости, можно вообразить решение всех этих задач на каждом из этих уровней. Даже на нижнем уровне пятувровневой схемы (носитель) есть замечательный инструмент ограничения трафика -- секатор. Представим себе комплекс задач. Межсетевой экран как таковой это подход от подзадачи. У нас есть задача обеспечить безопасеность работы в сети, эта задача решается разными способами, в частности ограничением или перераспределением или преобразованием траффика, который в эту сеть поступает, и эти способы могут быть реализованы различными инструментами. Такой трёхуровневый подход: задача-решение-инструмент. Все три из упомянутых задач могут возникнуть на любом из 4 уровней стека TCP/IP. Межсетевой экран --- это некий совокупный инструмент для их решения, он может состоять из многих программ и аппаратных средств. Рассмотрим подробнее задачи межсетевого экрана на каждом из уровней TCP/IP.
Line 19: Line 18:
Обратите внимание, что межсетевой экран — это решение, это не задача. Не уточняется, зачем нужно ограничивать возможности сети передачи данных, поэтому это не задача. С другой стороны, когда мы гворим, что для задачи ограничения доступа в сеть используется межсетевой экран, мы не гвоорим, каким образом реализуется этот экран. Конкретный инструмент может быть iptables, iproute2, секатор. То есть, решение реализуется не одним инструментом. В этом цикле (диаграмма?) может быть много задач, много решений и много инструментов. И когда мы гворим про сетевой экран, мы говорим про решение, которое восходит от инструмента. === Интерфейсный уровень ===
==== Ограничение ====
Ограничение на интерфейсном уровне. Примером задачи может служить фильтрация по MAC-адресам. Средства такой фильтрации есть в iptables.
Line 21: Line 22:
Это к чему. Нельзя говорить, что, например межсетевой экран это iptables. Это неправильно. С другой стороны. нельзя говорить о том, что сетевой экран — гарантия безопасности сети. И то и другое — это никакое ни наблюдение или практический результат работы, допустим, с iptables. Это результат того, что решение не является задачей и не является инструментом. Для задачи обеспечения безопасности далеко не всегда удовлетвояет решение "межсетевой экран", а сам по себе межсетевой экран совершенно не всегда явлеятся конкретным инструментом, например iptables. Но мы будем главным образом разговаривать про iptables. Поясню, почему. ==== Перераспределение ====
Обычно распределение на интерфейсном уровне делается следующим образом: в среде передачи данных создается искуственным образом виртуальные сети (VLAN), например, использованием байта в теле Ethernet-фрейма, указывающего номер виртуальной сети. На компьютере регистрируются виртуальные интерфейсы, соответствующие VLAN, и таким образом задача перераспределения переносится с интерфейсного уровня на сетевой. Это делается с помощью специального модуля ядра(vlanutils) и iptables
Line 23: Line 25:
Итак, каждая из трех задач может решаться на каждом из 4 уровней организации сети. Попробуем представить, на каком из этих уровней ==== Преобразование ====
Преобразование таким же образом выносится на уровень выше посредством VLAN.

Обычно эти задачи на интерфейсном уровне не очень востребованы и решаются не компьютерами, а специальными аппаратными средствами.

##{02:53:07}
=== Сетевой уровень ===
==== Ограничение ====
Наиболее часто здесь решается задача фильтрации по IP-адресам. У пакета есть отправитель и получатель, на основе их адресов принимается решение, что делать с пакетом. Также иногда ограничиваются некоторые виды ICMP-сообщений. Делается это с помощью iptables
##Мы видели в альтераторе ICMP, который можно было разрешить (скриншот?)

==== Перераспределение ====
Распределение на уровне 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 с этим справляется.

Сводная таблица:
Line 29: Line 70:
=== Интерфейсный уровень ===
==== Ограничение ====
Ограничение на интерфейсном уровне. Сужение, наверное, трудно реализовать в разделяемой среде передачи данных, а ограничение делается сплошь и рядом, например фильтрация по уникальным идентификаторам сетевых устройств (MAC-адресам в случае Ethernet-устройств). Это умеет iptables.
Мы видим, что основным инструментом в нашей задаче является iptables, поэтому мы и рассмотрим его побробнее. Но нельзя забывать, что для решения этой задачи могут потребоваться и другие инструменты.
Line 33: Line 72:
==== Перераспределение ====
Распределение тоже можно сделать в iptables. У вас регистрируются виртуальные сетевые интерфейсы, соответсвующий каждый соответствующему vlan'у, после чего они, скорее всего, ядерным модулем... (см. vlanutils) Таким образом, задача распределения на интерфейсном уровне сводится к той же задаче на сетевом уровне.
Достаточно неплохо введение в эту тему излождено в Курячем-Маслинском, в соответствующей главе(ссылка?).
Line 36: Line 74:
==== Преобразование ====
Преобразование на интерфейсном уровне?.. Нужен некоторый ядерный модуль, который организует соотв. vlan-интерфейс... (неясно, зачем).
Я так понимаю, про iptables подробнее в следующей лекции. Если неправильно понимаю, напишите --- переведу оставшееся -- -- VladimirLysikov <<DateTime(2008-07-12T23:36:09Z)>>
Line 39: Line 76:
Вопрос общего плана: насколько это вобще востребовано? Кроме vlan'ов, которые реально востребовны, но как правило решаются аппаратно и в линукс-машину их втыкать особенно не надо. Обычно покупается свитч с поддержкой vlan'а, если он смотрит на другой свич с поддержкой vlan'а то между ними ходят "крашеные пакеты", а в другую стороны — ethernet-фреймы. ##Идея состоит в следующем. Тут надо на самом деле... лектор не любит линуксовый фаерволл, бсдшный намного прямее... Идея в том, что у нас приходят пакеты и мы их обрабатываем в нескольких цепочках. Сначала мы обрабатываем пакеты в цепочке правил mangle, для преобразования, потом в цепочке специального преобразования, nat, подмены адресов, потом в цепочке, предназначенной для фильтрации, filter.
Line 41: Line 78:
Есть подозрение, что это не очень востребовано. ##Когда разрабатывали всю эту систему, выяснилось, что на самом деле не все пакеты одинаковые в нашей системе. В зависимочсти от того, кто адресат и получатель пакета, очень разные решения нужно принимать. Для этого завели таблицы, состоящие из цепочек. Вы видите (ссылка на учебник?) архитектуру таблиц по умолчанию, а можно завести сколько угодно и таблиц, и цепочек, по-моему.
Line 43: Line 80:
##{02:53:07}
=== Сетевой уровень ===
==== Ограничение ====
По IP-адресам. Нужно часто, используется iptables. Первое, о чём думают при слове межсетевые экраны. У пакета есть отправитель, есть получатель, на основе их адресов принимается решение, что делать с пакетом, в соответствии с некоторой дисциплиной. Мы видели в альтераторе ICMP, который можно было разрешить (скриншот?)
##Идея в следующем: даже по умолчанию есть три типа пакетов: пакеты, которые предназначены нам, пакеты, который от нас уходят, и пакеты, которые мы сквозь себя маршрутизируем. Для этого удобно использовать несколько разных групп правил. Цепочка называется цепочкой, т.к. это упорядоченный список правил, каждое из который состоит из двух частей. Левая половинка правила описывает вид пакета, т.е. условие на пакет, а вторая половинка правила описывает, что с таким пакетом делать.
Line 48: Line 82:
==== Перераспределение ====
Распределение на уровне ip нам всегда нужно, это основная задача на этом уровне. Для этого iptables, iproute2. Нужно создавать некоторое множество правил, согласно которым управлять пакетами. Если мы решаем эту задачу нест. образом, то созд. множество правил, по которым это распр. осуществляется. Для этог есть ipt и ipr2.
##И способ обработки следующий: если левая половинка, т.е. условие, выполняется, то делается то, что в написано в правой и обработка текущей цепочки закачивается.
Line 51: Line 84:
==== Преобразование ====
Начем нужно преобразование IP-адресов. Это все еще непонятная ситуация: как быть, когда адреса в локальной сети имеют диапазон интранетовский, т.е. внутренний, и хотят подключиться к внешнему серверу. Один способ мы уже рассмотрели, это воспользоваться proxy, но это значит в корне изменить ситуацию. Было бы неплохо, чтобы сам пользователь решил, кому и какие пакеты он собирается слать, а не передоверял это дело proxy, к тому же в них cookie плохо работают, в частности в анонимизирующем они не работают.
##Это называется политика "first wins".
Line 54: Line 86:
Прозрачный прокси: когда пользователь заходит на 80 порт на своей машине, а на самом деле он заходит на удалённый сервер, но этого не замечает. Браузер можно не настраивать специально. Есть несколько проблем, если это не требует настроек в браузере, значит и управлять этим прокси по-человечески нельзя, и другие проблемы. С SSL есть серьёзные проблемы, он не работает в принципе. ##Таким образом, приходит пакет, мы что-то с ним делаем, пока в цепочке не найдётся правило, которое подходит ему по типу. И есть в цепочке правило по умолчанию, что делать с теми пакетами, к которым не подошло ни одно правило. Например, выбрасывать, или передавать дальше. Кстати, дальше -- куда?.. На следующую таблицу, или цепочку. Все строго. Раньше были только цепочки (ipchains), а теперь таблицы (iptables). Когда пакет проходит через одну цепочку, тем или иным способом, он проходит в следующую (порядок цепочек задан), и так далее. Если только он не попал в такое правило, где в качестве действия указано "выбросить" или "передать в конкретную другую цепочку".
Line 56: Line 88:
Это такой метод, когда машина из внутренней сети отсылает пакет наружу, каким-то образом запоминается, что это был за пакет, у этого пакета подменяется ip-адрес и уже с ip-адресом внешним этот пакет уходит по назначению, и когда на него происходит ответ, этот ответ, доходя до машины, чей ip-адрес был подставлен преобразуется обратно по каким-то признакам выявляется, какой же на самом деле хост из внутренней сети отправил первый пакет, и ответный пакет возвращается ему. Делается это опять-таки с помощью iptables, ##Все-таки по таблицам, если ему сказали DNAT, то он попадет в цепочку NAT, так просто в цепочку NAT он не попадет. Лектор мало ел. Давайте разберемся. Кто из них кто. Лектор никогда не любил эту штуку. Цепочки объединены в таблицу.
Line 58: Line 90:
=== Траспортный ===
==== Ограничение ====
По портам, типично. iptables. Ограничение по объёму, traffic control (tc) входит в iproute2.
##Дима: OUTPUT не одна цепочка, их много разных.
Line 62: Line 92:
==== Распределение ====
Проброс портов (port forwarding), анализирует номер TCP-порта.
##ГК: Нет, на линуксе ничего кроме этого безобразия нет. Нельзя, нельзя читать manual к iptables. Дим, попробуйте объяснить эту картинку.
Line 65: Line 94:
==== Преобразование ====
NAT, он работает и на транспортном уровне, т.к. задействует такое понятие, как sequential number, и пр. Этим занимается iptables.
##Дима: Прямоугольнички, которые обозначены большими буквами на картинке, то есть PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING — это названия цепочек. А в правом верхнем углу каждого прямоугольничка указано, в каких таблицах существует такая цепочка. То есть, когда пакет приходит, он сначала идет в цепочку PREROUTING таблицы mangle, потом PREROUTING nat, потом смотрится, какое решение о маршрутизации принимать...
Line 68: Line 96:
=== Прикладной ===
==== Ограничение ====
Фильтрация. Мы только что это делали (squid), LOR фильтровали, мы фильтровали исключительно адрес прикладного уровня —. Запретить аську, осла, и т.п. — l7filter для netfilter. Он может, будучи на уровне TCP, выяснить, что за пртокол прикладного уровня по этому TCP-соединеню идёт. Кроме того, эти инструменты аккуратно промеряют тайминги, т.к. за какой срок это происходит. Простейшее взаимодействие с прикладным уровнем есть также и в iptables.
##ГК: Кто во что объединён, Дим?..
Line 72: Line 98:
Антиспам. Анализируется адрес протокола прикладного уровня SMTP, то есть e-mail, анализируется содержимое прикладного уровня, содержимое письма. Фактически, фильтрация на этом уровне — это чаще всего дело отдельного специального приложения, по крайней мере с точки зрения linux, да и не linux тоже. ##Дима: Цепочки объединены в таблицы.
Line 74: Line 100:
==== Распределение ====
Если речь идет о распределении на уровне прикладного протокола, значит, оно должно быть реализовано в этом самом протоколе. Допустим, пересылка почты, она реализуется на уровне e-mail адресов, доменов, и т.д.
##ГК: Зачем? В данном случае наоборот. Или я чего-то непонял?
Line 77: Line 102:
==== Преобразование ====
То же самое --- реализуется отдельным приложением. Хотя, преобразование на прикладном уровне делает также iptables. Connection tracker в нём есть. Когда в прикладном протоколе используется адрес машины-получателя, то нельзя, чтобы туда просочился интранетовский адрес (10.0.0.сколько-то), работать не будет вообще, что FTP, что IRC.
##Дима: Нет, смотрите. Есть INPUT: есть цепочка INPUT в таблице mangle, есть цепочка INPUT в таблице filter. Это разные цепочки. Выполняется сначала одна, потом другая.
Line 80: Line 104:
И теперь ответьте на вопрос, про какой инструмент стоит теперь поговорить? iptables. На прикладном уровне у нас существенный пробел, именно поэтому есть отдельный скрипт для настройки, отдельно почтовый сервер с возможностью фильтрации. В остальных случаях — iptables. ##ГК: Нет.
Line 82: Line 106:
Да, есть задачи, с которыми гораздо легче справляется или только это и делает iproute2. Но лектор не готов сейчас рассказывать про iproute2, это такая мощная внутренностная программа такая линуксовая, а о возможностях iptables можно рассказать. ##?: Прямоугольник — это не одна цепочка.
Line 84: Line 108:
(тема CUPS у нас заморожена, мы только начали тыкать). ##ГК: Ну и? Давайте тогда про путь пакета.
Line 86: Line 110:
Достаточно неплохо введение в эту тему излождено в Курячем-Маслинском, в соответствующей главе. Идея состоит в следующем. Тут надо на самом деле... лектор не любит линуксовый фаерволл, бсдшный намного прямее... Идея в том, что у нас приходят пакеты и мы их обрабатываем в нескольких цепочках. Сначала мы обрабатываем пакеты в цепочке правил mangle, для преобразования, потом в цепочке специального преобразования, nat, подмены адресов, потом в цепочке, предназначенной для фильтрации, filter. ##Дима: Вот пакет пришел из сети. Он пойдёт вначале в цепочку PREROUTING таблицы mangle, потом он пойдёт в цепочку PREROUTING таблицы nat, потом принимается промежуточное решение о маршрутизации...
Line 88: Line 112:
Когда разрабатывали всю эту систему, выяснилось, что на самом деле не все пакеты одинаковые в нашей системе. В зависимочсти от того, кто адресат и получатель пакета, очень разные решения нужно принимать. Для этого завели таблицы, состоящие из цепочек. Вы видите (ссылка на учебник?) архитектуру таблиц по умолчанию, а можно завести сколько угодно и таблиц, и цепочек, по-моему. ##ГК: Тогда объясните мне, почему они во что-то объединены?
Line 90: Line 114:
Идея в следующем: даже по умолчанию есть три типа пакетов: пакеты, которые предназначены нам, пакеты, который от нас уходят, и пакеты, которые мы сквозь себя маршрутизируем. Для этого удобно использовать несколько разных групп правил. Цепочка называется цепочкой, т.к. это упорядоченный список правил, каждое из который состоит из двух частей. Левая половинка правила описывает вид пакета, т.е. условие на пакет, а вторая половинка правила описывает, что с таким пакетом делать. ##Дима: .... это, если я правильно помню, обоснование приблизительно такое было. Разные типы действий над пакетами разрешены в разных таблицах. Например, сказать слово SNAT, т.е. выполнять...
Line 92: Line 116:
И способ обработки следующий: если левая половинка, т.е. условие, выполняется, то делается то, что в написано в правой и обработка текущей цепочки закачивается. ##ГК: Все, я понял. Самое смешное, Дим, что они разрешены везде. У меня получалось это объяснить, когда-то давно... Давайте сделаем так. На сегодня мы бардак прекратим.
Line 94: Line 118:
Это называется политика "first wins".

Таким образом, приходит пакет, мы что-то с ним делаем, пока в цепочке не найдётся правило, которое подходит ему по типу. И есть в цепочке правило по умолчанию, что делать с теми пакетами, к которым не подошло ни одно правило. Например, выбрасывать, или передавать дальше. Кстати, дальше -- куда?.. На следующую таблицу, или цепочку. Все строго. Раньше были только цепочки (ipchains), а теперь таблицы (iptables). Когда пакет проходит через одну цепочку, тем или иным способом, он проходит в следующую (порядок цепочек задан), и так далее. Если только он не попал в такое правило, где в качестве действия указано "выбросить" или "передать в конкретную другую цепочку".

Все-таки по таблицам, если ему сказали DNAT, то он попадет в цепочку NAT, так просто в цепочку NAT он не попадет. Лектор мало ел. Давайте разберемся. Кто из них кто. Лектор никогда не любил эту штуку. Цепочки объединены в таблицу.

Дима: OUTPUT не одна цепочка, их много разных.

ГК: Нет, на линуксе ничего кроме этого безобразия нет. Нельзя, нельзя читать manual к iptables. Дим, попробуйте объяснить эту картинку.

Дима: Прямоугольнички, которые обозначены большими буквами на картинке, то есть PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING — это названия цепочек. А в правом верхнем углу каждого прямоугольничка указано, в каких таблицах существует такая цепочка. То есть, когда пакет приходит, он сначала идет в цепочку PREROUTING таблицы mangle, потом PREROUTING nat, потом смотрится, какое решение о маршрутизации принимать...

ГК: Кто во что объединён, Дим?..

Дима: Цепочки объединены в таблицы.

ГК: Зачем? В данном случае наоборот. Или я чего-то непонял?

Дима: Нет, смотрите. Есть INPUT: есть цепочка INPUT в таблице mangle, есть цепочка INPUT в таблице filter. Это разные цепочки. Выполняется сначала одна, потом другая.

ГК: Нет.

?: Прямоугольник — это не одна цепочка.

ГК: Ну и? Давайте тогда про путь пакета.

Дима: Вот пакет пришел из сети. Он пойдёт вначале в цепочку PREROUTING таблицы mangle, потом он пойдёт в цепочку PREROUTING таблицы nat, потом принимается промежуточное решение о маршрутизации...

ГК: Тогда объясните мне, почему они во что-то объединены?

Дима: .... это, если я правильно помню, обоснование приблизительно такое было. Разные типы действий над пакетами разрешены в разных таблицах. Например, сказать слово SNAT, т.е. выполнять...

ГК: Все, я понял. Самое смешное, Дим, что они разрешены везде. У меня получалось это объяснить, когда-то давно... Давайте сделаем так. На сегодня мы бардак прекратим.

##{03:26:10}

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

Вспомним о том, что мы говорили о компьютерных сетях и стеке протоколов 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-12 23:36:09


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

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

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

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

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

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

Level

Maintainer

Start date

End date

20

1

1

1

1

PavelSutyrin, VladimirLysikov, MaximByshevskiKonopko


PspoClasses/080707/04RoutingTheory (last edited 2008-10-09 18:12:31 by MaximByshevskiKonopko)