Настройка firewall kali linux

Обновлено: 04.07.2024

В статье рассмотрены основные правила настройки и принципы построения того, что принимается за фаерволл Кали Линукс.

Перед тем, как приступить к настройкам безопасности в Дебиан, необходимо уяснить, что таблицы iptables строго говоря не являются сервисом или службой. Речь идёт о специфической команде, которая позволяет манипулировать фаерволлом сетевого фильтра ядра системы. Она позволяет лишь выдавать, сохранять и, соотвественно, удалять соответствующие команды.

Знакомство с таблицами iptables

Возможности этой команды в Дебиан и других системах различны. Так, в Redhat и Fedora вроде как существует конкретный скрипт в /etc/init.d, который призван изменять конфигурацию iptables (напрямую его останавливать и запускать). Так что, работая в Кали Линукс, пользователи ошибочно пытаются применять подобную технику, но неизменно сталкиваются с отказом системы на такие действия. Нет, скрипт, конечно, можно написать и впоследствии им пользоваться. Но по умолчанию пользователи Дебиан этого скрипта не найдут.



Проверим наличие таблиц командой:

Бывает, что терминал молчит. Тогда доустановим таблицы командой

файл конфигурации фаерволла кали линукс

Сразу запоминаем ещё одну команду:

которая позволит вернуть предыдущие настройки (ей можно с успехом воспользоваться и для того же создания нового файла конфигурации; вновь введённая, она равнозначна предыдущей).

Для реализации следующих команд нам понадобятся root права. Вводим их последовательно, внося изменения в созданный только что файл:

Можете открыть и полюбопытствовать на проделанные изменения:

файл firewall.rules

Или прямо из терминала:

ВНИМАНИЕ!

Фаерволл Кали Линукс: основные правила

цепочки таблиц фаервола ядра

Фаерволл Кали Линукс: добавляем правила

Фаерволл Кали Линукс обычно рекомендуется конфигурировать одним из двух традиционных вариантов. Либо установить правило по умолчанию принимать, и затем блокировать нежелательный трафик с помощью специальных правил, либо использовать правила для определения разрешённого трафика, обрабатывать его должным образом, а остальной поток данных просто блокировать. За основу принят именно второй вариант.

Чтобы приступить к работе с таблицами, сначала нужно добавить правила для того, чтобы фаерволл пропускал входящий трафик для нужных служб. Iptables в состоянии отслеживать трафик соединения. Вот команда на Разрешить установленные соединения:

Сейчас и потом проверяйте проделанные изменения командой:

Теперь разрешим трафик для конкретного порта для работы по защищённому каналу:

И так далее по мере надобности. После добавления разрешающих правил, на остальные наложим запрет командой:

Фаерволл Кали Линукс: сохраняем настройки

После перезагрузки сервера, настройки исчезнут. Чтобы сохранить работу, не забывайте сохраняться командой в начале статьи:

перепишет существующие правила

добавит новое правило к существующим. Вот так выглядит простой набор команд в числе работы с фаерволом Кали.

Представляем вашему вниманию продолжение перевода главы 7 книги «Kali Linux Revealed». В прошлый раз речь шла о политиках безопасности и о защите компьютеров и сетевых служб. Этот материал включает в себя перевод раздела 7.4, который посвящён файрволу и фильтрации пакетов.

image


7.4. Файрвол или фильтрация пакетов

Файрвол — это компьютерное оборудование, которое может быть представлено в виде программного, аппаратного, или программно-аппаратного комплекса. Файрвол обрабатывает входящие и исходящие сетевые пакеты (поступающие в локальную сеть или покидающие её) и пропускает лишь те из них, которые соответствуют неким предопределённым правилам.

Фильтрующий сетевой шлюз — это разновидность файрвола, который защищает всю сеть. Обычно его устанавливают на выделенном компьютере, настроенном как шлюз для сети. В результате этот компьютер может обрабатывать все пакеты, которые пересекают границу между сетью и внешним миром. Как вариант, локальный файрвол — это программная служба, которая работает на конкретной машине для того, чтобы ограничивать доступ к неким службам на этой машине, или, возможно, для предотвращения исходящих соединений, инициируемых нежелательным программным обеспечением, которое пользователь компьютера может, намеренно или случайно, установить.

В ядре Linux имеется встроенный файрвол netfilter . Требования различных сетей и пользователей неодинаковы, поэтому не существует стандартного подхода к настройке файрвола, позволяющего получить готовое решение на все случаи жизни. Управлять файрволом netfilter можно из пространства пользователя с помощью команд iptables и ip6tables . Разница между этими двумя командами заключается в том, что первая предназначена для сетей IPv4, вторая — для сетей IPv6. Так как оба стека протоколов, вероятно, будут в ходу ещё многие годы, оба инструмента следует использовать совместно. Кроме того, тут можно применить отличную программу fwbuilder , которая даёт графические инструменты для построения и представления правил фильтрации трафика.

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

7.4.1. Как работает netfilter

