
Проверить безопасность своего сервера нужно не после инцидента, а до него. Набор инструментов для базового аудита: 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.comchkrootkit: дополнительная проверка
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 |
| Конфигурация системы, Hardening Index |
rkhunter |
| Руткиты, backdoor-порты |
chkrootkit |
| Альтернативная база руткитов |
ss |
| Открытые порты изнутри |
nmap |
| Открытые порты снаружи |
auth.log |
| Попытки входа |
Аудит - не разовое мероприятие. Запускайте rkhunter еженедельно через cron, Lynis - ежемесячно, а анализ auth.log можно автоматизировать через fail2ban и ежедневные отчёты на почту.