Организация безопасного межсетевого экрана iptables в Kali Linux
Салимжанов Р.Д
Organizing a secure iptables firewall in Kali Linux
Salimzhanov R.D.
Аннотация: В этой статье представлена первоначальная безопасная настройка iptables в Kali Linux, с примерами настройки.
Abstract: This article presents the initial secure configuration of iptables in Kali Linux, with configuration examples.
Введение
Для начала следует ответить на вопрос: что такое iptables и зачем его настраивать?
Iptables — это межсетевой экран для настройки правил файрвола в операционных системах Linux. Он позволяет управлять сетевым трафиком, определять, какие пакеты могут проходить через сетевой интерфейс, блокировать нежелательный трафик и обеспечивать безопасность сети.
Настраивая iptables, можно контролировать доступ к различным сетевым службам, ограничивать или разрешать определенные типы трафика, создавать правила для защиты от DDoS-атак и других сетевых угроз.
В общем, настройка iptables позволяет управлять безопасностью сети, защищать серверы от несанкционированного доступа и обеспечивать бесперебойную работу сетевых сервисов.
Установка iptables
Настройка и установка iptables производится в командной строке, как правило, itpables предустанавливается на всех Linux-дистрибутивах. Чтобы обновить утилиту или установить ее используем команду:
sudo apt-get install iptables
После установки/обновления следует проверить текущие правила iptables с помощью команды:
sudo iptables -L
или
sudo iptables --list
Поведение по умолчанию, правила и цепочки
И так, при просмотре текущих правил iptables мы видим:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Что здесь обозначает: INPUT, FORWARD, OUTPUT?
В системе Linux используются 3 основные цепочки определенных по умолчанию:
INPUT - Управляет входящими соединениями.
FORWARD - Управляет входящими соединениями, которые не поступают локально.
OUTPUT - Управляет исходящими соединениями.
Так же к каждой цепочке, как определенных по умолчанию, так и составленных самостоятельно применяются правила:
ACCEPT - Открывает (разрешает) соединение.
DROP - Закрывает соединение без отправки ответа клиенту.
QUEUE - Отправляет пакет в очередь для дальнейшего взаимодействия со сторонним приложением.
RETURN - Возвращает пакет на одно правило назад, прерывая обработку текущего правила.
REJECT - Блокирует соединение. В ответ будет отправлено сообщение об ошибке.
DENY - Отбрасывает входящее соединение. Отправка ответа не предусмотрена.
ESTABLISHED - Соединение установлено так как поступил уже не первый пакет в рамках данного сеанса.
В целом, правила iptables предоставляют гибкость и контроль над сетевым трафиком, позволяя им настраивать безопасность и эффективность работы сетевых сервисов.
Первоначальная настройка безопасного межсетевого экрана iptables
И так, есть 2 варианта настройки безопасности: по умолчанию заблокировать все и разрешить исходящие соединения, а все остальное запретить. Для начала перейдем в привилегированный режим работы командой:
Sudo su
И очистим все текущие правила iptables с помощью команды:
sudo iptables -F
В первом случаи:
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Во втором случаи:
iptables --policy INPUT DROP
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD DROP
Полный безопасный режим считается при блокировки всех соединений, но и также его более дольше настраивать, так как многим программам при настройке INPUT, так же следует настраивать OUTPUT. Так что в этой статье рассмотрим более упрощённый способ настройки (2 вариант).
И так, теперь у нас все входящие соединения запрещены, а исходящие разрешены. Для комфортной работы этого мало, и необходимо добавить несколько исключений. Для начала разрешим входящие соединения, которые уже были установлены командой:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
А также разрешим входящие соединения с localhost:
iptables -A INPUT -i lo -j ACCEPT
Теперь у нас продолжают также функционировать программы, которые были до этого установлены. (соответственно если вы не доверяете какому-либо установленному ПО, следует его ограничить).
Открываем порты для базовых сервисов веб-сервера:
Открываем порт 80 для http:
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
Открываем порт 443 для https:
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Открываем порт 22 для того, чтобы была возможность подключаться к серверу по SSH:
iptables -A INPUT -p TCP --dport 22 -j ACCEPT
Соответственно, по необходимости можно открывать порты, основываясь на конкретных задачах. Список портов и обозначений: (https://ru.wikipedia.org/wiki/Список_портов_TCP_и_UDP).
После начальных действий, сохраним правила, перед этим создав отдельную директорию:
mkdir /etc/iptables-conf/
iptables-save > /etc/iptables-conf/iptables_rules2.ipv4
Создаем скрипт импорта при старте сети, чтобы при запуске правила выгружались из нужного сохранения.
vim /etc/skriptiptables.sh
Запищим в файле скрипт импорта:
#!/bin/bash
/sbin/iptables-restore < /etc/iptables-conf/iptables_rules2.ipv4
Сделаем исполняемым:
chmod +x /etc/skriptiptables.sh
После чего, добавляем скрипт в автозагрузку с помощью systemd:
vim /etc/systemd/system/testservice.service
Запищим в файле автозапуска:
[Unit]
Description=Запуск iptables
[Service]
Type=oneshot
ExecStart=/etc/skriptiptables.sh
[Install]
WantedBy=multi-user.target
Запускаем:
systemctl enable testservice
Теперь при загрузке системы, правила автоматически загружаются.
Проверим после перезагрузки:
Если вдруг правила надо будет откатить или загрузить из другого сохранения, пользуются командой:
iptables-restore < /etc/iptables-conf/iptables_rules2.ipv4
После первоначальной настройки безопасного режима, в зависимости от конкретных целей следует, внедрения правил для конкретных задач. Ниже приведу примеры.
Блокировка определенного IP адреса.
Блокировка IP-адреса должна осуществляться с учетом правил и политик, установленных вашей организацией или провайдером услуг. Кроме того, следует учитывать возможность изменения IP-адреса злоумышленником или необходимость разблокировки IP-адреса в будущем. Такая блокировка может помочь от злоумышленников, спама, ограничения к определенному сайту и так далее.
Пример:
Чтобы заблокировать адрес злоумышленника 2.2.2.2:
iptables -A INPUT -s 2.2.2.2 -j DROP
Чтобы заблокировать определенный домен:
iptables -A OUTPUT -p tcp -d vk.com -j DROP
Заблокировать входящие запросы порта
Чтобы заблокировать все входящие запросы порта 8080 используем следующие команды:
iptables -A INPUT -p tcp --dport 8080 -j DROP
iptables -A INPUT -i eth1 -p tcp --dport 8080 -j DROP
Чтобы заблокировать запрос порта 80 с адреса 2.2.2.2 используем:
iptables -A INPUT -p tcp -s 2.2.2.2 --dport 80 -j DROP
Сбрасывать трафик с определенных MAC адресов.
iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
Открыть диапазон адресов, для определенного порта.
iptables -A INPUT -p tcp --destination-port 25 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT
Ограничить количество параллельных соединений для одного адреса.
Ограничение количества параллельных соединений для одного адреса может быть полезным в различных ситуациях:
1. Защита от DDoS-атак
2. Управление нагрузкой
3. Предотвращение спама:
К примеру добавим правило в цепочку INPUT, которое позволяет блокировать новые входящие соединения на порт 22 (SSH) при достижении определенного лимита активных соединений. Это полезно для защиты от DDoS-атак, направленных на перегрузку целевого сервиса.
iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
--connlimit-above 3 : Указывает, что правило действует только если количество соединений превышает 3.
Ограничить пользователю доступ в интернет
Создадим тестового пользователя и зададим ему пароль:
useradd -m testuser
passwd testuser
Создадим группу, которой ограничим доступ в интернет и запишем пользователя в группу:
groupadd notinet
usermod -a -G notinet testuser
Введем правило на группу:
iptables -A OUTPUT -m owner --gid-owner notinet -j DROP
Это правило желательно добавить в автозагрузку системы, как было показано выше. В любом случае, перед тем как ограничивать доступ в интернет, нужно тщательно изучить все возможные последствия и подстроится под дискреционную ролевую модель в сети.
ВЫВОД
Подведем итоги IPtables — это стандартный инструмент для управления сетевым экраном (firewall) в Linux. Он позволяет администраторам блокировать или разрешать трафик на основе различных критериев, таких как IP-адрес источника и назначения, порты TCP/UDP и другие. Несмотря на то, что существуют и другие инструменты для управления сетевыми экранами в Linux, iptables остается одним из самых популярных и широко используемых инструментов благодаря своей гибкости и мощности.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1) Основные настройки iptables, или как настроить фаервол в Linux // [электронный ресурс]. URL: https://linuxinsider.ru/osnovnye-nastrojki-iptables-ili-kak-nastroit-faervol-v-linux/ / (дата обращения 27.05.2024)
2) Настройка iptables Linux Firewall: руководство для начинающих // [электронный ресурс]. URL: https://1cloud.ru/help/linux/nastrojka_linus-firewall_iptables (дата обращения 27.05.2024)
3) Обзор и практическое использование Iptables // [электронный ресурс]. URL: https://timeweb.cloud/tutorials/network-security/obzor-i-prakticheskoe-ispolzovanie-iptables (дата обращения 27.05.2024)
4) Iptables // [электронный ресурс]. URL: https://wiki.archlinux.org/title/Iptables_(Русский)#top-page (дата обращения 27.05.2024)
5) Погружение в Iptables – теория и настройка // [электронный ресурс]. URL: https://wiki.merionet.ru/articles/pogruzhenie-v-iptables-teoriya-i-nastrojka (дата обращения 27.05.2024)