Настройка iptables Centos 8

Обновлено: 03.07.2024

firewalld — это программное обеспечение для управления брандмауэром, доступное для многих дистрибутивов Linux, которое действует как интерфейс для встроенных в ядро ​​систем фильтрации пакетов nftables или iptables.

В этом руководстве мы покажем вам, как настроить брандмауэр firewalld для вашего сервера CentOS 8, и рассмотрим основы управления брандмауэром с помощью административного инструмента firewall-cmd.

Предпосылки

Для выполнения этого руководства вам понадобится сервер под управлением CentOS 8. Мы предполагаем, что вы вошли на этот сервер как пользователь без полномочий root и с поддержкой sudo. Чтобы настроить это, см. наше руководство по начальной настройке сервера для CentOS 8.

Основные понятия брандмауэра

Прежде чем мы начнем говорить о том, как на самом деле использовать утилиту firewall-cmd для управления конфигурацией вашего брандмауэра, мы должны ознакомиться с некоторыми понятиями, которые представляет этот инструмент.

Зоны

Демон firewalld управляет группами правил, используя сущности, называемые зонами. Зоны — это наборы правил, которые определяют, какой трафик должен быть разрешен в зависимости от уровня доверия, который у вас есть в сети. Сетевые интерфейсы назначаются зоне, чтобы определять поведение, которое должен разрешать брандмауэр.

Для компьютеров, которые могут часто перемещаться между сетями (например, ноутбуки), такая гибкость обеспечивает хороший способ изменения правил в зависимости от вашей среды. У вас могут быть строгие правила, запрещающие большую часть трафика при работе в общедоступной сети Wi-Fi и допускающие более мягкие ограничения при подключении к домашней сети. Для сервера эти зоны часто не так важны, потому что сетевое окружение меняется редко, если вообще меняется.

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

  • drop: самый низкий уровень доверия. Все входящие соединения сбрасываются без ответа, и возможны только исходящие соединения.
  • block: Аналогично описанному выше, но вместо простого разрыва соединений входящие запросы отклоняются сообщением icmp-host-prohibited или icmp6-adm-prohibited.
  • public: представляет общедоступные, ненадежные сети. Вы не доверяете другим компьютерам, но можете разрешать выбранные входящие подключения в каждом конкретном случае.
  • external: внешние сети, если вы используете брандмауэр в качестве шлюза. Он настроен на маскировку NAT, поэтому ваша внутренняя сеть остается частной, но доступной.
  • internal: другая сторона внешней зоны, используемая для внутренней части шлюза. Компьютеры достаточно надежны, и доступны некоторые дополнительные услуги.
  • dmz: используется для компьютеров, расположенных в DMZ (изолированные компьютеры, которые не будут иметь доступа к остальной части вашей сети). Разрешены только определенные входящие подключения.
  • work: Используется для рабочих машин. Доверяйте большинству компьютеров в сети. Могут быть разрешены еще несколько сервисов.
  • дом: домашняя обстановка. Как правило, это означает, что вы доверяете большинству других компьютеров и принимаете еще несколько служб.
  • доверенный: доверять всем компьютерам в сети. Самый открытый из доступных вариантов, и его следует использовать с осторожностью.

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

Постоянство правила

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

Большинство операций firewall-cmd могут иметь флаг --permanent, указывающий, что изменения должны быть применены к постоянной конфигурации. Кроме того, текущий работающий брандмауэр можно сохранить в постоянной конфигурации с помощью команды firewall-cmd --runtime-to-permanent.

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

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

firewalld установлен по умолчанию в некоторых дистрибутивах Linux, включая многие образы CentOS 8. Однако вам может потребоваться установить firewalld самостоятельно:

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

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

Мы можем убедиться, что служба запущена и достижима, набрав:

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

Ознакомление с текущими правилами брандмауэра

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

Изучение значений по умолчанию

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

Поскольку мы не дали firewalld никаких команд для отклонения от зоны по умолчанию, и ни один из наших интерфейсов не настроен для привязки к другой зоне, эта зона также будет единственной активной зоной (зоной, которая контролирует трафик для наши интерфейсы). Мы можем проверить это, набрав:

Здесь мы видим, что наш тестовый сервер имеет два сетевых интерфейса, контролируемых брандмауэром ( eth0 и eth1 ). Оба они в настоящее время управляются в соответствии с правилами, определенными для общедоступной зоны.

