Как ограничить и пронаблюдать доступ в Сети
Задачи межсетевого экрана:
- Ограничение трафика (в т. ч. по пропускной способности)
- Учёт трафика
- Фильтрация трафика
- Мониторинг трафика
- Преобразование трафика
- Перенаправление трафика
Этот список явно отвечает не одному инструменту
На каждом уровне TCP/IP своё понятие «трафика».
- Интерфейсный
- Фильтрация по MAC-адресам
- Сетевой
- Простой уровень с чётким понятием адресата и отправителя (IP-адрес).
- Фильтрация, учёт, мониторинг, преобразование, перенправлени
- Транспортный
Понятие «порт» позволяет учитывать уникальный поток данных
- Учёт, ограничение (в том числе и на прикладном уровне) и проеобразование (в т. ч. NAT)
- Прикладной
- Множество различных протоколов
- Примеры: антивирусы (smtp, http), антиспам (smtp, nntp, http, ...)
- Фильтрация, мониторинг
IPTables
IPTables — межсетевой экран Linux интерфейсного, сетевого и транспортного уровней. Однако основная единица обработки IPTables — IP пакет.
=== Отчего оно такое ==
Пять событий в жизни пакета:
- Приём пакета (через сеть)
- Передача пакета, (отсылка через сеть)
- Порождение пакета программой
- Присваивание пакета программой (принятый пакет передаётся программе)
- Перенаправление (маршрутизация — принятие решения об адресате)
Пути пакета:
- → приём → перенаправление → передача →
- → приём → перенаправление → присваивание
- порождение → перенаправление → передача →
Картинка из учебника:
Отличия от «3+5»:
- Три послемаршрутных модуля (разные пакеты)
- Не обрабарывается путь «порождение → маршрутизация»
Таблицы и цепочки
Прямоугольники в схеме — цепочки, каждая цепочка состоит из нескольких таблиц (буквы M, N и F в правом верхнем углу прямоугольника означают тип таблиц, их наличие в данной цепочке и их порядок), каждая таблица — список правил вида «шаблон пакета ⇒ что делать с пакетом».
В соответствие со схемой:
Пакет по очереди обходит все полагающиеся цепочки (до тех пор, пока не встретит правило «выбросить» или подобное ему).
- Внутри каждой цепочки пакет поочерёдно обходит все таблицы.
Внутри каждой таблицы к пакету по очереди применяются все правила; при этом действие «что делать с пакетом» выполняется немедленно, если совпал «шаблон пакета» (т. н. «first wins»).
- Имеющиеся таблицы предназначены для правил определённого вида
Mangle — для «порчи» пакета (исправления в нём каких-то полей т. п.)
NAT — для network address translation (подмены сетевых адресов в пакете, например, согласно таблице соединений)
Filter — для фильтрации (уничтожения пакетов)
Можно добавлять свои цепоки, при этом имя цепочки можно указывать в разделе «что делать с пакетом»
«Тип пакета» определяется полями протоколов уровня IP и ниже, состоянием соединения на транспортном уровне и состоянием самого МЭ.
Пример МЭ транспортного уровня: подмена адресов
Перенаправление порта (не требует отслеживания состояния соединения):
Во входящем пакете соединения на Порт:Наш_IP подменить Наш_IP на Внутренний_IP и перенаправить пекет на Внутренний_IP
В исходящем пакете соединения от Порт:Внутренний_IP подменить Внутренний_IP на Наш_IP и отослать получателю
NAT и маскарад:
В исходящем пакете соединения от Внутренний_IP запомнить поля Внутренний_IP, Внутренний_Порт, IP_Сервера и Порт_Сервера в специальной таблице соединений и подменить Внутренний_IP и Внутренний_Порт на Внешний_IP и динамически выделяемый Внешний_Порт и отослать пакет получателю.
Во входящем пакете любого соединения проверить соответствие всех четырёх полей в таблице, и если соответствие нашлось, подменить Внешний_IP:Внешний_Порт на Внутренний_IP:Внутренний_Порт и переслать пакет на Внутренний_IP
При подмене вида «много в один» (вся внутрення сеть в один внешни адрес) существует ненулевая вероятность совпадения полей SEQN в TCP-совдинении двух различных абонентов внутренней сети. поэтому отслеживание соединения может быть более глубоким: при подключении запоминается и подменяется также SEQN абонента, а в дальнейшем при обмене внешний SEQN преобразуется во внутренний по правилам изменения SEQN в TCP-соединении (т. е. увеличивается на размер пакета и т. п.).
Ограичение трафика
Трафик нужно ограничивать, а не ухудшать.
Целесообразно делать на транспортном уровне (манипуляция потоками данных). Утилита tc в пакете iproute2
Ограничение на количество соединений от и на определённый IP:порт
- Ограничение пропускной способности
- Создание очереди TCP-пакетов (размер очереди — количество пакетов или их суммарный объём)
Алгоритм RED (random early detection): когда очередь почти полна, уже выбрасываются пакеты, и TCP сначала обрабатывает ошибку, а затем начинает обмениваться небольшими пакетами, разгружая канал
- Существует несколько политик работы с очередами (с приоритетом, с гарантированным трафиком и т. п.)
Пример МЭ прикладного уровня
Анализаторы трафика с собственными обработчиками событий
- Антивирусы и антиспам
- ...
Другой подход: общиймеханизм анализа трафика в качестве модуля IPTables (!): L7-Filter