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

Как настроить iptables на CentOS

Илья Ушаков
Илья Ушаков
Технический писатель
15 июня 2023 г.
982
9 минут чтения
Средний рейтинг статьи: 5

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

Image4

Ниже приведем список основных причин для использования брандмауэра на своем сервере:

  • Защита от несанкционированного доступа;
  • Предотвращение сетевых атак (отказ в обслуживании (DDoS), сканирование портов или внедрение вредоносного кода);
  • Фильтрация контента;
  • Соответствие требованиям безопасности;
  • Защита конфиденциальных данных;
  • Защита от вирусов и другого вредоносного ПО.

В данной статье будет приведена подробная инструкция по установке и настройке iptables на CentOS.

Введение в iptables

Iptables в Centos — это инструмент для фильтрации сетевого трафика на уровне ядра Linux. Он состоит из iptables и netfilter.

Прежде чем рассмотреть iptables и netfilter более подробно, мы затронем работу сетевых пакетов в Linux. Когда пакет проходит через сетевую карту, он подвергается нескольким этапам обработки:

  1. Прием (ingress). На данном этапе пакет попадает в систему через сетевую карту.
  2. Маршрутизация (routing). Далее система определяет, куда будет направлен пакет.
  3. Проверка фильтрации (filtering). И наконец, пакет проходит через правила фильтрации, которые определяет iptables.

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

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

Также, ниже опишем 3 основные цепочки правил:

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

Iptables, в свою очередь, является интерфейсом командной строки для работы с Netfilter. Он предоставляет пользователям возможность настраивать правила фильтрации пакетов в таблицах Netfilter. 

Шаг 1. Подготовка ОС

Установка iptables будет выполнена на дистрибутив Linux CentOS 7.

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

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

systemctl stop firewalld
systemctl disable firewalld

Также для firewalld выполним маскировку, чтобы служба была точно отключена и не использовалась никакими другими сервисами:

systemctl mask --now firewalld

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

systemctl status firewalld

Как видно по картинке ниже, firewalld успешно отключен.

Image1

Шаг 2. Установка iptables

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

rpm -q iptables

Если iptables нет в системе, значит переходим к ее установке:

yum install iptables-services

На все вопросы системы во время установки отвечаем утвердительно.

Шаг 3. Запуск iptables

Как только завершится установка брандмауэра, запустим его версии для IPv4 и для IPv6, а также добавим их в автозагрузку:

systemctl start iptables 
systemctl start ip6tables
systemctl enable iptables 
systemctl enable ip6tables

Теперь необходимо проверить статус работы запущенных служб:

systemctl status iptables
systemctl status ip6tables

Результат выполнения команд представлен на рисунке ниже.

Image2

Шаг 4. Просмотр, создание и применение правил

Чтобы настроить iptables на CentOS, необходимо в первую очередь ознакомиться с основными командами для работы с ним:

  • iptables -L или iptables --list — отображает текущие правила фильтрации;
  • iptables -S — отображает статус всех цепочек;
  • iptables -A — добавляет правило в цепочку;
  • iptables -D — удаляет правило из цепочки;
  • iptables -P — устанавливает политику по умолчанию для цепочки;
  • iptables -F [название_цепочки] — очищает все правила цепочек или одной, указанной в параметрах;
  • iptables -I — вставляет правило в определенную позицию в цепочке.

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

Чтобы посмотреть все правила iptables в CentOS, используем указанную выше команду:

iptables -L

Сейчас правила iptables в Centos выглядят следующим образом:

Image5

Здесь продемонстрированы правила для трех цепочек, о которых мы рассказывали чуть раньше. В скобках после их названия указывается политика по умолчанию, которая определяет, что происходит с пакетами, если они не соответствуют ни одному из правил в цепочке. Она может принимать три значения:

  • ACCEPT — означает, что пакеты, не соответствующие ни одному из правил в цепочке, будут разрешены и пропущены дальше для обработки.
  • DROP — означает, что пакеты, не соответствующие ни одному из правил в цепочке, будут просто отброшены (удалены) без какого-либо уведомления отправителю. Такие пакеты будут игнорироваться и не будут доставлены на конечный узел.
  • REJECT — означает, что пакеты, не соответствующие ни одному из правил в цепочке, будут также отброшены, но отправителю будет отправлено сообщение о том, что его пакет был отклонен. Это может помочь в идентификации проблем и обратной связи с отправителем.

