Установка Tripwire IDS на Debian 13, 12, 11: полное руководство

Tripwire — это система обнаружения вторжений (IDS) на уровне файлов (File Integrity Monitoring — FIM). Она создаёт базу данных контрольных сумм (хешей) важных системных файлов и периодически проверяет их. Если какой-либо файл был изменён, удалён или добавлен, Tripwire сообщит об этом. Это незаменимый инструмент для обнаружения последствий взлома или случайных изменений конфигурации.

⚠️ Важное предупреждение для Debian 12 (Bookworm): На некоторых системах Debian 12 существует баг, из-за которого tripwire --init может завершаться с ошибкой «Segmentation Fault». Это связано с известным багом Debian #1053286. Перед установкой проверьте, работает ли инициализация на вашей системе (см. проблему 8.2).

В этом руководстве я покажу, как установить и настроить Tripwire на Debian 13, 12 и 11.


Оглавление

Предварительные требования

Перед установкой убедитесь, что:

  • Вы имеете права sudo (администратора)

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo whoami

Что делает: sudo — выполняет команду от имени суперпользователя; whoami — показывает имя текущего пользователя.

Ожидаемый вывод в терминале:

root

❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.


Установка Tripwire

Шаг 1: Обновите систему

sudo apt update && sudo apt upgrade -y

Шаг 2: Установите Tripwire

sudo apt install -y tripwire

Что делает: Устанавливает Tripwire и его зависимости.

Шаг 3: Ответьте на вопросы установщика

Во время установки debconf задаст несколько вопросов. Важно отвечать внимательно.

ВопросРекомендуемый ответПочему
Установка локального ключа?<Yes>Нужен для подписи базы
данных и отчётов
Установка site-ключа?<Yes>Нужен для подписи
конфигурационных файлов
Пароль для локального ключаПридумайте надёжный парольЗащищает базу данных и
отчёты
Пароль для site-ключаПридумайте другой надёжный
пароль
Защищает конфигурацию и
политики
Пересобрать конфигурацию?<Yes>Создаёт подписанный
конфигурационный файл
Пересобрать политику?<Yes>Создаёт подписанный файл
политик

⚠️ Совет: Запишите оба пароля (локальный и site) в менеджер паролей или надёжное место. Если вы потеряете их, придётся переустанавливать Tripwire и терять базу данных.


Проверка установки

sudo tripwire --version

Ожидаемый вывод: Open Source Tripwire(R) 2.4.3.7.0 built for x86_64-pc-linux-gnu

sudo find /etc/tripwire -maxdepth 1 -type f -printf '%f\n' | sort

Ожидаемый вывод: Должны быть файлы: site.key, имя-хоста-local.key, tw.cfg, tw.pol, twcfg.txt, twpol.txt.


Настройка политики Tripwire

Стандартная политика Tripwire содержит множество файлов, которых может не быть в вашей системе. Это приводит к «шумным» отчётам. Очистим политику.

Шаг 1: Настройте уровень отчётности (опционально)

sudo nano /etc/tripwire/twcfg.txt

Найдите строку REPORTLEVEL и измените 3 на 4 для более подробных отчётов.

Пересоберите конфигурацию:

sudo twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key /etc/tripwire/twcfg.txt

Введите site-пароль при запросе.

Шаг 2: Создайте скрипт очистки политики

sudo nano /etc/tripwire/twpolmake.pl

Содержимое скрипта:

#!/usr/bin/perl
$POLFILE=$ARGV[0];

open(POL,"$POLFILE") or die "open error: $POLFILE" ;
my($myhost,$thost) ;
my($sharp,$tpath,$cond) ;
my($INRULE) = 0 ;