Как узнать, какие правила связаны с общедоступной зоной? Мы можем распечатать конфигурацию зоны по умолчанию, набрав:

Из вывода мы можем сказать, что эта зона является и активной, и стандартной, и что интерфейсы eth0 и eth1 связаны с этой зоной (все это мы уже знали из наших предыдущих запросов). Однако мы также видим, что эта зона разрешает трафик для DHCP-клиента (для назначения IP-адреса), SSH (для удаленного администрирования) и Cockpit (веб-консоли).

Изучение альтернативных зон

Теперь у нас есть хорошее представление о конфигурации зоны по умолчанию и активной зоны. Мы можем узнать информацию и о других зонах.

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

Мы можем увидеть конкретную конфигурацию, связанную с зоной, включив параметр --zone= в нашу команду --list-all:

Вы можете вывести все определения зон, используя параметр --list-all-zones. Вы, вероятно, захотите направить вывод на пейджер для более удобного просмотра:

Далее мы узнаем о назначении зон сетевым интерфейсам.

Выбор зон для ваших интерфейсов

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

Изменение зоны интерфейса

Вы можете перемещать интерфейс между зонами во время сеанса, используя параметр --zone= в сочетании с параметром --change-interface=. Как и для всех команд, которые изменяют брандмауэр, вам нужно будет использовать sudo .

Например, мы можем переместить наш интерфейс eth0 в домашнюю зону, набрав следующее:

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

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

Настройка зоны по умолчанию

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

Вы можете изменить зону по умолчанию с помощью параметра --set-default-zone=. Это немедленно изменит любой интерфейс, использующий зону по умолчанию:

Установка правил для ваших приложений

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

Добавление службы в ваши зоны

Самый простой способ – добавить необходимые службы или порты в используемые вами зоны. Вы можете получить список доступных определений служб с параметром --get-services:

Примечание. Более подробную информацию о каждой из этих служб можно получить, просмотрев связанный с ними файл .xml в каталоге /usr/lib/firewalld/services. Например, служба SSH определяется следующим образом:

Вы можете включить службу для зоны, используя параметр --add-service=. Операция будет нацелена на зону по умолчанию или любую другую зону, указанную параметром --zone=. По умолчанию это будет настраивать только текущий сеанс брандмауэра. Вы можете настроить постоянную конфигурацию брандмауэра, включив флаг --permanent.

Вы можете не указывать флаг --zone=, если хотите изменить зону по умолчанию. Мы можем проверить успешность операции с помощью операций --list-all или --list-services:

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

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

Будьте осторожны с этим, так как все изменения, внесенные в работающий брандмауэр, будут зафиксированы навсегда.

Какой бы метод вы ни выбрали, вы можете проверить его успешность, добавив флаг --permanent к операции --list-services. Вам нужно использовать sudo для любых --permanent операций:

Что делать, если подходящая служба недоступна?

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

В этой ситуации у вас есть два варианта.

Открытие порта для ваших зон

Самый простой способ добавить поддержку для конкретного приложения – открыть порты, которые оно использует, в соответствующих зонах. Это делается путем указания порта или диапазона портов и соответствующего протокола (TCP или UDP) для портов.

Например, если наше приложение работает на порту 5000 и использует TCP, мы можем временно добавить его в общедоступную зону с помощью параметра --add-port=. Протоколы могут быть обозначены как tcp или udp :

Мы можем убедиться, что это было успешно, используя операцию --list-ports:

Также можно указать последовательный диапазон портов, разделив начальный и конечный порты в диапазоне тире. Например, если наше приложение использует порты UDP с 4990 по 4999, мы можем открыть их для всех, набрав:

После тестирования мы, вероятно, захотим добавить их в постоянный брандмауэр. Для этого используйте sudo firewall-cmd --runtime-to-permanent или повторно запустите команды с флагом --permanent:

Определение службы

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

Службы – это наборы портов с соответствующим именем и описанием. Использование сервисов проще в администрировании, чем портов, но требует некоторой предварительной работы. Самый простой способ начать — скопировать существующий сценарий (находящийся в /usr/lib/firewalld/services) в каталог /etc/firewalld/services, где брандмауэр ищет нестандартные определения.

Например, мы могли бы скопировать определение сервиса SSH, чтобы использовать его для нашего примерного определения сервиса, как это. Имя файла без суффикса .xml определяет имя службы в списке служб брандмауэра:

Для начала файл будет содержать скопированное вами определение SSH:

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

теги могут быть указаны.

Для нашего примера службы представьте, что нам нужно открыть порт 7777 для TCP и 8888 для UDP. Мы можем изменить существующее определение примерно так:

Сохраните и закройте файл.

Перезагрузите брандмауэр, чтобы получить доступ к новой службе:

Вы можете видеть, что теперь он находится в списке доступных сервисов:

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

Создание собственных зон

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

Например, вы можете создать зону для своего веб-сервера под названием publicweb. Однако вы можете захотеть настроить другую зону для службы DNS, которую вы предоставляете в своей частной сети. Для этого вам может понадобиться зона под названием «privateDNS».

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

Вы можете убедиться, что они присутствуют в вашей постоянной конфигурации, набрав:

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

Перезагрузите брандмауэр, чтобы включить эти новые зоны в активную конфигурацию времени выполнения:

Аналогичным образом мы можем добавить службу DNS в нашу зону privateDNS:

Затем мы могли бы изменить наши интерфейсы на эти новые зоны, чтобы протестировать их:

На этом этапе у вас есть возможность протестировать свою конфигурацию. Если эти значения вас устраивают, вы захотите добавить эти правила в постоянную конфигурацию. Вы можете сделать это, снова запустив все команды с добавленным флагом --permanent, но в этом случае мы будем использовать флаг --runtime-to-permanent, чтобы навсегда сохранить всю нашу конфигурацию среды выполнения:

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

Убедитесь, что были назначены правильные зоны:

И убедитесь, что соответствующие службы доступны для обеих зон:

Вы успешно настроили собственные зоны! Если вы хотите сделать одну из этих зон зоной по умолчанию для других интерфейсов, не забудьте настроить это поведение с помощью параметра --set-default-zone=:

Заключение

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

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

Дополнительную информацию о firewalld см. в официальной документации firewalld.

Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!

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

В этой статье вы узнаете об установке iptables на CentOS/RHEL 7/8?

Firewalld — это инструмент управления брандмауэром по умолчанию, но если вы хотите использовать iptables, вы можете это сделать. Firewalld — это полный пакет для брандмауэров в Centos 7 и Centos 8, а также для RHEL 7 и RHEL 8. Если вы хотите узнать больше о firewalld, вы можете перейти по этой ссылке Конфигурация Firewalld в Centos 7/8 и RHEL 7/ 8.

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

Предварительные условия

  • Чтобы внести изменения, вы должны войти в систему как пользователь root или пользователь с правами sudo.
  • У вас есть система CentOS/RHEL 7/8.
  • Доступ к командной строке.

Шаг 1. Отключение брандмауэра

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

Во-вторых, мы собираемся отключить службу firewalld с помощью приведенной ниже команды.

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

В результате вы можете видеть на картинке ниже


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

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

Шаг 3. Запуск служб iptables

Пришло время запускать сервисы. Таким образом, вы можете использовать приведенную ниже команду.

Включение запуска службы при запуске,

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

iptables


Шаг 4. Проверка текущих правил

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

Заключение

В этом руководстве вы научились отключать службу firewalld, а затем научились устанавливать и включать службу iptables в Linux. Я также пишу более подробно об iptables. Надеюсь, вы поняли, но опять же, если у вас есть какие-либо вопросы, вы можете задать их в разделе комментариев.

В системах на базе Linux, таких как CentOS, iptables представляет собой утилиту командной строки, которая позволяет системному администратору устанавливать правила фильтрации IP-пакетов ядра Linux, которые выполняются как дополнительные модули Netfilter.Эти фильтры структурированы в виде отдельных таблиц, каждая из которых содержит набор правил обработки пакетов сетевого трафика. В настоящее время для протоколов существуют разные программы и модули ядра, например, ebtables используются для пакетов Ethernet, arptables используются для ARP, ip6tables используются для IPv6, а для IPv4 используются iptables. Инструмент безопасности iptables также используется для включения допустимого трафика, блокировки нежелательного трафика, перенаправления пакетов на другие порты TCP/UDP, защиты системы от атак типа "отказ в обслуживании" и многого другого.

Типы таблиц в iptables

Таблица – это набор цепочек, выполняющих определенную задачу. Таблицы NAT, Filter и Mangle — это три основные таблицы iptables:

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

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