Чтобы изменить политику по умолчанию, необходимо использовать следующую команду:

iptables -P [название_цепочки] [ACCEPT|DROP]

Ниже разберем основные столбцы правил:

  • target — целевое действие, которое будет применено к пакету, если он соответствует данному правилу (ACCEPT, DROP или REJECT);
  • prot — протокол, которому должен соответствовать пакет, чтобы правило было применено;
  • opt — дополнительные опции, связанные с протоколом;
  • source — источник пакета;
  • destination — назначение пакета.

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

Чтобы удалить все правила iptables в CentOS, используйте команду, описанную выше:

iptables -F

Правила для интерфейсов

Рассматриваемое правило поможет пользователю в контроле трафика через разные интерфейсы. Например, мы можем разрешить трафик через локальный интерфейс:

iptables -A INPUT -i lo -j ACCEPT

Здесь мы добавляем правило для цепочки INPUT (-A INPUT), указывая входящий интерфейс (-i lo) и определяя целевое действие (-j ACCEPT).

Правила для портов, протоколов и IP-адресов

Пользователь может разрешить или запретить передачу трафика для разных протоколов по указанным портам. Ниже рассмотрим пример для фильтрации входящего трафика по протоколам HTTP, HTTPS и SSH:

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

Для каждого из протоколов был определен соответствующий порт.

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

iptables -A INPUT -p tcp -s [IP-адрес] --dport 22 -j ACCEPT

Также пользователь может ограничить трафик для конкретного нежелательного IP-адреса. Например ограничим входящий трафик с подозрительного ресурса:

iptables -A INPUT -s [IP-адрес ресурса] -j DROP

Правила для MAC-адресов

Пользователь может ограничить доступ к серверу по MAC-адресу. Для этого он должен выполнить следующую команду:

iptables -A INPUT -m mac --mac-source [MAC-адрес] -j DROP

Правила для ограничения времени доступа

Пользователь может настроить время доступа к определенному сервису или порту. Для этих целей в iptables существует модуль time. В качестве примера, ограничим время доступа пользователей к серверу по протоколу SSH:

iptables -A INPUT -p tcp --dport 22 -m time --timestart 09:00 --timestop 17:00 -j ACCEPT

Данное правило разрешает входящий трафик на порту 22 (SSH) только в промежуток времени с 9:00 до 17:00. В остальное время доступ будет заблокирован.

Сохранение правил

Список возможных правил приведен для демонстрации возможностей iptables. У вас он будет отличаться в зависимости от потребностей. У нас он получился таким:

Image3

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

iptables-save > /etc/sysconfig/iptables

Теперь правила сохранены в каталоге /etc/sysconfig/iptables. При следующей загрузке системы эти правила будут автоматически восстановлены.

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

iptables-restore < /etc/sysconfig/iptables

Полезные модули расширений для iptables

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

  • limit

Модуль limit предоставляет пользователю возможность ограничивать частоту пакетов, проходящих через брандмауэр. Это полезно для защиты от атак типа DoS и предотвращения перегрузки сети.

  • connlimit

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

  • recent

Модуль recent позволяет отслеживать и управлять соединениями, основываясь на их предыдущей активности. Он может использоваться для блокировки IP-адресов, которые совершили слишком много неудачных попыток подключения или отправки нежелательного трафика.

  • mac

Модуль mac допускает фильтрацию пакетов на основе MAC-адресов сетевых интерфейсов. Это полезно для ограничения доступа к определенным ресурсам или службам на основе физического адреса сетевой карты.

  • time

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

  • nat

Модуль nat необходим для настройки NAT в iptables. Благодаря ему возможно создавать правила для портового перенаправления (port forwarding), маскировки IP-адресов (masquerading) и других методов NAT.

  • ipset

Модуль ipset предназначен для использования динамических множеств IP-адресов или портов в iptables. Это упростит процесс создания и обслуживания правил фильтрации для большого количества IP-адресов или портов.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону