Тарифы Услуги Сим-карты

Добавление собственных зон

Centos 7, в отличие от CentOS 6, в базе идет с новым брандмауэром - firewalld. Его можно отключить и заменить на старый добрый iptables, но если к этому нет прямых предпосылок, то лучше привыкать к чему-то новому, а не упираться в старое. Это не значит, что Windows 10 лучше Windows 7, а Windows XP лучше Windows 7 ;) Хороший пример на эту тему - selinux. Если вначале почти все (и я тоже) его отключали и даже немного ругали, то теперь почти никто это не советует, только если есть уверенность, что так надо. Напротив, многие уже привыкли (или привыкают) пользоваться semanage. Не будем и мы сразу отключать firewalld, а попробуем, как он на вкус.

Firewalld - это не принципиально иной брандмауэр. Это другая надстройка над netfilter, поэтому если вы обладаете опытом работы с iptables, то помучившись немного вы спокойно начнете пользоваться новым инструментом.

Запуск и остановка firewalld

Проверим, запущен ли firewalld:

# systemctl status firewalld

Тут будет расширенная информация. Чтобы коротко, да (работает) или нет можно так:

# firewall-cmd --state
running

Ок, работает.

Остановка firewalld:

# systemctl stop firewalld

Запрет автостарта:

# systemctl disable firewalld

Запуск firewalld:

# systemctl start firewalld

Включение автостарта:

# systemctl enable firewalld

Зоны firewalld

В firewalld широко используется понятие зоны. Список всех допустимых зон по-умолчанию:

# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Назначение зон (условно, конечно):

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

Список всех активных зон:

# firewall-cmd --get-active-zones
public
interfaces: enp1s0

Ага, зона public, к которой присоединен сетевой интерфейс enp1so. Дальше в зону public добавим новый порт, на котором будет висеть sshd.

Зная имя сетевого интерфейса (например, enp1s0), можно узнать, к какой зоне он принадлежит:

# firewall-cmd --get-zone-of-interface=enp1s0
public

А можно узнать, какие интерфейсы принадлежат конкретной зоне:

# firewall-cmd --zone=public --list-interfaces
enp1s0

Пример: разрешаем ssh на нестандартном порте

Давайте разрешим доступ к серверу по ssh на порте 2234/tcp, а не на 22/tcp, как по-умолчанию. Попутно чуть-чуть коснемся selinux.

Сначала посмотрим, что вообще разрешено постоянно на нашем сервере:

# firewall-cmd --permanent --list-all
public (default)
interfaces:
sources:
services: ssh dhcpv6-client
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Я не использую пока ipv6, поэтому сразу уберу соотв. правило из firewalld:

# firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client

Разрешим на постоянной основе (чтобы после перезагрузки не потерлось) соединение на порт 2234/tcp (на него повесим sshd):

# firewall-cmd --permanent --zone=public --add-port=2234/tcp

Перезагрузим правила:

# firewall-cmd --reload

Проверим:

# firewall-cmd --zone=public --list-ports
2234/tcp

Ок, порт открыт. Редактируем конфиг sshd:

# nano /etc/ssh/sshd_config
...
port 2234
...

# systemctl restart sshd.service

Но SELinux, которую вы, надеюсь, не отключали, не даст подключиться к ssh на нестандартном порте (порт 2234/tcp для sshd - нестандартный). Вы можете этот шаг пропустить и проверить, как сработатет защита SELinux, а можете сразу все настроить:

# yum provides semanage
# yum install policycoreutils-python
# semanage port -a -t ssh_port_t -p tcp 2234

Вот теперь все ок. Проверяем подключение по ssh на новом порте. Если все ок, закрываем доступ к порту 22:

# firewall-cmd --permanent --zone=public --remove-service=ssh
# firewall-cmd --reload

Смотрим, что получилось:

# firewall-cmd --list-all
public (default, active)
interfaces:
sources:
services:
ports: 2234/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Вот и все.

Разные полезные команды:

Включить режим блокировки всех исходящих и входящих пакетов:

# firewall-cmd --panic-on

Выключить режим блокировки всех исходящих и входящих пакетов:

# firewall-cmd --panic-off

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

# firewall-cmd --query-panic

Перезагрузить правила firewalld без потери текущих соединений:

# firewall-cmd --reload

Перезагрузить правила firewalld и сбросить текущие соединения (рекомендуется только в случае проблем):

# firewall-cmd --complete-reload

Добавить к зоне сетевой интерфейс:

# firewall-cmd --zone=public --add-interface=em1

Добавить к зоне сетевой интерфейс (сохранится после перезагрузки firewall):

# firewall-cmd --zone=public --permanent --add-interface=em1

Можно в конфиге ifcfg-enp1s0 указать, какой зоне принадлежит этот интерфейс. Для этого добавим ZONE=work в файл /etc/sysconfig/network-scripts/ifcfg-enp1s0. Если параметр ZONE не указан, будет назначена зона по-умолчанию (параметр DefaultZone в файле /etc/firewalld/firewalld.conf.

Разрешить диапазон портов:

# firewall-cmd --zone=public --add-port=5059-5061/udp

Маскарад (masquerade, он же nat, он же...):

Проверить статус:

# firewall-cmd --zone=external --query-masquerade

Включить:

# firewall-cmd --zone=external --add-masquerade

Здесь надо отметить, что вы можете включить masquerade и для зоны public, например.

Перенаправить входящие на 22 порт на другой хост:

# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.23

Перенаправить входящие на 22 порт на другой хост с изменением порта назначения (с 22 на 192.168.1.23:2055):

# firewall-cmd --zone=external /
--add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.23

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

Преимущества firewalld

Основное преимущество - вы немного абстрагируетесь от цепочек iptables.Для включения перенаправления портов не придется думать про PREROUTING или POSTROUTING в дополнение к FORWARD. Вам дается "API от iptables от производителя", что-то в этом роде. Если вы включили nat, то неважно, где конкретно (под каким порядковым номером текущих правил) размещено правило. Вы просто указываете - включи nat на eth0. И без глупостей;) Это может быть удобно, если надо организовать web интерфейс управления брандмауэром.

Есть возможность проверить статус (например, включен nat или нет!). И также использовать это в своих скриптах, в логике вашего приложения, например. Я не знаю, как в iptables создать именно запрос статуса (вкл/выкл). Можно, конечно, что-то в роде iptables -L -t nat | grep "...", но согласитесь, это немного не то же самое, что выполнить "firewall-cmd --zone=external --query-masquerade". Есть, к примеру, сотни VM с CentOS, в которых могут немного отличаться названия wan интерфейсов или еще что-то в этом роде. А так вы имеете универсальный командлет, который даст ожидаемый результат на разных машинах.

Недостатки firewalld

Основной недостаток, на мой взгляд, это то, что при привыкании начнется отвыкание от "чистого" iptables, который и в Debian, и в Ubuntu, и в CentOS и, вообще, везде. Даже, кстати, в микротик синтаксис и цепочки похожи по типу на iptables. Это на любителя, конечно. И профессионалу все равно, с чем работать, если есть конкретные условия, он будет работать с тем, что есть. Но... я ретроград и отчаянно сопротивляюсь (при отсутсвии явных преимуществ) новинкам, которые каждый крупный игрок реализует под себя. RedHat выгодно, если все больше новых специалистов будут асами в firewalld.

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

Не хочу firewalld! Верните мне старый iptables!

Если все же вы хотите вернуть прошлое и заменить firewalld на iptables, то сделать это совсем не трудно:

Новичкам тут не место:

# systemctl disable firewalld
# systemctl stop firewalld

Ставим старый добрый iptables:

# yum install iptables-services

Запускаем брандмауэр:

# systemctl start iptables
# systemctl start ip6tables

Автозапуск при включении:

# systemctl enable iptables
# systemctl enable ip6tables

Для сохранения правил iptables после перезагрузки:

# /sbin/iptables-save > /etc/sysconfig/iptables
# /sbin/ip6tables-save > /etc/sysconfig/ip6tables

Или по-старинке:

# service iptables save

Текущие правила находятся в файлах:
/etc/sysconfig/iptables
/etc/sysconfig/ip6tables

Перезапуск iptables (например, после совершения каких-либо изменений):

# systemctl restart iptables.service


Сегодня я познакомлю вас со своим видением начальной конфигурации универсального сервера на популярной ОС. Я расскажу о том, как сделать базовую настройку сервера centos сразу после установки для использования его в любом качестве на ваше усмотрение. Приведенные практические советы повышают безопасность и удобство работы с сервером. Статья будет актуальна для двух последних релизов Centos — 7 и 8.

  1. Перечислить начальные настройки centos, которые я выполняю на свежеустановленном сервере.
  2. Показать примеры конфигураций, которые я использую в типовой настройке.
  3. Дать советы по настройке centos на основе своего опыта работы с системой.
  4. Привести список типовых программ и утилит, которые помогают администрировать сервер.

Данная статья является частью единого цикла статьей про сервер .

Введение

После выхода нового релиза Centos 8, стало тяжело в единой статье описывать начальную настройку обоих серверов, но мне не захотелось разделять статью, так как на нее идет много входящих ссылок из разных мест. Удобнее поддерживать общий материал по обоим релизам, чем я и займусь. Заодно наглядно будут видны отличия двух версий, которые пару лет после выхода centos 8 будут актуальны обе и использовать придется и ту, и другую версию, в зависимости от ситуации.

В Centos 7 используется пакетный менеджер yum , а в Centos 8 — dnf . При этом оставили символьную ссылку с yum на dnf, так что можно писать как первое название, так и второе. Для единообразия я везде буду использовать yum, а вас предупреждаю, просто чтобы вы понимали, почему я делаю именно так. Реально в CentOS 8 используется dnf, это другой, более современный пакетный менеджер, которые позволяет работать с разными версиями одного и того же софта. Для этого используются отдельные репозитории, которые появились для centos 8.

Начальная настройка CentOS

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

Обновляем систему

# yum update

Для удобства администрирования, я всегда устанавливаю Midnight Commander, или просто mc:

# yum install mc

И сразу же для него включаю подсветку синтаксиса всех файлов, которые не обозначены явно в файле /usr/share/mc/syntax/Syntax синтаксисом для sh и bash скриптов. Этот универсальный синтаксис нормально подходит для конфигурационных файлов, с которыми чаще всего приходится работать на сервере. Перезаписываем файл unknown.syntax . Именно этот шаблон будет применяться к.conf и.cf файлам, так как к ним явно не привязано никакого синтаксиса.

# cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax

Дальше нам пригодятся сетевые утилиты. В зависимости от набора начальных пакетов, которые вы выбираете при установке системы, у вас будет тот или иной набор сетевых утилит. Вот список тех, к которым привык лично я — ifconfig, netstat, nslookup и некоторые другие. Если она вам нужны, так же как и мне, то предлагаю их установить отдельно, если они еще не стоят. Если вам они особо не нужны и вы ими не пользуетесь, то можете пропустить их установку. Проверим, что у нас имеется в системе на текущий момент

# ifconfig

Если увидите ответ:

Bash: ifconfig: command not found

Значит утилита не установлена. Вместо ifconfig в CentOS теперь утилита ip . Это относится не только к центос. Такая картина почти во всех популярных современных дистрибутивах Linux. Я с давних времен привык к ifconfig, хотя последнее время практически не пользуюсь. Мне всегда нравилось, что в различных дистрибутивах линукс все примерно одинаковое. С помощью ifconfig можно настроить сеть не только в linux, но и в freebsd. Это удобно. А когда в каждом дистрибутиве свой инструмент это не удобно. Хотя сейчас это уже не очень актуально, так как с Freebsd больше не работаю, а утилита ip есть во всех дистрибутивах linux. Тем не менее, если вам нужен ifconfig, то можете установить пакет net-tools , в который она входит:

# yum install net-tools

Чтобы у нас работали команды nslookup или, к примеру, host необходимо установить пакет bind-utils . Если этого не сделать, то на команду:

# nslookup

Будет вывод:

Bash: nslookup: command not found

Так что устанавливаем bind-utils:

# yum install bind-utils

Отключить SELinux

Отключаем SELinux. Его использование и настройка отдельный разговор. Сейчас я не буду этим заниматься. Так что отключаем:

# mcedit /etc/sysconfig/selinux

меняем значение

SELINUX=disabled

Чтобы изменения вступили в силу, можно перезагрузиться:

# reboot

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

# setenforce 0

Постоянно получаю очень много критики на тему отключения SELinux. Я знаю, как он работает, умею его настраивать. Это реально не очень сложно и освоить не трудно. Это мой осознанный выбор, хотя иногда я его настраиваю. Мой формат работы с системой таков, что SELinux мне чаще всего не нужен, поэтому я не трачу на него время и в базовой настройке centos отключаю. Безопасность системы — комплексная работа, особенно в современном мире web разработки, где правят бал микросервисы и контейнеры. SELinux нишевый инструмент, которые нужен не всегда и не везде. Поэтому в данном статье ему не место. Кому нужно, будет отдельно включать SELinux и настраивать.

Указываем сетевые параметры

Продолжаем базовую настройку centos после установки. Теперь произведем , если по какой-то причине не сделали это во время установки, либо если вам надо их изменить. В общем случае, сеть в Centos настраивается с помощью NetworkManager и его консольной утилиты nmtui . Она идет в базовой устновке системы. Там простой и понятный графический интерфейс, так что рассказывать нечего. Я больше привык настраивать сеть через конфигурационные файлы network-scripts. В centos 7-й версии они есть из коробки, в 8-й версии их убрали. Чтобы воспользоваться ими для настройки сети, надо отдельно установить пакет network-scripts .

# yum install network-scripts

Теперь можно выполнить настройку сети. Для этого открываем файл /etc/sysconfig/network-scripts/ifcfg-eth0

# mcedit /etc/sysconfig/network-scripts/ifcfg-eth0

Если вы получаете сетевые настройки по dhcp, то минимальный набор настроек в конфигурационном файле будет такой.

TYPE="Ethernet" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" NAME="eth0" DEVICE="eth0" ONBOOT="yes"

Для настройки статического ip адреса настройки будут следующие.

TYPE="Ethernet" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" NAME="eth0" DEVICE="eth0" ONBOOT="yes" IPADDR=192.168.167.117 DNS1=192.168.167.113 PREFIX=28 GATEWAY=192.168.167.113

В поле IPADDR вводим свой адрес, в PREFIX маску сети, в GATEWAY шлюз, DNS адрес днс сервера. Сохраняем файл и перезапускаем сеть для применения настроек:

# systemctl restart network

Настраиваем firewall

Добавление репозиториев

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

# yum install epel-release

Так же для CentOS 7 крайне полезен репозиторий REMI, который позволяет установить больее свежие версии php, в отличие от тех, что есть в стандартном репозитории. Напомню, что это версия php 5.4, которая уже никуда не годится и снята с поддержки.

# rpm -Uhv http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Для Centos 8 remi пока не актуален, но думаю, что это временно. В принципе, мне этих двух репозиториев в centos обычно хватает в общем случае. Другие подключаются уже под конкретные нужды для установки различного софта.

Настройка хранения истории в bash_history

Двигаемся дальше по настройке системы centos на сервере. Полезным будет внести некоторые изменения в стандартный механизм сохранения истории команд. Он часто выручает, когда надо вспомнить одну из ранее введенных команд. Стандартные настройки имеют некоторые ограничения, которые неудобны. Вот их список:

  1. По-умолчанию, сохраняются только последние 1000 команд. Если их будет больше, то более старые будут удаляться и заменяться новыми.
  2. Не указаны даты выполнения команд, только их список в порядке выполнения.
  3. Файл со списком команд обновляется после завершения сессии. При параллельных сессиях часть команд может быть утеряна.
  4. Сохраняются абсолютно все команды, хотя в хранении некоторых нет никакого смысла.

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

# history

и увидеть пронумерованный список. Быстро найти конкретную команду, можно с помощью фильтрации только нужных строк, например вот так:

# history | grep yum

Так мы увидим все варианты запуска команды yum, которые хранятся в истории. Исправим перечисленные недостатки стандартных настроек хранения истории команд в CentOS. Для этого нужно отредактировать файл .bashrc , который находится в том же каталоге, что и файл с историей. Добавляем в него следующие строки:

Export HISTSIZE=10000 export HISTTIMEFORMAT="%h %d %H:%M:%S " PROMPT_COMMAND="history -a" export HISTIGNORE="ls:ll:history:w:htop"

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

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

# source ~/.bashrc

По настройке хранения истории команд все. В файле .bashrc можно много чего настроить интересного. Я одно время увлекался и экспериментировал, но потом все забросил, так как не имеет смысла. Работая с серверами заказчиков я чаще всего вижу дефолтный bash, поэтому лучше привыкать и работать именно в нем. А отдельные настройки и украшательства это удел личных компьютеров и серверов. Не рабочих. Так что больше я ничего не настраивать по стандарту в centos сервере в этом плане.

Автоматическое обновление системы

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

Yum-cron

Для автоматической проверки обновлений в Centos 7 нам поможет утилита yum-cron . Ставится она традиционно через yum из стандартного репозитория.

# yum install yum-cron

После установки yum-cron создается автоматическое задание на выполнение утилиты в /etc/cron.daily и /etc/cron.hourly . По-умолчанию, утилита скачивает найденные обновления, но не применяет их. Вместо этого, администратору на локальный почтовый ящик root отправляется уведомление об обновлениях. Дальше вы уже в ручном режиме заходите и решаете, устанавливать обновления или нет в удобное для вас время. Мне такой режим работы видится наиболее удобным, поэтому я не меняю эти настройки.

Настраивать yum-cron можно через, конфигурационные файлы, которые находятся по адресу /etc/yum/yum-cron.conf и yum-cron-hourly.conf . Они неплохо прокомментированы, так что в подробных разъяснениях не нуждаются. Обращаю внимание на раздел , где можно указать параметры отправки сообщений. По-умолчанию стоит отправка почты через локальный хост. Можно тут изменить параметры и отправлять сообщения через сторонний почтовый сервер. Но вместо этого лично я предпочитаю глобально для всего сервера настроить пересылку локальной почты root на внешний почтовый ящик через авторизацию на другом smtp сервере.

Dnf-automatic

Как я уже говорил ранее, в Centos 8 используется другой пакетный менеджер — dnf. Настройка обновления пакетов там выполняется через утилиту dnf-automatic . Поставим ее и настроим.

# yum install dnf-automatic

Управлением запуском по расписанию занимается уже не cron, а systemd своим встроенным планировщиком. Посмотреть таймеры автоматического запуска можно командой:

# systemctl list-timers *dnf-*

Если там нет ни одного задания, то добавить таймер можно вручную:

# systemctl enable --now dnf-automatic.timer

Дефолтный таймер настроен на запуск dnf-automatic через час после загрузки сервера и ежедневное повторение. Конфиг таймера живет тут — /etc/systemd/system/multi-user.target.wants/dnf-automatic.timer .

Конфиг для dnf-automatic живет в /etc/dnf/automatic.conf . По-умолчанию он только скачивает обновления, но не применят их. Конфиг хорошо прокомментирован, так что можете его настроить так, как пожелаете. Отдельных пояснений не требуется. Настраивайте обновление пакетов системы на свое усмотрение. Как я уже сказал, автоматически только качаю их. Установку всегда держу под контролем с ручным управлением.

Отключаем флуд сообщений в /var/log/messages

Продолжая настройку centos, исправим одно небольшое неудобство. В дефолтной установке системы 7-й версии, весь ваш системный лог /var/log/messages через некоторое время работы сервера будет забит следующими записями.

Oct 16 14:01:01 xs-files systemd: Created slice user-0.slice. Oct 16 14:01:01 xs-files systemd: Starting user-0.slice. Oct 16 14:01:01 xs-files systemd: Started Session 14440 of user root. Oct 16 14:01:01 xs-files systemd: Starting Session 14440 of user root. Oct 16 14:01:01 xs-files systemd: Removed slice user-0.slice. Oct 16 14:01:01 xs-files systemd: Stopping user-0.slice. Oct 16 15:01:01 xs-files systemd: Created slice user-0.slice. Oct 16 15:01:01 xs-files systemd: Starting user-0.slice. Oct 16 15:01:01 xs-files systemd: Started Session 14441 of user root. Oct 16 15:01:01 xs-files systemd: Starting Session 14441 of user root. Oct 16 15:01:01 xs-files systemd: Started Session 14442 of user root. Oct 16 15:01:01 xs-files systemd: Starting Session 14442 of user root. Oct 16 15:01:01 xs-files systemd: Removed slice user-0.slice. Oct 16 15:01:01 xs-files systemd: Stopping user-0.slice. Oct 16 16:01:01 xs-files systemd: Created slice user-0.slice. Oct 16 16:01:01 xs-files systemd: Starting user-0.slice. Oct 16 16:01:01 xs-files systemd: Started Session 14443 of user root. Oct 16 16:01:01 xs-files systemd: Starting Session 14443 of user root. Oct 16 16:01:01 xs-files systemd: Removed slice user-0.slice.

В Centos 8 я их не заметил, поэтому там ничего делать не надо. Никакой практической пользы сообщения не несут, поэтому отключим их. Для этого создадим отдельное правило для rsyslog, где перечислим все шаблоны сообщений, которые будем вырезать. Разместим это правило в отдельном файле /etc/rsyslog.d/ignore-systemd-session-slice.conf .

# cd /etc/rsyslog.d && mcedit ignore-systemd-session-slice.conf if $programname == "systemd" and ($msg contains "Starting Session" or $msg contains "Started Session" or $msg contains "Created slice" or $msg contains "Starting user-" or $msg contains "Starting User Slice of" or $msg contains "Removed session" or $msg contains "Removed slice User Slice of" or $msg contains "Stopping User Slice of") then stop

Сохраняем файл и перезапускаем rsyslog для применения настроек.

# systemctl restart rsyslog

Необходимо понимать, что в данном случае мы отключаем флуд в лог файл только на локальном сервере. Если вы храните логи на , то данное правило нужно будет настраивать именно на нем.

Установка iftop, atop, htop, lsof на CentOS

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

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

# yum install iftop

И два интересных диспетчера задач, я чаще всего пользуюсь htop, но иногда пригодится и atop. Ставим оба, сами посмотрите, разберетесь, что вам больше нравится, подходит:

# yum install htop # yum install atop

Для вывода информации о том, какие файлы используются теми или иными процессами, советую поставить утилиту lsof . Она скорее всего рано или поздно пригодится, когда будете диагностировать работу сервера.

# yum install wget bzip2 traceroute gdisk

На этом у меня все. Базовая настройка CentOS закончена, можно приступать к установке и настройке основного функционала.

Настройка системной почты

В завершение настройки сервера CentOS сделаем так, что бы почта, адресованная локальному root, отправлялась через внешний почтовый сервер на выбранный почтовый ящик. Если этого не сделать, то она будет локально складываться в файл /var/spool/mail/root . А там может быть важная и полезная информация. Настроим ее отправку в ящик системного администратора.

Подробно об этом я рассказал в отдельной статье — . Здесь кратко только команды и быстрая настройка. Ставим необходимые пакеты:

# yum install mailx cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain postfix

Рисуем примерно такой конфиг для postfix.

Cat /etc/postfix/main.cf ## DEFAULT CONFIG BEGIN ###################### queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix inet_interfaces = localhost inet_protocols = all unknown_local_recipient_reject_code = 550 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix setgid_group = postdrop html_directory = no manpage_directory = /usr/share/man sample_directory = /usr/share/doc/postfix-2.10.1/samples readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES ## DEFAULT CONFIG END ###################### # Имя сервера, которое выводит команда hostname myhostname = centos-test.xs.local # Здесь по логике нужно оставлять только домен, но в данном случае лучше оставить полное имя сервера, чтобы в поле отправитель # фигурировало полное имя сервера, так удобнее разбирать служебные сообщения mydomain = centos-test.xs.local mydestination = $myhostname myorigin = $mydomain # Адрес сервера, через который будем отправлять почту relayhost = mailsrv.mymail.ru:25 smtp_use_tls = yes smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_tls_security_level = may

Создаем файл с информацией об имени пользователя и пароле для авторизации.

# mcedit /etc/postfix/sasl_passwd mailsrv.mymail.ru:25 [email protected]:password

Создаем db файл.

# postmap /etc/postfix/sasl_passwd

Теперь можно перезапустить postfix и проверить работу.

# systemctl restart postfix

К стандартному алиасу для root в /etc/aliases , добавьте внешний адрес, куда будет дублироваться почта, адресованная root. Для этого редактируем указанный файл, изменяя последнюю строку.

#root: marc

Root: root,[email protected]

Обновляем базу сертификатов:

# newaliases

Отправим письмо через консоль локальному руту:

# df -h | mail -s "Disk usage" root

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

Relay=smtp.yandex.ru:25, delay=0.25, delays=0/0/0.24/0.01, dsn=5.7.1, status=bounced (host smtp.yandex.ru said: 553 5.7.1 Sender address rejected: not owned by auth user. (in reply to MAIL FROM command))

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

На этом настройка локальной почты закончена. Теперь все письма, адресованные локальному root, например, отчеты от cron, будут дублироваться на внешний почтовый ящик, причем с отправкой через полноценный почтовый сервер. Так что письма будут нормально доставляться, не попадая в спам (хотя не обязательно, есть еще эвристические фильтры).

Заключение

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

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

    Зоны

    Демон firewalld управляет группами правил при помощи так называемых зон.

    Зоны – это, по сути, наборы правил, которые управляют трафиком на основе уровня доверия к той или иной сети. Зоны присваиваются сетевым интерфейсам и управляют поведением брандмауэра.

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

    В firewalld существуют следующие зоны:

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

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

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

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

    Включение брандмауэра firewalld

    Для начала нужно включить демон. Unit-файл systemd называется firewalld.service. Чтобы запустить демон, введите.

    sudo systemctl start firewalld.service

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

    firewall-cmd --state
    running

    Теперь брандмауэр запущен и работает согласно конфигурации по умолчанию.

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

    Правила брандмауэра по умолчанию

    Просмотр правил по умолчанию

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

    firewall-cmd --get-default-zone
    public

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

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


    public
    interfaces: eth0 eth1

    К зоне public привязаны два сетевых интерфейса: eth0 и eth1. Интерфейсы, привязанные к зоне, работают согласно правилам этой зоны.

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

    firewall-cmd --list-all
    public (default, active)
    interfaces: eth0 eth1
    sources:
    services: dhcpv6-client ssh
    ports:
    masquerade: no
    forward-ports:
    icmp-blocks:
    rich rules:

    Итак, теперь вы знаете, что:

    • public является зоной по умолчанию и единственной активной зоной.
    • К ней привязаны интерфейсы eth0 и eth1.
    • Она поддерживает трафик DHCP (присваивание IP-адресов) и SSH (удаленное администрирование).

    Другие зоны брандмауэра

    Теперь следует ознакомиться с другими зонами.

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

    firewall-cmd --get-zones

    Чтобы получить параметры конкретной зоны, добавьте в команду флаг —zone=.

    firewall-cmd --zone=home --list-all
    home
    interfaces:
    sources:
    services: dhcpv6-client ipp-client mdns samba-client ssh
    ports:
    masquerade: no
    forward-ports:
    icmp-blocks:
    rich rules:

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

    firewall-cmd --list-all-zones | less

    Настройка зон интерфейсов

    Изначально все сетевые интерфейсы привязаны к зоне по умолчанию.

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

    Чтобы перевести интерфейс в другую зону на одну сессию, используйте опции —zone= и —change-interface=.

    Например, чтобы перевести eth0 в зону home, нужно ввести:

    sudo firewall-cmd --zone=home --change-interface=eth0
    success

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

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

    firewall-cmd --get-active-zones
    home
    interfaces: eth0
    public
    interfaces: eth1

    После перезагрузки брандмауэра интерфейс будет снова привязан к зоне по умолчанию.

    sudo systemctl restart firewalld.service
    firewall-cmd --get-active-zones
    public
    interfaces: eth0 eth1

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

    Если в настройках интерфейса не указана никакая другая зона, после перезапуска брандмауэра интерфейс будет снова привязан к зоне по умолчанию. В CentOS такие конфигурации хранятся в каталоге /etc/sysconfig/network-scripts, в файлах формата ifcfg-interface.

    Чтобы определить зону интерфейса, откройте конфигурационный файл этого интерфейса, например:

    В конец файла добавьте переменную ZONE= и в качестве значения укажите другую зону, например, home:

    . . .
    DNS1=2001:4860:4860::8844
    DNS2=2001:4860:4860::8888
    DNS3=8.8.8.8
    ZONE=home

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

    Чтобы обновить настройки, перезапустите сетевой сервис и брандмауэр:

    sudo systemctl restart network.service
    sudo systemctl restart firewalld.service

    После перезапуска интерфейс eth0 будет привязан к зоне home.

    firewall-cmd --get-active-zones
    home
    interfaces: eth0
    public
    interfaces: eth1

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

    Также вы можете выбрать другую зону по умолчанию.

    Для этого используется параметр —set-default-zone=. После этого все интерфейсы будут привязаны к другой зоне:

    sudo firewall-cmd --set-default-zone=home
    home
    interfaces: eth0 eth1

    Создание правил для приложений

    Добавление сервиса в зону

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

    firewall-cmd --get-services
    RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

    Примечание : Больше информации о каждом конкретном сервисе можно найти в файлах.xml в каталоге /usr/lib/firewalld/services. К пример, сведения о сервисе SSH хранятся в /usr/lib/firewalld/services/ssh.xml и выглядят так:



    SSH

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

    Например, чтобы запустить веб-сервер для обслуживания трафика HTTP, для начала нужно включить поддержку этого трафика в зоне public на одну сессию:

    sudo firewall-cmd --zone=public --add-service=http

    Если сервис нужно добавить в зону по умолчанию, флаг —zone= можно опустить.

    Убедитесь, что операция выполнена успешно:

    firewall-cmd --zone=public --list-services
    dhcpv6-client http ssh

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

    sudo firewall-cmd --zone=public --permanent --add-service=http

    Чтобы просмотреть список постоянных правил, введите:

    sudo firewall-cmd --zone=public --permanent --list-services
    dhcpv6-client http ssh

    Теперь зона public поддерживает HTTP и порт 80 на постоянной основе. Если веб-сервер может обслуживать трафик SSL/TLS, вы также можете добавить сервис https (для одной сессии или в набор постоянных правил):

    sudo firewall-cmd --zone=public --add-service=https
    sudo firewall-cmd --zone=public --permanent --add-service=https

    Что делать, если нужный сервис недоступен?

    Брандмауэр firewalld по умолчанию включает в себя многие наиболее распространённые сервисы. Однако некоторым приложениям необходимы сервисы, поддержка которых отсутствует в firewalld. В таком случае вы можете поступить двумя способами.

    Способ 1: Настройка порта

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

    Например, приложение, которое использует порт 5000 и протокол TCP, нужно добавить в зону public. Чтобы включить поддержку приложения на дну сессию, используйте параметр —add-port= и укажите протокол tcp или udp.

    sudo firewall-cmd --zone=public --add-port=5000/tcp

    Убедитесь, что операция прошла успешно:

    firewall-cmd --list-ports
    5000/tcp

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

    sudo firewall-cmd --zone=public --add-port=4990-4999/udp

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

    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
    success
    success
    4990-4999/udp 5000/tcp

    Способ 2: Определение сервиса

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

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

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

    Например, можно скопировать определение сервиса SSH и использовать его для определения условного сервиса example. Имя сценария должно совпадать с именем сервиса и иметь расширение.xml.

    sudo cp /usr/lib/firewalld/services/service.xml /etc/firewalld/services/example.xml

    Откорректируйте скопированный файл.

    sudo nano /etc/firewalld/services/example.xml

    В файле находится определение SSH:



    SSH
    Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.

    Большую часть определения сервиса составляют метаданные. Изменить краткое имя сервиса можно в тегах . Это человекочитаемое имя сервиса. Также нужно добавить описание сервиса. Единственное изменение, которое повлияет на работу сервиса – это изменение номера порта и протокола.

    Вернёмся к сервису example; допустим, он требует открыть TCP- порт 7777 и UDP- порт 8888. Определение будет выглядеть так:



    Example Service
    This is just an example service. It probably shouldn"t be used on a real system.

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

    Перезапустите брандмауэр:

    sudo firewall-cmd --reload

    Теперь сервис появится в списке доступных сервисов:

    firewall-cmd --get-services
    RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns example ftp high-availability http https imaps ipp ipp-client ipsec kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind samba samba-client smtp ssh telnet tftp tftp-client transmission-client vnc-server wbem-https

    Создание зон

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

    Например, для веб-сервера можно создать зону publicweb, а для DNS-сервиса – зону privateDNS.

    Создавая зону, нужно добавить её в постоянные настройки брандмауэра.

    Попробуйте создать зоны publicweb и privateDNS:

    sudo firewall-cmd --permanent --new-zone=publicweb
    sudo firewall-cmd --permanent --new-zone=privateDNS

    Убедитесь, что зоны существуют:

    sudo firewall-cmd --permanent --get-zones

    В текущей сессии новые зоны не будут доступны:

    firewall-cmd --get-zones
    block dmz drop external home internal public trusted work

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

    sudo firewall-cmd --reload
    firewall-cmd --get-zones
    block dmz drop external home internal privateDNS public publicweb trusted work

    Теперь вы можете присвоить новым зонам требуемые сервисы и порты. К примеру, в зону publicweb можно добавить SSH, HTTP и HTTPS.

    sudo firewall-cmd --zone=publicweb --add-service=ssh
    sudo firewall-cmd --zone=publicweb --add-service=http
    sudo firewall-cmd --zone=publicweb --add-service=https
    firewall-cmd --zone=publicweb --list-all
    publicweb
    interfaces:
    sources:
    services: http https ssh
    ports:
    masquerade: no
    forward-ports:
    icmp-blocks:
    rich rules:

    В зону privateDNS можно добавить DNS:

    sudo firewall-cmd --zone=privateDNS --add-service=dns
    firewall-cmd --zone=privateDNS --list-all
    privateDNS
    interfaces:
    sources:
    services: dns
    ports:
    masquerade: no
    forward-ports:
    icmp-blocks:
    rich rules:

    Затем можно привязать сетевые интерфейсы к новым зонам:

    sudo firewall-cmd --zone=publicweb --change-interface=eth0
    sudo firewall-cmd --zone=privateDNS --change-interface=eth1

    Теперь можно протестировать настройку. Если всё работает правильно, вы можете добавить эти правила в постоянные настройки.

    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

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

    К примеру, eth0 будет привязан к publicweb:

    sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
    . . .
    IPV6_AUTOCONF=no
    DNS1=2001:4860:4860::8844
    DNS2=2001:4860:4860::8888
    DNS3=8.8.8.8
    ZONE=publicweb

    А интерфейс eth1 будет привязан к privateDNS:

    sudo nano /etc/sysconfig/network-scripts/ifcfg-eth1
    . . .
    NETMASK=255.255.0.0
    DEFROUTE="no"
    NM_CONTROLLED="yes"
    ZONE=privateDNS

    Перезапустите сетевые сервисы и брандмауэр:

    sudo systemctl restart network
    sudo systemctl restart firewalld

    Проверьте зоны:

    firewall-cmd --get-active-zones
    privateDNS
    interfaces: eth1
    publicweb
    interfaces: eth0

    Убедитесь, что в зонах работают нужные сервисы:

    firewall-cmd --zone=publicweb --list-services
    http htpps ssh
    firewall-cmd --zone=privateDNS --list-services
    dns

    Пользовательские зоны полностью готовы к работе. Вы можете сделать любую из них зоной по умолчанию. Например:

    sudo firewall-cmd --set-default-zone=publicweb

    Автоматический запуск брандмауэра

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

    Для этого введите:

    sudo systemctl enable firewalld

    Теперь брандмауэр будет запускаться вместе с сервером.

    Заключение

    Брандмауэр firewalld — очень гибкий инструмент. Зоны позволяют быстро изменять политику брандмауэра.

    Теперь вы знаете, как работает firewalld, знакомы с основными понятиями брандмауэра, умеете создавать пользовательские зоны и добавлять сервисы.

    Tags: ,

    F irewallD является инструментом управления брандмауэра, доступный по умолчанию на серверах CentOS 7. В основном, это оболочка вокруг IPTables и поставляется с графическим инструментом конфигурации firewall-config и инструментом командной строки firewall-cmd. С помощью сервиса IPtables, каждое изменение требует удаление старых правил и создание новых правил в файле `/etc/sysconfig/iptables `, а при firewalld применяются только различия.

    Зоны FirewallD

    FirewallD использует сервисы и зоны вместо правил и цепочек в Iptables. По умолчанию доступны следующие зоны:

    • drop – Отбросьте все входящие сетевые пакеты без ответа, только исходящие сетевые соединения доступны.
    • block – Отклонить все входящие сетевые пакеты с сообщением icmp-host-prohibited, только исходящие сетевые соединения доступны.
    • public – только выбранные входящие соединения принимаются, для использования в общественных местах
    • external – Для внешних сетей с masquerading, только выбранные входящие соединения принимаются.
    • dmz – демилитаризованной зоны DMZ, публично доступны с ограниченным доступом к внутренней сети, только выбранные входящие соединения принимаются.
    • work
    • home – Для компьютеров в домашней зоне, только выбранные входящие соединения принимаются.
    • internal – Для компьютеров в вашей внутренней сети, только выбранные входящие соединения принимаются.
    • trusted – Все сетевые соединения принимаются.

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

    # firewall-cmd --get-zones work drop internal external trusted home dmz public block

    Для просмотра списка зон по умолчанию:

    # firewall-cmd --get-default-zone public

    Чтобы изменить зону по умолчанию:

    Сервисы FirewallD

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

    # firewall-cmd --get-services amanda-client amanda-k5-client bacula bacula-client ceph ceph-mon dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mosh mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster radius rpc-bind rsyncd samba samba-client sane smtp smtps snmp snmptrap squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

    Конфигурационные файлы XML хранятся в каталогах /usr/lib/firewalld/services/ и /etc/firewalld/services/ .

    Настройка брандмауэра с FirewallD

    В качестве примера, вот как вы можете настроить брандмауэр с FirewallD, если вы работаете в веб – сервере, SSH на порту 7022 и почтового сервера.

    Сначала мы установим зона по умолчанию для DMZ.

    # firewall-cmd --set-default-zone=dmz # firewall-cmd --get-default-zone dmz

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

    # firewall-cmd --zone=dmz --add-service=http --permanent # firewall-cmd --zone=dmz --add-service=https --permanent

    Откройте порт 25 (SMTP) и порт 465 (SMTPS):

    Firewall-cmd --zone=dmz --add-service=smtp --permanent firewall-cmd --zone=dmz --add-service=smtps --permanent

    Open, IMAP, IMAPS, POP3 и POP3S порты:

    Firewall-cmd --zone=dmz --add-service=imap --permanent firewall-cmd --zone=dmz --add-service=imaps --permanent firewall-cmd --zone=dmz --add-service=pop3 --permanent firewall-cmd --zone=dmz --add-service=pop3s --permanent

    Поскольку порт SSH изменен на 7022, мы удалим службу SSH (порт 22) и откроем порт 7022

    Firewall-cmd --remove-service=ssh --permanent firewall-cmd --add-port=7022/tcp --permanent

    Для реализации изменений нам нужно перезагрузить брандмауэр:

    Firewall-cmd --reload

    И, наконец, вы можете перечислить правила.

    F irewallD является инструментом управления брандмауэра, доступный по умолчанию на серверах CentOS 7. В основном, это оболочка вокруг IPTables и поставляется с графическим инструментом конфигурации firewall-config и инструментом командной строки firewall-cmd. С помощью сервиса IPtables, каждое изменение требует удаление старых правил и создание новых правил в файле `/etc/sysconfig/iptables `, а при firewalld применяются только различия.

    Зоны FirewallD

    FirewallD использует сервисы и зоны вместо правил и цепочек в Iptables. По умолчанию доступны следующие зоны:

    • drop – Отбросьте все входящие сетевые пакеты без ответа, только исходящие сетевые соединения доступны.
    • block – Отклонить все входящие сетевые пакеты с сообщением icmp-host-prohibited, только исходящие сетевые соединения доступны.
    • public – только выбранные входящие соединения принимаются, для использования в общественных местах
    • external – Для внешних сетей с masquerading, только выбранные входящие соединения принимаются.
    • dmz – демилитаризованной зоны DMZ, публично доступны с ограниченным доступом к внутренней сети, только выбранные входящие соединения принимаются.
    • work
    • home – Для компьютеров в домашней зоне, только выбранные входящие соединения принимаются.
    • internal – Для компьютеров в вашей внутренней сети, только выбранные входящие соединения принимаются.
    • trusted – Все сетевые соединения принимаются.

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

    # firewall-cmd --get-zones work drop internal external trusted home dmz public block

    Для просмотра списка зон по умолчанию:

    # firewall-cmd --get-default-zone public

    Чтобы изменить зону по умолчанию:

    Сервисы FirewallD

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

    # firewall-cmd --get-services amanda-client amanda-k5-client bacula bacula-client ceph ceph-mon dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mosh mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster radius rpc-bind rsyncd samba samba-client sane smtp smtps snmp snmptrap squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

    Конфигурационные файлы XML хранятся в каталогах /usr/lib/firewalld/services/ и /etc/firewalld/services/ .

    Настройка брандмауэра с FirewallD

    В качестве примера, вот как вы можете настроить брандмауэр с FirewallD, если вы работаете в веб – сервере, SSH на порту 7022 и почтового сервера.

    Сначала мы установим зона по умолчанию для DMZ.

    # firewall-cmd --set-default-zone=dmz # firewall-cmd --get-default-zone dmz

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

    # firewall-cmd --zone=dmz --add-service=http --permanent # firewall-cmd --zone=dmz --add-service=https --permanent

    Откройте порт 25 (SMTP) и порт 465 (SMTPS):

    Firewall-cmd --zone=dmz --add-service=smtp --permanent firewall-cmd --zone=dmz --add-service=smtps --permanent

    Open, IMAP, IMAPS, POP3 и POP3S порты:

    Firewall-cmd --zone=dmz --add-service=imap --permanent firewall-cmd --zone=dmz --add-service=imaps --permanent firewall-cmd --zone=dmz --add-service=pop3 --permanent firewall-cmd --zone=dmz --add-service=pop3s --permanent

    Поскольку порт SSH изменен на 7022, мы удалим службу SSH (порт 22) и откроем порт 7022

    Firewall-cmd --remove-service=ssh --permanent firewall-cmd --add-port=7022/tcp --permanent

    Для реализации изменений нам нужно перезагрузить брандмауэр:

    Firewall-cmd --reload

    И, наконец, вы можете перечислить правила.