Редактирование: UNИX, весна 2009, 06 лекция (от 01 апреля)

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

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

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.

Текущая версия Ваш текст
Строка 86: Строка 86:
Что ещё можно сказать про iptables: чтобы закончить про iptables, лектор скажет, что недавно была инф. о том, что вышла первая рабочая версия nftables, которая считается намного круче iptables, у него более структурирован файл настройки. Все сразу начали кричать, что это pf для линукса, но это не так, хотя там действительно ориентировано на задачу.
Что ещё можно сказать про iptables: чтобы закончить про iptables, лектор скажет, что недавно была инф. о том, что вышла первая рабочая версия nftables, которая считается намного круче iptables, у него более структурирован файл настройки. Все сразу начали кричать, что это pf для линукса, но это не так, хотя там действительно ориентировано на задачу.
- 
-
= Конспект Kda =
 
-
== Вступление ==
 
-
Нужно обратить внимание на две важные вещи.
 
-
Во-первых, iptables — это такой же ленточный файрвол, в том смысле, что правила идут подряд.
 
-
Даже если перескакивает с цепочки на цепочку, все подряд.
 
-
Не обладает такой структурой, как нетграф.
 
-
Но это позволяет не запутаться и не превратить все в кашу.
 
-
Эта возможность делать цепочку, чтобы в ней выполнять работы.
 
-
Второе, о чем хотелось бы заметить.
 
-
Было немного про дополнительные модули к iptables.
 
-
Расширений довольно много.
 
-
Если кому-то приходит в голову ставить фильтрацию, он либо начинает писать расширение, либо модифицирует кусок QoS.
 
-
Мы описали, что мы хотим делать с пакетами.
 
- 
-
В случае iptables есть возможность запрограммировать на си кусок кода, который будет решать задачу.
 
- 
-
== Фильтрация на прикладном уровне ==
 
-
Сегодня будет про фильтрацию на прикладном уровне.
 
-
Типичный пример лобового подхода вставки своего модуля решения задачи — ipp2p.
 
-
Эта штука позволяет на уровне p2p определить, что за трафик внутри этого соединения идет и сделать что-то с пакетами.
 
-
Таких модулей может быть бесконечно много.
 
-
Модули зарождаются и умирают по причине потери интереса создателей.
 
- 
-
iptables — как низкоуровневый, так и высокоуровневый инструмент.
 
- 
-
== NAT ==
 
-
Про nat рассказывать особо нечего.
 
-
Что такое nat?
 
-
Мы не хотим засвечивать адрес отправителя — типичный пример.
 
-
Машина служит маршрутизатором во внешний мир и она преобразует адрес во внешний.
 
-
С точки зрения пользователя это довольно банально.
 
-
При прохождении через nat адрес превращается в другой.
 
-
Потом приходит ответ, адрес превращается обратно.
 
- 
-
=== Способ преобразований ===
 
-
Возникает резонный вопрос, каким образом мы делаем преобразования.
 
-
Есть таблица взаимно однозначного соответствия.
 
-
Типичный пример преобразования — tcp пакет.
 
-
Адрес транспортного уровня — ip адреса и порты.
 
-
В случае преобразования адресов есть такая штука, за которой мы можем признать права.
 
-
Действительно, четверка не может совпадать, мы не можем организовать два потока с совпадающими четверками.
 
-
Даже если генерируем http-запросы, порты отправителя будут различаться.
 
- 
-
Какому потоку данных принадлежит тот или иной пакет.
 
-
Есть серийный номер у пакета ICMP.
 
-
Точно знаем, на каком ICMP запрос пришел ответ, на какой нет.
 
- 
-
Еще один пример анализа трафика — DNS-запрос UDP.
 
-
В запросе есть серийный номер.
 
-
В запросе есть достаточно информации для распознавания ответа в случае его прихода.
 
-
Службы UDP отвечают на порт отправителя.
 
-
В случае DNS порт отправителя всегда 53.
 
-
Разумеется, существуют такие категории трафика, которые нельзя пропустить через nat.
 
-
Это секьюрити, шифрование, которое учитывает поля прикладного и транспортного уровня.
 
-
IPSec в одном из режимов вообще невозможно пропустить через nat.
 
-
Какой-то унылый UDP-трафик тоже невозможно пропустить.
 
- 
-
=== FTP за NAT ===
 
-
Файрвол должен быть очень умным, чтобы понять, что если снаружи ломятся на один порт, то этот порт был анонсирован
 
-
FTP-клиентом из внутренней сети.
 
-
Есть FTP-сервер за NAT.
 
-
Это небольшая проблема.
 
-
Сейчас позволяют нормально транслировать.
 
-
...
 
-
Решение 1 — захакать подмену внутрь файрвола и сделать подмену.
 
-
Проблема в том, что когда пакет будет идти обратно, нужно сделать вторую подмену.
 
-
Решение 2 — запуск 2 серверов, которые будут отвечать в зависимости от источника — локальная сеть или Интернет.
 
- 
-
=== Неправильные сервисы ===
 
-
Есть такие неправильные сервисы, которые хотят, чтобы у них шло подключение с определенных портов, иначе они не работают.
 
-
Особенно самодельные, временные и т п.
 
-
Относительно примеров.
 
- 
-
=== Команды ===
 
-
Что нужно, чтобы сделать из машины маршрутизатор с NAT?
 
