Инструкция по настройке iptables файрвола для ОС Linux

  D. Работа с VDS/VPS

Инструкция по настройке iptables файрвола для ОС Linux

Iptables – это специализированная утилита, межсетевой экран, который используется в ОС Linux. Оперировать с ним довольно легко как мастерам ОС Linux и системным администраторам, так и новичкам. Данное руководство описывает, как за несколько шагов сделать базовую конфигурацию настройки файрвола.

Чем является iptables?

Iptables представляет собой вспомогательную программу, которая работает как межсетевой экран. Настраивается конфигурация утилиты посредствам командной строки, определенный набор правил позволит разрешить или заблокировать передачу трафика. В момент установки интернет-соединения с устройством (компьютером ил ноутбуком), программа сканирует выставленный список правил и выполняет команды в соответствии с записями. Когда правило отсутствует, команда исполняется по умолчанию.

Установка iptables стандартно выполняется на всех ОС Linux. Для обновления или повторной установки программы предназначена команда:

sudo apt-get install iptables

Для пользователей, не привыкших к работе с командной строкой, выпущены графические интерфейсы (в том числе программа Firestarter). Но если настраивать утилиту через специализированные программы и удаленные ssh-соединения, необходимо соблюдение осторожности, так как неверно введенная команда несет риск блокировки интернет-подключения. Система не сможет осуществить подключение к удаленной машине, для решения данной проблемы придется физическим путем корректировать настройки компьютера.

Правила iptables

У файрвола имеются 3 главные категории правил:

  • Правило Input применяется для мониторинга всех входящих пакетов. Если человек захочет сделать подключение к серверу по зашифрованной технологии SSH, то утилита произведет сравнение IP пользователя с данными из своего списка и решит, позволить сделать соединение или заблокировать.
  • Правило категории Forward обрабатывает входящие сообщения и пакеты, чьей конечной точкой отправки текущий сервер не становится. Если рассматривать функционирование маршрутизатора, можно заметить, что к роутеру запрашивают подключения многие приложения и пользователи, при этом пакеты направляются маршрутизатору только для того, чтобы быть перенаправленными следующему адресату. Если вам не нужно настраивать NAT и маршрутизацию, то в повседневных командах Forward применяться не будет.
  • Тип Output применяется, чтобы контролировать исходящий трафик с соединениями. Если юзер хочет запинговать любой на выбор веб-сайт, утилита iptables просканирует имеющиеся правила для определения своих действий и дальше решит, блокировать или разрешить соединение.

Необходимо запомнить:

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

Настройка поведения

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

Для нахождения стандартных и актуальных настроек утилиты нужна команда iptables –L:

Настройка утилиты

В командной строке применилась команда grep, она используется для получения более конкретного вывода. На картинке можно заметить, что по умолчанию 3 цепочки команд позволяют компьютеру принимать трафик. Такая реакция машины считается предпочтительной для обычного пользователя. Данное правило существует по умолчанию. Но если вы изменяли конфигурацию и желаете вернуть стандартные настройки, следует написать следующие команды:

iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT

Оптимальное поведение – сначала разрешить получение и отправку всех пакетов, а после этого создавать запреты соединений конкретным IP и на выбранный порт.

Также можно сделать противоположные действия: включить запрет на пересылку всего трафика, а после создать исключения на разрешения. Для этого имеются такие команды:

iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

Что можно делать с соединениями

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

  • Разрешение соединения при помощи Accept;
  • Игнорирование попыток коннекта командой Drop — это используется в случаях, в которых от источника трафика скрывается факт блокировки запросов;
  • Полная блокировка соединения Reject и отправка отчетного сообщения об ошибке — это вариант для случаев, если пользователь дает ресурсам информацию об их блокировке своим файрволом.

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

Разрешенное соединение выглядит так:

Разрешенное соединение

При игнорировании:

Игнорирование соединения

Полное отклонение соединения:

Отклонение соединения

Как разрешить/заблокировать соединение

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

Для добавления новых правил к уже существующим, используется команда iptables –A. То есть межсетевой экран запускает сканирование по началу файла списка и последовательно проходит правила, ища совпадения.

При необходимости дополнить имеющиеся настройки, применяется выражение iptables -I [цепочка] [номер]. Здесь пользователь записывает номер места, куда помещается свежее правило.

Группа соединений, приходящие с одного IP-адреса

Выданная команда блокирует все попытки подключения, исходящие от  IP-адреса 100.100.100.100:

iptables -A INPUT -s 100.100.100.100 -j DROP

Если имеется определенный диапазон IP, которые рекомендуется заблокировать, следует применить данную команду. Диапазон адресов здесь записывается через слеш после IP-адреса, его можно заменить на маску подсети:

iptables -A INPUT -s 100.100.100.0/24 -j DROPiptables -A INPUT -s 100.100.100.0/255.255.255.0 -j DROP

Соединения для конкретного порта

Для блокировки соединения типа SSH с адреса 100.100.100.100:

iptables -A INPUT -p tcp --dport ssh -s 100.100.100.100 -j DROP

В записанной команде допускается использование любого протокола, не только SSH, и номера порта. Выражение –p tcp является разновидностью соединений, применяемых протоколами. Чтобы заблокировать протокол, работающий с UDP, необходимо скорректировать выражение: –p udp.

Чтобы для любого IP блокировать соединения SSH типа, существует краткая команда:

iptables -A INPUT -p tcp --dport ssh -j DROP

Состояние интернет-соединения

Большинство современных протоколов нуждаются в двустороннем типе коммуникаций. Для разрешения машине SSH-соединения придется добавлять правило в обе категории output и input. Если возникает необходимость в разрешении доступа исключительно входящим и соединениям шифрованного типа SSH, будет приименяться состояние соединений. Эта функция опишет двустороннюю коммуникацию, для которой разрешено подключение соединение конкретного направления (входящего).

В написанной команде разрешается соединение SSH, которое поступило с IP-адреса 10.10.10.10. При этом, данный тип соединения к хосту заблокирован, но файрвол позволяет отправлять данные по SSH к установленным раннее сессиям, а это, в свою очередь, разрешает коммуникацию двух хостов:

iptables -A INPUT -p tcp --dport ssh -s 100.100.100.100 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

Как сохранить изменения

Если случайно перезапустить iptables, все изменения в командах и правилах исчезнут, поэтому их нужно заранее сохранять. Для этого имеется переделенная команда, меняющая вид в зависимости от вида Linux.

Для Ubuntu она выглядит следующим образом:

=sudo /sbin/iptables-save

Варианты для Red Hat / CentOS:

=/sbin/service iptables save=/etc/init.d/iptables save

Прочие команды

Чтобы вывести и просмотреть созданные правила iptables применяется:

iptables –L

Если добавить –v, можно будет просмотреть данные о пакетах и байтах. Выражение –n предоставит цифровые сведения об именах хостов, протоколах, сетях.

Чтобы удалить все правила конфигурации утилиты, нужно написать:

iptables –F