Спецкурс по Linux, весна 2007, 10 лекция (от 27 апреля)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Предыдущая лекция | Следующая лекция

Авторский вариант:

Если бы не одна случайность, то надпись на доске (“Межсетевые экраны”) была бы неправильной. Третьим днём ГК сообщили, что он участвует в конференции в РГГУ про Веб 2.0, вести секцию “Новый взгляд на интернет в школе: дистанционное обучение, рефераты, ...”. Был ровно один докладчик из гугла, который промывал мозги, но потом ГК удалось расщевелить людей и было много интересного. Если бы не маршрутка, которая едет час за 100 рублей вместо электрички 2,5 часа за 113, и разгорячённые пользователи, то Гоша бы не подготовился бы вообще или бы подготовился хорошо.


Сколько уровней в пятиуровневом стеке TCP/IP --- 4

Сколько протоколов транспортного уровня --- 2


Для начала дадим определине межсетевому экрану. Зачем это нужно и что оно делает.

  • Зачем.
    • Ограничение трафика
    • Учёт трафика
    • Фильтрация трафика
    • Мониторинг трафика
    • Trafic shaping.
    • Преобразование трафика
    • перенаправление трафика
    Слово “трафик” можно стереть


Есть нечто (трафик). Это нечто надо учитывать, распределять, ограничивать. Типичная работа распределения ресурсов. Давайте попробуем... Это такие задачи, которые надо рещать. Надо чтобы потребители жили вместе, не делали то, чего не надо...


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


Этот список явно отвечает не одному инструменту, есть несколько способов решения этих задач. Более того, есть слово трафик. Что такое трафик? Есть стек протоколов, и на каждом уровне своё понятие трафика.


Как эти задачи решаются на разных уровнях TCP/IP:

  • Интерфейсный
    • Нужно ли это вообще делать? Существует ли это задача внутри одной сети? Например, если мы хотим ограничить адреса. То есть фильтрация может возникнуть.
    • В реальной жизни максимум, что может понадобиться --- фильтрация по МАКу, хотя она легко обходится.
  • Сетевой
    • Нужно ли? Да, ибо он достаточно простой, чтобы не запутаться. Можно делать фильтрацию, учёт, чтобы брать деньги, или просто снимать данные; мониторинг --- отследивание происходящего. Тут есть идентификация по IP-адресу и все задачи решаются
  • Транспортный
    • Нужно ли, они же все решены? Нужно. Зачем? Появляется слово порт, которое отсутствовало, и на первых порах на самом деле мы хотим не трансп уровень решать, это уровень прикладной.
    • Ограничивать новые соединения. Гораздо правильнее резать не каждый десятый пакет, а не давать открывать новые содинения. Это актуально, когда задачи в терминах сеанса. Так что актуальны задачи ограничения и преобразования
  • Прикладной
    • Актуально? Да. Антивирусы. Фотография сенатора.
    • Один сенатор выступил с автоматическим запрещением порнографии путём фаервола уровня пять, этот закон почти приняли. но кто-то скормил этому фильтру фотографию сенатора и он принял её за спам.
    • Антивирус, антиспам: фильтрация, мониторинг

Эта картинка нарисована затем, чтобы у человека не возникало мнение, что фаервол это iptables, ipf .... . поэтому рассказ про них это рассказ о инстументах.

Существует приличная дока по iptables, и ГК не стал бы о ней распространяться, если бы не одно но: если кто-то читал по iptables, то ГК ему сильно сочувствовал. Тут нужно картинку рисовать и выкидовать ненужные вещи. Объяснение картинки тоже довольно странное: у нас есть три ситуации: с пакетом может происходить 5 событий, и из них может быть три ситуации:

  • Приём пакета через сеть
  • Передача, отсылка пакета через сеть
  • Порождение пакета
  • Скармливание, передача, присвоение, присваивание пакета программой
  • Маршрутизация --- принятие рещения

Из этого возникает три workflow:

  • → Приём → маршрутизация → отсылка →
  • → Приём → маршрутизация → присвоение
  • Порождение → маршрутизация → отсылка →


Из обработки трёх этих workflow и возникает картинка в iptables. Она отягощается двумя дополнениями. Каждую стрклку надо обрабатывать в соответствии с указанными задачами. И почти каждая в линуксе обрабатывается.

Картинка ---- см. фото.

Эта схема слегка менее стройная. На этом уровне не происходит обработки. Кроме того, там не один послемаршрутный модуль, а три, ибо свои и чужин пакеты разные, и правила для них должны быть разные.

Исключение: стрелка порождение-маршрутизация.

Внутри это просто устроено. Раньше каждый из квадратиков представлял собой табличку правил, которые применялись последовательно к пакету. Правила вида: условие-что делать. Потом выяснилось, что одной единственной таблицы для такого квадратика недостаточно, и вместо ip... появился iptables, и пакет, попадая к нему, проходит несколько таблиц. Более того, эти таблицы можно создавать самому. Пакет проходит одну табицу, вторую, третью, пока не решится его судьба, потом он маршрктизируется, проходит через много таблиц.... Это позволяет задавать сложные логические структуры: если он пришёл от такого адреса, направляется на такой адрес, и его надо выбросить; если пакет прошёл домарщрутную обработку, то ему надо сделать подмену адресов, и дальше он будет в изменённом виде, и так далее. Стойность нарушается тем, В каждой из этих цепочек несколько таблиц.

Существует три таблицы по умолчанию

  • mangle
  • filter
  • nat

Это всё запутанно, но при наборе опыта всё проясняется, а он набирается, так как ограничения такие, что позволяют делать только правильно.

Допустим, у нас снаружи приходит пакет для 123.4.5.6, но это наш внещний адрес, и должен внутрь выйти 10.23.45.6. Тогда всё нормально. Когда у нас внещний адрес один, а внутри много, в чём возникает проблема: когда пришёл ответ снаружи, кому отдавать этот пакет? В ip-какете это не написано. Как догадаться? Напеример, в TCP есть sequestion number, адрес отправителя, адрес получателя, порт отправителя/получаетля, и это однозначно определяет владельца пакета. Тогда можно сделать след образом: когда нам привозят пакет из внутренней сети A:P1 → B:P2. Когда пришёл пакет с IP-адресом A, то дожилаемся такое количество пакетов, чтобы можно его было бы развернуть и получить sequestion number. Когда оно появиться, то говорим, что это сессия 1, и получаем тогда соединение E:P3 → B:P2. Равен ли P1 и P3, то кадый вариант имеет свои плюсы и минусы. Если пришёл пакет с адресом E, то накапливаем пакеты, пока не появится tcp-пакет, берём из него seq num, и дальше всё хорошо. Это называетс connection tracking --- отслеживание состояния. Кроме tcp, ещё некоторые другие протоколы имеют свои id и их можно использовать. Это к вопросу о перенаправлении, о преобразовании. Это уже решение задачи чисто пользовательской.

Существует ешё несколько методов работы, например, перебро портов. Он зорош тем, что не нужно делать connection tracking, там зёствкая привязка порта к айпишнику.

Кроме того, на уровне транспортом мы хотели делать ограничение траффика. Ибо его логично делать там, где он представляется в виде потока. Тут всё непросто, ибо ограничение --- штука туманная. Например, зотим ограничить траффик к айпи-адресу, например, не более одного подключения с айпи. Есть подозение, что средствами iptables это сделать нельзя .А можно tc.

Нужно ограничивать траик не ухудшая его. То есть резать каждый 10 пакет нельзя. А нужно сделать трубу, выстраиват перед ней очередь и смотреть на них. Кроме того, нам помогает сам tcp, который, если всё зорошо, то увеличивает размер пакетов, а если вдруг ошибка, то начинает слать маленькие. И когда маленькие, то можно ими аккуратно порулить, например, постепенно их пропускать, таким образом ограничивая скорость --- traffic shaping. Можно очень по-разному рулить очередями. Всё это есть в документации по tc.

Более того, линуксовые средства (тот же tc) позволяют принимать рещение о том, насколько хорош канал динамически.

Ещё мы не поговорили о маршрутизации. А между тем, с маршрутизацией в обычном плане всё довольно примитивно. Решение о том, куда направлять пакет, происходит по ip. Этого недостаточно. Особенно, когда нам надо принимать решение всез остальных полей. Например, когда есть каналы с разной стоимостью. Для решения этого есть iproute.

О чём ещё не поговорили: про учёт и правильно сделали. Это таки функция не коробочки.

Кроме того, есть много разных протоколов прикладного уровня, и для каждого должен быть свой фаерволл.


Спецкурс по Linux, весна 2007


01 02 03 04 05 06 07 08 09 10 11 12


Календарь

Февраль
16
Март
02 09 16 23 30
Апрель
06 13 20 27
Май
04 11

18 мая 2007 года прошёл экзамен по курсу. Краткий конспект экзамена.
22 мая 2007 года прошёл экзамен по курсу для студентов 3 курса и тех, кто не сдал экзамен 18 мая. Подробности здесь.
12 июня 2007 года (вторник) пройдёт экзамен по курсу. Информация об экзамене отсюда.


Эта статья является конспектом лекции.

Эта статья ещё не вычитана. Пожалуйста, вычитайте её и исправьте ошибки, если они есть.
Личные инструменты
Разделы