Таблица Mangle используется для изменения заголовков пакетов.

Типы цепочек в iptables

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

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

Iptables широко используется для обозначения компонентов уровня ядра. Модуль ядра, содержащий секцию общего кода, известен как x_tables. Все четыре модуля (eb, arp, v6 и v4) используют этот модуль ядра. Он также используется для обозначения полной архитектуры брандмауэра.

Iptables устанавливаются в файлы «usr/sbin/iptables» в большинстве систем на базе Linux. Он также может находиться в «/sbin/iptables». Однако iptables также работает как сервис. Поэтому предпочтительным местом для него является «/usr/sbin».

Теперь мы покажем, как настроить iptables в CentOS. Перед этим установите iptables, если он еще не установлен в вашей системе.

Как установить iptables на CentOS

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



Вывод без ошибок означает, что утилита iptables успешно установлена.

Как включить iptables в CentOS

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



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



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


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

Вы можете использовать команду «iptables» для просмотра текущих правил iptables, выполнив приведенные ниже команды:

-v для подробного вывода. Этот параметр добавляется для отображения такой информации, как параметры правил и имена интерфейсов.

-L используется для вывода списка правил iptables.


SSH-порт 22 открыт только по умолчанию. Вы получите такой вывод:


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


Если вы хотите добавить свой локальный хост в фильтр брандмауэра, выполните эту команду:


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

Здесь параметр «-L» добавлен для списка правил цепочки и «–lines-numbers» для отображения их порядковых номеров:



Что такое FirewallD в CentOS

FirewallD — это служба брандмауэра, управляемая с помощью утилиты командной строки firewall-cmd. Если вы предпочитаете синтаксис командной строки iptables, вы можете отключить FirewallD и вернуться к стандартной конфигурации iptables. В следующем разделе мы продемонстрируем процедуру отключения FirewallD в системе CentOS.

Как отключить FirewallD в CentOS

Если вы хотите остановить FirewallD на CentOS, откройте терминал, нажав «CTRL+ALT+T», а затем выполните в нем приведенную ниже команду:

Эта команда не позволит FirewallD выполнять свои функции:


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


Чтобы запретить другим службам запускать службу FirewallD, замаскируйте службу FirewallD:


Заключение

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

Об авторе

Шарка Хамид

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

CentOS имеет чрезвычайно мощный встроенный брандмауэр, обычно называемый iptables, но точнее iptables/netfilter. Iptables — это модуль пользовательского пространства, бит, с которым вы, пользователь, взаимодействуете в командной строке, чтобы ввести правила брандмауэра в предопределенные таблицы. Netfilter — это модуль ядра, встроенный в ядро, который фактически осуществляет фильтрацию. Существует множество интерфейсов с графическим интерфейсом для iptables, которые позволяют пользователям добавлять или определять правила на основе пользовательского интерфейса «укажи и щелкни», но им часто не хватает гибкости использования интерфейса командной строки, и они ограничивают понимание пользователями того, что на самом деле происходит. Мы собираемся изучить интерфейс командной строки iptables.

Прежде чем мы сможем по-настоящему разобраться с iptables, нам нужно иметь хотя бы общее представление о том, как он работает. Iptables использует концепцию IP-адресов, протоколов (tcp, udp, icmp) и портов. Нам не нужно быть экспертами в этом, чтобы начать работу (поскольку мы можем найти любую необходимую информацию), но общее понимание полезно.

Iptables размещает правила в предопределенных цепочках (INPUT, OUTPUT и FORWARD), которые проверяются на наличие любого сетевого трафика (IP-пакетов), относящегося к этим цепочкам, и решение о том, что делать с каждым пакетом, принимается на основе результатов этих правил. , то есть прием или отбрасывание пакета. Эти действия называются целями, из которых две наиболее распространенные предопределенные цели: DROP, чтобы отбросить пакет, или ACCEPT, чтобы принять пакет.

Цепочки

  • INPUT — все пакеты, предназначенные для хост-компьютера.
  • OUTPUT — все пакеты, исходящие от главного компьютера.
  • FORWARD — все пакеты, не предназначенные для хост-компьютера и не исходящие от него, но проходящие через хост-компьютер (маршрутизируемые им). Эта цепочка используется, если вы используете свой компьютер в качестве маршрутизатора.

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

