Редактирование: 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}} |