# Первичная настройка сервера на CentOS 8

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

В этой инструкции мы расскажем, как подготовить к работе только что созданный сервер под управлением CentOS 8. Мы создадим нового пользователя, наделим его правами администратора, настроим фаервол и аутентификацию по ключу при подключении к серверу по SSH.

# Основные особенности

В настройке сервера под управлением CentOS 8 есть несколько принципиальных отличий от настройки сервера на предыдущей версии CentOS 7.

Во-первых, разработчики сменили пакетный менеджер, использующийся при загрузке программных пакетов. На смену YUM пришёл более быстрый и менее требовательный к оперативной памяти DNF.

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

# Создание нового пользователя

Первым пользователем, созданным на сервере, по умолчанию является root — пользователь с правами администратора. Крайне не рекомендуется заходить на сервер от имени root-пользователя на постоянной основе — серверу можно нанести серьёзный ущерб даже просто по неосторожности. Чтобы избежать этого, мы создадим нового пользователя и наделим его sudo-привилегиями — позволим ему запускать некоторые команды от имени администратора.

Создадим нового пользователя:

adduser User

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

passwd User

Теперь у нас есть рядовой пользователь. Чтобы разрешить ему выполнять команды от имени администратора, добавьте его в группу wheel:

usermod -aG wheel User

После добавления нового пользователя в группу wheel ему нужно будет только ввести в начале строки sudo, и команда запустится от имени администратора.

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

su User

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

# Установка и настройка фаервола

В качестве фаервола CentOS использует утилиту FirewallD. Начнём с её установки:

sudo dnf install firewalld

Для установки мы используем пакетный менеджер DNF, пришедший на смену YUM в CentOS 8.

Как мы уже говорили выше, при установке firewalld устанавливается nftables — обновлённая версия iptables. При этом после установки nftables не запускается, что приводит к ошибкам в работе FirewallD, поэтому для корректной работы фаервола нужно сначала запустить nftables:

sudo systemctl start nftables

Далее — активировать его, чтобы он запускался после перезагрузки сервера:

sudo systemctl enable nftables

Теперь проверим его статус, чтобы убедиться, что он работает:

sudo systemctl status nftables

Проверяем, что в окне выдачи есть сообщения enabled и active, и переходим непосредственно к фаерволу.

По умолчанию в первичные настройки FirewallD уже включён SSH-протокол, поэтому запускать фаервол можно сразу после установки (в отличие от UFW на Ubuntu, в котором SSH нужно сначала добавить в список разрешённых приложений):

sudo systemctl start firewalld

Теперь проверьте статус фаервола командой:

sudo systemctl status firewalld

На экране появится сообщение, что фаервол запущен и активен (enabled, active).

# Настройка FirewallD

Управление и настройка фаервола осуществляются с помощью утилиты «firewall-cmd».

Для начала проверим, какая зона (группа правил) установлена по умолчанию:

sudo firewall-cmd --get-default-zone

Сразу после установки по умолчанию задана зона public. Это стандартная зона, применяемая для публичных сетей, к которым нет доверия — фаервол не доверяет никаким компьютерам в сети и может разрешать отдельные входящие соединения на единоразовой основе.

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

sudo firewall-cmd --list-all

В результате на экране появится примерно такой результат:

public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Как видим из выдачи, в список разрешённых служб уже добавлены cockpit (веб-интерфейс управления сервером), dhcpv6-client (DHCP v6-клиент) и ssh.

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

sudo firewall-cmd --get-services

Результатом команды станет длинный список доступных для добавления служб. Добавить одну из них в текущую зону можно командой --add-service:

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

В данном случае мы добавили к списку разрешённых службы http. Флаг --permanent означает, что служба добавлена на постоянной основе. В firewalld есть возможность временно добавлять правила и службы, в этом случае после перезагрузки фаервола они отменяются и удаляются.

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

sudo firewall-cmd --reload

# SSH-подключение с аутентификацией по ключу

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

# ОС Windows

Для создания шифрованного подключения с аутентификацией по ключу на ОС Windows нужен клиент для SSH-подключения (например, PUTTY), утилиты для генерации самого ключа и для его автоматического использования (PuTTY Key Generator и Pageant).

Сначала сгенерируем публичный и частный ключи. Для этого запустим PuTTYgen и в пункте меню Key укажем параметр «SSH-2 RSA key». Нажмём Generate и сделаем несколько движений мышью в определённой области экрана — на основании наших движений будут генерироваться числа для ключей.
После этого в окне «Public key for pasting...» появится публичный ключ, который нужно будет поместить на сервер.

Мы сделаем это с помощью SSH-подключения и текстового редактора vi:

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

    cd ~
    
  • Теперь создадим папку «.ssh»:

    mkdir .ssh
    
  • Перейдём в эту папку:

    cd .ssh
    
  • Создадим здесь файл «authorized_keys»:

    vi authorized_keys
    
  • Поместим в этот файл публичный ключ из окна «Public key for pasting...» утилиты PuTTYgen.

  • Сохраним только что созданный файл.

  • Удалим все права и зависимости, которые могли случайно привязаться к этой папке:

chmod -R go- ~/.ssh
  • Передадим права на эту папку нашему пользователю:
chown -R user:user `/.ssh

Возвращаемся к PuTTYgen.

В поля «key passphrase» и «confirm passphrase» можно ввести пароль, который будет проверяться перед проверкой частного ключа (дополнительная ступень безопасности).

Теперь сохраним на компьютере публичный ключ (Save Public Key) в формате .txt и частный ключ (Save Private Key) в формате .ppk.

В окне утилиты Pageant выберем файл нашего частного ключа (Add key), укажем пароль (passphrase) и активируем его.

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

Чтобы отключить аутентификацию по паролю, отредактируем файл конфигурации SSH. Откроем его в текстовом редакторе:

vi /etc/ssh/sshd_config

Далее укажем значение параметра PasswordAuthentication no. Раскомментируем (уберём #) параметр Public Key Authentication и укажем yes. Также укажем файлы публичных ключей в строке AuthorizedKeysFile.

Теперь осталось только перезапустить службу SSH, чтобы все внесённые изменения вступили в силу:

sudo systemctl restart sshd

# Linux

Если у вас unix-подобная система, то процесс генерирования пар ключей будет производиться с помощью терминала:

ssh-keygen

Затем в терминале появится запрос «указать путь», по которому будут сохранены ваши ключи, и затем запрос на кодовое слово (passphrase), которое усилит защиту вашего приватного ключа.

После этого появится сообщение о том, что публичный и приватный ключи успешно сгенерированы.

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

Теперь наш сервер готов к полноценной работе: на него можно устанавливать любое программное обеспечение, запускать на нём сайты или веб-приложения.