Настройка системы
Обновление системы
Итак, первым делом необходимо обновить ОС и пакеты до последней версии.
После получения данных для доступа к VPS (обычно это root и IP-адрес), подключайся к машине по SSH:
ssh root@your_ipДалее обновим данные о пакетах, установим обновления и перезагрузим сервер:
apt update && apt dist-upgrade -y && rebootdnf upgrade -y && rebootДля автоматизации этого процесса в последующем, настроим автоматическую установку обновлений.
Автоматические обновления для Ubuntu / Debian
Для автоматизации процесса настроим службу unattended-upgrades:
apt install unattended-upgrades -yЗапускаем встроенный конфигуратор:
dpkg-reconfigure --priority=low unattended-upgradesПоявится синий экран с вопросом:
«Automatically download and install stable updates?»Выбираем Yes и процесс установки завершен. Переходим к настройке.
Открываем основной файл:
nano /etc/apt/apt.conf.d/50unattended-upgradesИщем раздел:
#Unattended-Upgrade::Allowed-Origins или Unattended-Upgrade::Origins-Pattern
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
// "${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};- -security — обязательно оставить, обновления безопасности нам нужны;
- -updates — можно включить, если хочешь получать обычные исправления;
- -proposed, -backports — включать не стоит, может содержать нестабильные пакеты.
Чтобы включить updates, просто убери //. Сохраняем и переходим к проверке.
Запускаем отладку:
unattended-upgrades --dry-run --debugЕсли не получили ошибок, значит настроили все правильно.
Автоматические обновления для RHEL / CentOS
На системах RHEL и CentOS автоматические обновления можно настроить с помощью dnf-automatic.
dnf install dnf-automatic -yОткрой конфигурационный файл:
nano /etc/dnf/automatic.confНайди и проверь следующие параметры:
[commands]
upgrade_type = default
[apply]
apply_updates = yesЗапусти автоматическое обновление:
systemctl enable --now dnf-automatic.timerСоздание пользователя
Далее создадим пользователя для работы с правами на 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 # Или другое имя, если ты назвал его иначе.
# VPS
mkdir -p ~/.ssh
echo 'ssh-ed25519 AAAA...' > /home/superuser/.ssh/id_ed25519.pubДобавляем созданный публичный ключ в authorized_keys.
# VPS
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chown -R superuser:superuser ~/.sshПроверяем, что удачно можем авторизоваться на сервере с помощью пароля или ключа под нашим пользователем:
# Локальный компьютер
## С помощью пароля:
ssh superuser@your_ip
## С помощью ключа:
ssh -i ~/.ssh/id_rsa superuser@your_ipЕсли успешно подключились, переходим к настройке sshd.
Открываем настройки службы sshd
sudo nano /etc/ssh/sshd_configМеняем порт на нестандартный (очень поможет от ботов)
Port 1920Запрещаем авторизацию под root, меняя yes на no
PermitRootLogin noЕсли планируешь подключение по паролю:
PasswordAuthentication yes
PermitEmptyPasswords noЕсли подключаешься по SSH-ключу, то запрещаем авторизацию по паролю, устанавливаем принудительную авторизацию по ключу:
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes- Выходим и сохраняем конфиг, после чего перезапускаем
SSH-сервер.
sudo systemctl restart sshdПодключаемся на сервер и продолжаем настройку.
Установка доп. программ
Для упрощения жизни и работы с сервером, советую установить следующие пакеты:
sudo apt install git ufw net-tools curl- ufw - надстройка над
iptables, для настройки файрволла сервера. - git - для загрузки кода с
Git-repo. - net-tools - для работы
ifconfigиnetstat. - curl - для выполнения
httpзапросов из консоли.
Firewall
Теперь настроим Firewall, для минимизации возможности несанкционированных подключений.
Разрешаем подключение по SSH (укажи тот же порт, что в sshd_config, например, 1920):
# Разрешаем подключение по SSH (нестандартный порт)
sudo ufw allow 1920/tcpЗапрещаем все входящие подключения (по умолчанию) и разрешаем все исходящие:
sudo ufw default deny incoming
sudo ufw default allow outgoingПри необходимости — добавляем доступ к другим сервисам (например, HTTPS для веб-сервера):
# Пример: Разрешить HTTPS
sudo ufw allow 443/tcpВключаем firewall и проверяем его статус:
# Включаем UFW
sudo ufw enable
# Проверяем статус и правила
sudo ufw status verboseЕсли ты подключаешься по SSH, обязательно убедись, что правило для SSH-порта добавлено до активации ufw, иначе можешь потерять доступ к серверу.
Fail2Ban (Защита от перебора паролей)
Для борьбы с ботами и добавлением защиты от перебора пароля (если оставил пароль), внедрим fail2ban.
Устанавливаем fail2ban:
sudo apt install fail2ban -yСоздаем локальную копию конфига, чтобы не изменять оригинальный файл:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localОткрываем конфигурацию:
sudo nano /etc/fail2ban/jail.localНаходим или добавляем секцию [sshd] и указываем параметры:
[sshd]
enabled = true
port = 1920 # Укажи свой SSH-порт, если нестандартный
logpath = %(sshd_log)s
backend = systemd
maxretry = 3 # Кол-во неудачных попыток до блокировки
findtime = 10m # Временной интервал, в течение которого считаются попытки
bantime = 1h # Время блокировки IP (можно выставить 24h, 7d)Сохраняем и перезапускаем службу:
sudo systemctl restart fail2banПроверяем статус и активные jail'ы:
sudo fail2ban-client status
sudo 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=200M
RuntimeMaxUse=100MПосле изменений перезапустить:
sudo systemctl restart systemd-journaldКонфигурации ротации находятся в /etc/logrotate.conf и отдельные файлы в /etc/logrotate.d/.
Оставлю просто пример своего logrotate.conf:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# compress rotated logs
compress
# delay compression of the previous log file to the next rotation cycle
delaycompress
# don't rotate log if empty
notifempty
# use date as suffix of rotated file
dateext
# system-specific logs
include /etc/logrotate.dАудит системы
Этот раздел можешь пропустить, но если ты параноик (безопасник), можешь провести маленький аудит своей системы и выяснить:
- какие службы и сервисы запущены на твоей машине;
- нет ли чего-то неожиданного, что позволило бы получить доступ к твоим данным.
Автоматический аудит системы
Для автоматической проверки можешь использовать известный в узких кругах скрипт - linPEAS.
curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | shИзучи результаты его работы. Обрати внимание на пункты, которые подсвечены в ручном аудите.
Ручной аудит системы
Для ручной проверки обрати внимание на следующие пункты:
- Общий список
пользователейи списокshell-учеток
# Полный список пользователей
cat /etc/passwd
cat /etc/shadow
# Список пользователей с интерактивным входом
awk -F: '$7 !~ /(false|nologin)/' /etc/passwd- Авторизованные SSH-ключи
find /home /root -name "authorized_keys" -exec cat {} \;- Состав групп
sudoиwhell
getent group sudo
getent group wheel- Автозагрузку сервисов
systemctl list-unit-files --type=service | grep enabled- Списки
cron-заданийсистемы и пользователей
for user in $(cut -f1 -d: /etc/passwd); do echo "CRON for $user:"; crontab -u $user -l 2>/dev/null; done
ls /etc/cron* /var/spool/cron -R- Проверь бинари с
setuidиsetgid
find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \; 2>/dev/null- Проверь бинари с флагом
executable
find /usr/local/bin /opt /tmp -type f -executable -ls- Проверь туннели и скрытые соединения
# Открытые соединения
lsof -i
# Слушаемые порты
ss -tulnp- Проверь общий список процессов и наличие агентов мониторинга
# Общий список процессов
ps aux
# Проверить наличие агентов мониторинга
ps aux | grep -i agentСпасибо что дочитал статью, надеюсь она была полезной для тебя
Если есть мысли, чтобы ты еще проверил при проведении аудита, хотел бы более подробное описание процесса аудита, можешь оставить комментарий в канале.
Содержание
- Настройка системы
- Обновление системы
- Автоматические обновления для Ubuntu / Debian
- Автоматические обновления для RHEL / CentOS
- Создание пользователя
- Настройка SSH
- Настройка авторизации
- Установка доп. программ
- Firewall
- Fail2Ban (Защита от перебора паролей)
- Логирование и ротация логов
- Аудит системы
- Автоматический аудит системы
- Ручной аудит системы

