opened image

Аудит безопасности VPS: Lynis, rkhunter, nmap

 

 

Проверить безопасность своего сервера нужно не после инцидента, а до него. Набор инструментов для базового аудита: Lynis проверяет системную конфигурацию и выдаёт оценку с рекомендациями, rkhunter и chkrootkit ищут руткиты и подозрительные файлы, nmap показывает, что видно снаружи. Разберём каждый инструмент с реальными командами и интерпретацией вывода.

 

 

Lynis: системный аудит

 

Lynis - утилита аудита безопасности для Linux, macOS и BSD. Она проверяет более 300 параметров: конфигурацию SSH, права на файлы, наличие обновлений, настройки PAM, состояние файрвола и многое другое. Результат - числовая оценка от 0 до 100 (Hardening Index).

 

Установка

 

На Ubuntu 24.04 лучше использовать официальный репозиторий CISOfy для актуальной версии (3.1.x):

sudo apt install apt-transport-https -y
curl -fsSL https://packages.cisofy.com/keys/cisofy-software-public.key | sudo gpg --dearmor -o /usr/share/keyrings/cisofy.gpg
echo "deb [signed-by=/usr/share/keyrings/cisofy.gpg] https://packages.cisofy.com/community/lynis/deb/ stable main" | sudo tee /etc/apt/sources.list.d/cisofy-lynis.list
sudo apt update
sudo apt install lynis -y
lynis --version
# Lynis 3.1.2

 

Запуск полного аудита

sudo lynis audit system

Аудит занимает 1-3 минуты. Вывод цветной: зелёный (ОК), жёлтый (предупреждение), красный (проблема).

 

 

 

 

Интерпретация результатов

 

Вывод делится на секции:

[+] Boot and services
[+] Kernel
[+] Memory and processes
[+] Authentication
[+] Shell
[+] File systems
[+] SSH
[+] Firewalls

 

В конце - сводка:

Hardening index : 63 [############ ]

Индекс ниже 50 - сервер в базовом состоянии, требует работы. 70-80 - хорошо настроенный сервер. Выше 85 - значительная работа по харденингу выполнена.

Критические предупреждения (WARNINGS) нужно исправлять в первую очередь. Suggestions - рекомендации, которые повысят индекс.

 

Пример предупреждения:

! Found one or more vulnerable packages [PKG-7392]
    - Solution: apt-get upgrade

 

Пример suggestion:

* Consider hardening SSH configuration [SSH-7408]
    - Details  : AllowTcpForwarding (set YES to NO)

 

Просмотр деталей по коду

lynis show details SSH-7408

 

Логи и отчёт

# Подробный отчёт
cat /var/log/lynis.log

# Машиночитаемый отчёт (для скриптов)
cat /var/log/lynis-report.dat | grep "^warning\|^suggestion" | head -30

 

Только проверка конкретной категории

# Только SSH
sudo lynis audit system --tests-from-group ssh

# Только файловая система
sudo lynis audit system --tests-from-group filesystem

 

 

rkhunter: поиск руткитов

 

rkhunter (Rootkit Hunter) версии 1.4.6 проверяет файлы системы на признаки руткитов, сканирует backdoor-порты, ищет подозрительные строки в конфигах.

Установка и первоначальная настройка

sudo apt install rkhunter -y

# Обновить базу данных хэшей
sudo rkhunter --update

# Создать эталонный снимок системы (baseline)
sudo rkhunter --propupd

Команда --propupd записывает хэши всех системных файлов. При последующих проверках rkhunter сравнивает текущие хэши с эталонными. Запускайте --propupd только после обновлений пакетов - иначе изменённые файлы будут ложно помечены как подозрительные.

 

 

Запуск проверки

sudo rkhunter --check

 

При проверке нажимайте Enter для продолжения или запустите в автоматическом режиме:

sudo rkhunter --check --skip-keypress --report-warnings-only

 

 

 

 

Настройка /etc/rkhunter.conf

 

Важные параметры для снижения ложных срабатываний:

# Разрешённые скрытые директории (например, .git)
ALLOWHIDDENDIR=/dev/.udev
ALLOWHIDDENDIR=/dev/.static

# Разрешённые прослушиваемые приложения
SCRIPTWHITELIST=/usr/bin/groups
SCRIPTWHITELIST=/usr/bin/ldd

# Разрешить строку PermitRootLogin yes в sshd (если нужно)
ALLOW_SSH_ROOT_USER=yes

# Email-уведомления
MAIL_ON_WARNING=admin@example.com
MAIL_CMD=mail -s "[rkhunter] Warning: $(hostname)"

 

Автоматизация через cron

sudo crontab -e
# Добавляем:
0 3 * * * /usr/bin/rkhunter --check --skip-keypress --report-warnings-only 2>&1 | mail -s "rkhunter report $(hostname)" admin@example.com

 

 

chkrootkit: дополнительная проверка

 

chkrootkit дополняет rkhunter - у них разные базы сигнатур, поэтому стоит использовать оба.

sudo apt install chkrootkit -y
sudo chkrootkit

 

Вывод простой: INFECTED - проблема найдена, not infected - чисто. Ложные срабатывания возможны - проверяйте подозрительные строки вручную.

# Проверить конкретный руткит
sudo chkrootkit suckit
sudo chkrootkit lrk3

# Только вывод предупреждений
sudo chkrootkit | grep INFECTED

 

 

Проверка открытых портов

ss - встроенный инструмент

# Все открытые TCP-порты с процессами
sudo ss -tlnp

# Все UDP-порты
sudo ss -ulnp

# Все слушающие сокеты (TCP + UDP)
sudo ss -lnp

 

Пример вывода ss -tlnp:

State  Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
LISTEN 0       4096    0.0.0.0:22          0.0.0.0:*          users:(("sshd",pid=892))
LISTEN 0       511     0.0.0.0:80          0.0.0.0:*          users:(("nginx",pid=1234))
LISTEN 0       511     0.0.0.0:443         0.0.0.0:*          users:(("nginx",pid=1234))

 

Порты, которых не должно быть в этом списке, - потенциальные признаки взлома.

 

 

nmap - сканирование снаружи

 

Установка nmap и сканирование своего сервера:

sudo apt install nmap -y

# Сканирование с другого сервера или локальной машины
nmap -sV -p- --open 185.10.20.30

# Быстрое сканирование топ-1000 портов
nmap -sV 185.10.20.30

# Определение ОС и версий сервисов
sudo nmap -A 185.10.20.30

 

Главный вопрос при анализе вывода: каждый ли открытый порт вам известен и нужен? Если nmap показывает открытый порт 5432 (PostgreSQL) - он должен быть закрыт для внешнего мира через firewall.

# Проверить, фильтруется ли порт файрволом
nmap -p 5432 185.10.20.30
# Если "filtered" - файрвол закрыл. "open" - доступен снаружи.

 

 

Анализ логов auth.log

 

Лог /var/log/auth.log фиксирует все попытки аутентификации.

# Неудачные попытки SSH-логина
grep "Failed password" /var/log/auth.log | tail -20

# Успешные входы (подозрительные)
grep "Accepted" /var/log/auth.log

# Топ IP по числу неудачных попыток
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -10

# Использование sudo
grep "sudo" /var/log/auth.log | grep -v "pam_unix\|session"

# Создание новых пользователей
grep "useradd\|usermod" /var/log/auth.log

 

Признаки взлома в логах:

  • Успешный вход с нового IP в нерабочее время

  • Записи CRON с незнакомыми командами

  • Команда sudo su от непривилегированного пользователя

# Последние логины всех пользователей
last -20

# Неудачные попытки sudo
sudo grep "sudo.*incorrect password" /var/log/auth.log

 

 

 

Итоговый чеклист аудита

 

Инструмент

Команда

Что проверяет

Lynis

lynis audit system

Конфигурация системы, Hardening Index

rkhunter

rkhunter --check --skip-keypress

Руткиты, backdoor-порты

chkrootkit

chkrootkit

Альтернативная база руткитов

ss

ss -tlnp

Открытые порты изнутри

nmap

nmap -sV 1.2.3.4

Открытые порты снаружи

auth.log

grep "Failed|Accepted" /var/log/auth.log

Попытки входа

 

 

Аудит - не разовое мероприятие. Запускайте rkhunter еженедельно через cron, Lynis - ежемесячно, а анализ auth.log можно автоматизировать через fail2ban и ежедневные отчёты на почту.