Centos 7 первоначальная настройка. Firewalld - установка, настройка, команды
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 после установки. Как видите, есть много элементарных действий, которые желательно сделать перед тем, как использовать сервер на производстве. Если у вас остались вопросы, спрашивайте в комментариях!
Порой появляется потребность установить и настроить сервер Centos, работающий по SSH протоколу. Цели бывают самые разные: от создания веб-сервера до серверного мониторинга. Но при этом настройка и установка сервера Centos всегда происходит примерно одинаково. Потому в данной статье вы найдете универсальные решения для вашего запроса, и сможете использовать описанные советы для разных ситуаций, когда нужно сгенерировать SSH сервер.
Настройка самого сервера Centos — стандартные шаги
Какой бы вы не установили сервер, вам в любом случае нужно будет выполнить ряд стандартных настроек, чтобы установка прошла успешно. Во-первых, вам нужно позаботиться о том, чтобы на сервере была верно указана дата, и чтобы она автоматически обновлялась при переходе на летнее или зимнее время. После этого можете подготовить сервер для удобства управления, к примеру, установите Midnight Commander, чтобы было проще прописывать команды. Также не забудьте обновить Centos, чтобы он корректно работал (команда для обновления: yum -y update). После введенных изменений обязательно перезапустите сервер, чтобы новые конфигурации вступили в силу: reboot.
Настройка и установка OpenSSH в Centos
Чтобы можно было создать сервер с SSH протоколом, необходима установка OpenSSH. Это весьма популярная программа для создания серверов и подключения к ним клиентом. Установка OpenSSH происходит из консоли при помощи следующей команды: yum install openssh-server. Но куда важнее правильная настройка, чем установка, так как по умолчанию созданный вами сервер Centos хоть и будет работать по защищенному протоколу SSH, но не будет считаться безопасным.
Первым делом вам необходимо определиться с IP-адресами, которые будут пользоваться SSH сервером. Настройка разрешенных и запрещенных адресов происходит в iptables, где вы указываете семейства IP, а также конкретные адреса, для которых вход разрешен. Это хороший способ обеспечить безопасность вашему хосту SSH. Запрещать доступ можно при помощи строки host.deny, а разрешать при помощи host.allow.
Основная настройка сервера заключается в редактировании файла конфигураций /etc/ssh/sshd_config. Именно в нем находятся самые сильные и самые слабые стороны протокола SSH. По умолчанию сервер не защищен, так как в нем даже порт указан стандартный. А это отличная лазейка для подборщиков паролей, которые могут взломать аккаунты клиентов вашего сервера. Вы можете закомментировать стандартный порт 22 и указать новое его значение, чтобы подборщики не смогли даже попасть на страницу авторизации для перебора паролей.
Следующий важный штрих настроек — это запрет входа для root-пользователя. Если все же подборщикам удастся попасть к вам на сервер и они смогут войти в качестве суперадминистратора, то все закончится очень плохо. Они распространят вирус по сети, заразив тем самым компьютеры других клиентов навязчивой рекламой и прочими вредоносными программами. Кругом будет спам, попапы и полный произвол. А вся важная информация будет украдена. Так что пропишите в файле конфигураций возле PermitRootLogin слово «no», чтобы root-пользователь не зашел к вам «в гости» на хост.
Чтобы окончательно побороть взломщиков аккаунтов сервера, вы можете перенастроить параметры аутентификации, а точнее параметры сессии авторизации.
Сделайте так, чтобы у них не хватало времени на подбор паролей. К примеру, уменьшите количество попыток для ввода паролей до возможного минимума возле строки MaxAuthTries. Также ограничьте длительность авторизации для всех пользователей при помощи функции LoginGraceTime. Обязательно укажите в файле конфигураций следующее: PermitEmptyPasswords no. Это запретит клиентам заходить на хост с пустым паролем, что весьма полезно, ведь обратная настройка — это аналогично тому, если бы вы сами приглашали грабителей к себе в дом.
Если на вас напали хитрые подборщики паролей, которые создают множество ботов в попытке завладеть аккаунтом клиента, то вы можете активировать автоматическую блокировку роботов. Для этого в файле /etc/pam.d/system-auth пропишите следующую строку: auth required pam_abl.so config=/etc/security/pam_abl.conf. Она активирует pam-модуль, который будет автоматически вносить ip-адреса в таблицу запрещенных в iptables. В ином случае вам бы пришлось заниматься этим вручную, что весьма надоедает со временем.
И последний хороший способ, как обезопасить ваш сервер Centos — это изменение способа аутентификации. Куда лучше использовать вместо привычного пароля публичный ключ. Клиенты будут генерировать ключ у себя на компьютере, а потом зарегистрирует его у вас на сервере. В итоге, подборщики не смогут перехватить пароли, пускай они и зашифрованные, и ваш хост будет в безопасности!
В данной статье будет описано, как настроить свежую систему для безопасной работы. Особенно актуально для тех, кто собирается хостить что-то либо на своей машине, либо открывать доступ к компьютеру извне. Итак, начнем.
SELinux
SELinux - это реализация системы принудительного контроля доступа, которая может работать параллельно с классической избирательной системой контроля доступа. Весьма полезный инструмент для гибкой и точной настройки безопасности. Многие считают, что его нужно сразу отключать и не использовать вообще. В этой статье мы не будем рассматривать его конфигурирование. Временно отключим SELinux, материала о его настройке достаточно для отдельной статьи.
Файл конфигурации находится в /etc/sysconfig/selinux. Открываем его текстовым редактором и правим строчку:
#nano /etc/sysconfig/selinux SELINUX = Enforcing Disabled
Тем самым вы переведете режим работы SELinux в «отключить». Для применения настройки необходимо перезагрузиться командой:
#systemctl reboot
Firewalld
Firewalld предоставляет функциональность динамически управляемого брандмауэра с поддержкой сетевых зон, призванных определить уровень доверия для сетевого соединения или интерфейса. Он имеет поддержку настройки межсетевого экрана IPv4, IPv6 и сетевых мостов, а также разделяет среду выполнения и параметры конфигурации. Firewalld также имеет интерфейс для добавления правил брандмауэра непосредственно из служб и приложений.
По умолчанию Firewalld включен, а все порты считаются закрытыми. Если вам необходимо открыть какой-либо порт, воспользуйтесь командой:
#firewall-cmd --permanent --zone=public --add-port=80/tcp
В данном случае 80 - номер порта, который необходимо открыть (подставьте нужный). Порты будут открытыми до тех пор, пока вы их сами не закроете, или пока не отключите Firewalld. Firewalld отключается командами:
#systemctl stop firewalld #systemctl disable firewalld
#firewall-cmd --permanent --zone=public --add-port=12345/tcp
То же самое необходимо проделать для каждого порта, который вы планируете держать открытыми. Если какой-либо порт уже не будет использоваться вами в будущем, лучше всего его закрыть командой:
#firewall-cmd --permanent --zone=public --remove-port=12345/tcp
Fail2ban
Fail2ban — это система для защиты сервера от брутфорс-атак (атаки с перебором пароля). Принцип работы заключается в том, что если в течение определенного времени было n неудачных попыток авторизации, то ip-адрес, с которого были предприняты попытки авторизации заносится в бан-лист. Данная система просто необходима, т.к. без него к вашему серверу могут получить доступ. Fail2ban следит за указанными портами, например SSH — 22 (стандартный, желательно изменить на свой). Fail2ban настраивается через конфигурационный файл. Ниже инструкция о том, как установить и настроить Fail2ban.
Для начала необходимо подключить репозиторий EPEL, пакет Fail2ban находится там. Делаем это командой:
#rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
#yum install fail2ban
После установки производим настройку Fail2ban. Конфигурационный файл находится здесь — /etc/fail2ban/jail.conf , но, как сказано в комментариях в его начале, данный файл рекомендуется не изменять, вместо этого нужно создать локальную копию /etc/fail2ban/jail.local . И в дальнейшем править конфигурацию именно в нем.
#cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local #nano /etc/fail2ban/jail.local
Конфигурационный файл содержит множество секций, сначала обратим внимание на . В данной секции указаны настройки по умолчанию, если Fail2ban настроен для работы различных сервисов и там не прописаны правила для них, то параметры будут браться отсюда. Приведу пример настроек:
Ignoreip = 127.0.0.1/8 192.168.1.10/24 bantime = 900 findtime = 600 maxretry = 6
ignoreip - означает, какие ip-адреса будут игнорироваться при отслеживании. Указываем здесь localhost, а также, через пробелы вы можете указать дополнительные ip-адреса, например адрес другого вашего компьютера в локальной сети, за которым вы постоянно работаете. Можно также указывать внешние ip-адреса, но, в таком случае, безопасность снижается.
bantime - время, на которое указанный ip-адрес попадет в бан-лист. Время указывается в секундах. Для постоянного бана достаточно указать любое отрицательное число.
findtime - время, в течение которого после неверной попытки авторизации будет производится слежение за данным ip-адресом. Если за время findtime совершится maxretry попыток неудачной авторизации, то ip-адрес попадет в бан-лист.
maxretry - максимальное количество неверных попыток авторизации за время findtime. При достижении этого порогового значения ip-адрес будет занесен в бан-лист.
Далее спускаемся ниже и находим раздел JAILS , в нем описывается, какие сервисы и порты нужно мониторить, и что с ними делать в случае срабатывания защиты. Также в каждой секции можно определить свои параметры bantime, findtime, maxretry, а если они не указаны, то параметры берутся из секции . Ищем интересующие нас секции и редактируем их, мы настроим слежение за сервисом SSH. Для этого переходим к секции , дописываем в нее строчку «enabled = true» , и меняем порт на назначенный нами ранее:
Enabled = true port = 12345 action = iptables-multiport logpath = %(sshd_log)s
Запускаем сервис fail2ban и добавляем его в автозагрузку:
#systemctl start fail2ban #systemctl enable fail2ban
На этом базовая настройка безопасности заканчивается. Теперь можно спокойно открывать доступ к серверу по SSH. Если какой-либо злоумышленник попытается использовать брутфорс для получения доступа к вашему серверу по SSH, то у него ничего не выйдет — его ip-адрес будет блокироваться. Все остальные порты защищены с помощью firewalld.
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!
Если все же вы хотите вернуть прошлое и заменить 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
Зоны
Демон 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 и выглядят так:
Чтобы включить поддержку сервиса в той или иной зоне, используйте опцию —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:
Большую часть определения сервиса составляют метаданные. Изменить краткое имя сервиса можно в тегах
Вернёмся к сервису example; допустим, он требует открыть TCP- порт 7777 и UDP- порт 8888. Определение будет выглядеть так:
Сохраните и закройте файл.
Перезапустите брандмауэр:
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: ,