Для tripwire, как бы я отправил отчет по электронной почте только при обнаружении нарушения?
Мое идеальное решение для отчетов tripwire было бы:
Ежедневные электронные письма будут генерироваться только в случае обнаружения нарушения
Каждое воскресенье отчет отправляется по электронной почте независимо от того, было ли обнаружено нарушение
Меня также интересуют мнения SF'ers о реализации этого. Возможно, это противоречит цели tripwire? Я мог видеть, что кто-то делает этот аргумент, я полагаю.
4 ответа
Я знаю, что уже выбрал представление г-на Безумного Шляпника в качестве ответа, но, подумав, я подумал о чем-то еще, что может сработать. Кто-нибудь видит, почему это не сработает?
tripwire_out=`/usr/sbin/tripwire --check`; test -z "`echo $tripwire_out | grep 'Total violations found: 0'`"&& echo $tripwire_out
Я проверил его в оболочке, и он работает как задумано. Тем не менее, я еще не заменил работу cron tripwire.
Что, вы парни, думаете?
Мое решение для получения большого количества отчетов Tripwire от множества хостов состоит в том, чтобы они отправлялись по адресу, который складывает их в файл, а затем выполнял простое задание для них, которое сообщало бы только имя хоста и количество нарушений, и только сообщения электронной почты, в которых сообщается о наличии узлов с ненулевым количеством нарушений.
Во-первых, все хосты отправляют свои отчеты по адресу tripwire@company.com
, Это легко организовать из каждой записи crontab; Я делаю это с:
# check the tripwires
MAILTO=tripwire@company.com
3 1 * * * /usr/sbin/tripwire --check
Во-вторых, на почтовом сервере у меня есть запись псевдонима, которая говорит:
# tripwire report autoprocessing
tripwire: /var/tmp/tripwire
В-третьих, у меня есть задание cron, которое запускается каждое утро для обработки содержимого этого файла, и другое, которое запускается каждый вечер для его удаления (поэтому я смотрю только на самые последние выходные данные):
# report problems with nightly tripwire runs
2 7 * * * /usr/local/bin/tripwire-check
45 23 * * * rm -f /var/tmp/tripwire
А вот содержимое /usr/local/bin/tripwire-check; это очень просто:
#!/bin/tcsh
grep "Total violation" /var/tmp/tripwire | grep -vw 0 > /dev/null || exit 0
egrep 'Host name|Total vio' /var/tmp/tripwire | mail -s "NIGHTLY TRIPWIRE VIOLATIONS `date +%Y%m%d`" my-real-address@company.com
Первый grep завершает работу без какой-либо почты или вывода IFO. Все строки, содержащие количество нарушений, также содержат номер 0 как целое слово; вторая, которая вызывается только в случае сбоя первой строки, создает краткую сводную электронную почту и отправляет ее мне.
И, наконец, вот пример выходных данных, когда сообщается об ошибке:
Subject: NIGHTLY TRIPWIRE VIOLATIONS 20050401
Date: Fri, 1 Apr 2005 07:02:00 +0100
To: the-real-me@company.com
From: root <root@company.com>
Host name: fw03b.company.com
Total violations found: 0
Host name: je01b.company.com
Total violations found: 0
Host name: ms01.company.com
Total violations found: 1
Host name: fw05a.company.com
Total violations found: 0
Host name: fw02b.company.com
Total violations found: 0
Host name: fw01b.company.com
Total violations found: 0
Host name: je02o.company.com
Total violations found: 0
Host name: je01a.company.com
Total violations found: 0
Host name: fw04a.company.com
Total violations found: 0
Host name: fw04b.company.com
Total violations found: 0
Host name: je02p.company.com
Total violations found: 0
Host name: fw02a.company.com
Total violations found: 0
Host name: fw03a.company.com
Total violations found: 0
Host name: rp01a.company.com
Total violations found: 0
Host name: rp01b.company.com
Total violations found: 0
Host name: je03o.company.com
Total violations found: 0
Host name: db03.company.com
Total violations found: 0
Host name: lb02p.company.com
Total violations found: 15
Host name: rp02o.company.com
Total violations found: 23
Host name: as05.company.com
Total violations found: 0
Host name: db02.company.com
Total violations found: 0
Надеюсь, что это полезно.
Tripwire имеет возможность подавлять отчеты, которые не имеют ошибок (MAILNOVIOLATIONS), он находится в файле конфигурации...
Вы можете установить 2 различных файла twcfg, один с MAILNOVIOLATIONS, установленным в TRUE, и один с этой опцией, установленной в FALSE.
MAILNOVIOLATIONS =true (or false)
Тогда ваш cronjob может запустить tripwire, используя флаг -c, чтобы выбрать файл twcfg.
Ежедневный отчет crontab:
30 12 * * 1,2,3,4,5,6 /usr/sbin/tripwire --check -c PATH_TO_DAILY_CFG_FILE | mail -s "Tripwire report for `uname -n`, errors found" your_email@domain.com
Воскресный отчет crontab:
30 12 * * 0 /usr/sbin/tripwire --check -c PATH_TO_WEEKLY_CFG_FILE | mail -s "Weekly Tripwire report for `uname -n`" your_email@domain.com
Таким образом, ваш ежедневный cronjob будет запускать tripwire с использованием файла конфигурации, который будет отправлять отчеты только по электронной почте, если будут обнаружены нарушения, а ваш еженедельный cronjob отправит вам отчет по электронной почте, независимо от того,
ps вышеупомянутые команды crontab взяты из системы, использующей Debian, вам может потребоваться изменить путь к вашему двоичному файлу Tripwire.
Другое возможное простое решение, не совсем то, о чем спрашивают, но может быть полезным для кого-то.
Просто отправьте число "Всего нарушений найдено" в теме письма, чтобы я продолжал получать уведомления, но мне не нужно открывать их, хотя я вижу, что какое-то нарушение происходит. Таким образом, я также уверен, что tripwire продолжает работать как положено:
tripwire --check > /tmp/twreport; mail -s "Tripwire report for `uname -n`: `grep 'Total violations found' /tmp/twreport`" mymail@example.com < /tmp/twreport; rm /tmp/twreport
Шаг за шагом:
1.- Я сохраняю в файле "twreport" отчет о tripwire
tripwire --check > /tmp/twreport;
2. Я делаю grep в файле twreport для строки "Всего нарушений найдено". Я вставляю это в тему команды mail. И я получаю текстовое содержимое в теле письма:
mail -s "Tripwire report for `uname -n`: `grep 'Total violations found' /tmp/twreport`" mymail@example.com < /tmp/twreport
3.- Наконец, я удаляю файл twreport:
rm /tmp/twreport