Введение
Firewalld — это решение для управления брандмауэром, доступное во многих дистрибутивах Linux. Оно служит интерфейсом для системы фильтрации пакетов iptables, предоставляемой ядром Linux. В этом руководстве вы узнаете, как настроить брандмауэр для вашего сервера. Мы также покажем вам основы управления брандмауэром с помощью инструмента администрирования firewall-cmd.
Основы Firewalld
FirewallD использует концепции зон и служб вместо цепочек и правил iptables. В зависимости от настроенных зон и служб вы можете контролировать, какой трафик разрешен или запрещен для системы и от нее. Настраивать FirewallD и управлять им можно с помощью утилиты командной строки firewall-cmd.
Установка и включение брандмауэра при загрузке
В большинстве дистрибутивов Linux firewallD уже установлен. Однако, если вам нужно установить его самостоятельно, введите следующую команду:
|
1 |
sudo yum install firewalld |
Вы можете включить службу и перезагрузить сервер после установки firewalld:
|
1 2 |
sudo systemctl enable firewalld sudo reboot |
Затем перезагрузите сервер. Брандмауэр будет включен после успешной перезагрузки сервера. После этого используйте команду ниже, чтобы убедиться, что служба активирована:
|
1 |
sudo firewall-cmd --state |

Вывод показывает, что настройки брандмауэра по умолчанию работают.
Проверка настроек по умолчанию
Вы можете проверить зону, выбранную сервером, с помощью этой команды:
|
1 |
firewall-cmd --get-default-zone |

Проверьте активную зону, введя:
|
1 |
firewall-cmd --get-active-zones |

Выведите конфигурацию зоны по умолчанию, чтобы узнать правила, привязанные к публичной зоне, используя следующий синтаксис:
|
1 |
sudo firewall-cmd --list-all |

Вывод указывает на то, что эта зона является одновременно зоной по умолчанию и активной зоной. Он также показывает, что интерфейсы eth0 и eth1 назначены этой зоне.
Проверка альтернативных зон
Помимо зон по умолчанию и активных зон, существуют другие зоны, которые вы можете изучить. Введите эту команду, чтобы увидеть все доступные зоны:
|
1 |
firewall-cmd --get-zones |

Проверьте конкретную конфигурацию, назначенную зоне, добавив параметр –zone= в команду –list-all:
|
1 |
sudo firewall-cmd --zone=home --list-all |

Изменение зоны интерфейса
Вы можете легко изменить зону интерфейса, используя параметр –change-interface в сочетании с параметром –change-interface. Следующая команда назначит интерфейс eth1 рабочей области:
|
1 |
sudo firewall-cmd --zone=work --change-interface=eth1 |
Вы можете проверить изменения, введя:
|
1 |
sudo firewall-cmd --get-active-zones |
Изменение зоны по умолчанию
Чтобы изменить зону по умолчанию, используйте параметр –set-default-zone, за которым следует имя зоны, которую вы хотите установить по умолчанию. Например, чтобы изменить зону по умолчанию для начала, вам следует выполнить следующую команду:
|
1 |
sudo firewall-cmd --set-default-zone=home |
Затем вы можете проверить изменения с помощью:
|
1 |
sudo firewall-cmd --get-default-zone |
Настройка правил для ваших приложений
Давайте разберем основы, необходимые для определения исключений брандмауэра для служб:
Добавление службы в ваши зоны
Самый простой способ — добавить нужные порты или службы в используемые зоны. Точно так же вы можете использовать параметр –get-services, чтобы просмотреть все доступные службы:
|
1 |
firewall-cmd --get-services |

Вы можете активировать службу для зоны с помощью параметра –add-service =. Действие нацелено на зону по умолчанию или любую зону, определенную параметром –zone =. По умолчанию настраивается только текущий сеанс брандмауэра. Вы можете настроить постоянную конфигурацию брандмауэра, активировав флаг –permanent. Например, если вы используете веб-сервер, который обслуживает обычный HTTP-трафик, вы можете разрешить этот трафик для интерфейсов в нашей зоне “public” для этого сеанса, введя:
|
1 |
sudo firewall-cmd --zone=public --add-service=http |
Вы можете опустить –zone =, если хотите изменить зону по умолчанию. Вы можете проверить успешность операции с помощью операций –list-all или –list-services:
|
1 |
sudo firewall-cmd --zone=public --list-services |

Убедившись, что все работает должным образом, вы, скорее всего, захотите изменить постоянные правила брандмауэра, чтобы ваша служба оставалась доступной после перезапуска. Мы можем внести изменения в нашу зону “public” на постоянной основе, введя следующий синтаксис:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --add-service=http вывод: success |
Вы можете проверить, было ли это успешно, добавив флаг –permanent к операции –list-services. Вы должны использовать sudo для всех постоянных операций:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --list-services вывод: dhcpv6-client http ssh |
Теперь ваша зона “public” разрешает HTTP-трафик на порту 80. Вы можете добавить это в текущий сеанс и набор постоянных правил с помощью команды ниже:
|
1 2 3 |
sudo firewall-cmd --zone=public --add-service=https sudo firewall-cmd --zone=public --permanent --add-service=https |
Если нет служб, соответствующих вашим требованиям, у вас есть два отличных варианта решения этой ситуации:
- Открытие порта для ваших зон
Самый простой способ добавить поддержку вашего конкретного приложения — открыть порты, используемые в каждой зоне. Это так же просто, как указать порт или диапазон портов и соответствующий протокол для портов, которые вам нужно открыть. Например, если ваше приложение работает на порту 5000 и использует TCP, вы можете добавить его в зону “public” для этого сеанса с помощью параметра –add-port =. Протоколы могут быть TCP или UDP:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --add-port=5000/tcp вывод: success |
Чтобы убедиться, что операция прошла успешно, используйте операцию –list-ports:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --list-ports Вывод: 5000/tcp |
Вы также можете указать диапазон для последовательного интерфейса, разделив начальный и конечный порты в диапазоне дефисом. Например, если ваше приложение использует UDP-порты с 4990 по 4999, вы можете открыть их в зоне “public”, написав:
|
1 |
sudo firewall-cmd --zone=public --add-port=4990-4999/udp |
После тестирования мы, вероятно, захотим добавить их в постоянный брандмауэр. Вы можете сделать это, введя следующее:
|
1 2 3 |
sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp sudo firewall-cmd --zone=public --permanent --list-ports |

- Определение службы
Служба представляет собой набор портов с соответствующим именем и описанием. Службами управлять проще, чем портами, но это требует некоторой начальной работы. Самый простой способ начать работу — скопировать существующий скрипт (в / usr / lib / firewalld / services) в каталог /etc/firewalld/services. Например, вы можете скопировать определение службы SSH для использования в определении службы “example” следующим образом. Имя файла без суффикса XML определяет имя службы в списке служб межсетевого экрана:
|
1 |
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml |
На этом этапе вы можете скорректировать определение в скопированном файле:
|
1 |
sudo vi /etc/firewalld/services/example.xml |
Во-первых, файл содержит скопированное вами определение SSH:
|
1 2 3 4 5 6 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>SSH</short> <description>Secure Shell (SSH) является протоколом для входа в систему и выполнения команд на удаленных машинах. Он обеспечивает безопасную зашифрованную связь. Если вы планируете получать доступ к вашей машине удаленно через SSH через интерфейс защищенный межсетевым экраном интерфейс, включите эту опцию. Вам нужен пакет openssh-server пакет установленный для этой опции чтобы быть полезной.</description> <port protocol="tcp" port="22"/> </service> |
Большая часть этого определения состоит из метаданных. Вы должны изменить краткое имя службы в тегах <short>. Это понятное имя службы. Представьте, что для нашей службы “example” нам нужно открыть порт 7777 для TCP и 8888 для UDP. Вы можете изменить существующее определение, войдя в режим INSERT, нажав i:
|
1 2 3 4 5 6 7 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>Пример службы</short> <description>Это просто пример службыпример службы. Ее вероятно не 'следует быть использованной на реальной реальной системе.</description> <port protocol="tcp" port="7777"/> <port protocol="udp" port="8888"/> </service> |
Затем нажмите ESC и введите :x, чтобы сохранить и закрыть файл. После этого введите команду ниже, чтобы перезапустить межсетевой экран и получить доступ к новой службе;
|
1 |
sudo firewall-cmd --reload |
После этого используйте команду ниже, чтобы получить список доступных служб:
|
1 |
firewall-cmd --get-services |

Эта служба теперь доступна в вашей зоне.
Создание собственных зон
Хотя предопределенных зон, скорее всего, будет достаточно для большинства пользователей, может быть полезно определить собственные зоны, которые более полно описывают их функции.
При добавлении зоны добавьте ее в постоянные настройки межсетевого экрана. Затем вы можете выполнить перезагрузку, чтобы применить настройки к вашему сеансу. Например, вы можете создать две зоны, упомянутые ранее, введя:
|
1 2 |
sudo firewall-cmd --permanent --new-zone=publicweb sudo firewall-cmd --permanent --new-zone=privateDNS |
Вы можете подтвердить их наличие в вашей постоянной конфигурации с помощью этой команды:
|
1 |
sudo firewall-cmd --permanent --get-zones |

Перезапустите межсетевой экран, чтобы перевести эти новые зоны в активную конфигурацию:
|
1 2 3 4 5 |
sudo firewall-cmd --reload firewall-cmd --get-zones вывод: block dmz drop external home internal privateDNS public publicweb trusted work |
Теперь вы можете назначить соответствующие службы и порты вашим зонам. Например, для зоны “publicweb” вы можете добавить службы SSH, HTTP и HTTPS:
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --add-service=ssh sudo firewall-cmd --zone=publicweb --add-service=http sudo firewall-cmd --zone=publicweb --add-service=https |

Также вы можете добавить службу DNS в вашу зону “privateDNS”, используя эту команду:
|
1 2 |
sudo firewall-cmd --zone=privateDNS --add-service=dns sudo firewall-cmd --zone=privateDNS --list-all |

Далее вы можете перевести свои интерфейсы в эти новые зоны, чтобы протестировать их:
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --change-interface=eth0 sudo firewall-cmd --zone=privateDNS --change-interface=eth1 |
Протестируйте конфигурацию, чтобы убедиться, что она работает. Если эти значения вам подходят, необходимо добавить те же правила в постоянную конфигурацию. Вы можете сделать это, повторно применив правила с флагом —permanent:
|
1 2 3 4 5 6 7 |
sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh sudo firewall-cmd --zone=publicweb --permanent --add-service=http sudo firewall-cmd --zone=publicweb --permanent --add-service=https sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns |
После применения этих правил на постоянной основе вы можете перезапустить сеть и перезагрузить службу брандмауэра:
|
1 2 3 |
sudo systemctl restart network sudo systemctl reload firewalld |
Убедитесь, что зоны были назначены правильно:
|
1 |
firewall-cmd --get-active-zones |

Кроме того, убедитесь, что в обеих зонах настроены правильные службы:
|
1 2 3 4 |
sudo firewall-cmd --zone=publicweb --list-services вывод: http https ssh |
|
1 2 3 4 5 |
sudo firewall-cmd --zone=privateDNS --list-services вывод: dns |
Если вы хотите установить одну из зон по умолчанию для других интерфейсов, вам необходимо настроить это поведение с помощью параметра –set-default-zone=, используя следующую команду:
|
1 |
sudo firewall-cmd --set-default-zone=publicweb |
Заключение
На данном этапе вы успешно создали свои собственные зоны. Теперь у вас должно быть базовое понимание администрирования службы firewalld в системе CentOS для повседневного использования. Хорошее понимание работы службы firewalld позволит вам в полной мере использовать ее возможности и гибкость.
Приятной работы!


Комментарии
Комментариев пока нет. Будьте первым.