Итак, первым делом необходимо обновить ОС и пакеты до последней версии. После получения данных для доступа к VPS (обычно это root и IP-адрес), подключайся к машине по SSH:
ssh root@your_ip
Далее обновим данные о пакетах, установим обновления и перезагрузим сервер:
Ubuntu / Debian
apt update && apt dist-upgrade -y && reboot
RHEL / CentOS
dnf upgrade -y && reboot
Для автоматизации этого процесса в последующем, настроим автоматическую установку обновлений.
Автоматические обновления для Ubuntu / Debian
Для автоматизации процесса настроим службу unattended-upgrades:
Далее создадим пользователя для работы с правами на sudo.
useradd -m superuser -G sudo -s /bin/bash
Минимально-привилегированного пользователь считается хорошей практикой и поможет избежать многих проблем в будущем.
Изменим конфигурацию sudoers через visudo, разрешим членам группы sudo использовать sudo без ввода пароля:
visudo
Находим раздел %sudo и добавляем NOPASSWD. Должно получить так:
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
Удалим возможность подключения через отдельный конфиг, для этого удаляем строку:
@includedir /etc/sudoers.d
Сохраняем внесенные изменения и переключаемся на созданного пользователя.
su superuser
Переходим в домашний каталог пользователя для дальнейшей настройки.
cd ~
Ставим маску на все создаваемые файлы, чтобы максимально ограничить доступ к ним.
echo 'umask 0077' >> .bashrc
Настройка SSH
Теперь настроим подключение к нашему серверу по SSH.
Настройка авторизации
Для безопасного входа на сервер лучше использовать SSH-ключи, но можно подключаться и по паролю, если он достаточно сложный, и настроил fail2ban.
Для установки пароля используй команду:
sudo passwd superuser
Для установки SSH-ключа:
Если у тебя еще нет своего SSH-ключа, на локальном компьютере создай его командой:
# Локальный компьютерssh-keygen -t ed25519
Получишь два ключа в папке ~/.ssh/:
публичный .pub, который далее загружаешь на сервер;
приватный, используется для подключения.
Копируем содержимое публичного ключа и вставляем его значение на сервер:
# Локальный компьютерcat ~/.ssh/id_ed25519.pub # Или другое имя, если ты назвал его иначе.# VPSmkdir -p ~/.sshecho 'ssh-ed25519 AAAA...' > /home/superuser/.ssh/id_ed25519.pub
Добавляем созданный публичный ключ в authorized_keys.
Находим или добавляем секцию [sshd] и указываем параметры:
[sshd]enabled = trueport = 1920 # Укажи свой SSH-порт, если нестандартныйlogpath = %(sshd_log)sbackend = systemdmaxretry = 3 # Кол-во неудачных попыток до блокировкиfindtime = 10m # Временной интервал, в течение которого считаются попыткиbantime = 1h # Время блокировки IP (можно выставить 24h, 7d)
Сохраняем и перезапускаем службу:
sudo systemctl restart fail2ban
Проверяем статус и активные jail'ы:
sudo fail2ban-client statussudo fail2ban-client status sshd
Логирование и ротация логов
И заключительным этапом хотелось бы настроить логирование. И добавить ротацию логов, мы же не хотим потерять доступ к машине из-за переполнения диска логами?
Краткая справка:
Большинство современных систем используют systemd-journald для логирования системных сообщений.
Приложения и сервисы, такие как sshd и fail2ban, могут писать логи в файлы (например, /var/log/auth.log, /var/log/fail2ban.log) или напрямую в системный журнал.
Чтобы убедиться, что логи пишутся в нужные файлы, проверь конфигурации сервисов (например, sshd_config, fail2ban.conf) и системных демонов (rsyslog, syslog-ng).
Основные файлы логов:
Лог
Описание
Расположение
/var/log/auth.log
Аутентификация и SSH
Debian/Ubuntu
/var/log/secure
Аутентификация и SSH
CentOS/RHEL
/var/log/syslog
Общесистемные логи
Debian/Ubuntu
/var/log/messages
Общесистемные логи
CentOS/RHEL
/var/log/fail2ban.log
Логи Fail2Ban
Обычно в /var/log/
/var/log/kern.log
Логи ядра
Debian/Ubuntu
/var/log/dpkg.log
Логи установки пакетов
Debian/Ubuntu
/var/log/yum.log
Логи установки пакетов
CentOS/RHEL
Если используешь systemd-journald, настрой лимит размера журнала в /etc/systemd/journald.conf:
SystemMaxUse=200MRuntimeMaxUse=100M
После изменений перезапустить:
sudo systemctl restart systemd-journald
Конфигурации ротации находятся в /etc/logrotate.conf и отдельные файлы в /etc/logrotate.d/.
Оставлю просто пример своего logrotate.conf:
# see "man logrotate" for details# rotate log files weeklyweekly# keep 4 weeks worth of backlogsrotate 4# create new (empty) log files after rotating old onescreate# compress rotated logscompress# delay compression of the previous log file to the next rotation cycledelaycompress# don't rotate log if emptynotifempty# use date as suffix of rotated filedateext# system-specific logsinclude /etc/logrotate.d
Аудит системы
Этот раздел можешь пропустить, но если ты параноик (безопасник), можешь провести маленький аудит своей системы и выяснить:
какие службы и сервисы запущены на твоей машине;
нет ли чего-то неожиданного, что позволило бы получить доступ к твоим данным.
Автоматический аудит системы
Для автоматической проверки можешь использовать известный в узких кругах скрипт - linPEAS.
curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh
Изучи результаты его работы. Обрати внимание на пункты, которые подсвечены в ручном аудите.
Ручной аудит системы
Для ручной проверки обрати внимание на следующие пункты:
Общий список пользователей и список shell-учеток
# Полный список пользователейcat /etc/passwdcat /etc/shadow# Список пользователей с интерактивным входомawk -F: '$7 !~ /(false|nologin)/' /etc/passwd