Прогресс не стоит на месте, CentOS 7 с по сравнению с более ранними версиями совершенствует, появляются новые пакеты и сервисы. В отличие от своего предшественника CentOS 6, он идет с базовым брендмауэером firewalld. Данный фаервол можно отключить или заменить на привычный iptables. Но раз ПО идет в ногу со временем, то рекомендуем к прочтению данную статью. В ней мы расскажем как пользоваться и настраивать firewalld, на примере CentOS 7. А так же сравним его с привычным iptables.
Firewalld — по сути это такой же внешний интерфейс netfilter, как и iptables. Он поддерживает сети IPv4 и IPv6. Так же есть возможность администрирования отдельных зон, с разной степенью доверия.
Команды управления сервисом firewalld
Для просмотра состояния демона используется следующие команды:
1 2 |
systemctl status firewalld service firewalld status |
Выхлоп обеих команд одинаков.
Остановка сервиса firewalld:
1 2 |
systemctl stop firewalld service firewalld stop |
Аналогичны и команды старта сервиса, за исключением того что stop заменяется на start.
1 2 |
systemctl start firewalld service firewalld start |
Далее идет команда ставящая сервис в автозагрузку:
1 |
systemctl enable firewalld |
firewalld зоны
Так как мы упоминали про зоны, давайте их рассмотрим.
- drop — сброс всего входящего трафика без ответа, доступны только исходящие подключения.
- block — данная зона похожа на ранее озвученную, но при этом она дает ответ icmp-host-prohibited или icmp6-adm-prohibited при сбросе.
- public — публичная сеть, доверия к которой нет, но есть поддержка входящих соединений, в индивидуальном порядке.
- external — внешние сети, поддерживается маскировка NAT, внутренняя сеть остается закрытой, но есть возможность получения доступа.
- internal — противоположность external, внутренние сети. узлам в этой сети можно доверять.
- dmz — изолированные узлы, не имеющие доступа к остальным. Поддержка некоторых входящих соединений.
- work — рабочая сеть, большинству машин в данной зоне можно доверять.
- home — домашняя зона, узлам, в данной зоне, можно доверять.
- trusted — доверять всем узлам.
Зоны firewalld
Для получения списка активных зон введем:
1 |
firewall-cmd --get-active-zones |
Как видим у нас есть 2 сетевых интерфейса в зоне public. У вас их может быть больше или меньше. А так же их имена могут отличаться.
Так же, мы можем узнать список всех зон введя:
1 |
firewall-cmd --get-zones |
Для получения значений параметров конкретной зоны, добавим в в команду флаг —zone=
1 |
firewall-cmd --zone=public --list-al |
Командой выше мы получили параметры зоны public.
Для просмотра параметров всех зон используется следующая команда:
1 |
firewall-cmd --list-all-zones | less |
Изменение зоны интерфейса на сеанс
Если требуется перевести какой то из интерфейсов в другую зону, то выполнить это можно так:
1 |
<br>firewall-cmd --zone=home --change-interface=enp0s3 |
Данная команда не постоянна и действует до перезагрузки службы firewalld или сервера,пример для постоянного изменения зоны мы рассмотрим чуть ниже.
Так же, изменение зоны может повлиять на сетевые службы, запущенные на интерфейсе. Некоторые зоны сбрасывают все соединения.
Для успокоения и убеждения что изменение зоны прошло успешно введем:
1 |
firewall-cmd --get-active-zones |
Создание правил для конкретных сервисов
Для поучения списка всех сервисов выполним следующую команду:
1 |
firewall-cmd --get-services |
Чтобы добавить нужный сервис в нужную зону, используем команду:
1 |
firewall-cmd --zone=public --add-service=http |
Данной командой мы добавили сервис http в публичную зону. Убедимся в этом:
1 |
firewall-cmd --zone=public --list-services |
Но данными командами мы лишь временно добавили сервис в зону. Для добавления правила на постоянной основе немного модифицируем команду, добавив к ней —permament :
1 |
firewall-cmd --zone=public --permanent --add-service=http |
Просмотреть постоянные правила можно так:
1 |
sudo firewall-cmd --zone=public --permanent --list-services |
Настройка портов
Если требуется открыть доступ не всему сервису, а определенному порту, то это можно сделать так:
1 |
sudo firewall-cmd --zone=public --add-port=80/tcp |
Мы открыли 80 порт для публичной зоны. Так же можно открыть диапазон портов, например для сервиса asterisk:
1 |
firewall-cmd --zone=public --add-port=10000-20000/udp |
После тестирования добавим правила на постоянной основе:
1 2 |
firewall-cmd --zone=public --permament --add-port=80/tcp firewall-cmd --zone=public --permament --add-port=10000-20000/udp |
Для удаления правил портов используется флаг —remove. Например удалим 80 порт:
1 |
firewall-cmd --zone=public --remove-port=80/tcp |
На этом базовую настройку можно завершить, мы показали как управлять сервисом firewalld, а так же как создавать правила.