Что нового

Установка и настройка сервера Ubuntu 24

В этой статье я расскажу основные шаги установки и базовой настройки Ubuntu 24: установка, обновление списка пакетов, создание пользователя с правами sudo, настройку SSH-доступа, конфигурацию firewall и установку необходимого программного обеспечения. Эти действия помогут подготовить сервер к дальнейшей работе и снизить потенциальные риски безопасности.

Содержание

Установка​

Саму систему беру тут
Загрузившись с образа вижу опции загрузки:

ubuntu 24 install 1.png


Здесь уже выбрано по умолчанию, то что нужно Try or Install Ubuntu Server

Нажимаю Enter

Далее мне предлагают выбор языка:
ubuntu 24 install 2.png



Оставляю по умолчанию английский. Нажимаю Enter

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


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

ubuntu 24 install 3.png



Нажимаю Done

Далее, варианты установки. Я выбираю minimized - минимальный дистрибутив. Отмечаю его клавишей пробел. И нажимаю Done. Все остальное ставить буду сугубо по потребностям.

ubuntu 24 install 4.png


Далее настройка сети

Здесь условно я выделю два базовых сценария настройки:

1. автоконфигурация по DHCP, выглядит так, это для домашнего тестового сервера можно использовать. Если этого достаточно нажимаю Done
2. ручная настройка сети, её рассмотрю чуть подробнее

ubuntu 24 install 5.png



для этого выбираю первую строчку с eth > Edit IPv4
ubuntu 24 install 7.png



Выбираю Manual

ubuntu 24 install 8.png


И вписываю данные полученные от провайдера:

ubuntu 24 install 9.png


Обычно известны:
ip адрес
шлюз
dns


Кратко что где
Поле Subnet это подсеть, узнаю у провайдера или тут зная ip, захожу пишу свой ip в поиск и получаю точно подсеть
Поле Address это мой ip
Поле Gateway это шлюз
Поле Name servers это dns, можно указать как провайдерские так и другие публичные гугла или яндекса, обычно две штуки через запятую
Search domians не указываю так как в моем случае публичный сервер

Указываю, если:
  • есть локальный DNS-сервер (Pi-hole, свой BIND, роутер с dnsmasq и т.д.), и в нём настроены короткие имена хостов.
  • в сети используются имена вида имя_хоста.локальный_домен (например, home.lan, internal.company, lab.local, домен Active Directory и т.п.).
  • нужно чтоб работали команды типа ping nas, ssh printer, ssh db01 без указания полного имени.

Теперь нажимаю save
ubuntu 24 install 10.png

и далее Done


Далее выбор прокси, не указываю, жму Done
ubuntu 24 install 11.png


Далее выбор "зеркала"

ubuntu 24 install 12.png


Так же, оставляю по умолчанию, Done


ubuntu 24 install 13.png


и сразу подтверждаю Continue

Далее предлагают разметку диска

ubuntu 24 install 14.png



Несмотря на скромный размер 25 GB все равно задам разделы руками

Выбираю Custom storage layout

ubuntu 24 install 15.png



И нажимаю Done

Выбираю free > Add GPT Partition

ubuntu 24 install 16.png



Указываю разделу /boot 512M ext4 файловая система (Format) и нажимаю Create

ubuntu 24 install 17.png


Аналогично выделяю 4 гигабайта для swap (форумула простая swap = ram)

ubuntu 24 install 18.png

  • Swap (своп) — это область подкачки, то есть место на диске, которое операционная система использует как «виртуальную память», когда не хватает оперативной памяти (RAM).
    Проще говоря: когда RAM заполняется, система временно переносит менее используемые данные в swap, освобождая оперативную память для активных процессов.
  • Его размер должен зависеть от объёма RAM и характера нагрузки
    RAMРекомендуемый swap
    до 2 ГБ2× RAM
    2–8 ГБ≈ равен RAM
    8–32 ГБ4–8 ГБ
    32+ ГБ2–4 ГБ или вообще без swap (по ситуации)
Все остальное место отдам под root /

ubuntu 24 install 19.png



Ничего не указывая выбираю Create
Итог получаю такой:

ubuntu 24 install 20.png


Нажимаю Done и подтверждаю Continue

ubuntu 24 install 21.png


Далее указываю имя, сервер и пароль

ubuntu 24 install 22.png

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

Далее предлагается обновление, пропускаю (Skip) и нажимаю Continue

ubuntu 24 install 23.png


Далее установка Openssh server, без него не смогу подлючиться к серверу по ssh

ubuntu 24 install 24.png


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

Отмечаю install OpenSSH и нажимаю Done

Далее идет предложение установки дополнительных опций

ubuntu 24 install 25.png


Ничего не отмечаю нажимаю Done

И процесс установки пошел

ubuntu 24 install 26.png


По завершении установки, я вижу

ubuntu 24 install 27.png


Нажимаю тут Reboot Now

На этом установка подходит к концу
Если будет ошибка Failed unmounting cdrom.mount - /cdrom то означает, что система не смогла отмонтировать виртуальный CD-ROM при завершении установки или перезагрузке

ubuntu 24 install 28.png


Просто нажимаю Enter. На этом установка завершена.

После установки сервера на базе Ubuntu 24 важно выполнить первичную настройку, чтобы обеспечить стабильную, безопасную и удобную работу системы. Правильно сконфигурированный сервер — это основа для размещения сайтов, приложений, баз данных и других сервисов.

Подключение к серверу по SSH​

На Linux открываю терминал и пишу
Bash:
ssh guru@192.145.97.139
где guru это созданный мной пользователь, если пользователь не создавался, а я уже получил готовый сервер, то в качестве логина будет root
192.145.97.139 ip адрес сервера

если порт по умолчанию не 22, то команда будет такой
ssh guru@192.145.97.139 -p3022

где 3022 это мой реальный порт

@ это разделитель
(Это стандартный синтаксис почти всех SSH-клиентов (и на Linux, и на Windows, и на macOS). Он пришёл из очень старых сетевых протоколов (ещё из времён rlogin и finger в 80-х), и до сих пор используется везде)
на вопрос Are you sure you want to continue connecting (yes/no/[fingerprint])? пишу yes
далее ввожу пароль
и я вошел
ubuntu 24 install 29.png


теперь нужно переключится в root, для этого пишу
Bash:
sudo -s
ввожу пароль пользователя guru и я root

ubuntu 24 install 30.png


знак $ это права пользователя, знак # это права root


Сразу проверю ssh

systemctl status ssh

в ответ вижу:

ubuntu 24 install 31.png


Все работает

Включаю ssh в автозагрузку (скорее по привычке, поскольку он все равно запуститься)
systemctl enable ssh

Снова проверяю и вижу systemctl status ssh
rootlocalhost homeguru.jpg


Вот теперь совсем хорошо

На windows открываю командную строку и пишу как и выше ssh guru@192.145.97.139 и далее все аналогично.
Если на windows не удалось подключение к серверу, веротяно нет OpenSSH Client

Пошаговый алгоритм для Windows 10​


Шаг 1: Проверяю и установливаю OpenSSH Client (если ещё не стоит)​

  1. Нажимаю Win + I → открываю Параметры (Settings).
  2. Перехожу в ПриложенияПриложения и возможности (Apps → Apps & features).
  3. Прокручивая вниз и нажимаю Дополнительные компоненты / Управление дополнительными компонентами (Manage optional features / Optional features).
  4. Нажимаю Добавить компонент / Добавить возможность (Add a feature).
  5. В поиске ввожу OpenSSH или OpenSSH Client.
  6. Если видно OpenSSH Client в списке:
    • Если установлен — просто пропускаю.
    • Если не установлен — выбераю его → Установить / Добавить (Install / Add). Установка займёт 20–60 секунд, интернет нужен только в этот момент.
Альтернативно через PowerShell (быстрее):
  • Запускаем PowerShell от имени администратора (правой кнопкой на Пуск → Windows PowerShell (администратор)).
  • Проверяю наличие:
    Bash:
    Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'


  • Если State = Installed — готово.
  • Если NotPresent — установим:
    Bash:
    Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

  1. Нажимаю Win + I — откроются Параметры (Settings).
  2. Перехожу в раздел ПриложенияДополнительные возможности (Apps → Optional features).(В некоторых сборках: СистемаДополнительные возможности или прямо поиск по «Дополнительные возможности»).
  3. Нажимаю Просмотреть возможности / Добавить возможность / Добавить компонент (View features / Add a feature — кнопка обычно вверху).
  4. В строке поиска ввожу OpenSSH или OpenSSH Client.
  5. Нахожу пункт OpenSSH Client:
    • Если он уже в списке установленных — перехожу к шагу 2.
    • Если нет — ставлю галочку / выберите его → жму Далее / Установить / Добавить (Install / Add).
  6. Жду 20–90 секунд (иногда требует интернет для загрузки пакета). Перезагрузка не нужна.

Альтернатива через PowerShell (если GUI неудобно):
  • Запускаю PowerShell от имени администратора (правой кнопкой на Пуск → Windows PowerShell (администратор) или Terminal (администратор)).
  • Проверяю наличие:
    Bash:
    Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'


  • Если State = Installed — готово.
  • Если NotPresent — ставлю:
    Bash:
    Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Альтернативный вариант использовать PuTTY: бесплатный SSH и Telnet-клиент
Беру тут или здесь
Запускаю в окне в поле Host name or Ip пишу мой ip порт 22 по умолчанию и нажимаю Open
ввожу логин, ввожу пароль и вхожу

На этом процесс подключения по ssh завершен.

Обновление списка доступных пакетов​

Делаю обновление
Bash:
apt update && apt upgrade
И даю подтверждение Y

Установка некоторых полезных инструментов​

Ставлю net-tools
Bash:
apt install net-tools

netstat был заменён более быстрым, современным и мощным инструментом ss (из пакета iproute2, который установлен по умолчанию).
iproute2 позволяет давать команду
Bash:
ss -ltnup

а netstat позволяет давать команду
Bash:
netstat -ltnup

Ставлю htop удобный монитор процессов
Bash:
apt install htop

применение
Bash:
htop

Cтавлю редактор vim

Bash:
apt install vim


Настройка баш​


Bash:
vi ~/.bashrc

Добавляю или заменяю некоторые параметры
нажимаю клавишу i
Код:
HISTSIZE=50000
HISTFILESIZE=100000
export HISTTIMEFORMAT="%h %d %H:%M:%S "
PROMPT_COMMAND='history -a'
export HISTIGNORE="ls:ll:history:w:htop:pwd"

нажимаю ESC и пишу :wq! нажимаю Enter

Применяю
Bash:
source ~/.bashrc

СтрокаЧто делает
HISTSIZEСколько команд хранить в памяти сессии
HISTFILESIZEМаксимальный размер файла ~/.bash_history
HISTTIMEFORMATФормат времени при выводе history
PROMPT_COMMAND='history -a'Сразу писать каждую команду в файл
HISTIGNOREКакие команды вообще не сохранять



Настройка времени​


Выставляю время

Bash:
timedatectl set-timezone Europe/Moscow

Проверяю что получилось

Bash:
timedatectl

Для получения всех часовых поясов ввожу
Bash:
timedatectl list-timezones

Для автоматической синхронизации времени используется лёгкий демон systemd-timesyncd

Включаю/проверяю командой:


Bash:
# Включаю синхронизацию (если выключена)
sudo timedatectl set-ntp true

# или то же самое, но более явно
sudo systemctl enable --now systemd-timesyncd

Проверка
Bash:
timedatectl status


Вывод должен быть таким

Если System clock synchronized: yes и NTP service: active — всё отлично, время будет синхронизироваться автоматически.

Добавление пользователя с правами sudo​

Ввожу команду
Bash:
adduser --gecos "" devuser && usermod -aG sudo devuser

--gecos "" — пропускает вопросы о полном имени и т.д.
devuser — имя пользователя
Задаю пароль и готово

Удаление пользователя​


Сначала закрою его сессии (если есть)
Bash:
pkill -u devuser1

Затем собственно удаляю
Bash:
deluser --remove-home devuser1
или
userdel -r devuser1
Проверяю командой id devuser1
Должно выдать id: ‘devuser1’: no such user

Настройка SSH​


Здесь важно сделать минимум:

1. Сменить порт
2. Явно запретить вход root

Bash:
vi /etc/ssh/sshd_config

Нажимаю клавишу i
Закомментирую строку Include /etc/ssh/sshd_config.d/*.conf
Я сторонник того чтоб все было в одном конфиге
Просто добавлю перед знак #

Далее раскомментирую строку Port 22 убрав знак # и меняю порт 22
Теперь у меня будет Port 3022

Далее нахожу строку
#PermitRootLogin prohibit-password
Меняю её на
PermitRootLogin no
Под ней пишу
PasswordAuthentication yes

В данный момент sftp не нужен поэтому отключу его
Найду строку Subsystem sftp /usr/lib/openssh/sftp-server
Закомментирую её #Subsystem sftp /usr/lib/openssh/sftp-server
Всё, закончил редактировать sshd_config.
Теперь нажимаю ESC и пишу :wq! нажимаю Enter это сохранит и запишет изменения
Перед перезапуском ssh обязательно проверю firewall, в противном случае могу потерять доступ к серверу

В Ubuntu 24 использоваться для работы с firewall будет UFW

Ввожу
Bash:
ufw status verbose

Если получаю в ответ ufw: command not found или Status: inactive все хорошо

Если же он работает тогда надо изменить порт и в нем

Разрешаю новый порт

Bash:
ufw allow 3022/tcp

Проверяю
Bash:
ufw status numbered

Убеждаюсь, что правило с портом 3022/tcp появилось.

Теперь перезапускаю ssh двумя командами
Bash:
systemctl daemon-reload
systemctl restart ssh.socket
Пробую подключение с новым портом.

Если все хорошо удаляю старый порт

Bash:
ufw delete allow 22/tcp

Настройка ufw firewall​


В моем случае у меня минимальный дистрибутив, только что установленный и никакого firewall нет.

Значит ставлю. Публичный серевер без firewall = безопасность прощай.

Bash:
apt install ufw -y

Проверяю
Bash:
ufw --version

Ответ должен быть такой
HTML:
ufw 0.36.2
Copyright 2008-2023 Canonical Ltd.

Далее набор команд c # комментами
Bash:
# Разрешаю SSH (очень важно, если подключение по SSH!)
ufw allow 3022/tcp

# Политики по умолчанию
ufw default deny incoming  # запрещаю все входящие подключения кроме правила выше
ufw default allow outgoing # разрешаю все исходящие подключения

# Включаю файрвол
ufw enable

Проверяю
Bash:
ufw status verbose

Должно быть
HTML:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
3022/tcp                   ALLOW IN    Anywhere
3022/tcp (v6)              ALLOW IN    Anywhere (v6)

На этом настройка ufw закончена

Защита ssh с помощью firewall через ufw​


Тут все просто я закрою доступ к ssh напрямую для моих ip с помощью ufw

Добавлю правила (я добавляю не менее трёх). Свой домашний статический ip и пару vpn
Узнать свой ip можо тут
Выглядит это так:
Bash:
ufw allow from 127.0.0.1      to any port 3022 proto tcp
ufw allow from 127.0.0.2      to any port 3022 proto tcp
ufw allow from 127.0.0.3      to any port 3022 proto tcp

Где 127.0.0.1 - это моя купленная у провайдера статика (в обычном случае он будет динамическим), а 3022 порт ssh

Далее смотрю текущие правила и их номера

ufw status numbered

Вижу такой список
Код:
     To                         Action      From
     --                         ------      ----
[ 1] 3022/tcp                   ALLOW IN    Anywhere
[ 2] 3022/tcp                   ALLOW IN    127.0.0.1
[ 3] 3022/tcp                   ALLOW IN    127.0.0.2
[ 4] 3022/tcp                   ALLOW IN    127.0.0.3
[ 5] 4047/tcp (v6)              ALLOW IN    Anywhere (v6)

Проверяю подключение в новой сессии (не закрывая текущую). Если подлючился - успех.

Теперь удаляю правило номер [ 1] 3022/tcp ALLOW IN Anywhere
и правило номер [ 5] 4047/tcp (v6) ALLOW IN Anywhere (v6)


Для этого использую команду ufw delete 1
Снова проверяю ufw status numbered
и аналогично удаляю правило для v6, это правило для протокола IPv6 который у меня не используется. Теперь подключиться с ip адресов не из моего списка не выйдет.

Защита SSH fail2ban​


Бывет что нельзя закрыть ssh на файрвол, но безопасность нужна все равно. Доступ может быть нужен разработчику которого только что привлекли для срочной доработки проекта. Или это может быть приложение которому нужен стандартнй порт и прямой доступ. В этом случае нам поможет fail2ban. Он просто читает логи и выписывает «путёвки в бан» тем, кто слишком активно пытается подобрать пароль к моему SSH.

Устанавливаю apt install fail2ban
Добавляю в автозагрузку systemctl enable fail2ban

В Fail2ban есть файл /etc/fail2ban/jail.conf, но его нельзя редактировать напрямую, так как при обновлении программы он перезапишется. Я создам его локальную копию
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Теперь открою созданный файл для редактирования:
vi /etc/fail2ban/jail.local
Нужно изменить в секции [DEFAULT] параметры:
ignoreip: мой IP (через пробел), чтобы случайно не забанить самого себя. Например: ignoreip = 127.0.0.1/8 ::1 127.0.0.2 127.0.0.3
Примечание: ignoreip 127.0.0.1/8 ::1 это локальный хост, стоит оставить, а вместо этого 127.0.0.2 127.0.0.3 пишу свои реальны ip'ы
bantime: на сколько времени баним (например, 1h — один час, или 10m — 10 минут или 1y — 1 год, или -1 — вечно).
findtime: окно времени, в течение которого считаются попытки (9000m).
maxretry: количество неудачных попыток до бана (ставлю 5).

Теперь пролистываю конфиг до [sshd]
Убеждаюсь что там есть

Bash:
[sshd]
enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Поскольку я менял стандартный порт SSH (с 22 на 3022), указываю его в строке port = 3022.
Заменяю вот это backend = %(sshd_backend)s* на backend = systemd
*поскольку классический файл логов /var/log/auth.log по умолчанию отсутствует, так как система теперь хранит все логи в бинарном виде в systemd journal.

Рабочий конфиг выглядит так:
Bash:
[sshd]
port    = 3022
logpath = %(sshd_log)s
backend = systemd

Сохраняю и перезапускаю и проверяю systemctl status fail2ban
rootlocalhost homeguru.jpg


Теперь проверю "путёвки в бан"
Меняю свой ip и пробую подключение. Перед этим точно убеждаюсь что сам не потеряю доступ к серверу.
После нескольких неверных попыток захожу и смотрю fail2ban-client status sshd
ban ip.png

Если в строке Currently failed или Total failed появятся цифры, значит, он успешно читает журнал и «ловит» ботов. Здесь вижу чтоб путёвка вручена. Все работает.

Для разбана в ssh использую команду fail2ban-client set sshd unbanip 37.252.4.124
Для разбана всех ip в ssh fail2ban-client set sshd unbanip --all
  • Мне нравится
Реакции: Sindbad
Об авторе
Guru
Василий, cистемный админ /gnu/linux/windows/macos/mikrotik/troubleshooter, создатель сайта
Интересуюсь всем что делает инфраструктуру быстрой и надёжной
Открыт к общению и проектам, написать мне можно через форму или в личном сообщении

❗ Если есть пожелания по обзору какого-либо вопроса не представленного на сайте - пиши в комментариях

Комментарии

Информация о статье

Автор
Guru
Время чтения статьи
9 мин чтения
Просмотры
855
Комментарии
2
Посл. обновление

Ещё от Guru

Поделиться этой статьёй

Назад
Верх