Iptables – защита VPS на Ubuntu межсетевым экраном Linux

Iptables – защита VPS на Ubuntu межсетевым экраном Linux

Вступление

Межсетевой экран Linux Iptables используется для мониторинга входящего и исходящего трафика на сервер и его фильтрации. Его работа основана на правилах, определяемых пользователями и призвана защитить систему от нежелательного доступа кого-либо. Используя Iptables, вы можете определить правила, которые будут разрешать только определённый трафик на ваш сервер. В этом руководстве по Iptables вы увидите, как защитить ваше веб-приложение используя Iptables.

Примечание: Для пользователей RHEL/ CentOS уже установлен в операционной системе сервис firewallD. Если вы хотите использовать Iptables, вам нужно вначале его отключить.

Что понадобится

Прежде чем приступить к выполнению руководства, проверьте наличие:

Если вы хотите узнать больше о SSH и SSH командах следуйте этому руководству.

Базовые понятия в Iptables

Все данные отправляются через интернет в форме пакетов. Ядро Linux обеспечивает интерфейс для фильтрации как входящих, так и исходящих пакетов используя таблицы для фильтра пакетов. Iptables – это приложение командной строки, межсетевой экран Linux. Вы можете использовать его для установки, обслуживания и проверки этих таблиц. Могут быть определены сложные таблицы. В каждой таблице может быть несколько цепочек. Цепочки – это ни что иное, как набор правил. Каждое правило определяет, что делать с пакетом, если он соответствует некоторому заданному шаблону. Когда пакет соответствует, задаётся TARGET (действие). Действие может быть обнаружить соответствие с другой цепочкой или одному из трёх специальный значений:

  • ACCEPT (принять): Что означает, пакету будет разрешено прохождение.
  • DROP (сбросить): Что означает, пакету не будет разрешено прохождение, он будет сброшен и «забыт».
  • RETURN (вернут): Означает, пропустить текущую цепочку и вернуться к следующему правилу в цепочке, из которой он был вызван.

В рамках данного руководства мы собираемся работать с одной из таблиц по умолчанию под названием filter. Таблица фильтров имеет три цепочки (набора правил).

  • INPUT – Эта цепочка используется для контроля входящих на сервер пакетов. Вы можете разрешить/заблокировать подключение, в зависимости от порта, протокола или IP-адреса источника.
  • FORWARD – Данная цепочка используется для фильтра входящих на сервер пакетов, но перенаправляемых куда-то ещё.
  • OUTPUT – Эта цепочка используется для фильтра исходящих с вашего сервера пакетов.

 

Руководство по Iptables - таблица фильтров

Шаг 1 – Установка межсетевого экрана Linux Iptables

1. Установка Iptables

Приложение Iptables идёт предустановленным в почти всех дистрибутивах Linux. Но, если вдруг в вашей системе Ubuntu/Debian оно не установлено, выполните команды:

sudo apt-get update

sudo apt-get install updates

2. Проверка текущего статуса Iptables

Этой командой вы можете проверить статус конфигурации вашего Iptables. Здесь ключ -L используется для отображения списка всех правил и ключ -v — для более детального списка. Пожалуйста, обратите внимание, что эти ключи являются чувствительными к регистру (case sensitive).

sudo iptables -L -v

Пример вывода:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source             destination         
 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source             destination         
 
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source             destination

Это вывод результата выполнения команды, приведенной выше. Здесь все три цепочки установлены в значение политики по умолчанию ACCEPT. На данный момент нет правил ни для одной из цепочек.

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

Шаг 2 – Определение цепочки правил

Определение правила значит добавить его в список (цепочку). Вот команды Iptables, дополненные определёнными параметрами. Нам не обязательно определять их все.

sudo iptables -A  -i <interface> -p <protocol (tcp/udp) > -s <source> --dport <port no.>  -j <target>

Здесь -A указывает на дополнение (append). Цепочка указывает на цепочку, которую мы хотим дополнить нашими правилами. Значение interface — это сетевой интерфейс, где мы хотим производить фильтрацию трафика. Значение protocol указывает на сетевой протокол пакетов, которые вы хотите фильтровать. Также вы можете определить номер порта — port, по которому вы хотите фильтровать трафик.