Netfilter использует четыре таблицы, которые хранят правила, регулирующие три вида операций над пакетами:

  • filter : касается правил фильтрации (принять, отклонить, или проигнорировать пакет);
  • nat (Network Address Translation): касается трансляции адресов источника, получателя, или портов пакета;
  • mangle : касается других изменений IP-пакетов (включая поля и параметры ToS — Type of Service);
  • raw : позволяет выполнять ручные модификации пакетов до того, как они дошли до системы отслеживания соединения.

Таблица filter содержит три стандартные цепочки:



Рис. 7.1. Цепочки netfilter

Каждая цепочка представляет собой список правил. Каждое правило — это набор условий и действий, которые должны быть выполнены при соблюдении соответствующих условий. В процессе обработки пакета файрвол просматривает подходящую цепочку, правило за правилом, и, когда условия для некоего правила выполняются, он «перепрыгивает» (отсюда и опция -j — от слова «jump») к заданному действию для продолжения обработки пакета.

Наиболее распространённые шаблоны поведения стандартизированы, для них существуют выделенные действия. Выполнение одного из этих стандартных действий прерывает проход по цепочке, так как судьба пакета уже предопределена (это не касается упомянутых ниже исключений). Вот список действий netfilter :

▍Что такое ICMP?

Например, буфер приёма — это небольшая область памяти, предназначенная для хранения данных после приёма их из сети и до обработки ядром. Если эта память полностью заполнена, новые данные принять невозможно и ICMP сигнализирует о проблеме. В результате источник может снизить скорость передачи данных (которая, через некоторое время, в идеале, должна достигнуть уровня, обеспечивающего баланс между источником и приёмником).

Обратите внимание на то, что хотя сеть IPv4 может работать и без ICMP, поддержка протокола ICMP v6 совершенно необходима для сетей IPv6, так как этот протокол совмещает несколько функций, которые, в сетях IPv4, были распределены между ICMPv4, Internet Group Membership Protocol (IGMP), и Address Resolution Protocol (ARP). ICMPv6 посвящён стандарт RFC4443.

7.4.2. Синтаксис команд iptables и ip6tables

Команды iptables и ip6tables используются для работы с таблицами, цепочками и правилами. Их опция - t table позволяет указать таблицу, с которой планируется работать (по умолчанию это таблица filter ).

▍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 .

▍7.4.2.2. Правила

Каждое правило выражается в виде conditions -j action action_options . Если в одном и том же правиле описаны несколько условий, тогда итоговым критерием является объединение этих условий (по правилам логического И). Результат объединения, как минимум, налагает на правило те же ограничения, что и каждое отдельное условие.

Условие -p protocol соответствует полю протокола IP-пакета. Наиболее часто используемые значения для этого условия — tcp , udp , icmp , и icmpv6 . Это условие может быть дополнено условиями, касающимися TCP-портов, с помощью выражений вида --source-port port и --destination-port port .

▍Логическое отрицание условий


Если поставить перед условием восклицательный знак, это приведёт к трансформации его в обратное условие. Например, восклицательный знак в условии опции -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) ).

7.4.3. Создание правил

Каждая операция создания правила требует одного вызова команды iptables или ip6tables . Ввод этих команд вручную может оказаться трудоёмкой задачей, поэтому обычно эти команды оформляют в виде скриптов, которые позволяют автоматически настраивать систему так, как это нужно, каждый раз при загрузке компьютера. Подобные скрипты можно писать вручную, но есть и более продвинутый способ, который заключается в использовании программы fwbuilder . Для её установки воспользуйтесь такой командой:


Принципы создания правил в программе просты. Сначала опишите все элементы системы, на которые будут распространены правила, которые вы хотите создать. Среди этих элементов можно отметить следующие:

  • Сам файрвол с его сетевыми интерфейсами.
  • Сеть и соответствующие ей диапазоны IP-адресов.
  • Серверы.
  • Порты, принадлежащие службам, работающим на серверах.

Поскольку во внимание принимается и IPv6, можно либо создать два самостоятельных набора правил, для IPv4 и IPv6, либо создать лишь один набор и позволить fwbuilder преобразовать правила в соответствии с адресами, назначенными объектам.



Рис. 7.2. Главное окно fwbuilder

Итогом работы с fwbuilder станет сгенерированный программой скрипт настройки файрвола в соответствии с заданными правилами. Модульная архитектура программы даёт возможность создавать скрипты, рассчитанные на различные системы, в том числе — iptables для Linux, ipf для FreeBSD и pf для OpenBSD.

7.4.4. Применение правил при каждой загрузке системы

Для того, чтобы применять правила файрвола каждый раз, когда система загружается, нужно зарегистрировать конфигурационный скрипт в директиве up файла /etc/network/interfaces . В следующем примере скрипт хранится по адресу /usr/local/etc/arrakis.fw .


В этом примере предполагается, что вы используете для настройки сетевых интерфейсов ifupdown . Если вы используете другие инструменты (вроде NetworkManager или systemd-networkd ), обратитесь к их документации для того, чтобы выяснить способы выполнения скрипта после включения интерфейса.

