Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Настройка firewalld в CentOS

6174
13 минут чтения
Средний рейтинг статьи: 5

Firewalld — инструмент управления фаерволом, предустановленный в большинстве RHEL-based дистрибутивов. В этой статье мы рассмотрим настройку брандмауэра с помощью firewalld на сервере под управлением CentOS, используя утилиту firewall-cmd

Настройка Firewalld В Cent Os (1)

Назначение брандмауэра

Межсетевой экран (брандмауэр/фаервол) — это программа для обеспечения контроля доступа на сетевом уровне. Основываясь на прописанных правилах, брандмауэр определяет, какие устройства имеют доступ к участкам сети. Иными словами, какой-то трафик разрешить, остальное заблокировать. В Linux эти функции выполняет программа netfilter, встроенная в ядро.

Брандмауэр в Linux

Как мы уже поняли, netfilter работает на уровне ядра. Для настройки фаервола нужны инструменты в пользовательском пространстве. В качестве фреймворков для управления netfilter используются ip_tables/nf_tables, реализованные в виде модулей ядра. А поверх них на уровне пользователя работают соответственно или iptables (одноименная утилита командной строки), или nft.

Опытные администраторы знают, что вручную прописывать правила для iptables или nft не так просто. Особенно, когда нужно настроить крупную сеть или перенести правила на другую систему. Поэтому были придуманы более дружелюбные и многофункциональные надстройки. Например, в Ubuntu такой надстройкой является инструмент с говорящим названием ufw (Uncomplicated Firewall). А в семействе RedHat дистрибутивов (CentOS, Alma, Fedora, RHEL, OpenSUSE, SUSE Linux Enterprise) — firewalld.

Основы работы

Для управления firewalld существует две программы: firewall-cmd для работы в терминале и графический firewall-config. В данной статье мы будем работать с firewalld в CentOS и использовать firewall-cmd.

Арендовать собственный сервер для тестирования и экспериментов можно здесь

Установка

Проверим состояние сервиса:

    
    

В RHEL-based дистрибутивах firewalld предустановлен, однако никто не мешает поставить его вручную на вашем любимом дистрибутиве. Просто скачайте пакет и запустите сервис. Например, в Ubuntu это делается так:

    

Только не забудьте отключить ufw — использовать одновременно два фронтенда для iptables/nftables не рекомендуется.

Активные правила

Узнаем активные правила (что разрешено и запрещено, к чему относится разрешения и т.д.):

    
    

Заметьте, что нам необходимы привилегии суперпользователя, поэтому залогиньтесь от рута, либо используйте sudo/su.

В выводе команды мы видим много различных параметров. Разберем их по порядку.

VDS и VPS

Гибкие виртуальные серверы с почасовым
биллингом по всему миру: Россия, Азия и Европа.

Настройка портов

Поле ports в выводе предыдущей команды показывает порты, по которым разрешено соединение. Продемонстрируем настройку на примере: поменяем прослушиваемый порт демона OpenSSH с 22-го на 3333-й (файл /etc/ssh/sshd_config):

    
    

Выведем порты, прослушиваемые sshd:

    
    

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

    
    
    
    

Необходимо добавить разрешающее правило в firewalld, позволяющее подключаться по 3333/tcp:

    

или

    

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

Проверим, какие порты теперь разрешены:

    
    

Теперь все работает:

    
    

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

Настройка сервисов

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

    
    
    
    

Заметим, что в SSH все также 22-й порт. Дело в том, что собственные параметры демонов никак не связаны с их описаниями в firewalld. Попробуем убрать стандартный порт и добавить 3333-й в описание сервиса ssh (не забудем удалить порт 3333/tcp из политик):

    
    

Попробуем удалить и добавить какой-нибудь сервис:

    
    
    
    

Опция --runtime-to-permanent делаем рантайм постоянными — можно не указывать --permanent после каждой команды, а выполнить набор команд и только после этого сделать настройки постоянными (не всегда работает, так как некоторые команды требуют ключ --permanent).