Для получения более детальной информации о командах Iptables и их параметрах, вы можете посетить главную страницу Iptables(англ).

1. Разрешение трафика на localhost

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

sudo iptables -A INPUT -i lo -j ACCEPT

Пример вывода на экран:

Chain INPUT (policy ACCEPT 7 packets, 488 bytes)
pkts bytes target prot opt in out source destination 
0 0 ACCEPT all -- lo any anywhere anywhere

Здесь опция -A используется для того, чтобы добавить к цепочке INPUT правило принимать все подключения на интерфейс lo. lo означает петлевой(loopback) интерфейс. Он используется для всех коммуникаций на localhost, как взаимодействие между базой данных и веб-приложением на одной и той же машине.

2. Разрешение подключения к HTTP, SSH, и SSL портам

Мы хотим, чтобы наши постоянные подключения по HTTP (порт 80), https (порт 443), ssh (порт 22) работали как обычно. Введите следующие команды для разрешения этого. Мы определим протокол, опция -p и соответствующий порт для каждого протокола опцией –dport (порт назначения — destination port).

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Теперь все подключения по TCP-протоколу, с определёнными портами будут приняты.

3. Фильтрация пакетов на основании содержимого

Если вы хотите принять или отклонить пакеты, основываясь на IP-адресе или диапазоне IP-адресов, вы можете определить их при помощи опции -s. Например, для принятия пакетов с адреса 192.168.1.3 –

sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT

Вы можете настроить сбрасывание пакетов с IP-адреса подобной командой с опцией DROP.

sudo iptables -A INPUT -s 192.168.1.3 -j DROP

Если вам нужно сбросить пакеты из диапазона IP-адресов, вам нужно использовать модуль Iprange с опцией -m и задать диапазон IP-адресов с ключом –src-range.

sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP

4. Отбрасывание всего остального трафика

Примечание: Очень важно сбрасывать (DROP) весь остальной трафик, после того как правила определены, это предотвращает несанкционированный доступ к серверу по других открытым портам.

sudo iptables -A INPUT -j DROP

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

sudo iptables -L -v

5. Удаление правил

Если вы хотите удалить все правила и начать с чистого листа, вы можете использовать сбрасывающую команду.

sudo iptables -F

Эта команда удаляет все текущие правила. Если вы хотите удалить определённое правило, вы можете сделать это при помощи опции -D. Вначале, выведите список правил с номерами при помощи этой команды:

sudo iptables -L --line-numbers

Теперь у вас есть список правил с номерами.

Chain INPUT (policy ACCEPT)
num target prot opt source destination 
1 ACCEPT all -- 192.168.0.4 anywhere 
2 ACCEPT tcp -- anywhere anywhere tcp dpt:https
3 ACCEPT tcp -- anywhere anywhere tcp dpt:http
4 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh

Чтобы удалить задайте номер в списке и цепочку правила. В нашем случае цепочка INPUT и номер 3.

sudo iptables -D INPUT 3

Шаг 3 – Сохранение изменений

Правила Iptables, которые мы создали, сохранены в памяти. Это значит, что нам придётся их переопределять после перезагрузки. Для того, чтобы сделать эти изменения постоянными и после перезагрузки, используйте команду в системе Ubuntu/Debian:

sudo /sbin/iptables-save

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

sudo iptables -F
sudo /sbin/iptables-save

Заключение

В нашем руководстве по Iptables мы использовали межсетевой экран Linux для разрешения трафика по определённым портам. Мы также убедились, что наши правила будут сохранены после перезагрузки. Данный межсетевой экран Linux будет сбрасывать нежелательные пакеты, но здесь есть оговорка – Iptables обрабатывает только трафик ipv4. Если на вашем VPS разрешена сетевая конфигурация ipv6, вам нужно установить другие правила для трафика с ip6tables.

Author
Автор

Elena B.

Елена имеет профессиональное техническое образование в области информационных технологий и опыт программирования на разных языках под разные платформы и системы. Более 10 лет посвятила сфере веб, работая с разными CMS, такими как: Drupal, Joomla, Magento и конечно же наиболее популярной в наши дни системой управления контентом – WordPress. Её статьи всегда технически выверены и точны, будь то обзор для WordPress или инструкции по настройке вашего VPS сервера.