Настройка IPTables: примеры использования

Настройка представляет собой пакет и модуль ядра для Linux, который использует сетевые перехватчики в ядре Linux для обеспечения фильтрации, преобразования сетевых адресов и коммутации пакетов. IPTables — мощный инструмент для превращения обычной системы Linux в простой или функциональный брандмауэр.

Сетевые пакеты, входящие или выходящие из сетевого компьютера Linux, содержат в ядре несколько таблиц. Каждая имеет нулевые или более простые правила, в которых отмечены Ip-адрес или определенные свойства пакета. Его можно игнорировать, принимать, отклонять или перенаправлять в другую таблицу с помощью правил. Хотя принцип этой системы брандмауэра прост, часто довольно сложно настроить его, чтобы он соответствовал конкретной ситуации. Существующую проблему, можно решить с помощью настройки IPTables.

Основы брандмауэра и IPTables

Программа позволяет просматривать и изменять возможности встроенного сетевого фильтра ядра Linux. Пользователь может предоставлять или запрещать доступ к определенным сетевым сервисам, таким как SSH, HTTP, а также разрешать или блокировать определенные адреса при включении. Для этого он устанавливает множество правил, которые сгруппированы в цепочки. По умолчанию настройка IPTables использует три цепи:

  1. Входящие пакеты INPUT.
  2. Пересылка пакетов FORWARD.
  3. Исходящие пакеты OUTPUT.

Программа включена в большинство основных дистрибутивов Linux по умолчанию, включая Debian, Ubuntu, CentOS и Fedora. В IPTables правила представлены в списке. Когда пакет обрабатывается, считывается список правил. Первое из них, которое соответствует этому пакету, полностью выполняется.

Например, если существует набор правил :

  1. Разрешить все соединения SSH.
  2. Отклонить все соединения.
  3. Разрешить все Http-подключения.

При поступлении пакета SSH он будет разрешен, потому что соответствует правилу No 1, Http-трафик - будет отклонен, поскольку он соответствует правилам как No2, так и No3.

Две политики фильтрации

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

Явное разрешение по умолчанию более безопасно, потому что в систему поступает только разрешенный трафик. Компромисс заключается в том, что он управляется сложным набором правил. Если этот набор ошибочный, можно заблокировать свою систему.

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

Функциональность сетевого оборудования

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

Без дополнительной конфигурации в ядре предопределено пять правил:

  1. PREROUTING является первой цепью для входящих пакетов. Отсюда пакеты либо перенаправлены в INPUT, либо в FORWARD.
  2. ВХОД - цепь для пакетов, которые должны быть доставлены локально.
  3. FORWARD - цепь применяется только на компьютерах, на которых разрешена маршрутизация. Это приводит к пересылке пакетов в другой пункт назначения, а не в локальный компьютер.
  4. OUTPUT - цепи применяются для обработки пакетов, пришедшие с локального компьютера.
  5. POSTROUTING приносит пакеты сетевого оборудования для удаленной доставки.

В настройке IPTables CentOS 7 сосредотачиваются только на входящем трафике. Также может потребоваться экранирование исходящего трафика, например, чтобы заблокировать определенные приложения для подключения к удаленным компьютерам. Поэтому определяют правила брандмауэра, которые применяются как к цепочке INPUT, так и к FORWARD, а цепь OUTPUT оставляют нетронутой.

Регулировка производительности при защите

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

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

Загрузка настроек конфигурации системы

Настройка IPTables Ubuntu Server, которая должна быть загружена при запуске, сохраняется в каталоге / etc / sysconfig . Файл IPTables содержит список правил для брандмауэра.

И далее

Первый блок дает имена цепей, которые нужно использовать вместе с начальными значениями счетчиков пакетов и байтов. С помощью этих настроек счетчики сбрасывают каждый раз при загрузке конфигурации брандмауэра. Действие по умолчанию для трех внутренних цепей INPUT, FORWARD и OUTPUT установлено на ACCEPT. Это означает, что пакет принимается каждой из этих цепей, за исключением случаев, когда правило в цепочке разрешает другое.

Пять определяемых пользователем цепочек не имеют действия по умолчанию. Поэтому логика брандмауэра будет продолжать обрабатывать другие правила, когда правила внутри этих цепей не дают определенного ответа, что делать с пакетом. Следующие два блока добавляют четыре правила фильтрации в цепочку INPUT и FORWARD. Каждое из них вызывает безусловный переход к определенной пользователем цепочке. Важна последовательность, в которой эти команды перечислены в файле IPTables, поскольку это также будет последовательность, в которой правила будут обрабатываться в ядре.

Настройка IPTables Linux обеспечивает пакет, полученный или отправленный из системы Linux хотя бы одной таблицей. Однако пакет может подвергаться нескольким правилам в каждой таблице до появления в конце цепочки. Структура и назначение этих правил могут различаться, но они обычно стремятся идентифицировать пакет, исходящий из определенного Ip-адреса или входящий в него, а также набор адресов при использовании протокола и сетевой службы. На следующем рисунке показано, как поток пакетов проверяется IPTables подсистемой.

Добавление и удаление пакетов

"Друзья" ( полезные пакеты) приходят и уходят, но "враги" (вредные пакеты) накапливаются в системе. Многие "враги" носят временный характер. Это компьютеры, зараженные вредоносными программами или серверами с недостатками конфигурации, такими как открытые почтовые или Web Proxy. Как только эти проблемы будут устранены, "враг" может снова стать "другом". Во многих реализациях настройки IPTables Nat брандмауэра выполнить очень сложно. Нужно иметь полное представление о работе брандмауэра, прежде чем внести в него какие-либо изменения.

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

Эти сценарии сначала создают дамп текущих правил брандмауэра и проверяют, соответствует ли IP-адрес или диапазон IP существующему правилу. Если это так, отображается предупреждение. Если совпадающее правило не найдено, IP-адрес или диапазон IP добавляются в список "врагов". Проверяя весь список правил на новый Ip-адрес, включается базовая защита от добавления одного из Ip-адресов в брандмауэр, потому что этот скрипт потерпит неудачу, если он найдет IP-адрес или диапазон в таблице друзей.

Создание набора правил для базового веб-сервера

Прежде чем начинать писать правила настройки Debian IPTables, нужно проверить, установлен ли пакет и загружен ли модуль IPTables.

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

  1. A — Добавить это правило в цепочку. Допустимыми целями для этого являются INPUT, FORWARD и OUTPUT, но, в основном, используется INPUT, который влияет только на входящий трафик.
  2. L - Перечислить текущие правила фильтрации.
  3. M conntrack - разрешает соответствие правил фильтрации в зависимости от состояния соединения и использования опции ctstate.
  4. Ctstate - определяет список состояний для соответствия правилу.
  5. Dport - порт назначения, необходимый для этого правила.
  6. J - перейти к указанной цели. По умолчанию настройка IPTables Ubuntu допускает четыре цели: ACCEPT — принять пакет и прекратить обработку правил в этой цепочке; REJECT — отклонить пакет и уведомить отправителя; DROP — тихо игнорировать пакет и прекратить обработку правил в этой цепочке; LOG — зарегистрировать пакет и продолжить обработку большего количества правил в этой цепочке. Позволяет использовать параметры -log-prefix и -log-level .
  7. Log-prefix — при регистрации, поместить этот текст перед сообщением журнала. Использовать двойные кавычки вокруг используемого текста.
  8. Log-level — войти в систему с использованием указанного уровня syslog.
  9. I — только совпадение, если пакет входит в указанный интерфейс.

Установка правил брандмауэра

Конфигурация брандмауэра (особенно для новичков в Linux) может показаться сложной и трудной для понимания. Как только пользователь поймет основы команд, то сможет написать собственный скрипт вместо использования готовых, которые не всегда подходят для его нужд. Специалисты рекомендуют всегда трижды проверять правила перед их применением. Вначале редактируют /etc/network/iptables файл для установки правил брандмауэра:

sudo nano /etc/network/iptables.

Далее добавляют следующие строки в файл:

Затем нужно сохранить настройки IPTables с помощью [Ctrl] + [X]> Y> [Enter]. После чего нужно загрузить правила в IPTables:

sudo iptables-restore /etc/network/iptables.

Обязательно нужно проверить, работают ли они, набрав:

sudo iptables-save.

Разрешение DNS-трафика

Добавление правил веб-сервера осуществляют с использованием политики по умолчанию и правил SSH, а также с добавлением правил для других сервисов, которые нужно сделать доступными. Первое правило, которое добавляют, будет принимать и разрешать весь трафик, предназначенный для порта 80 и порта 443 для веб-трафика.

Трафик на основе DNS не такой сложный, как FTP, но его, в основном, использует UDP, а не TCP. Чтобы разрешить трафик DNS, нужно указать две команды настройки Centos IPTables, которые открывают порт для TCP и для UDP.

