Различия между версиями 8 и 9
Версия 8 от 2008-07-10 07:00:26
Размер: 25793
Редактор: eSyr
Комментарий:
Версия 9 от 2008-07-13 02:36:13
Размер: 20035
Редактор: VladimirLysikov
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 3: Строка 3:
Это тематика позапрошлого дня, когда мы гворили про сеть. Мы потрогали стек протоколов, в том числе, гворили о маршрутизации, и ещё лектор говорил о том, что
Строка 5: Строка 4:
Для того, чтобы компьютер был маршрутизатором, нужно выставить системную переменную, параметр ядра (ip forwarding), чтобы оно занималось перекладыванием пакетов из одной СПД в другую. Надо сказать, что перекладывание из одного интерфейса в лругой (маршрутизация) каких-то пакетов — задача частная, которая в общем случае выглядит следующим образом: есть задача по перераспределению, преобразованию и ограничению трафика. Вспомним о том, что мы говорили о компьютерных сетях и стеке протоколов TCP/IP. В частности, говорилось о задаче маршрутизации, говорилось о том, что маршрутизацией обычно занимаются выделенные для этого устройства --- маршрутизаторы. В роли маршрутизатора может выступать и обычный компьютер. Для того, чтобы компьютер под управлением ОС Linux был маршрутизатором, нужно выставить параметр ядра ip_forwarding.
Строка 7: Строка 6:
То есть, манипулировать какими-то данными, которые проходят через маршрутизатор (возможно, они и зарождаются в нём, возможно, они ему направлены), модифицировать этот трафик сообразно нашим нуждам, и, третье, накладывать ограничения на трафик, начиная просто фильтрацией, когда мы просто не допускаем какой-то вид сетевой активности, и заканчивая более тонкими ограничениями, например, на объём передаваемого траффика (шейпинг), и т.д. Под трафиком имеется в виду обобщенный массив передаваемых по сети данных. Маршрутизация может быть рассмотрена как частная задача. Более общей задачей, которую мы и будем рассматривать, является задача ограничения, перераспределения и преобразования сетевого траффика(под трафиком понимается обобщенный массив передаваемых по сети данных). То есть, компьютер должен манипулировать данными, которые проходят через него(возможно, он и посылает эти данные, или они направлены ему), каким-либо образом модифицировать эти данные и накладывать на траффик ограничения, начиная от простой фильтрации данных, поступающих с определенного компьютера или относящихся к определенному протоколу и заканчивая более тонкими ограничениями, например, на объём передаваемого траффика (шейпинг).
Строка 9: Строка 8:
Итак:
Итак, мы имеем следующие задачи:
Строка 14: Строка 12:
Это задачи межсетевого экрана.
Строка 15: Строка 14:
Обратите внимание, что кое-какие вещи, например, простейшая маршрутизация, делаются более или менее автоматически. Если соответствующиq параметр ядра включён и если таблицы маршрутизации правлиьные, то оно будет работать автоматически, но нужно понимать, что номенклатурно эта уже функция некоторого сетевого устройства, которое заточено под некоторые задачи из приведенного выше списка. То же относительно ограничения. Если без дополнительных настроек пытаться передать данные по адресам, которые недоступны в локальной сети, они не передадутся и фактически будет реализовано некоторое ограничение трафика. Хотя мы явно его не вводили. Некоторые из этих задач выполняются в некотором роде автоматически. Если установлен соответствующий параметр ядра и таблицы маршрутизации правильные, то маршрутизация будет производиться ядром автоматически. Также, если послать пакет на недоступный адрес, то он не передастся. Это некоторое "естественое" ограничение траффика.
Строка 17: Строка 16:
В принципе, межсетевой экран как инструмент — штука совокупная. Особенно, когда вспоминаем, что в стеке протоколов 4 уровня. По всей видимости, можно вообразить решение всех этих задач на каждом из этих уровней. Даже на нижнем уровне пятувровневой схемы (носитель) есть замечательный инструмент ограничения трафика -- секатор. Представим себе комплекс задач. Межсетевой экран как таковой это подход от подзадачи. У нас есть задача обеспечить безопасеность работы в сети, эта задача решается разными способами, в частности ограничением или перераспределением или преобразованием траффика, который в эту сеть поступает, и эти способы могут быть реализованы различными инструментами. Такой трёхуровневый подход: задача-решение-инструмент. Все три из упомянутых задач могут возникнуть на любом из 4 уровней стека TCP/IP. Межсетевой экран --- это некий совокупный инструмент для их решения, он может состоять из многих программ и аппаратных средств. Рассмотрим подробнее задачи межсетевого экрана на каждом из уровней TCP/IP.
Строка 19: Строка 18:
Обратите внимание, что межсетевой экран — это решение, это не задача. Не уточняется, зачем нужно ограничивать возможности сети передачи данных, поэтому это не задача. С другой стороны, когда мы гворим, что для задачи ограничения доступа в сеть используется межсетевой экран, мы не гвоорим, каким образом реализуется этот экран. Конкретный инструмент может быть iptables, iproute2, секатор. То есть, решение реализуется не одним инструментом. В этом цикле (диаграмма?) может быть много задач, много решений и много инструментов. И когда мы гворим про сетевой экран, мы говорим про решение, которое восходит от инструмента. === Интерфейсный уровень ===
==== Ограничение ====
Ограничение на интерфейсном уровне. Примером задачи может служить фильтрация по MAC-адресам. Средства такой фильтрации есть в iptables.
Строка 21: Строка 22:
Это к чему. Нельзя говорить, что, например межсетевой экран это iptables. Это неправильно. С другой стороны. нельзя говорить о том, что сетевой экран — гарантия безопасности сети. И то и другое — это никакое ни наблюдение или практический результат работы, допустим, с iptables. Это результат того, что решение не является задачей и не является инструментом. Для задачи обеспечения безопасности далеко не всегда удовлетвояет решение "межсетевой экран", а сам по себе межсетевой экран совершенно не всегда явлеятся конкретным инструментом, например iptables. Но мы будем главным образом разговаривать про iptables. Поясню, почему. ==== Перераспределение ====
Обычно распределение на интерфейсном уровне делается следующим образом: в среде передачи данных создается искуственным образом виртуальные сети (VLAN), например, использованием байта в теле Ethernet-фрейма, указывающего номер виртуальной сети. На компьютере регистрируются виртуальные интерфейсы, соответствующие VLAN, и таким образом задача перераспределения переносится с интерфейсного уровня на сетевой. Это делается с помощью специального модуля ядра(vlanutils) и iptables
Строка 23: Строка 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 с этим справляется.

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


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

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

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

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

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

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

Level

Maintainer

Start date

End date

20

1

1

1

1

PavelSutyrin, VladimirLysikov, MaximByshevskiKonopko


PspoClasses/080707/04RoutingTheory (последним исправлял пользователь MaximByshevskiKonopko 2008-10-09 21:12:31)