Файлы с предопределенными сервисами расположены по пути /lib/firewalld/services. Выведем их список:

    
    

Вы можете создавать собственные сервисы. Для этого создайте файл в формате xml в директории /etc/firewalld/services. Для удобства можно скопировать какой-нибудь конфиг из /etc/firewalld/services и внести соответствующие изменения. После перезапустите фаервол ключом --reload.

ICMP, протоколы и таргеты

В выводе --list-all есть следующие любопытные поля:

    
    

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

    
    

Поля icmp-blocks и icmp-blocks-inversion содержат параметры для протокола ICMP. Его функции — тестирование сети и оповещение об ошибках. Программы ping и traceroute используют его в своей работе.

С помощью icmp-blocks можно заблокировать определенные ICMP-сообщения. Icmp-blocks-inversion делает инверсию логики — перечисленные типы сообщений становятся разрешенными, остальные блокируются. Такой функционал можно использовать, чтобы скрыть информацию о сети, так как многие механизмы сканирования используют ICMP. Давайте протестируем блокировку с помощью утилиты ping.

Запрещаем все типы ICMP-сообщений (так как в icmp-block ничего не перечислено, все сообщения становятся запрещенными):

    

Теперь попробуем пропинговать сервер:

    
    

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

Таргет — это действие, которое необходимо сделать с пакетом, если сработало какое-то из правил. Наиболее используемые: DROP, ACCEPT, REJECT. В примере выше таргетом был REJECT, т.е. возвращалась причина ошибки. Чтобы выбросить пакет, ничего не отправляя, нужно использовать DROP:

    

Снова пропингуем сервер:

    
    

Зоны

При работе с firewalld часто используются зоны. На машине может иметься несколько интерфейсов. Допустим, один из них «смотрит» в интернет, другой — в LAN, третий — в dmz. Разные сети имеют разный уровень доверия, соответственно, поступающий из них трафик должен контролироваться различными правилами брандмауэра. Для этого в firewalld используются зоны — наборы правил, применяемых к различным фрагментам сети. 

Все действия выше мы применяли для зоны public (по умолчанию):

    
    

В firewalld изначально прописаны несколько зон. Однако можно создавать и свои зоны. Выведем список имеющихся зон:

    
    

Опция --zone позволяет устанавливать и смотреть правила для конкретной зоны (без него, все применяется к зоне по умолчанию). Посмотрим политики для зоны drop:

    
    

В нашем случае единственный интерфейс eth0, через который осуществляется доступ в интернет, смотрит в зону public. Значит для входящего трафика применяются политики зоны public. Для добавления интерфейса в другую зону используется ключ --change-interface. Переместим наш eth0 в зону home:

    
    

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

    
    
    

Теперь, даже если пакеты с адреса 192.168.3.1 придут на интерфейс eth0, то будут применяться правила не для зоны, в которой расположен интерфейс, а для заданной нами вручную зоны (drop). 

Настройка NAT

NAT — это технология трансляции интернет-адресов. Существует два вида NAT — source и destination. В первом случае маршрутизатор подменяет домашние IP-адреса на свой внешний, т.е. изменяется адрес отправителя (отсюда и название source). В Linux это называется маскарадингом (masquerade). Во втором случае заменяется адрес получателя (проброс портов). Например, на порт маршрутизатора приходит пакет, а роутер пересылается пакет на какой-нибудь другой порт.

Допустим, имеется задача настроить фаервол на роутере. Разрешим source nat:

    
    

Проброс портов на машине:

    
    

Еще вы можете заметить опцию source-ports. В firewalld можно разрешать определенные исходящие порты, однако используется это редко, так как обычно в качестве source портов выступают динамические 5-значные порты.

Rich rules

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

У rich-rules в firewall centos отдельный синтаксис, подробности можно посмотреть в манах:

    

Image1

Там же есть множество примеров:

Image2

Добавить вручную прописанное правило:

    

Разверните свой VDS-сервер с CentOS

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

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

6174
13 минут чтения
Средний рейтинг статьи: 5

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

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server