Если пользователь замечает много фиктивного DNS-трафика, его нужно заблокировать.

Самый простой способ — использовать IPTables для блокировки пакетов, содержащих определенную строку. Проблема с этим подходом заключается в том, что пакеты DNS не содержат фактическую строку. Вместо этого они закодированы таким образом: X domain, Y TLD. Здесь X - количество байтов в части домена, а Y - число байтов символов в части TLD.

Блокирование IP-адресов

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

Вышеприведенное правило немного сложнее других, потому что уже есть другое, которое принимает весь трафик на порт 80. Оно состоит в блокировке всего трафика из диапазона IP 192.168.123.0/24. Чтобы это было заблокировано, его указывают в определенном месте в наборе правил.

При использовании IPTables будет применено первое правило, соответствующее пакету. Чтобы оно работало, нужно добавить его для порта 80, иначе iprange все равно сможет подключиться к порту 80. Число 3 после INPUT — это спецификация, которая сообщает о размещении третьего правила в списке. Поскольку не указан какой-либо протокол, это правило блокирует все протоколы из указанного диапазона ip.

Сохранение правил перезагрузки

В каждом дистрибутиве Linux есть способ сохранения и восстановления правил IPTables для перезагрузки. В дистрибутивах Red Hat можно сохранить текущие правила Live IPTables, используя скрипт init. Это сохраняет их в файле /etc/sysconfig/iptables. Файл позже считывается скриптом init во время перезагрузки сервера или простым перезапуском, заданным сценарием инициализации.

Сохранение активных правил: # /etc/init.d/iptables save

Чтобы загрузить модуль ip_conntrack_ftp, нужно будет отредактировать /etc/sysconfig/iptables-config файл, который используется скриптом инициализации для загрузки любых связанных модулей:

# vi /etc/sysconfig/iptables-config.

Команды управления

Команды iptables / ip6tables предоставляют способ вставки, удаления и управления правилами. Однако рабочий процесс не очень простой. Сначала нужно перечислить существующие правила. Затем выяснить, куда должно идти новое, а затем написать команду для его вставки.

К счастью, пакет поставляются с двумя командами iptables-save и iptables-restore, которые выгружают правила из всех цепей и фильтров в стандартный вывод. Можно перенаправить его в файл следующим образом: iptables-save > iptables.rules. Теперь необходимо редактировать этот файл с помощью текстового редактора. Когда все будет готово, можно применить следующие правила: iptables-restore.

К сожалению, оказывается, что правила IPTables не являются постоянными — они теряются при перезагрузке системы. В таких дистрибутивах, как RHEL и CentOS, есть пакет с именем «iptables-services», который можно установить с помощью: sudo yum install iptables-services.

Внутри оба этого пакета запускают iptables-save/restore команды для сохранения конфигурации в файле. Если дистрибутив не имеет подобного пакета, можно просто написать файл службы.

Защита Asterisk с помощью IP-таблиц

AsteriskNOW — готовый дистрибутив CentOS с установленными Asterisk и FreePBX. Самая важная его часть - выполнить блокировку «плохих пакетов» с сервера Asterisk, предоставляя доступ законным пользователям. Сначала необходимо убедиться, что установлены надежные пароли для root, всех расширений Asterisk, обновлены модули CentOS , Asterisk , FreePBX и используется Pin-код для определенных маршрутов. Такой подход используется на серверах Asterisk с протоколом SIP.

Порядок действий:

  1. Применить имя хоста DNS от поставщика динамических Ip-услуг, например, YOUR_HOSTNAME.no-ip.com.
  2. После настройки сервера Asterisk сообщить всем своим пользователям, что выбрано имя хоста. Нельзя позволять им напрямую использовать Ip-адрес сервера.
  3. На основе правил IPTables добавить следующее:

Настройка IPTables Asterisk для обеспечения безопасности сервера будет осуществлена с использованием настраиваемых цепочек, начиная с простой защищенной конфигурации, расширяясь до нескольких пользователей и рассматривая проблему динамических Ip-адресов. Это гарантирует, что любой, кто не имеет отношения к системе пользователя, не увидит сервер.

В качестве политики по умолчанию удаляется любой INPUT, который не соответствует правилам. FORWARD всегда отбрасывается, поскольку не используется машина в качестве маршрутизатора. OUTPUT всегда принимается, позволяя серверу выполнять любые исходящие соединения.

Комментарии