while (<POL>) {
     chomp;     if (($thost) = /^HOSTNAME\s*=\s*(.*)\s*;/) {
         $myhost = `hostname` ; chomp($myhost) ;
         if ($thost ne $myhost) {
           $_="HOSTNAME=\"$myhost\";" ;
         }
     }
         elsif ( /^{/ ) {
          $INRULE=1 ;

     }   elsif ( /^}/ ) {
          $INRULE=0 ;
     }
         elsif ($INRULE == 1 and ($sharp,$tpath,$cond) = /^(\s*\#?\s*)(\/\S+)\b(\s+->\s+.+)$/) {
          $ret = ($sharp =~ s/\#//g) ;
          if ($tpath eq '/sbin/e2fsadm' ) {
          $cond =~ s/;\s+(tune2fs.*)$/; \#$1/ ;
           }
           if (! -s $tpath) {
             $_ = "$sharp#$tpath$cond" if ($ret == 0) ;
           }
         else {
             $_ = "$sharp$tpath$cond" ;
           }
     }
    print "$_\n" ;
}
close(POL) ;

Шаг 3: Запустите очистку политики

sudo perl /etc/tripwire/twpolmake.pl /etc/tripwire/twpol.txt | sudo tee /etc/tripwire/twpol.txt.new > /dev/null

Шаг 4: Пересоберите подписанную политику

sudo twadmin -m P -c /etc/tripwire/tw.cfg -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key /etc/tripwire/twpol.txt.new

Введите site-пароль при запросе.


Инициализация базы данных Tripwire

Создайте базу данных текущего состояния системы:

sudo tripwire --init

Введите локальный пароль (не site) при запросе.

Ожидаемый вывод: Сообщение об успешном создании базы данных в /var/lib/tripwire/имя-хоста.twd.

⚠️ Для Debian 12: Если вы получаете «Segmentation Fault», см. проблему 8.2.


Запуск проверки целостности

sudo tripwire --check

Что делает: Сравнивает текущее состояние файлов с базой данных.

Ожидаемый вывод: Отчёт с перечислением изменений (при первом запуске могут быть изменения в файлах Tripwire — это нормально).

Просмотр отчёта:

sudo twprint -m r --twrfile /var/lib/tripwire/report/имя-файла.twr

Обновление базы данных после легитимных изменений

После обновления системы, изменения конфигурации или установки ПО нужно обновить базу данных Tripwire.

Шаг 1: Запустите проверку:

sudo tripwire --check

Шаг 2: Обновите базу данных на основе последнего отчёта:

sudo tripwire --update --twrfile /var/lib/tripwire/report/имя-файла.twr

Что делает: Открывает редактор (обычно nano), где вы можете отметить, какие изменения принять (убрать символ x перед строкой). Сохраните и выйдите. При этом будет запрошен локальный пароль.


Настройка автоматических проверок

Tripwire уже добавляет cron-задачу в /etc/cron.daily/tripwire. Она запускает проверку каждый день.

Если вы хотите изменить частоту или время, отредактируйте crontab от root:

sudo crontab -e

Пример (проверка каждые 12 часов):

0 */12 * * * /usr/sbin/tripwire --check --quiet

Решение типичных проблем

8.1 Ошибка: tripwire: command not found

Симптом: Команда tripwire не найдена.

Причина: Бинарные файлы Tripwire находятся в /usr/sbin, который может отсутствовать в PATH у обычного пользователя.

Пошаговое решение:

Всегда используйте sudo:

sudo tripwire --version

Или используйте полный путь:

/usr/sbin/tripwire --version

8.2 Ошибка: Debian 12 — Segmentation Fault при tripwire —init

Симптом: sudo tripwire --init завершается с ошибкой:

Software interrupt forced exit: Segmentation Fault

Причина: Баг в пакете Tripwire для Debian 12 (известный как #1053286).

Пошаговое решение:

Шаг 1: Проверьте версию пакета:

apt-cache policy tripwire

Шаг 2: Если вы видите версию 2.4.3.7-4 и ошибка воспроизводится, то Tripwire на этой системе работать не будет. Есть несколько вариантов:

  • Вариант A (рекомендуемый): Используйте Debian 13 или Debian 11, где Tripwire работает.
  • Вариант B: Дождитесь обновления пакета в Debian 12 с исправлением.
  • Вариант C: Используйте альтернативу: aide, osquery или chkrootkit.

8.3 Ошибка: No baseline database found

Симптом: При запуске tripwire --check появляется ошибка:

### Error: File could not be opened.
### Filename: /var/lib/tripwire/hostname.twd

Причина: База данных не инициализирована.

Пошаговое решение:

Запустите инициализацию:

sudo tripwire --init

8.4 Ошибка: Много предупреждений о недостающих файлах

Симптом: Отчёт содержит множество строк вида File cannot be found.

Причина: Политика Tripwire содержит файлы, которых нет в вашей системе.

Пошаговое решение:

Выполните очистку политики (см. раздел «Настройка политики Tripwire»), затем переинициализируйте базу данных.


8.5 Ошибка: Забыли пароль Tripwire

Симптом: Вы не помните ни site-пароль, ни локальный пароль.

Причина: Потеря паролей.

Пошаговое решение:

Полностью переустановите Tripwire:

sudo rm -rf /etc/tripwire/*.key /etc/tripwire/tw.cfg /etc/tripwire/tw.pol
sudo rm -rf /var/lib/tripwire/*.twd
sudo dpkg-reconfigure tripwire

⚠️ Внимание: Это удалит существующую базу данных. Вы потеряете историю изменений.


Чек-лист: что проверить после установки

  • [ ] Tripwire установлен: dpkg -l tripwire | grep '^ii'
  • [ ] Конфигурационные файлы созданы: ls /etc/tripwire/tw.cfg, tw.pol, *.key
  • [ ] База данных создана: ls -l /var/lib/tripwire/*.twd
  • [ ] Проверка работает: sudo tripwire --check завершается без ошибок (отчёт может содержать изменения, это нормально)
  • [ ] Cron-задача существует: ls -l /etc/cron.daily/tripwire

Удаление Tripwire

Шаг 1: Удалите пакет

sudo apt purge tripwire
sudo apt autoremove

Шаг 2: Удалите остатки данных

sudo rm -rf /var/lib/tripwire

Шаг 3: Проверьте удаление

apt-cache policy tripwire

Ожидаемый вывод: Installed: (none)


Часто задаваемые вопросы (FAQ)

Вопрос: Зачем нужен Tripwire, если есть права доступа?
Ответ: Права доступа не защищают от изменения файлов root-пользователем или злоумышленником, получившим root. Tripwire обнаруживает сам факт изменения.

Вопрос: В чём разница между site-ключом и локальным ключом?
Ответ: Site-ключ подписывает глобальные конфигурации (tw.cfg, tw.pol). Локальный ключ подписывает базу данных и отчёты конкретного хоста. Это позволяет использовать одни и те же политики на нескольких серверах.

Вопрос: Нужно ли останавливать Tripwire перед обновлением системы?
Ответ: Нет. После обновления просто запустите tripwire --update --twrfile ..., чтобы обновить базу данных.

Вопрос: Как часто нужно запускать Tripwire?
Ответ: Ежедневно — через cron (уже настроено). Для критических систем — каждые 6-12 часов.

Вопрос: Может ли Tripwire защитить от атаки в реальном времени?
Ответ: Нет, Tripwire — пассивная система. Она обнаруживает изменения постфактум. Для реальной защиты нужны другие инструменты (Fail2ban, IDS/IPS).


Заключение

Теперь Tripwire установлен и настроен на вашем Debian. Он будет контролировать целостность системных файлов и сообщать о любых изменениях.

Что дальше?