Таблицы межсетевого экрана netfilter для чего они используются
Продолжаем наше знакомство с фаерволом Netfilter & Iptables. Во второй части статьи речь пойдет об управлении правилами iptables. Мы научимся добавлять правила в межсетевой экран, сохранять их и восстанавливать. Рассмотрим утилиты для управления правилами и напишем свой скрипт управления.
Межсетевой экран следующего поколения (NGFW)
Next-generation firewall (NGFW) – файрвол следующего поколения. Его ключевая особенность в том, что он может производить фильтрацию не только на уровне протоколов и портов, но и на уровне приложений и их функций. Это позволяет успешнее отражать атаки и блокировать вредоносную активность.
Также, в отличие от межсетевого экрана типа Unified threat management, у NGFW есть более детальная настройка политик безопасности и решения для крупного бизнеса.
CentOS
В CentOS добавить правила в автозагрузку можно посредством правки файла rc.local.
Теперь правила будут применяться в фаерволе при запуске системы. Для того чтобы запретить загрузку через rc.local, уберите добавленную строку или закомментируйте ее.
Что произошло?
В 8354 – я загрузил модуль.
В 8356 – мы обнаружили какой-то исходящий пакет. На данном этапе мы не можем знать, что это, но скорее всего один из пакетов DHCP интерфейса, который мы настроили.
В 8359 – мы обнаружили входящий пакет — это был наш ping. После того как мы его получили, мы сразу послали ответ который и видим дальше.
В 8359 – ответ на ping.
В 8394 – выгрузили модуль.
На данном этапе можно поиграться с системой и убедиться, что трафик с host1 -> host2, не проходит.
В тексте определим базовое понятие межсетевого экрана и на примерах рассмотрим его функции и виды.
Типы межсетевых экранов
МЭ делятся на два основных типа: аппаратные и программные.
7.4.2. Синтаксис команд iptables и ip6tables
Команды iptables и ip6tables используются для работы с таблицами, цепочками и правилами. Их опция - t table позволяет указать таблицу, с которой планируется работать (по умолчанию это таблица filter ).
Что такое межсетевой экран
Межсетевой экран (МЭ, брандмауэр или Firewall) представляет собой программно-аппаратный или программный комплекс, который отслеживает сетевые пакеты, блокирует или разрешает их прохождение. В фильтрации трафика брандмауэр опирается на установленные параметры — чаще всего их называют правилами МЭ.
Современные межсетевые экраны располагаются на периферии сети, ограничивают транзит трафика, установку нежелательных соединений и подобные действия за счет средств фильтрации и аутентификации.
Принцип работы межсетевого экрана
Архитектура перехвата(hooking) трафика. Практика
Для интереса, мы придумаем правило – все пакеты которые предназначены для компьютера FW_dev (тот где мы установим firewall), или которые FW_dev посылает от своего имени другим компьютерам – мы позволим пройти (accept). Весь остальной трафик, мы закроем (deny). Конечная цель – подсчитать сколько пакетов прошло, сколько мы запретили и передать данные пользователю (в user space).
Для этого вначале модуля, определим несколько глобальных переменных.
Теперь установим hook functions, в нужные точки перехвата трафика. Для начала напишем сами функции. Все функции должны иметь заранее определенный тип:
Следующий шаг – их необходимо зарегистрировать в системе, поэтому логично сделать это при загрузке модуля. Выглядит это следующим образом:
Тут стоит обратить внимание на поле hooknum, которому мы присваиваем значение, которое и определяет место перехвата пакетов и соответствует диаграмме выше. Последним шагом будет их удаление (дерегистрация) перед удалением модуля из ОС.
Осталось проверить работу, а также добавить user interface, чтобы любой пользователь, мог считать данные с нашего модуля. Сначала проверим.
Отключение Selinux и Firewalld в CentOS/RHEL системах
Если вы хотите начать использовать iptables в CentOS или других Red Hat производных системах, то перед настройкой необходимо отключить Selinux и firewalld.
Для отключения selinux отредактируем файл /etc/sysconfig/selinux.
Firewalld - надстройка над iptables, играющая роль брандмауэра, применяется в RHEL системах по умолчанию. Так как управлять фаерволом мы будем при помощи собственных правил, то firewalld необходимо отключить.
Функции межсетевого экрана
Написание простого модуля в Linux. Практика
Для начала, очень коротко рассмотрим пример простого модуля отсюда — потом рассмотрим, что такое Netfilter и совместим все вместе в одном исходном коде. Ниже, будут картинки, в конце статьи, ссылки на все исходные тексты. И так:
Так выглядит исходный код очень простого модуля. Несколько вещей:
1 – я работаю в редакторе Geany, так как Eclpise-со подобные в данном случае не подойдут. Компилирую через терминал, но кажется можно и через Geany.
2 – в kernel нет printf, но есть ее аналог printk, которая работает таким же образом. Кстати в kernel есть аналоги всех необходимых библиотек и функций (и нет стандартных библиотек типа stdlib).
3 – printk, не пишет в консоль, а пишет в специальный файл, содержимое которого можно прочитать, используя команду dmesg. У нас — это будет главный способ для отладки программы (есть и другие способы увидеть как работает printk, например, если перейти в консоль без X интерфейса Ctrl+Shift+F1). Так же будет полезным dmesg –c, для очистки всего, что накопилось в этом файле.
4 – MODULE_LICENSE, MODULE_AUTHOR, MODULE_DESCRIPTION — это макросы, которые «дают» linux информацию о модуле, которую потом можно получить с помощью специальных команд (искать подробнее по ссылке).
5 – В kernel используется синтаксист C89 для написания, когда на C. Например (и главное) — в отличии от привычного C99, все переменные должны быть объявлены в самом начале функций и не могут быть объявлены в другой ее части. Если вы НЕ будете соблюдать это правило, код скомпилируется, но с warnings (что плохо и не для нас).
Компилируем, загружаем модуль
смотрим на «логи», выгружаем модуль
Итоги
Сегодня мы поговорили о работе со встроенным в ядро Linux файрволом netfilter , обсудили особенности управления трафиком IPv4 и IPv6 с использованием команд iptables и ip6tables . Мы рассмотрели графическое средство для создания правил fwbuilder и показали, как автоматически задавать правила при загрузке системы. В следующий раз мы поделимся с вами переводом раздела 7.5, который посвящён мониторингу Kali Linux.
2.1 — Введение во вторую часть. Смотрим на сеть и протоколы. Wireshark.
2.2 — Таблицы Firewall. Transport Layer. Структуры TCP, UDP. Расширяем Firewall.
2.3 — Расширяем функциональность. Обарабатываем данные в user space. libnetfilter_queue.
2.4 — (*Опиционально) Изучаем реальную Buffer Overflow атаку и предотвращаем с помощью нашего Firewall'а.
Очень краткое введение в Операционные системы
Есть много статей на эту тему, например эта очень хорошая. Надеюсь, что я смог донести интуицию.
iptables-services в CentOS/RHEL системах
В CentOS существует утилита управления правилами iptables, делающая все вышеописанное, она создает файл для записи, сохраняет изменения, загружает правила при запуске системы. Эта утилита называется iptables-services.
После установки в директории /etc/sysconfig появляются файлы iptables и ip6tables, в эти файлы производится запись правил. В файл iptables производится запись правил для протокола IPv4, в файл ip6tables для протокола IPv6.
Конфигурационный файл находится в /etc/sysconfig/iptables-config. Здесь нас интересуют два параметра:
- IPTABLES_SAVE_ON_STOP="no" - сохранение текущих правил при остановке демона iptables, по умолчанию отключено.
- IPTABLES_SAVE_ON_RESTART="no" - сохранение текущих правил при перезапуске/перезагрузке системы, по умолчанию отключено.
Включим сохранение текущих правил, нужно заменить значения с "no" на "yes". Правила будут сохраняться автоматически в файл /etc/sysconfig/iptables, при перезагрузке системы/службы iptables. Также правила можно сохранять командой restart.
Остальные параметры оставляем по умолчанию, без веской причины трогать их не следует.
7.4.3. Создание правил
Каждая операция создания правила требует одного вызова команды iptables или ip6tables . Ввод этих команд вручную может оказаться трудоёмкой задачей, поэтому обычно эти команды оформляют в виде скриптов, которые позволяют автоматически настраивать систему так, как это нужно, каждый раз при загрузке компьютера. Подобные скрипты можно писать вручную, но есть и более продвинутый способ, который заключается в использовании программы fwbuilder . Для её установки воспользуйтесь такой командой:
Принципы создания правил в программе просты. Сначала опишите все элементы системы, на которые будут распространены правила, которые вы хотите создать. Среди этих элементов можно отметить следующие:
- Сам файрвол с его сетевыми интерфейсами.
- Сеть и соответствующие ей диапазоны IP-адресов.
- Серверы.
- Порты, принадлежащие службам, работающим на серверах.
Поскольку во внимание принимается и IPv6, можно либо создать два самостоятельных набора правил, для IPv4 и IPv6, либо создать лишь один набор и позволить fwbuilder преобразовать правила в соответствии с адресами, назначенными объектам.
Рис. 7.2. Главное окно fwbuilder
Итогом работы с fwbuilder станет сгенерированный программой скрипт настройки файрвола в соответствии с заданными правилами. Модульная архитектура программы даёт возможность создавать скрипты, рассчитанные на различные системы, в том числе — iptables для Linux, ipf для FreeBSD и pf для OpenBSD.
Правила МЭ
Сетевой трафик, проходящий через брандмауэр, сопоставляется с правилами, чтобы определить, пропускать его или нет.
Правило межсетевого экрана состоит из условия (IP-адрес, порт) и действия, которое необходимо применить к пакетами, подходящим под заданное условие. К действиям относятся команды разрешить (accept), отклонить (reject) и отбросить (drop). Эти условия указывают МЭ, что именно нужно совершить с трафиком:
Для лучшего понимания рассмотрим пример. Допустим, у нас есть три правила:
- Разрешить доступ всем IP-адресам, которые принадлежат отделу маркетинга, на 80-й порт.
- Разрешить доступ всем IP-адресам, которые принадлежат отделу системного администрирования.
- Отклонить доступ всем остальным.
Так выглядит правило разрешить доступ на 80-й порт всем сотрудникам отдела маркетинга на устройстве FortiGate.
Скрипт для правил iptables
Самый удобный, надежный, самый легкий способ управления правилами, я как всегда приберег для конца статьи. Помимо всех вышеописанных способов правила можно добавлять скриптом.
Перед написанием скрипта, установите iptables-services в CentOS, iptables-persistent в Debian. На самом деле можно обойтись и без них, но с ними немного удобнее.
Создаем скрипт, по привычке я называю его ipt.sh, скрипт можно назвать как угодно, например myname.sh, где myname это имя скрипта.
Теперь можно добавлять необходимые правила, правила записываются обычным образом, без каких-либо дополнительных требований. В качестве примера приведу свой минимальный набор правил, которым пользуюсь повсеместно, добавляя в него необходимые правила в зависимости от обстоятельств.
Данный набор правил закрывает любые подключения извне, кроме подключений к работающим на сервере службам через разрешенные порты.
Примечание: обязательно смените имя сетевого интерфейса ens3 на свое (eth0 или enp0s3) в правиле разрешающем выходной трафик.
Теперь надо прописать команду для сохранения правил в файл из которого будут считываться при загрузке. Делается это при помощи утилиты iptables-save, как видите ничего нового, все это мы уже проходили выше.
Если вы пишете скрипт в CentOS, то указываем /etc/sysconfig/iptables, если в Debian или Ubuntu, то /etc/iptables/rules.v4. Именно поэтому в начале я говорил, что должны стоять iptables-services и iptables-persistent, соответственно.
Основная часть скрипта готова. В конец скрипта я еще дописываю какую-нибудь фразу, чтобы знать что скрипт выполнился, например - "Правила обновлены!".
В конечном виде скрипт выглядит так.
Скрипт написан. Теперь его надо сделать исполняемым.
После чего его необходимо выполнить.
Если после выполнения скрипта проверить состояние фаервола, можно увидеть следующее.
Межсетевой экран в порядке, правила применены и работают. А что с файлом для сохранения?
Здесь тоже порядок, все правила на месте. Как можно видеть, скриптом убиваются два зайца, правила одновременно заносятся и в межсетевой экран, и в файл из которого будут загружаться при старте системы. Именно поэтому я считаю данный способ самым надежным, здесь нельзя забыть сохранить правила.
Сама работа скрипта очень проста. Скрипт имитирует ввод правил в консоль, с последующим сохранением в файл. Если нужно добавить или убрать правила, то редактируйте скрипт и заново выполняйте его.
Как это выглядит
Мы будем рассматривать типичную схему для офисов и для квартир, да-да именно квартир! Мало у кого есть собственный маленький сервачок дома под столом, но у большинства интернет дома раздается через роутер и в большинстве своём они тоже прошиты Linux.
Это типичная схема малого офиса. Когда к интернет подключен 1 компьютер(сервер), а остальные подключаются к интернет уже через этот сервер.
Поехали, потихонечку.
- сервер с 2мя сетевыми картами и установленным на нём Debian Lenny
- имеющийся по умолчанию в Debian Lenny firewall — netfilter/iptables
- локальную сеть из N компьютеров, все соединены через коммутатор, в том числе и сервер
что такое NAT
Для начала нам нужно понять, что настраивать мы будем самый обыкновенный NAT(Network Address Translation). Для жаждущих, я в конце упомяну и о проксе сервере на примере squid. Как я уже сказал разжёвывать будем практически всё.
Что же такое NAT? На самом деле все просто, все компьютеры имеют физический (MAC) и сетевой (IP) адреса. Нас в данный момент интересуют IP адреса. IP адрес в пределах одной сети должен быть уникальным! А при нынешнем стандарте IPv4 уникальными могут быть всего-то 4 294 967 296 (2 32 ), что совсем не много и они практически кончились. но не переживайте вот вот вступит в широкое распространение IPv6, а там адресов навалом!
Но тут вы можете заметить, компьютеров значительно больше того числа, что позволяет IPv4 или скажете, что у друга дома такой же адрес как и у вас! И вот тут-то и заходит речь о NAT — он позволяет соединять компьютерные сети между собой используя единственный, свой IP адрес, действия фаервола при этом называется SNAT(Source NAT или подмена адреса источника). Т.е. в 99% случаев вся ваша контора выходит в интернет под 1 IP адресом, при этом внутри офиса у каждого он свой. О классах IP адресов вы сможете прочесть в интерне.
Теперь, когда мы знаем что такое NAT и для чего он нужен, можно приступать непосредственно к настройке сервера.
транзитный трафик
настраиваем iptables
по мелочам.
На клиентах указываем ip из выбранного диапазона и указываем в качестве шлюза ip адрес нашего сервера(обычно его назначают первым из подсети — я оставлю это на ваше усмотрение). Все сетевые настройки на сервере можно провести так:
$ nano /etc/network/interfaces в нём указываются настройки ваших сетевых интерфейсов.
доступ в недры сети через шлюз или DNAT
И тут вы поняли, что в сети у вас есть Windows Server к которому у вас всегда был простой доступ по RDP, а тут вылез это назойливый шлюз на Debian! Всё очень просто — надо всего лишь добавить DNAT правило в наш iptables.
Что за зверь DNAT? DNAT (Destination NAT или подмена адреса получателя) — сетевые карты работают в таком режиме, что они принимают только пакеты адресованные именно им, а зайти на наш сервер если ip под которым он выходит в интернет сидят еще десяток машин в вашем офисе? Как запрос дойдёт именного до него? На самом деле все запросы такого рода упираются в наш шлюз. И всё что нам надо сделать это задать правила для работы с такими пакетами.
$ iptables -A PREROUTING -i eth1 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.2
Это простое правило будет переадресовывать все пакеты приходящие на шлюз из интернет на порт TCP 3389(именно его использует RDP протокол) на ваш внутренний Windows Server. И, вуаля, у вас все работает.
итак что там с любимым squid
немного безопасности
Следует хоть минимально защитить свой шлюз поэтому добавим еще пару правил
$ iptables -A INPUT -i lo -j ACCEPT
$ iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j ACCEPT
$ iptables -A INPUT -i eth1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$ iptables -P INPUT DROP
Тем самым запретили любое общение непосредственно с шлюзом, кроме уже установленных соединений, т.е. те что были инициированы вами и вы просто получаете на них ответы. Не бойтесь наш DNAT до этих правил просто не доходит…
почему так мало?
Статья не резиновая и обо всем все-равно не расскажешь… Я привел минимальный набор действий и понятий что бы вы могли начать осваивать такую махину как шлюз на Linux. Здесь можно говорить очень и очень долго, обсуждая многие аспекты и возможности netfilter.
Итого
Как мы видим все действительно просто! Главное это понять принцип функционирования сети и не боятся настраивать и читать большие мануалы.
Надеюсь мне удалось собрать воедино информацию достаточную для начала вашей дружбы с программными маршрутизаторами на основе Linux.
Представляем вашему вниманию продолжение перевода главы 7 книги «Kali Linux Revealed». В прошлый раз речь шла о политиках безопасности и о защите компьютеров и сетевых служб. Этот материал включает в себя перевод раздела 7.4, который посвящён файрволу и фильтрации пакетов.
7.4.1. Как работает netfilter
Netfilter использует четыре таблицы, которые хранят правила, регулирующие три вида операций над пакетами:
- filter : касается правил фильтрации (принять, отклонить, или проигнорировать пакет);
- nat (Network Address Translation): касается трансляции адресов источника, получателя, или портов пакета;
- mangle : касается других изменений IP-пакетов (включая поля и параметры ToS — Type of Service);
- raw : позволяет выполнять ручные модификации пакетов до того, как они дошли до системы отслеживания соединения.
Таблица filter содержит три стандартные цепочки:
Рис. 7.1. Цепочки netfilter
Каждая цепочка представляет собой список правил. Каждое правило — это набор условий и действий, которые должны быть выполнены при соблюдении соответствующих условий. В процессе обработки пакета файрвол просматривает подходящую цепочку, правило за правилом, и, когда условия для некоего правила выполняются, он «перепрыгивает» (отсюда и опция -j — от слова «jump») к заданному действию для продолжения обработки пакета.
Наиболее распространённые шаблоны поведения стандартизированы, для них существуют выделенные действия. Выполнение одного из этих стандартных действий прерывает проход по цепочке, так как судьба пакета уже предопределена (это не касается упомянутых ниже исключений). Вот список действий netfilter :
Основные функции Next-generation firewall
Расскажем про основные функции безопасности для всех NGFW.
Deep Packet Inspection (DPI) – технология, выполняющая детальный анализ пакетов. В отличие от правил классического межсетевого экрана данная технология позволяет выполнять анализ пакета на верхних уровнях модели OSI. Помимо этого, DPI выполняет поведенческий анализ трафика, что позволяет распознавать приложения, которые не используют заранее известные заголовки и структуры данных.
Intrusion Detection System/ Intrusion Prevention System (IDS/IPS) — система обнаружения и предотвращения вторжений. Межсетевой экран блокирует и фильтрует трафик, в то время как IPS/IDS обнаруживает вторжение и предупреждает системного администратора или предотвращает атаку в соответствии с конфигурацией.
Антивирус. Обеспечивает защиту от вирусов и шпионского ПО в реальном времени, определяет и нейтрализует вредонос на различных платформах
Фильтрация по URL, или веб-фильтр, — возможность блокировки доступа к сайтам или другим веб-приложениям по ключевому слову в адресе.
Инспектирование SSL. Позволяет межсетевому экрану нового поколения устанавливать SSL-сессию с клиентом и сервером. Благодаря этому существует возможность просматривать шифрованный трафик и применять к нему политики безопасности.
Антиспам — функция, которая позволяет защитить корпоративных пользователей от фишинговых и нежелательных писем
Application Control. Используется для ограничения доступа к приложениям, их функциям или к целым категориям приложений. Все это задействует функции отслеживания состояния приложений, запущенных пользователем, в режиме реального времени.
Web Application Firewall — совокупность правил и политик, направленных на предотвращение атак на веб-приложения
Аутентификация пользователей — возможность настраивать индивидуальные правила под каждого пользователя или группу.
Sandboxing. Метод, при котором файл автоматически помещается в изолированную среду для тестирования, или так называемую песочницу. В ней можно инициализировать выполнение подозрительной программы или переход по URL, который злоумышленник может прикрепить к письму. Песочница создает безопасное место для установки и выполнения программы, не подвергая опасности остальную часть системы.
Изолированная защита очень эффективна в работе с так называемыми угрозами нулевого дня. Это угрозы, которые ранее не были замечены или не соответствуют ни одному известному вредоносному ПО. Несмотря на то, что обычные фильтры электронной почты могут сканировать электронные письма для обнаружения вредоносных отправителей, типов файлов и URL-адресов, угрозы нулевого дня появляются постоянно. Традиционные средства фильтрации могут их пропустить.
▍7.4.2.1. Команды
Вот основные опции, предназначенные для работы с цепочками:
- -L chain : выводит правила в цепочке. Обычно эту опцию используют с опцией -n для отключения разрешения имён (например, команда iptables -n -L INPUT выведет правила, относящиеся ко входящим пакетам).
- -N chain : создаёт новую цепочку. Новые цепочки создают, преследуя множество целей, в том числе — для тестирования новых сетевых служб и для предотвращения сетевых атак.
- -X chain : удаляет пустую или неиспользуемую цепочку (например — iptables -X ddos-attack ).
- -A chain rule : добавляет правило в заданную цепочку. Помните о том, что правила обрабатываются, начиная с головы цепочки, учитывайте это, добавляя к цепочкам новые правила.
- -I chain rule_num rule : вставляет правило перед правилом, заданным с помощью аргумента rule_num . Как и в случае с опцией -A , помните о порядке обработке правил, добавляя в цепочку новое правило.
- -D chain rule_num (или -D chain rule ): удаляет правило из цепочки. Первый вариант использования идентифицирует удаляемое правило по номеру (команда iptables -L --line-numbers позволяет вывести эти номера). Второй вариант позволяет идентифицировать правило по его содержимому.
- -F chain : сбрасывает цепочку (удаляет из неё все правила). Например, для того, чтобы удалить все правила, связанные с исходящими пакетами, можно воспользоваться командой iptables -F OUTPUT . Если при использовании этой опции не указаны конкретные цепочки, будут удалены все правила в таблице.
- -P chain action : позволяет задать действие по умолчанию, или «политику» для заданной цепочки. Обратите внимание на то, что только стандартные цепочки могут иметь политику. Например, для того, чтобы по умолчанию отбрасывать весь входящий трафик, можно воспользоваться командой iptables -P INPUT DROP .
Контроль состояния сеансов на уровне МЭ
Межсетевой экран с контролем состояния сеансов анализирует всю активность пользователей от начала и до конца — каждой установленной пользовательской сессии. На основе этих данных он определяет типичное и нетипичное поведение пользователя. Если поведение в рамках сессии показалась ему нетипичной, МЭ может заблокировать трафик.
Получается, решение об одобрении или блокировке входящего трафика принимается не только на основании заданных администратором правил, но и с учетом контекста — сведений, полученных из предыдущих сессий. Брандмауэры с отслеживанием состояния сеансов считаются гораздо более гибкими, чем классические межсетевые экраны.
Добавление и сохранение правил iptables
Для примера добавим какое-нибудь безобидное правило, чтобы не затрагивать подключение. Например запретим прохождение транзитных пакетов.
Проверим текущие настройки межсетевого экрана командой iptables -L -n -v.
В цепочке FORWARD действием по умолчанию значится DROP, следовательно правило работает.
В данный момент новые настройки фаервола хранятся в оперативной памяти и находиться там они будут ровно до момента перезагрузки или выключения компьютера. Если состояние правил не сохранить, то после перезапуска будут загружены настройки по умолчанию и все опять будет открыто.
Изменения в правилах сохраняются/записываются посредством встроенной утилиты iptables-save. Необходимо создать файл в который будут записываться правила.
Так-как я нахожусь в системе под root, то команда создаст файл в домашней директории root-пользователя /root/iptables_rules. Для создания файла в другом каталоге, команда должна выглядеть так:
Воспользуемся iptables-save и сохраним изменения, записав их в созданный файл iptables_rules.
Cодержимое файла iptables_rules, в который были записаны правила, будет выглядеть так:
Утилита iptables-save считала текущие настройки правил из оперативной памяти и записала их в указанный файл, в форме понятной для пользователя, то есть в форме правил.
Политики по умолчанию записываются после знака двоеточия (:).
- iptables -P FORWARD DROP будет записано как :FORWARD DROP
Обычные правила записываются после политик по умолчанию, без слова iptables. Например нужно запретить любые подключения с машины под адресом 192.168.1.100, добавляем нужное правило (iptables -A INPUT -s 192.168.1.100 -j DROP) в файл iptables_rules.
Если правила добавляются сразу в файл минуя консоль, то их нужно применить в фаерволе, для этого существует утилита iptables-restore.
Правила из файла переносятся в настройки фаервола и применяются. Если следом выполнить команду для просмотра действующих правил, то можно увидеть что правило добавлено.
7.4. Файрвол или фильтрация пакетов
Файрвол — это компьютерное оборудование, которое может быть представлено в виде программного, аппаратного, или программно-аппаратного комплекса. Файрвол обрабатывает входящие и исходящие сетевые пакеты (поступающие в локальную сеть или покидающие её) и пропускает лишь те из них, которые соответствуют неким предопределённым правилам.
Фильтрующий сетевой шлюз — это разновидность файрвола, который защищает всю сеть. Обычно его устанавливают на выделенном компьютере, настроенном как шлюз для сети. В результате этот компьютер может обрабатывать все пакеты, которые пересекают границу между сетью и внешним миром. Как вариант, локальный файрвол — это программная служба, которая работает на конкретной машине для того, чтобы ограничивать доступ к неким службам на этой машине, или, возможно, для предотвращения исходящих соединений, инициируемых нежелательным программным обеспечением, которое пользователь компьютера может, намеренно или случайно, установить.
В ядре Linux имеется встроенный файрвол netfilter . Требования различных сетей и пользователей неодинаковы, поэтому не существует стандартного подхода к настройке файрвола, позволяющего получить готовое решение на все случаи жизни. Управлять файрволом netfilter можно из пространства пользователя с помощью команд iptables и ip6tables . Разница между этими двумя командами заключается в том, что первая предназначена для сетей IPv4, вторая — для сетей IPv6. Так как оба стека протоколов, вероятно, будут в ходу ещё многие годы, оба инструмента следует использовать совместно. Кроме того, тут можно применить отличную программу fwbuilder , которая даёт графические инструменты для построения и представления правил фильтрации трафика.
Как бы вы ни решили настраивать netfilter — это стандартный файрвол Linux, поэтому взглянем поближе на то, как он работает.
Предфинальный код
Применение и восстановление правил iptables
Правило добавленное через консоль, применяется в фаерволе, но не сохраняется в дальнейшем, поэтому сохранять правила нужно вручную.
Если правило добавлено сразу в файл, то оно не применяется в фаерволе и его надо применить.
Для восстановления правил после перезагрузки или включения системы необходимо применять iptables-restore. Чтобы не проделывать процедуру восстановления правил каждый раз, правила можно добавить в автозагрузку.
▍Что такое ICMP?
Например, буфер приёма — это небольшая область памяти, предназначенная для хранения данных после приёма их из сети и до обработки ядром. Если эта память полностью заполнена, новые данные принять невозможно и ICMP сигнализирует о проблеме. В результате источник может снизить скорость передачи данных (которая, через некоторое время, в идеале, должна достигнуть уровня, обеспечивающего баланс между источником и приёмником).
Обратите внимание на то, что хотя сеть IPv4 может работать и без ICMP, поддержка протокола ICMP v6 совершенно необходима для сетей IPv6, так как этот протокол совмещает несколько функций, которые, в сетях IPv4, были распределены между ICMPv4, Internet Group Membership Protocol (IGMP), и Address Resolution Protocol (ARP). ICMPv6 посвящён стандарт RFC4443.
Компиляция модуля
Обратите внимание (ниже на картинке) на Makefile. Он отличается от обычных программ в user space. Так выглядит весь процесс:
Модуль загружается специальной командой “insmod ./module_name.ko” после чего запускается макрос module_init. Модуль удаляется из памяти компьютера командной “rmmod module_name”.
Проверяем. Просто загрузим модуль, а потом выгрузим и посмотрим на dmesg
Готово. На этом введение в модули закончено.
Заключение
В данной статье мы рассмотрели, что такое межсетевой экран, для чего он используется и каких видов бывает. В современном мире в аппаратной реализации чаще всего можно встретить межсетевые экраны нового поколения. Подобные решения можно арендовать в Selectel.
Введение в Netfilter. Теория
Netfilter – это framework, встроенный в linux kernel, который позволяет производить различные сетевые операции. Нас будет интересовать перехват входящего и исходящего трафика.
Использование прокси в качестве межсетевого экрана
Прокси-сервер контролирует трафик на последнем уровне стека TCP\IP, поэтому иногда его называют шлюзом приложений. Принцип работы заключается в фильтрации данных на основании полей заголовков, содержимого поля полезной нагрузки и их размеров (помимо этого, задаются дополнительные параметры фильтрации).
Прокси-серверы осуществляют фильтрацию одного или нескольких протоколов. Например, наиболее распространенным прокси-сервером является веб-прокси, предназначенный для обработки веб-трафика.
Такие серверы используются для следующих целей:
- обеспечение безопасности — например, для защиты вашего веб-сайта или пользователей от посещения сторонних сайтов,
- повышение производительности сети,
- ускорение доступа к некоторым ресурсам в интернете и др.
Поскольку прокси-серверы предназначены для определенных протоколов/портов, они, как правило, имеют более глубокие и сложные средства управления, чем общие правила безопасности межсетевого экрана.
Помимо веб-прокси, существуют такие прокси-серверы, как DNS, FTP, telnet, SSH, SSL, и другие протоколы.
Основной функцией классического брандмауэра является отслеживание и фильтрация трафика на сетевом и транспортном уровнях модели OSI. В отличие от него прокси-сервер устанавливает связь между клиентом и сервером, тем самым позволяя производить проверку на прикладном уровне, фильтровать запросы на подключение и так далее.
Чаще всего прокси-сервер является дополнением к стандартному межсетевому экрану, а межсетевые экраны нового поколения уже включают в себя все функции прокси-сервера.
Debian & Ubuntu
В Debian & Ubuntu все работает также, только rc.local расположен в каталоге /etc, загрузку можно прописать здесь. Можно сделать иначе, в Debian & Ubuntu запуск правил удобнее прописать в конф. файле сетевых интерфейсов /etc/network/interfaces.
Теперь правила будут стартовать совместно с сетевым интерфейсом. Можно делать перезапуск правил путем перезагрузки сетевого интерфейса, для применения внесенных правок.
Можно пойти дальше и прописать команду для сохранения текущего состояния правил при выключении/перезапуске компьютера или при перезапуске интерфейса.
Теперь, даже если вы забудете сохранить внесенные изменения в правила, система сделает это автоматически. Файл интерфейсов должен выглядеть примерно так:
Данные схемы рабочие, но неудобные, делать сохранение и восстановление правил можно по другому, при помощи специальных утилит. Теперь когда мы знаем механизм работы, можно переходить к изучению утилит помогающих управлять правилами iptables.
▍Логическое отрицание условий
Если поставить перед условием восклицательный знак, это приведёт к трансформации его в обратное условие. Например, восклицательный знак в условии опции -p позволяет построить выражение следующего вида: «любой пакет с протоколом, отличающимся от заданного». Этот механизм логического отрицания можно применить и к любым другим условиям.
Условие вида -s address или -s network/mask позволяет фильтровать пакеты по адресу их источника. Соответственно, условия -d address или -d network/mask позволяют системе реагировать на адреса пунктов назначения пакетов.
Условие вида -i interface реагирует на пакеты, которые приходят с указанного сетевого интерфейса. Условие -o interface позволяет отбирать пакеты, которые уходят на заданный интерфейс.
Условие --state state фильтрует пакеты по их состоянию в соединении (применение этого условия требует наличия модуля ядра ipt_conntrack для отслеживания соединений). Так, состояние NEW описывает пакет, запрашивающий новое соединение, ESTABLISHED — пакет, принадлежащий существующему соединению, RELATED — описывает пакет, инициирующий новое соединение, являющееся частью уже существующего соединения (анализ этого состояния полезен для соединений ftp-data в «активном» режиме протокола FTP).
У команд iptables и ip6tables есть множество опций, овладение ими требует серьёзного подхода к их изучению и опыта. Однако, одна из опций, которую вы будете использовать чаще всего — та, которая предназначена для блокировки нежелательного сетевого трафика от некоего хоста или диапазона хостов. Например, для того, чтобы «бесшумно» заблокировать входящий трафик с IP-адреса 10.0.1.5 и подсети класса C 31.13.74.0/24, нужно сделать следующее:
Считается полезным, для поддержания здоровой атмосферы в системе, убирать старые или неиспользуемые правила. Самый простой способ удаления правил iptables заключается в обращении к правилам по номеру строки, который можно получить с помощью опции --line-numbers . Однако, тут стоит проявлять осторожность, так как удаление правила приведёт к изменению номеров всех правил, расположенных ниже его в цепочке:
Существуют и более специфические условия, зависящие от общих условий, описанных выше. Подробнее об этом можно посмотреть в man ( iptables(8) и ip6tables(8) ).
Программный межсетевой экран
Программный МЭ – это программное обеспечение, которое устанавливается на устройств, реальное или виртуальное.
Через такой межсетевой экран перенаправляется весь трафик внутрь рабочей сети. К программным относятся брандмауэр в Windows и iptables в Linux.
Программные МЭ, как правило, дешевле и могут устанавливаться не только на границах сети, но и на рабочих станциях пользователей. Из основных недостатков — более низкая пропускная способность и сложность настройки в ряде случаев.
Аппаратный межсетевой экран
Аппаратный МЭ – это, как правило, специальное оборудование, составляющие которого (процессоры, платы и т.п.) спроектированы специально для обработки трафика.
Работает они на специальном ПО — это необходимо для увеличения производительности оборудования. Примерами аппаратного межсетевого экрана выступают такие устройства, как Cisco ASA, FortiGate, Cisco FirePower, UserGate и другие.
Аппаратные МЭ более мощные по сравнению с программными, однако это влияет на стоимость решений. Нередко она в разы выше, чем у программных аналогов.
Для чего нужен межсетевой экран и как он работает
Главная задача МЭ – это фильтрация трафика между зонами сети. Он может использоваться для разграничения прав доступа в сеть, защиты от сканирования сети компании, проведения сетевых атак. Проще говоря, межсетевой экран – это одно из устройств, при помощи которого обеспечивается сетевая безопасность компании.
Архитектура перехвата(hooking) трафика. Теория
Архитектура перехвата(hooking) трафика в Netfilter выглядит следующим образом:
На схеме обозначены стадии, которые проходят пакеты после попадания на phy сетевой карты. Давайте рассмотрим поподробнее:
Prerouting – сюда попадают все пакеты, которые пришли на сетевую карту устройства извне (например кто-то из сети, пытает послать нам mail, или мы на пути следования пакета и должны передать его дальше).
Forward – если полученный пакет предназначен не для данного IP адреса, то операционная система перешлет его дальше (помните forward enable из предыдущей части?) или выкинет, если посчитает его ненужным.
Input – сюда попадут все пакеты, которые предназначены для какой-либо аппликации. Например, это могут быть пакеты для браузера, после запроса какой-либо страницы.
Output – тут появляются все пакеты, которые аппликации компьютера посылают в сеть (то есть не те, которым мы делаем forwarding). Например, тот самый запрос браузера получить страницу из интернета. Или ping.
Postrouting – объединяет все исходящие пакеты.
Input data = Prerouting = Forward + Input
Output data = Postrouting = Output + Forward
Конечно же, обычно input != output (если вы не поняли почему — то стоит перечитать тему еще раз или посмотреть дополнительно в интернете).
Другие пакеты, например, с host1 -> host2, пройдут через Input, Forward, Output.
На каждой «остановке» мы сможем принять решение по поводу «пойманного пакета» — хотим ли мы его пропускать дальше, или нет (или что-то еще).
iptables-persistent в Debian & Ubuntu
Почти то же, что и iptables-services, только немного неудобнее.
Во время установки будет задано два вопроса, на которые следует ответить положительно.
После установки в каталоге /etc/iptables появятся файлы rules.v4 и rules.v6. В эти файлы будут записываться правила межсетевого экрана.
Управление правилами при помощи iptables-persistent немного отличается от iptables-services в более неудобную сторону. После добавления новых правил через консоль, следует выполнять команду для их сохранения.
Команда записывает изменения правил в файл /etc/iptables/rules.v4, в процессе выполнения запрашивается подтверждение. Если после добавления нового правила вы не выполните эту команду, то оно будет работать только до первой перезагрузки или отключения системы.
Автоматически сохранять текущие правила при перезагрузке iptables-persistent не может.
Для подстраховки можно воспользоваться рассмотренным выше способом и добавить в файл /etc/network/interfaces, команду для автоматического сохранения правил.
Также после установки пакета появляется демон netfilter-persistent при помощи которого можно управлять правилами iptables.
При выполнении команды --help можно посмотреть список доступных команд для управления.
Выполняться они могут через команду - service
- service netfilter-persistent start - запустить сервис
- service netfilter-persistent stop - остановить сервис
- service netfilter-persistent restart - перезапустить сервис
- service netfilter-persistent reload - восстановить правила из файлов rules.v4/rules.v6
- service netfilter-persistent save - сохранить правила в файлы rules.v4/rules.v6
- service netfilter-persistent flush - полностью очищает текущие правила, все становится открыто, но не очищает файл с записанными правилами. Поэтому после перезагрузки, правила из файла считаются и загрузятся снова, если его предварительно не очистить.
Таким образом для сохранения правил можно пользоваться как dpkg-reconfigure так и service netfilter-persistent save, например.
7.4.4. Применение правил при каждой загрузке системы
Для того, чтобы применять правила файрвола каждый раз, когда система загружается, нужно зарегистрировать конфигурационный скрипт в директиве up файла /etc/network/interfaces . В следующем примере скрипт хранится по адресу /usr/local/etc/arrakis.fw .
В этом примере предполагается, что вы используете для настройки сетевых интерфейсов ifupdown . Если вы используете другие инструменты (вроде NetworkManager или systemd-networkd ), обратитесь к их документации для того, чтобы выяснить способы выполнения скрипта после включения интерфейса.
Unified threat management, или универсальный шлюз безопасности
Такие межсетевые экраны включают в себя антивирус, брандмауэр, спамфильтр, VPN и систему IDS/IPS (системы обнаружения и предотвращения вторжений), контроль сеансов.
Основное преимущество данной технологии в том, что администратор работает не с парком различных устройств, а использует единое решение. Это удобно, так как производитель предусматривает централизованный интерфейс управления службами, политиками, правилами, а также дает возможность более «тонкой» настройки оборудования.
Архитектура UTM.
В UTM-устройство входят несколько видов процессоров:
- процессор общего назначения, или центральный процессор,
- процессор обработки данных,
- сетевой процессор,
- процессор обработки политик безопасности.
Процессор общего назначения похож на процессор, установленный в обычном ПК. Он выполняет основные операции на межсетевом экране. Остальные виды процессоров призваны снизить нагрузку на него.
Процессор данных отвечает за обработку подозрительного трафика и сравнения его с изученными угрозами. Он ускоряет вычисления, происходящие на уровне приложений, а также выполняет задачи антивируса и служб предотвращения вторжений.
Сетевой процессор предназначен для высокоскоростной обработки сетевых потоков. Основная задача заключается в анализе пакетов и блоков данных, трансляции сетевых адресов, маршрутизации сетевого трафика и его шифровании.
Процессор обработки политик безопасности отвечает за выполнение задач антивируса и служб предотвращения вторжений. Также он разгружает процессор общего назначения, обрабатывая сложные вычислительные задачи.
Аренда межсетевого экрана
▍7.4.2.2. Правила
Каждое правило выражается в виде conditions -j action action_options . Если в одном и том же правиле описаны несколько условий, тогда итоговым критерием является объединение этих условий (по правилам логического И). Результат объединения, как минимум, налагает на правило те же ограничения, что и каждое отдельное условие.
Условие -p protocol соответствует полю протокола IP-пакета. Наиболее часто используемые значения для этого условия — tcp , udp , icmp , и icmpv6 . Это условие может быть дополнено условиями, касающимися TCP-портов, с помощью выражений вида --source-port port и --destination-port port .
Читайте также: