В этой статье я расскажу основные шаги установки и базовой настройки Ubuntu 24: установка, обновление списка пакетов, создание пользователя с правами sudo, настройку SSH-доступа, конфигурацию firewall и установку необходимого программного обеспечения. Эти действия помогут подготовить сервер к дальнейшей работе и снизить потенциальные риски безопасности.
Содержание
Загрузившись с образа вижу опции загрузки:
Здесь уже выбрано по умолчанию, то что нужно Try or Install Ubuntu Server
Нажимаю Enter
Далее мне предлагают выбор языка:
Оставляю по умолчанию английский. Нажимаю Enter
Далее выбор клавиатуры, оставляю по умолчанию английский.
Кратко почему английский!
Английский является языком системы и команд, поэтому лучше сразу работать на английском дабы сформировать правильную привычку.
Нажимаю Done
Далее, варианты установки. Я выбираю minimized - минимальный дистрибутив. Отмечаю его клавишей пробел. И нажимаю Done. Все остальное ставить буду сугубо по потребностям.
Далее настройка сети
Здесь условно я выделю два базовых сценария настройки:
1. автоконфигурация по DHCP, выглядит так, это для домашнего тестового сервера можно использовать. Если этого достаточно нажимаю Done
2. ручная настройка сети, её рассмотрю чуть подробнее
для этого выбираю первую строчку с eth > Edit IPv4
Выбираю Manual
И вписываю данные полученные от провайдера:
Обычно известны:
ip адрес
шлюз
dns
Кратко что где
Поле Subnet это подсеть, узнаю у провайдера или тут зная ip, захожу пишу свой ip в поиск и получаю точно подсеть
Поле Address это мой ip
Поле Gateway это шлюз
Поле Name servers это dns, можно указать как провайдерские так и другие публичные гугла или яндекса, обычно две штуки через запятую
Search domians не указываю так как в моем случае публичный сервер
Указываю, если:
Теперь нажимаю save
и далее Done
Далее выбор прокси, не указываю, жму Done
Далее выбор "зеркала"
Так же, оставляю по умолчанию, Done
и сразу подтверждаю Continue
Далее предлагают разметку диска
Несмотря на скромный размер 25 GB все равно задам разделы руками
Выбираю Custom storage layout
И нажимаю Done
Выбираю free > Add GPT Partition
Указываю разделу /boot 512M ext4 файловая система (Format) и нажимаю Create
Аналогично выделяю 4 гигабайта для swap (форумула простая swap = ram)
Ничего не указывая выбираю Create
Итог получаю такой:
Нажимаю Done и подтверждаю Continue
Далее указываю имя, сервер и пароль
Если у меня публичный сервер с уже существующим доменом можно указать домен, но я во всех ситуациях указываю localhost на этом этапе. При необходимости в дальнейшем поменяю.
Далее предлагается обновление, пропускаю (Skip) и нажимаю Continue
Далее установка Openssh server, без него не смогу подлючиться к серверу по ssh
Тут несколько вариантов может быть, вход по ключу и или по логину и паролю. В данном примере у меня будет вход только по логину и паролю.
Отмечаю install OpenSSH и нажимаю Done
Далее идет предложение установки дополнительных опций
Ничего не отмечаю нажимаю Done
И процесс установки пошел
По завершении установки, я вижу
Нажимаю тут Reboot Now
На этом установка подходит к концу
Если будет ошибка
Просто нажимаю Enter. На этом установка завершена.
После установки сервера на базе Ubuntu 24 важно выполнить первичную настройку, чтобы обеспечить стабильную, безопасную и удобную работу системы. Правильно сконфигурированный сервер — это основа для размещения сайтов, приложений, баз данных и других сервисов.
где
если порт по умолчанию не
где
(Это стандартный синтаксис почти всех SSH-клиентов (и на Linux, и на Windows, и на macOS). Он пришёл из очень старых сетевых протоколов (ещё из времён rlogin и finger в 80-х), и до сих пор используется везде)
на вопрос
далее ввожу пароль
и я вошел
теперь нужно переключится в root, для этого пишу
ввожу пароль пользователя guru и я root
знак $ это права пользователя, знак # это права root
Сразу проверю ssh
в ответ вижу:
Все работает
Включаю ssh в автозагрузку (скорее по привычке, поскольку он все равно запуститься)
Снова проверяю и вижу
Вот теперь совсем хорошо
На windows открываю командную строку и пишу как и выше ssh guru@192.145.97.139 и далее все аналогично.
Если на windows не удалось подключение к серверу, веротяно нет OpenSSH Client
Альтернатива через PowerShell (если GUI неудобно):
Альтернативный вариант использовать PuTTY: бесплатный SSH и Telnet-клиент
Беру тут или здесь
Запускаю в окне в поле Host name or Ip пишу мой ip порт 22 по умолчанию и нажимаю Open
ввожу логин, ввожу пароль и вхожу
На этом процесс подключения по ssh завершен.
И даю подтверждение Y
netstat был заменён более быстрым, современным и мощным инструментом ss (из пакета iproute2, который установлен по умолчанию).
iproute2 позволяет давать команду
а netstat позволяет давать команду
Ставлю htop удобный монитор процессов
применение
Cтавлю редактор vim
Добавляю или заменяю некоторые параметры
нажимаю клавишу
нажимаю
Применяю
Выставляю время
Проверяю что получилось
Для получения всех часовых поясов ввожу
Для автоматической синхронизации времени используется лёгкий демон systemd-timesyncd
Включаю/проверяю командой:
Проверка
Вывод должен быть таким
Если
--gecos "" — пропускает вопросы о полном имени и т.д.
devuser — имя пользователя
Задаю пароль и готово
Сначала закрою его сессии (если есть)
Затем собственно удаляю
Проверяю командой
Должно выдать
Здесь важно сделать минимум:
1. Сменить порт
2. Явно запретить вход root
Нажимаю клавишу
Закомментирую строку
Я сторонник того чтоб все было в одном конфиге
Просто добавлю перед знак
Далее раскомментирую строку
Теперь у меня будет
Далее нахожу строку
Меняю её на
Под ней пишу
В данный момент sftp не нужен поэтому отключу его
Найду строку
Закомментирую её
Всё, закончил редактировать
Теперь нажимаю
Перед перезапуском ssh обязательно проверю firewall, в противном случае могу потерять доступ к серверу
В Ubuntu 24 использоваться для работы с firewall будет UFW
Ввожу
Если получаю в ответ ufw: command not found или Status: inactive все хорошо
Если же он работает тогда надо изменить порт и в нем
Разрешаю новый порт
Проверяю
Убеждаюсь, что правило с портом 3022/tcp появилось.
Теперь перезапускаю ssh двумя командами
Пробую подключение с новым портом.
Если все хорошо удаляю старый порт
В моем случае у меня минимальный дистрибутив, только что установленный и никакого firewall нет.
Значит ставлю. Публичный серевер без firewall = безопасность прощай.
Проверяю
Ответ должен быть такой
Далее набор команд c # комментами
Проверяю
Должно быть
На этом настройка ufw закончена
Тут все просто я закрою доступ к ssh напрямую для моих ip с помощью ufw
Добавлю правила (я добавляю не менее трёх). Свой домашний статический ip и пару vpn
Узнать свой ip можо тут
Выглядит это так:
Где
Далее смотрю текущие правила и их номера
Вижу такой список
Проверяю подключение в новой сессии (не закрывая текущую). Если подлючился - успех.
Теперь удаляю правило номер [ 1] 3022/tcp ALLOW IN Anywhere
и правило номер [ 5] 4047/tcp (v6) ALLOW IN Anywhere (v6)
Для этого использую команду
Снова проверяю
и аналогично удаляю правило для v6, это правило для протокола IPv6 который у меня не используется. Теперь подключиться с ip адресов не из моего списка не выйдет.
Бывет что нельзя закрыть ssh на файрвол, но безопасность нужна все равно. Доступ может быть нужен разработчику которого только что привлекли для срочной доработки проекта. Или это может быть приложение которому нужен стандартнй порт и прямой доступ. В этом случае нам поможет fail2ban. Он просто читает логи и выписывает «путёвки в бан» тем, кто слишком активно пытается подобрать пароль к моему SSH.
Устанавливаю
Добавляю в автозагрузку
В Fail2ban есть файл /etc/fail2ban/jail.conf, но его нельзя редактировать напрямую, так как при обновлении программы он перезапишется. Я создам его локальную копию
Теперь открою созданный файл для редактирования:
Нужно изменить в секции
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]
Убеждаюсь что там есть
Поскольку я менял стандартный порт SSH (с 22 на 3022), указываю его в строке port = 3022.
Заменяю вот это
*поскольку классический файл логов /var/log/auth.log по умолчанию отсутствует, так как система теперь хранит все логи в бинарном виде в systemd journal.
Рабочий конфиг выглядит так:
Сохраняю и перезапускаю и проверяю
Теперь проверю "путёвки в бан"
Меняю свой ip и пробую подключение. Перед этим точно убеждаюсь что сам не потеряю доступ к серверу.
После нескольких неверных попыток захожу и смотрю
Если в строке Currently failed или Total failed появятся цифры, значит, он успешно читает журнал и «ловит» ботов. Здесь вижу чтоб путёвка вручена. Все работает.
Для разбана в ssh использую команду
Для разбана всех ip в ssh
Содержание
Установка
Саму систему беру тутЗагрузившись с образа вижу опции загрузки:
Здесь уже выбрано по умолчанию, то что нужно Try or Install Ubuntu Server
Нажимаю Enter
Далее мне предлагают выбор языка:
Оставляю по умолчанию английский. Нажимаю Enter
Далее выбор клавиатуры, оставляю по умолчанию английский.
Кратко почему английский!
Английский является языком системы и команд, поэтому лучше сразу работать на английском дабы сформировать правильную привычку.
Нажимаю Done
Далее, варианты установки. Я выбираю minimized - минимальный дистрибутив. Отмечаю его клавишей пробел. И нажимаю Done. Все остальное ставить буду сугубо по потребностям.
Далее настройка сети
Здесь условно я выделю два базовых сценария настройки:
1. автоконфигурация по DHCP, выглядит так, это для домашнего тестового сервера можно использовать. Если этого достаточно нажимаю Done
2. ручная настройка сети, её рассмотрю чуть подробнее
для этого выбираю первую строчку с eth > Edit IPv4
Выбираю Manual
И вписываю данные полученные от провайдера:
Обычно известны:
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
и далее Done
Далее выбор прокси, не указываю, жму Done
Далее выбор "зеркала"
Так же, оставляю по умолчанию, Done
и сразу подтверждаю Continue
Далее предлагают разметку диска
Несмотря на скромный размер 25 GB все равно задам разделы руками
Выбираю Custom storage layout
И нажимаю Done
Выбираю free > Add GPT Partition
Указываю разделу /boot 512M ext4 файловая система (Format) и нажимаю Create
Аналогично выделяю 4 гигабайта для swap (форумула простая swap = ram)
- Swap (своп) — это область подкачки, то есть место на диске, которое операционная система использует как «виртуальную память», когда не хватает оперативной памяти (RAM).
Проще говоря: когда RAM заполняется, система временно переносит менее используемые данные в swap, освобождая оперативную память для активных процессов. - Его размер должен зависеть от объёма RAM и характера нагрузки
RAM Рекомендуемый swap до 2 ГБ 2× RAM 2–8 ГБ ≈ равен RAM 8–32 ГБ 4–8 ГБ 32+ ГБ 2–4 ГБ или вообще без swap (по ситуации)
Ничего не указывая выбираю Create
Итог получаю такой:
Нажимаю Done и подтверждаю Continue
Далее указываю имя, сервер и пароль
Если у меня публичный сервер с уже существующим доменом можно указать домен, но я во всех ситуациях указываю localhost на этом этапе. При необходимости в дальнейшем поменяю.
Далее предлагается обновление, пропускаю (Skip) и нажимаю Continue
Далее установка Openssh server, без него не смогу подлючиться к серверу по ssh
Тут несколько вариантов может быть, вход по ключу и или по логину и паролю. В данном примере у меня будет вход только по логину и паролю.
Отмечаю install OpenSSH и нажимаю Done
Далее идет предложение установки дополнительных опций
Ничего не отмечаю нажимаю Done
И процесс установки пошел
По завершении установки, я вижу
Нажимаю тут Reboot Now
На этом установка подходит к концу
Если будет ошибка
Failed unmounting cdrom.mount - /cdrom то означает, что система не смогла отмонтировать виртуальный CD-ROM при завершении установки или перезагрузкеПросто нажимаю Enter. На этом установка завершена.
После установки сервера на базе Ubuntu 24 важно выполнить первичную настройку, чтобы обеспечить стабильную, безопасную и удобную работу системы. Правильно сконфигурированный сервер — это основа для размещения сайтов, приложений, баз данных и других сервисов.
Подключение к серверу по SSH
На Linux открываю терминал и пишу
Bash:
ssh guru@192.145.97.139
guru это созданный мной пользователь, если пользователь не создавался, а я уже получил готовый сервер, то в качестве логина будет root192.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далее ввожу пароль
и я вошел
теперь нужно переключится в root, для этого пишу
Bash:
sudo -s
знак $ это права пользователя, знак # это права root
Сразу проверю ssh
systemctl status sshв ответ вижу:
Все работает
Включаю ssh в автозагрузку (скорее по привычке, поскольку он все равно запуститься)
systemctl enable sshСнова проверяю и вижу
systemctl status sshВот теперь совсем хорошо
На windows открываю командную строку и пишу как и выше ssh guru@192.145.97.139 и далее все аналогично.
Если на windows не удалось подключение к серверу, веротяно нет OpenSSH Client
Пошаговый алгоритм для Windows 10
Шаг 1: Проверяю и установливаю OpenSSH Client (если ещё не стоит)
- Нажимаю Win + I → открываю Параметры (Settings).
- Перехожу в Приложения → Приложения и возможности (Apps → Apps & features).
- Прокручивая вниз и нажимаю Дополнительные компоненты / Управление дополнительными компонентами (Manage optional features / Optional features).
- Нажимаю Добавить компонент / Добавить возможность (Add a feature).
- В поиске ввожу OpenSSH или OpenSSH Client.
- Если видно OpenSSH Client в списке:
- Если установлен — просто пропускаю.
- Если не установлен — выбераю его → Установить / Добавить (Install / Add). Установка займёт 20–60 секунд, интернет нужен только в этот момент.
- Запускаем 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
- Нажимаю Win + I — откроются Параметры (Settings).
- Перехожу в раздел Приложения → Дополнительные возможности (Apps → Optional features).(В некоторых сборках: Система → Дополнительные возможности или прямо поиск по «Дополнительные возможности»).
- Нажимаю Просмотреть возможности / Добавить возможность / Добавить компонент (View features / Add a feature — кнопка обычно вверху).
- В строке поиска ввожу OpenSSH или OpenSSH Client.
- Нахожу пункт OpenSSH Client:
- Если он уже в списке установленных — перехожу к шагу 2.
- Если нет — ставлю галочку / выберите его → жму Далее / Установить / Добавить (Install / Add).
- Жду 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
Беру тут или здесь
Запускаю в окне в поле Host name or Ip пишу мой ip порт 22 по умолчанию и нажимаю Open
ввожу логин, ввожу пароль и вхожу
На этом процесс подключения по ssh завершен.
Обновление списка доступных пакетов
Делаю обновление
Bash:
apt update && apt upgrade
Установка некоторых полезных инструментов
Ставлю 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Теперь проверю "путёвки в бан"
Меняю свой ip и пробую подключение. Перед этим точно убеждаюсь что сам не потеряю доступ к серверу.
После нескольких неверных попыток захожу и смотрю
fail2ban-client status sshdЕсли в строке Currently failed или Total failed появятся цифры, значит, он успешно читает журнал и «ловит» ботов. Здесь вижу чтоб путёвка вручена. Все работает.
Для разбана в ssh использую команду
fail2ban-client set sshd unbanip 37.252.4.124Для разбана всех ip в ssh
fail2ban-client set sshd unbanip --all