Итоги

Сегодня мы поговорили о работе со встроенным в ядро Linux файрволом netfilter , обсудили особенности управления трафиком IPv4 и IPv6 с использованием команд iptables и ip6tables . Мы рассмотрели графическое средство для создания правил fwbuilder и показали, как автоматически задавать правила при загрузке системы. В следующий раз мы поделимся с вами переводом раздела 7.5, который посвящён мониторингу Kali Linux.

Этичный хакинг и тестирование на проникновение, информационная безопасность

Предположим, для тренировки вы установили Mutillidae, или DVWA, или что-то подобное (кстати, смотрите «Установка OWASP Mutillidae II и Damn Vulnerable Web Application (DVWA) в Kali Linux»).

Эти приложения имеют самые разные уязвимости, в том числе для загрузки файлов (бэкдоров) и SQL инъекций. Такие скрипты могут привести к полной компрометации не только веб-сервера, но и всего компьютера. Поэтому самое правильное — это ограничить доступ к веб-серверу из вне.

Контроль доступа (каким IP адресам разрешено или запрещено подключаться) настраивается в файл .htaccess. Но по умолчанию поддержка этого файла выключена — то есть настройки из этого файла не учитываются.

Чтобы включить .htaccess в Kali Linux откройте файл /etc/apache2/apache2.conf:

Найдите там строки:

И замените их на:


Теперь перезапустите веб сервер, чтобы изменения вступили в силу:

Корневой папкой сайтов является /var/www/html/, поэтому создайте там файл .htaccess:

На самом деле, файл .htaccess можно создать в любой папке с сайтами. Помните, что на доступ к любой папки веб-сервера оказывают влияние как файл .htaccess в текущей директории, так и файлы .htaccess в родительских директориях.

Если вам нужно ограничить доступ для всех IP, кроме локальных, то используйте:

Вы можете запретить все удалённые подключения директивой:


Обратите внимание, что несмотря на название local разрешены только соединения с этого же самого компьютера (localhost) и запрещены любые другие удалённые подключения, даже из локальной сети.


С помощью «Require ip» можно указывать одиночные IP или диапазоны сети в различных нотациях:

Директиву «Require ip» можно использовать много раз.


iptables – утилита, которая управляет Netfiller (Linux Firewall). То есть, если очень грубо сказать, то iptables это линуксовский файрвол. Так как мы сидим на машине с Kali Linux, то будем рассматривать использование iptables именно на этой системе.

Перед использованием команды iptables я буду всегда ставить sudo, так как начиная с какой-то там версии iptables требует права рута.

Итак, первая команда, давайте просто посмотрим, что iptables вообще установлен.


Всё хорошо, можем работать дальше, так как iptables установлен (на Кали Линуксе он установлен изначально, не знаю как на других дистрибутивах).

Теперь разрешим абсолютно всем подключаться к нашему серверу к порту 80.

Соответственно, запретить входящие соединения на порт 80, надо так

Чтобы посмотреть правила, которые мы добавили, можно посмотреть с помощью таких команд.



Мы видим, что у нас есть правила в цепочке INPUT, то есть входящие соединения. Не обращайте внимания, у меня порядок может отличаться от вашего, это я экспериментировал. Суть в том, что на скрине у меня 3 правила, первое DROP (запрещающее входящие соединения), затем идет ACCEPT – разрешающее соединение (как видите source, destination – anywhere, то есть с любого IP адреса).

Теперь, мы хотим удалить какое-либо правило, давайте удалим последнее (номер 3). Выполним команду.

Затем смотрим список правил и видим, что правило 3 удалилось


Теперь давайте запретим исходящий трафик, например на сайт microsoft.

Введем следующую команду.



Таким образом можно заблокировать сеть негодяев, пытающихся что-то выведать и сломать на нашем сервере (сеть 5.9.0.0/16, как пример).

Отличия параметра I от параметра A заключается в том, что I позволяет вставлять правило в определенное место по номеру, без номера помещает правило на 1-ое место. A вставляет правило в конце цепочки.
Если Вы поместите правило с помощью параметра A ниже 6-ой строки в листинге выше, то оно не сработает, так как 6-ая строка запрещает все, что не было разрешено раньше. Правила выполняются строго по очереди.

Хочу отметить, что если вы создали какие-то правила, затем выключили вашу Линукс машину и включили заново, ваши все правила пропадут, то есть не сохранятся.
Поэтому, вам надо каждый раз сохранять правила и делать им restore.

Чтобы сохранить правило, вводим такую команду.


Мы видим, что правила сохранились. Можно еще раз убедиться в этом, зайдя сюда /etc/iptable/rules.v4


Сохранили. Затем, после того, как заново залогинились после выключения машины, вам надо ввести такую команду.

Таким образом, правила будут подтянуты из файла rules.v4.

Это был краткий экскурс в iptables, думаю вы поняли смысл, теперь вы знаете основные команды. В дальнейшем буду пополнять данный мануал.

Читайте также: