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

CentOS - это свободный дистрибутив, основанный на исходном коде Red Hat Enterprise Linux, фактически, он создается с этих исходников практически без изменений, разработчики только вырезают весь брендинг Red Hat. Но в отличие от Red Hat, CentOS полностью бесплатна и получает регулярные обновления, спустя немного времени после выхода их для Red Hat поскольку они тоже собираются из исходного кода.

Очень часто CentOS применяется в качестве операционной системы для серверов. В одной из предыдущих статей мы рассматривали как выполняется . Сегодня будет рассмотрена настройка сервера CentOS 7 после установки. Мы рассмотрим все основные параметры, которые вам нужно будет изменить чтобы подготовить ваш сервер к работе.

1. Настройка статического IP адреса

Первое, что нужно сделать - это настроить сеть. На персональных компьютерах используется получение IP адреса по DHCP, и компьютер при каждом запуске будет иметь другой адрес, сервер должен всегда работать на одном адресе, поэтому мы присваиваем ему статический IP. Также нужно настроить DNS и шлюз по умолчанию. Но сначала установите утилиту net-tools:

yum install net-tools

Сначала посмотрим доступные сетевые интерфейсы и текущий IP адрес:

Теперь можно перейти к настройке интерфейса через файл /etc/sysconfig/network-scripts/ifcfg-enp0s3, например, с помощью редактора vi:

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

IPADDR = ваш_ip
GATEWAY = шлюз_для_доступа_к_сети
DNS1 = IP_адрес_DNS1
DNS2 = IP_адрес_DNS2

После внесения изменений этот файл будет выглядеть вот так:

Затем останется перезагрузить сеть чтобы применить новые настройки:

service network restart

Потом, при необходимости вы можете сменить IP адрес таким же способом.

2. Имя компьютера

Следующее что нам нужно сделать - это изменить имя компьютера. Текущее имя компьютера хранится в переменной HOSTNAME:

Чтобы его изменить вам нужно отредактировать файл /etc/hostname и заменить там старое имя на новое.

vi /etc/hostname

Также вы можете использовать команду hostnamectl:

hostnamectl set-hostname "имя_хоста"

3. Обновление CentOS

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

yum update && yum upgrade

4. Установите браузер

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

yum install links

Вы можете найти и другие консольные браузеры для Linux, например, Lynx или Elinks.

5. Настройка часового пояса

Правильная настройка часового пояса очень важна для сервера. Это уберет путаницу в логах и позволит вашим приложениям отображать правильную дату и время. Для настройки используется утилита timedatectl.

Сначала получите список часовых поясов:

timedatectl list-timezones

Затем установите нужный, например, Europe/Kyiv:

timedatectl set-timezone Europe/Kyiv

Затем проверьте:

7. Настройка локали

Локаль определяет язык и кодировку, которая будет использоваться в вашей системе, например, для включения русского языка установите значение ru_RU.UTF-8

localectl set-locale LANG=ru_RU.UTF-8

Затем смотрим что получилось:

Затем устанавливаем раскладку клавиатуры:

localectl set-keymap us

8. Отключите SELinux

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

sed -i "s/(^SELINUX=).*/SELINUX=disabled/" /etc/selinux/config

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

9. Создайте пользователя

Использовать систему от имени суперпользователя небезопасно и тем более небезопасно оставлять открытым доступ к root аккаунту по ssh. Сначала создайте обычного пользователя и установите для него пароль:

useradd имя_пользователя
# passwd пароль

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

usermod -G wheel имя_пользователя

Теперь осталось подправить настройки sudo, для этого добавьте такую строчку, если ее там еще нет:

%wheel ALL = (ALL) ALL

10. Включите сторонние репозитории

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

Для добавления репозитория Enterprise Linux Repository (EPEL) выполните:

yum install epel-release
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

10. Настройка SSH

Чаще всего нам приходится работать с серверами не напрямую, а по сети, через SSH. Обычно служба SSH уже установлена и активирована, но для ее правильной работы нужно выполнить несколько настроек. Сначала нужно настроить использование только безопасного протокола, для этого откройте файл /etc/ssh/ssh_config и удалите строчку Protocol 2,1. А вместо нее добавьте:

Также нужно отключить вход от имени суперпользователя:

PermitRootLogin no

11. Установите веб-сервер Apache

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

yum install httpd

Когда установка будет завершена, перед тем, как вы сможете перейти к работе нужно разрешить HTTP в брандмауере:

firewall-cmd --add-service=http
# firewall-cmd -permanent -add-port=3221/tcp
# firewall-cmd --reload

Теперь осталось добавить Apache в автозагрузку:

systemctl start httpd.service
# systemctl enable httpd.service

12. Установите PHP

PHP - это современный язык веб-приложений и скриптов. Он часто используется в качестве языка программирования общего назначения. Для установки выполните:

После установки необходимо перезапустить Apache:

echo -e "" > /var/www/html/phpinfo.php

Затем откройте созданный файл в браузере:

links http://127.0.0.1/phpinfo.php

13. Установка базы данных

MariaDB - это база данных, основанная на исходном коде MySQL. Дистрибутивы Linux на базе Red Hat используют MariaDB вместо MySQL. Базы данных - незаменимая вещь на сервере, поэтому настройка CentOS после установки должна включать ее установку. Для установки MariaDB наберите:

yum install mariadb-server mariadb

Затем запустите и добавьте в автозагрузку:

systemctl start mariadb.service
# systemctl enable mariadb.service

И разрешите в использование службы в брандмауэре:

firewall-cmd --add-service=mysql

Осталось запустить скрипт настройки:

/usr/bin/mysql_secure_installation

14. Установите GCC

GCC расшифровывается как GNU Compiler Collection, это набор компиляторов, которые считаются стандартом для сборки программ в Linux. Но по умолчанию он не поставляется с CentOS, поэтому для установки наберите:

Затем вы можете посмотреть версию GCC:

15. Установите Java

Java - это объективно-ориентированный язык программирования общего назначения. Он не устанавливается по умолчанию, поэтому настройка CentOS 7 после установки может включать и его установку. Для этого выполните:

yum install java

Затем проверьте версию:

Выводы

В этой статье мы рассмотрели как выполняется настройка сервера CentOS 7 после установки. Как видите, есть много элементарных действий, которые желательно сделать перед тем, как использовать сервер на производстве. Если у вас остались вопросы, спрашивайте в комментариях!

Август 15, 2014 12:57 пп 12 380 views | Комментариев нет

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

1: Войдите как root-пользователь

Получив свой IP-адрес и root-пароль, войдите на сервер как главный пользователь (root). Для этого используйте команду (замените выделенный IP своим IP-адресом):

ssh [email protected]

Терминал вернет что-то вроде:

The authenticity of host "111.22.33.444 (111.22.33.444)" can"t be established.
ECDSA key fingerprint is 79:95:46:1a:ab:37:11:8e:86:54:36:38:bb:3c:fa:c0.
Are you sure you want to continue connecting (yes/no)?

Выберите yes и введите свой root-пароль.

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

2: Измените пароль

На данный момент используется root-пароль, установленный по умолчанию и полученный после регистрации сервера. Первое, что нужно сделать, — заменить его собственным паролем.

Что касается устанавливаемых паролей, система CentOS очень осторожна. Потому после ввода нового пароля может появиться извещение BAD PASSWORD. Можно либо установить более сложный пароль, либо же проигнорировать сообщение: на самом деле, CentOS примет даже слишком простой или короткий пароль, хотя и предложит использовать более сложную комбинацию.

3: Создайте нового пользователя

Войдя на сервер и изменив root-пароль, нужно снова войти на VPS как root. Данный раздел продемонстрирует, как создать нового пользователя и установить пароль для него.

Итак, создайте нового пользователя; для этого используйте следующую команду (замените demo своим именем пользователя):

adduser demo

Теперь создайте пароль для этого пользователя (опять же, замените demo именем только что созданного пользователя):

passwd demo

4: Root-привилегии

На данный момент все права администратора принадлежат root-пользователю. Чтобы иметь возможность постоянно использовать новую учетную запись, нужно передать новому пользователю (demo) все root-привилегии.

Для выполнения задач с привилегиями root нужно начинать команду с sudo. Эта фраза полезна по двум причинам: 1) она защищает систему от разрушающих ошибок, допущенных пользователем; 2) она хранит все запущенные с sudo команды в файле /var/log/secure, который позже можно просмотреть.

Теперь нужно изменить настройки sudo; для этого используйте текстовый редактор CentOS по умолчанию, который называется vi:

Найдите раздел User privilege specification, который выглядит так:

# User privilege specification
root ALL=(ALL) ALL

После строки с привилегиями root внесите следующую строку, которая передаст все привилегии новому пользователю (чтобы начать ввод текста в vi, нажмите i):

demo ALL=(ALL) ALL

Чтобы завершить ввод текста, нажмите Esc; затем введите:, wq, Enter, чтобы сохранить и закрыть файл.

5: Настройте SSH (дополнительно)

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

Откройте конфигурационный файл:

sudo vi /etc/ssh/sshd_config

Найдите следующие разделы и внесите в них соответствующие изменения:

Port 25000
PermitRootLogin no

Port : хотя по умолчанию используется порт 22, его номер можно заменить любым другим в диапазоне от 1025 до 65536. В данном руководстве используется SSHD-порт 25000. Обратите внимание: новый номер порта нужно обязательно запомнить/записать, поскольку он понадобится для входа на сервер через SSH.

PermitRootLogin :измените значение yes на no, чтобы отключить вход в систему как root. Теперь войти на сервер можно только при помощи нового пользователя.

Чтобы SSH мог использовать только конкретный пользователь, добавьте эту строку в нижней части документа (замените demo своим именем пользователя):

AllowUsers demo

Затем сохраните изменения и закройте файл.

Перезапуск SSH

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

sudo systemctl reload sshd.service

Чтобы протестировать новые настройки (пока что не выходите из учетной записи root), откройте терминал и войдите на сервер как новый пользователь (не забудьте указать правильный IP-адрес и порт):

ssh -p 25000 demo @111.22.33.444

Должно появиться извещение:

У меня имеется свежеустановленный сервер CentOS 7 на VDS с виртуализацией KVM. Я расскажу о том, как сделать базовую настройку сервера для использования его в любом качестве на ваше усмотрение. Это может быть web сервер ,vpn сервер , сервер мониторинга . Я расскажу о начальных настройках системы CentOS, которые повышают безопасность и удобство работы с сервером. Отмечу, что в 7-й версии системы произошли некоторые изменения по сравнению с предыдущими версиями.

Введение

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

Итак, у нас имеется: # uname -a Linux zeroxzed.ru 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Первым делом обновим базовую систему:

# yum -y update

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

# ifconfig

И увидите ответ:

Bash: ifconfig: command not found

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

Вместо ifconfig в CentOS 7 теперь утилита ip . Я не понимаю, зачем пилить отдельные программы для управления сетевыми настройками, если ifconfig и так отлично справляется с задачей. К тому же мне всегда нравилось, что в различных дистрибутивах линукс все примерно одинаковое. С помощью ifconfig можно настроить сеть не только в linux, но и в freebsd. Это удобно. А когда в каждом дистрибутиве свой инструмент это неудобно. Так что предлагаю установить привычный ifconfig.

Сделаем это:

# yum -y install net-tools.x86_64

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

# nslookup

Будет вывод:

Bash: nslookup: command not found

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

# yum -y install bind-utils

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

# mcedit /etc/sysconfig/selinux

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

# reboot

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

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

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

# yum -y install epel-release

Устанавливаем rpmforge:

# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt # yum -y install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

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

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

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

# yum -y install iftop

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

# yum -y install htop # yum -y install atop

Вот как выглядит htop:

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

Заключение

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

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

  1. Пример настройки сервера мониторинга zabbix , либо только подключение centos к мониторингу путем установки на него агента.
  2. Настройка email оповещений zabbix через сторонний smtp сервер.
  3. Подробный мониторинг web сервера на базе nginx + php-fpm.
  4. Система мониторинга сайта на базе zabbix.
  5. Наблюдение за mysql репликацией в zabbix.

Видео по настройке CentOS 7

Зоны

Демон 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: ,

Мы покажем вам пошаговую настройку брандмауэра Firewalld в CentOS 7

Что же такое Firewalld? Это полноценный брандмауэр, который по умолчанию доступен в CentOS 7. Мы покажем вам, как настроить его на сервере, а также расскажем об инструменте firewall-cmd.

1. Какие же базовые понятия у брандмауэра?

Зоны

Firewalld способен управлять группами правил посредством зон. Это набор инструкций для управления трафиком на основе доверия к сетям. Зону можно присвоить сетевому интерфейсу для управления поведения брандмауэра. Это бывает необходимо, ведь ноутбуки могут часто подключаться к различным сетям. Компьютеры могут применять зоны для смены набора правил в зависимости от окружения. Например, если подключаться к Wi-Fi в кафе, можно применять более строгие инструкции. А дома правила могут быть лояльнее.

В Firewalld выделяют такие зоны:

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

Block отличается от drop тем, что при сбросе входящего запроса выдается сообщение icmp-host-prohibited либо icmp6-adm-prohibited;

Зона public является публичной сетью, поддерживающей в индивидуальном порядке входящие запросы. Однако доверять ей нельзя;

External - это зона внешних сетей, поддерживающая маскировку NAT для закрытости внутренней сети. Однако к ней можно получить доступ;

Обратной стороной external является internal. Компьютерам в данной зоне можно доверять, поэтому доступными будут дополнительные сервисы;

Зона dmz востребована для изолированных компьютеров, не имеющих доступа к остальной части сети. В таком случае получится настроить избранные входящие соединения;

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

В зоне trusted доверять можно всем компьютерам сети.

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

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

2. Как включить брандмауэр Firewalld?

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

Sudo systemctl start firewalld.service

Нам нужно убедиться, что сервис запустился. Для этого понадобится:

Firewall-cmd --state running

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

3. Брандмауэрные правила по умолчанию

Как их просмотреть?

Для просмотра зоны, использующейся по умолчанию, нужно набрать:

Firewall-cmd --get-default-zone public

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

Firewall-cmd --get-active-zones public interfaces: eth0 eth1

Мы видим два привязанных сетевых интерфейса к зоне public. Они работают по правилам, указанным для этой зоны. Увидеть правила по умолчанию получится путем:

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;

Public поддерживает удаленное администрирование SSH, а также присваивание IP-адресов DHSP.

Иные зоны брандмауэра

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

Можно также получить параметры для каждой конкретной зоны посредством добавления флага -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

4. Как настроить интерфейсные зоны?

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

Смена зоны интерфейса лишь на одну сессию

Для этой цели нам пригодятся две опции: —change-interface= и —zone=. Для перевода в зону home eth0 наберите:

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

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

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

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

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

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

Sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0

Добавим переменную ZONE= в конец файла. Зададим другую зону в качестве значения:

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

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

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

5. Как сделать правила для приложений?

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

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

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. Выглядят они так:

Для включения поддержки сервисов в зонах нужен флаг -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 появится поддержка порта 80 и HTTP. В случае, когда ваш сервер способен обслуживать SSL/TLS-трафик, получится добавить сервис HTTPS:

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

6. А если сервис недоступен?

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

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

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

Начнем с копирования уже имеющегося сценария из папки /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.

Теперь сохраним изменения и закроем файл. После этого потребуется перезапуск брандмауэра с помощью:

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

Способ №2: Создание порта

Откроем порт приложения в нужной брандмауэрной зоне, и укажем его, а также протокол. Представим себе ситуацию, что нужно добавить в зону public программу, использующую протокол ТСР и порт 5000. Для активации на одну сессию поддержки приложения потребуется опция -add-port=. Кроме того, необходимо указать протокол tcp либо udp:

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

Убедимся, что все получилось:

Firewall-cmd --list-ports 5000/tcp

Кроме того, есть возможность указать диапазон портов посредством тире. К примеру, если программа пользуется портами 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

7. Как создать зону?

Брандмауэр способен предоставить разные предопределенные зоны, которых обычно для работы хватает, однако иногда нужно сделать свою пользовательскую зону. К примеру, серверу DNS нужна зона privateDNS, а для веб-сервера - publicweb. После создания зон ее нужно добавить в настройки брандмауэра. Создадим зоны publicweb и privateDNS набрав в консоли:

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

Проверим, все ли получилось:

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

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

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

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

Теперь получится новым зонам определить порты и сервисы. Допустим, есть необходимость добавить SSH, HTTP и HTTPS в зону publicweb:

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:

Кроме того, получится добавить DNS в зону privateDNS посредством:

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

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

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

Привяжем также eht1 к 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

8. Как сделать автоматический запуск брандмауэра?

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

Sudo systemctl enable firewalld

Это даст возможность включать брандмауэр сразу после запуска сервера.

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