Правила добавляются списком в каждую цепочку.Пакет проверяется на соответствие каждому правилу по очереди, начиная сверху, и, если он соответствует этому правилу, выполняется действие, например принятие (ACCEPT) или отбрасывание (DROP) пакета. Как только правило сопоставляется и выполняется действие, пакет обрабатывается в соответствии с результатом этого правила и не обрабатывается другими правилами в цепочке. Если пакет проходит через все правила в цепочке и достигает конца, не сравниваясь ни с одним правилом, то выполняется действие по умолчанию для этой цепочки. Это называется политикой по умолчанию и может быть настроено либо на ПРИНЯТИЕ, либо на УДАЛЕНИЕ пакета.

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

<р>1. Мы можем установить политику по умолчанию для DROP всех пакетов, а затем добавить правила, специально разрешающие (ACCEPT) пакеты, которые могут поступать с доверенных IP-адресов или для определенных портов, на которых у нас работают службы, такие как bittorrent, FTP-сервер, веб-сервер, Samba. файловый сервер и т. д.

<р>2. Мы можем установить политику по умолчанию, чтобы ПРИНИМАТЬ все пакеты, а затем добавить правила для специальной блокировки (DROP) пакетов, которые могут исходить от определенных нежелательных IP-адресов или диапазонов, или для определенных портов, на которых у нас есть частные службы или службы не работают.

Как правило, вариант 1 выше используется для цепочки INPUT, где мы хотим контролировать, что разрешено для доступа к нашему компьютеру, а вариант 2 будет использоваться для цепочки OUTPUT, где мы обычно доверяем трафику, исходящему (исходящему) из нашего компьютера. машина.

2. Начало работы

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

Iptables должны быть установлены по умолчанию во всех установках CentOS 5.x и 6.x. Вы можете проверить, установлен ли iptables в вашей системе:

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

Выше мы видим набор правил по умолчанию в системе CentOS 6. Обратите внимание, что служба SSH разрешена по умолчанию.

Если iptables не запущен, вы можете включить его, выполнив:

3. Написание простого набора правил

Мы будем использовать подход, основанный на примерах, для изучения различных команд iptables. В этом первом примере мы создадим очень простой набор правил для настройки брандмауэра Stateful Packet Inspection (SPI), который разрешает все исходящие соединения, но блокирует все нежелательные входящие соединения:

что должно дать следующий результат:

Наконец, последнее, что нам нужно сделать, это сохранить наши правила, чтобы в следующий раз при перезагрузке компьютера наши правила автоматически перезагружались:

При этом выполняется сценарий инициализации iptables, который запускает /sbin/iptables-save и записывает текущую конфигурацию iptables в /etc/sysconfig/iptables. После перезагрузки сценарий инициализации iptables повторно применяет правила, сохраненные в /etc/sysconfig/iptables, с помощью команды /sbin/iptables-restore.

Очевидно, что ввод всех этих команд в оболочке может стать утомительным, поэтому самый простой способ работы с iptables — создать простой скрипт, который сделает все за вас. Приведенные выше команды можно ввести в ваш любимый текстовый редактор и сохранить как myfirewall, например:

Примечание: мы также можем прокомментировать наш сценарий, чтобы напомнить нам, что мы делали.

сделайте скрипт исполняемым:

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

4. Интерфейсы

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

Предположим, у нас есть 2 отдельных интерфейса: eth0, который является нашим внутренним подключением к локальной сети, и коммутируемый модем ppp0 (или, может быть, eth1 для сетевого адаптера), который является нашим внешним подключением к Интернету. Мы можем захотеть разрешить все входящие пакеты в нашу внутреннюю локальную сеть, но по-прежнему фильтровать входящие пакеты в нашем внешнем интернет-соединении. Мы могли бы сделать это следующим образом:

Но будьте очень осторожны - если бы мы разрешили все пакеты для нашего внешнего интернет-интерфейса (например, для коммутируемого модема ppp0):

мы фактически просто отключили бы наш брандмауэр!

5. IP-адреса

Открытие всего интерфейса для входящих пакетов может быть недостаточным ограничением, и вам может потребоваться больший контроль над тем, что разрешать, а что отклонять. Предположим, у нас есть небольшая сеть компьютеров, которые используют частную подсеть 192.168.0.x. Мы можем открыть наш брандмауэр для входящих пакетов с одного доверенного IP-адреса (например, 192.168.0.4):

