我对绊网报告的理想解决方案是:
仅当发现违规行为时才会生成每日电子邮件
无论是否发现违规行为,每周日都会通过电子邮件发送报告
我也对 SF'ers 对实施此措施的看法感兴趣。也许这违背了绊网的目的?我想有人会提出这样的论点。
答案1
我从大量主机获取大量绊线报告的解决方案是将它们全部发送到一个地址,并将它们堆叠在一个文件中,然后对它们运行一个简单的作业,只报告主机名和违规计数,并且只发送报告电子邮件,以报告是否存在任何违规计数非零的主机。
首先,所有主机都将其报告发送到地址[email protected]
。这很容易从每个 crontab 条目中进行安排;我这样做:
# check the tripwires
[email protected]
3 1 * * * /usr/sbin/tripwire --check
其次,在邮件服务器上,我有一个别名条目,内容如下:
# tripwire report autoprocessing
tripwire: /var/tmp/tripwire
第三,我有一个 cron 作业,每天早上运行来处理该文件的内容,还有一个 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`" [email protected]
第一个 grep 退出时没有任何邮件或输出,如果所有包含违规计数的行也包含数字 0(作为一个整体单词);第二个 grep 仅在第一行失败时调用,生成简洁的摘要电子邮件并将其发送给我。
最后,这是报告错误时的示例输出:
Subject: NIGHTLY TRIPWIRE VIOLATIONS 20050401
Date: Fri, 1 Apr 2005 07:02:00 +0100
To: [email protected]
From: root <[email protected]>
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
希望这有用。
答案2
Tripwire 有一个选项可以抑制没有错误的报告(MAILNOVIOLATIONS),它位于配置文件中...
您可以设置两个不同的 twcfg 文件,其中一个邮件违规设置为 TRUE,并将该选项设置为 FALSE
MAILNOVIOLATIONS =true (or false)
然后你的 cronjob 可以使用-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" [email protected]
周日报告 crontab:
30 12 * * 0 /usr/sbin/tripwire --check -c PATH_TO_WEEKLY_CFG_FILE | mail -s "Weekly Tripwire report for `uname -n`" [email protected]
这样,您的每日 cronjob 将使用配置文件运行 tripwire,仅在发现违规行为时通过电子邮件发送报告,而您的每周 cronjob 无论如何都会通过电子邮件发送报告给您。
ps 上述 crontab 命令来自使用 Debian 的系统,您可能需要编辑 Tripwire 二进制文件的路径。
答案3
我知道我已经选择了 MadHatter 先生的答案,但经过一番思考,我想到了其他可能可行的方法。有人知道为什么这个方法行不通吗?
tripwire_out=`/usr/sbin/tripwire --check`; test -z "`echo $tripwire_out | grep 'Total violations found: 0'`"&& echo $tripwire_out
我已经在 shell 中测试过了,它按预期工作。不过,我还没有替换 tripwire cron 作业。
你们有什么感想?
答案4
另一个可能的简单解决方案,虽然不完全是所要求的,但可能对某些人有用。
只需在邮件主题中发送“发现的违规总数”即可,这样我就可以继续收到通知,但尽管我看到发生了一些违规行为,但我无需打开它们。这样,我也可以确保tripwire继续按预期工作:
tripwire --check > /tmp/twreport; mail -s "Tripwire report for `uname -n`: `grep 'Total violations found' /tmp/twreport`" [email protected] < /tmp/twreport; rm /tmp/twreport
一步步:
1.- 我将tripwire报告保存在文件“twreport”中
tripwire --check > /tmp/twreport;
2.- 我对 twreport 文件执行 grep 以查找“发现的总违规次数”行。我将其插入到邮件命令的主题中。然后我在邮件正文中获得了 twreport 文本内容:
mail -s "Tripwire report for `uname -n`: `grep 'Total violations found' /tmp/twreport`" [email protected] < /tmp/twreport
3.- 最后我删除了 twreport 文件:
rm /tmp/twreport