- 
-
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-route ВН.IP
 
- 
-
Что не нравится?
 
-
Одна вещь — внешний адрес мы можем не знать.
 
-
У нас, допустим, DHCP-клиент и адрес меняется при каждом старте.
 
-
Вместо SNAT пишется MASQUERADE.
 
-
Насколько медленнее — зависит от многих обстоятельств.
 
-
Файрвол обращается к устройству и смотрит, какой у него IP.
 
-
Довольно долгая процедура и каждый пакет таким способом.
 
- 
-
=== Destination NAT ===
 
-
Теперь Destination.
 
-
Насколько часто встречается подмена адреса получателя?
 
-
Типичный пример — сервер внутри сети с локальным адресом.
 
-
Первый вариант — проброс портов.
 
-
Есть http-сервер, и когда происходит подключение, мы его меняем.
 
-
Сервер лежит внутри сети.
 
-
По всему Интернету гуляет пакет с получателем-маршрутизатором, а маршрутизатор принимает решение о том, кому он предназначен.
 
- 
-
-A PREROUTING -j <EXT IP> -i eth0 --dport 20 -j DNAT --to-destination <INT IP>:20
 
-
-''- -''- --dport 21
 
- 
-
При таких сложных штуках, как пробрасывание FTP есть мост в межсетевом экране.
 
- 
-
=== SSH ===
 
-
В SSH есть хорошая поддержка всего безобразия.
 
- 
-
== Свойства ==
 
-
Переезжаем с NAT на разные свойства.
 
-
Пришел спамбот, и для ip этого бота ставим проброс в тарпик.
 
-
Но это может дать уязвимость для DDOS.
 
- 
-
=== Contrack-tools ===
 
-
Есть netfilter.org (?), посвященный текущему состоянию дел в линукс.
 
-
Там есть ссылка на забавный комплект утилит contrack-tools.
 
-
В чем смысл?
 
-
Если у нас файрвол, то мы можем поднять горячую замену файрволу, которая будет включаться в случае, если первый отвалился
 
-
или балансировать нагрузку.
 
-
В чем реальная проблема резерва?
 
-
Одна машина включена, другая выключена.
 
-
Одна сгорела.
 
-
Все соединения порвались.
 
-
Если даже вторая машина включена, все соединения порвутся.
 
-
Такая штука есть в openbsd.
 
- 
-
Машина с горячей заменой в течение секунды без прерывания соединений — это позволяет contrack-tools.
 
- 
-
=== Divert socket ===
 
-
В ipfw не было nat вообще и пользовались userspace-программой и механизмом divert socket.
 
- 
-
Лектор пошарил по популярному софту.
 
-
В divert socket лазают большие системы по учету.
 
-
Если нужно вернуть пакет, они его возвращают.
 
-
Внезапно можно перенаправить пользователя на страничку «А ну-ка, заплатите за Интернет».
 
- 
-
=== l7filter ===
 
-
Довольно известный комплект l7filter.
 
-
Он позволяет осуществлять фильтрацию на прикладном уровне.
 
-
Есть несколько десятков прикладных протоколов.
 
-
Что касается фильтрации ослов, это задача актуальная.
 
-
Приходит пользователь, ставит eDonkey, выкручивает все на максимум.
 
- 
-
Ситуация такая, что людей много и они активно действуют, то очень многие люди фильтруют порты и эти пиринговые протоколы
 
-
освоили технологию port forwarding.
 
-
Уже непонятно, как фильтровать.
 
-
Остается только распознавать трафик на прикладном уровне.
 
-
Можно распознавать типы файлов, например, картинки.
 
-
Долго для некоторых протоколов распознает, что за трафик там идет.
 
-
После распознания l7filter ставит метку на пакет.
 
-
Изначально это был kernel-space модуль.
 
-
После накатки изменений появлялся интерфейс.
 
- 
-
==== Работа в userspace ====
 
-
Довольно быстро люди пришли к выводу, что распознание протокола прикладного уровня не должно быть связано с блокировкой.
 
-
Для того, чтобы это сделать, нужны опасные патчи iptables, которые плохо работают в smp-режиме.
 
-
Ядро линукс очень динамичное и его нужно поддерживать.
 
- 
-
Более правильное решение — отсылать в userspace.
 
-
Не требуется немедленная реакция.
 
-
Пусть 3 секунды будет ожидание распознания, это не сильно повредит.
 
-
Довольно эффективный способ.
 
- 
-
== Nftables ==
 
-
Что еще можно сказать?
 
-
Две недели назад прошла информация о том, что вышла рабочая версия пакета nftables, который намного круче, чем iptables.
 
-
У него намного более разумно и структурировано организованы настройки.
 
-
Это не pf для линукса, поскольку идеология таблиц и цепочек наследуется.
 
-
Система идет не низкоуровневая, а от задач.
 
-
Это облегчает работу пользователя.
 
- 
-
=== Хитрые решения ===
 
-
Много хитрых решений.
 
-
Например: контачимся на один порт, другой, третий, и открывается ssh.
 
-
Или несколько пингов разной длины.
 
-
Это уже мелкие извращения.
 
{{UNИX, весна 2009}}
{{UNИX, весна 2009}}
{{Lection-stub}}
{{Lection-stub}}

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Личные инструменты
Разделы