Очевидно, что если мы хотим разрешить входящие пакеты с диапазона IP-адресов, мы можем просто добавить правило для каждого доверенного IP-адреса, и это будет работать нормально. Но если у нас их много, может быть проще добавить диапазон IP-адресов за один раз. Для этого мы можем использовать сетевую маску или стандартную косую черту, чтобы указать диапазон IP-адресов.Например, если мы хотим открыть наш брандмауэр для всех входящих пакетов из полного диапазона 192.168.0.x (где x = от 1 до 254), мы можем использовать любой из следующих методов:

Наконец, помимо фильтрации по одному IP-адресу, мы также можем сопоставить MAC-адрес данного устройства. Для этого нам нужно загрузить модуль (модуль mac), который позволяет выполнять фильтрацию по mac-адресам. Ранее мы видели еще один пример использования модулей для расширения функциональности iptables, когда использовали модуль состояния для сопоставления пакетов ESTABLISHED и RELATED. Здесь мы используем модуль mac для проверки mac-адреса источника пакета в дополнение к его IP-адресу:

Сначала мы используем -m mac, чтобы загрузить модуль mac, а затем мы используем --mac-source, чтобы указать mac-адрес исходного IP-адреса (192.168.1.1). 0,4). Вам нужно будет узнать MAC-адрес каждого устройства Ethernet, которое вы хотите фильтровать. Запустив ifconfig (или iwconfig для беспроводных устройств) от имени пользователя root, вы получите MAC-адрес.

Это может быть полезно для предотвращения спуфинга исходного IP-адреса, так как разрешает любые пакеты, которые действительно исходят от 192.168.0.4 (с MAC-адресом 00:50:8D:FD:E6:32), но блокирует любые пакеты. которые подделаны, чтобы прийти с этого адреса. Обратите внимание, что фильтрация по MAC-адресам не работает в Интернете, но, безусловно, работает в локальной сети.

6. Порты и протоколы

Выше мы видели, как мы можем добавить правила в наш брандмауэр для фильтрации пакетов, соответствующих определенному интерфейсу или исходному IP-адресу. Это обеспечивает полный доступ через наш брандмауэр к определенным доверенным источникам (хост-компьютерам). Теперь мы рассмотрим, как мы можем фильтровать протоколы и порты, чтобы уточнить, какие входящие пакеты мы разрешаем, а какие блокируем.

Прежде чем мы начнем, нам нужно знать, какой протокол и номер порта использует данная служба. Для простого примера давайте посмотрим на битторрент. Bittorrent использует протокол tcp на порту 6881, поэтому нам нужно разрешить все tcp-пакеты на порту назначения (порт, на который они приходят на нашу машину) 6881:

Здесь мы добавляем (-A) правило к цепочке INPUT для пакетов, соответствующих протоколу tcp (-p tcp) и поступающих на нашу машину через порт назначения 6881 (--dport 6881 ).

Примечание. Чтобы использовать совпадения, такие как порты назначения или исходные порты (--dport или --sport), необходимо сначала указать протокол (tcp, udp , icmp, все).

Мы также можем расширить вышеуказанное, включив в него диапазон портов, например, разрешив все TCP-пакеты в диапазоне от 6881 до 6890:

7. Собираем все вместе

Теперь, когда мы рассмотрели основы, мы можем начать комбинировать эти правила.

Популярной службой UNIX/Linux является служба защищенной оболочки (SSH), позволяющая удаленно входить в систему. По умолчанию SSH использует порт 22 и снова использует протокол tcp. Поэтому, если мы хотим разрешить удаленный вход в систему, нам нужно разрешить tcp-соединения на порту 22:

Это откроет порт 22 (SSH) для всех входящих TCP-соединений, что представляет потенциальную угрозу безопасности, поскольку хакеры могут попытаться взломать учетные записи со слабыми паролями методом грубой силы. Однако, если мы знаем IP-адреса доверенных удаленных машин, которые будут использоваться для входа в систему с использованием SSH, мы можем ограничить доступ только этими исходными IP-адресами. Например, если мы просто хотим открыть доступ по SSH к нашей частной локальной сети (192.168.0.x), мы можем ограничить доступ только этим диапазоном исходных IP-адресов:

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

8. Резюме

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

9. Ссылки

HowTos/Network/IPTables (последним удаленным пользователем NedSlider 27.07.2021 23:21:13)

Читайте также: