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

Введение

В настоящей статье будет рассмотрен процесс минимальной первоначальной настройки сервера на операционной системе CentOS 7. CentOS - это Linux дистрибутив основанный на Red Hat Enterprise Linux. Как и сам RHEL CentOS известен своей стабильностью и длительным сроком поддержки, который равен 10 годам. Используется преимущественно в серверах. Настраивать мы будем CentOS установленный в минимальном варианте. Рассмотрим процесс минимальной защиты SSH подключения, настройку межсетевого экрана, отключение SELinux,  установку некоторых полезных программ и подключим репозиторий EPEL.

Подключение репозитория EPEL

Репозиторий EPEL (Extra Packages for Enterprise Linux) создан участниками проекта Fedora, содержит достаточно новые версии популярных программ. Пакеты EPEL чаще всего основаны на их аналогах в Fedora. Репозиторий EPEL это в первую очередь дополнительные пакеты для Red Hat Enterprise Linux, но по мимо RHEL поддерживает так же CentOS, Scientific Linux и Oracle Linux. Он включен в репозиторий Extras, который подключен по умолчанию, поэтому установить EPEL не составит никакого труда. Делается это через yum одной командой:

yum install epel-release

Установка EPEL

Установка программ

Установка nano

Nano - текстовый консольный редактор для UNIX-подобных операционных систем, распространяемый под лицензией GNU GPL. Первый выпуск состоялся еще в 2000 году. Достаточно удобен в использовании. Устанавливается из base репозитория.

yum install nano

Установка nano

Что бы открыть текстовый файл в nano нужно выполнить команду вида:

nano /путь к файлу/название файла

Если такой файл существует - откроется его содержимое, если нет - создастся новый файл.

Консольный текстовый редактор nano

Для сохранения изменений необходимо нажать комбинацию клавиш Ctrl+O, для выхода из редактора - Ctrl+X, для поиска по файлу - Ctrl+W. В принципе все команды прописаны в нижней части файла.

Установка Midnight Commander

Midnight Commander - файловый менеджер поддерживающий не только UNIX-подобные операционные системы, но и Microsoft Windows и Mac OS X. Первый выпуск состоялся в 1998 году. С помощью Midnight Commander очень удобно осуществлять навигацию по файловой системе, создавать/удалять каталоги, редактировать файлы и многое другое. Имеет встроенный редактор файлов. Устанавливается из base репозитория.

yum install mc

Установка Midnight Commander

Для того, что бы открыть Midnight Commander нужно ввести команду:

mc

Midnight Commander

При удаленном SSH подключении к серверу навигацию по Midnight Commander можно выполнять с помощью мыши.

Установка net-tools

Net-tools - набор утилит и инструментов для работы с сетью в операционных системах семейства Linux. В CentOS 7 по умолчанию он отсутствует. Устанавливается из base репозитория.

yum install net-tools

Установка net-tools

После установки пакета net-tools станут доступны такие команды как netstat и ifconfig.

Установка htop

Htop - это программа для отображения в терминале информации о запущенных процессах. Является альтернативой программы top, которая доступна по умолчанию. Htop имеет более понятный и удобный интерфейс по сравнению с top. Устанавливается из репозитория EPEL.

yum install htop

Htop

Для запуска htop необходимо ввести команду:

htop

Htop

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

Top

Настройка Firewall

В CentOS 7 для управления брандмауэром используется инструмент FirewallD. Он выступает в качестве внешнего интерфейса межсетевого экрана Netfilter,  встроенного в ядро Linux с версии 2.4. FirewallD предоставляет функционал межсетевого экрана с поддержкой сетевых зон, которые определяют уровень доверия для сетевого соединения или интерфейса. Поддерживает применение конфигурации без  перезагрузки межсетевого экрана. При необходимости FirewallD можно отключить и использовать в качестве утилиты настройки брандмауэра Iptables. Но сегодня речь пойдет именно о стандартном инструменте - FirewallD.

В FirewallD существует 9 предустановленных зон:

  1. Drop - Все входящие соединения сбрасываются без ответа, возможны только исходящие соединения.
  2. Block - Все входящие соединения блокируются, отправителю пакета отправляется сообщение о блокировке. Возможны только исходящие соединения.
  3. Public - Для использования в общественных местах. Разрешены отдельные входящие соединения. По умолчанию это ssh и dhcpv6-client. После установки используется как зона по умолчанию и является единственной активной зоной.
  4. External - Для использования во внешних сетях с активированным режимом маскарадинга. Разрешены отдельные входящие соединения. По умолчанию это только ssh.
  5. Internal - Для использования во внутренних сетях. Разрешены отдельные входящие соединения. По умолчанию это ssh, dhclient, samba-client и mdns.
  6. Dmz - Демилитаризованная зона. Для компьютеров с ограниченным доступом к внутренней сети. Разрешены отдельные входящие соединения. По умолчанию это только ssh.
  7. Work - Для использования в рабочей среде. Разрешены отдельные входящие соединения. По умолчанию это ssh и dhcpv6-client.
  8. Home - Для использования в домашних сетях. Разрешены отдельные входящие соединения. По умолчанию это ssh, dhclient, samba-client и mdns.
  9. Trusted - Для использования в доверенной сети. Разрешены все соединения.

 

Команды FirewallD

  • Статус FirewallD:

firewall-cmd --state

  • Вывод зоны по умолчанию:

firewall-cmd --get-default-zone

  • Изменение зоны по умолчанию:

firewall-cmd --set-default-zone=наименование зоны

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

  • Вывод активных зон и интерфейсов относящихся к данным зонам:

firewall-cmd --get-active-zones

  • Получение списка всех поддерживаемых сервисов:

firewall-cmd --get-services

  • Добавление временного разрешающего правила для сервиса в указанной зоне:

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

Данное правило разрешает http трафик. Вместо http можно указать наименование любого другого сервиса. Такое правило применяется незамедлительно и действует до перезагрузки.

  • Добавление постоянного разрешающего правила для сервиса в указанной зоне:

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

Данное правило действует до его удаления.

  • Добавление временного разрешающего правила для зоны по умолчанию:

firewall-cmd --add-service=http

  • Добавление постоянного разрешающего правила для зоны по умолчанию:

firewall-cmd --permanent --add-service=http

  • Временное правило для открытия порта для указанной зоны:

firewall-cmd --zone=public --add-port=80/tcp

Данное правило открывает 80 TCP порт. Применяется немедленно, действует только до перезагрузки.

  • Постоянное правило для открытия порта для указанной зоны:

firewall-cmd --zone=public --permanent --add-port=80/tcp

  • Вывод списка разрешенных сервисов в указанной зоне:

firewall-cmd --zone=public --list-services

  • Вывод открытых портов в указанной зоне:

firewall-cmd --zone=public --list-ports

  • Временное удаление разрешающего правила для сервиса в указанной зоне:

firewall-cmd --zone=public --remove-service=http

  • Постоянное удаление разрешающего правила для сервиса в указанной зоне:

firewall-cmd --zone=public --permanent --remove-service=http

С удалением правил для открытых портов ситуация аналогичная как и с удалением правил для сервисов:

firewall-cmd --zone=public --remove-port=80/tcp

firewall-cmd --zone=public --permanent --remove-port=80/tcp

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

firewall-cmd --reload

Отключение SELinux

SELinux (Security Enhanced Linux) - это система принудительного контроля доступа. Принудительный контроль доступа - разграничение доступа, которое основано на назначении метки конфиденциальности информации и допуске к информации такого уровня конфиденциальности. SELinux имеет три режима работы:

  • Enforcing — SELinux включен, принудительные правила политики
  • Permissive — SELinux включен, правила политики не принудительные
  • Disabled — SELinux отключен

SELinux - это достаточно серьезный инструмент безопасности. В CentOS, как и в RHEL и Fedora, активен по умолчанию. Включён в состав ядра Linux начиная с версии 2.6. Работа с ним требует определенных навыков, на освоение которых требует время. Поэтому чаще всего SELinux просто отключают когда он начинает мешать, не прибегая к его настройке. Однако отключать его следует только в том случае, когда это действительно необходимо. Во всех остальных случаях лучшим решением будет разобраться в настройке политик SELinux и не отключать его. Проверить статус работы SELinux можно командой:

sestatus

или

getenforce

Если вы все-таки решили его отключить, то выполните:

nano /etc/selinux/config

И замените SELINUX=enforcing на SELINUX=disabled. После этого перезагрузите сервер и проверьте статус. SELinux должен быть отключен.

Защита SSH подключения

SSH (Secure Shell) - это сетевой протокол прикладного уровня, использующейся для удалённого управления операционной системой и передачи данных. Шифрует абсолютно весь трафик, включая передаваемые пароли. В CentOS доступен сразу после установки, в том числе разрешен в брандмауэре. Если ваш сервер доступен из вне, то с большой долей вероятности его постоянно будут пытаться взломать путем подбора паролей. Поэтому необходимо обезопасить себя от взлома и выполнить хотя бы минимальную настройку для предотвращения печального исхода. Об этом и пойдет речь в этом разделе. Я не буду описывать аутентификацию по ключу, хоть она и считается более безопасной, сегодня речь о минимальной настройке.

Отключаем авторизацию под пользователем root

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

nano /etc/ssh/sshd_config

Находим строку #PermitRootLogin yes и меняем ее на PermitRootLogin no. Обратите внимание, что комментария (#) на строке быть не должно. Сохраняем файл и перезапускаем службу ssh:

systemctl restart sshd

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

usermod -G wheel user

Для создания нового пользователя:

adduser user

Затем нужно задать для него пароль:

passwd user

Меняем порт по умолчанию

SSH по умолчанию работает на 22 порту. Именно по этому порту и пытаются подключится к серверу для подбора пароля. Если сменить этот порт на любой другой, то вероятность взлома вашего сервера будет существенно снижена. Перед сменой порта необходимо убедится, что порт который вы собираетесь использовать для SSH не используется другим сервисом. Так же необходимо открыть порт в брандмауэре, иначе вы не сможете подключиться. Для изменения порта открываем тот же самый конфигурационный файл, находим строку #Port 22 и меняем ее на Port 8770. Вместо 8770 необходимо указать номер порта который вы хотите использовать для SSH подключения. Сохраняем файл и перезапускаем службу ssh:

systemctl restart sshd

После перезапуска службы авторизоваться по 22 порту будет невозможно. Теперь для подключения по SSH к серверу необходимо вместо ssh user@ip-адрес вводить команду ssh -p 8770 user@ip-адрес. Если подключаетесь через PuTTY достаточно просто сменить номер порта.

Настройка авторизации с определенного ip-адреса

Запрет на подключение к серверу со всех ip-адресов кроме своего является достаточно эффективной мерой защиты сервера, так как с любого другого адреса подключиться к серверу будет просто невозможно. Для реализации этой меры защиты у вас должен быть статический белый ip-адрес. Если такового нет, то можно вместо ip добавить сеть из диапазона которой вам выдаются динамические адреса. Для этого в файл hosts.allow нужно добавить ваш адрес или сеть:

nano /etc/hosts.allow

Добавляем в конец файла запись для ip-адреса 192.168.0.3:

SSHD: 192.168.0.3

Для всей сети:

SSHD: 192.168.0.0/24

Если нужно указать несколько адресов:

SSHD: 192.168.0.3 192.168.0.5

Теперь открываем:

nano /etc/hosts.deny

И добавляем:

SSHD: ALL

После этого перезагружаем SSH:

systemctl restart sshd

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

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

Заключение

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

Читайте также:

Оставить комментарий