从日志文件中提取信息并使用python发送通知电子邮件

时间:2012-03-13 19:08:42

标签: python ssh freebsd

我正在开展一个工作项目,要求我从日志文件中提取信息,并在找到特定信息时随时发送通知。例如,我正在处理的确切问题是我需要创建一个python脚本,它将查看may /var/log/auth.log(FreeBSD系统)并提取任何无效的SSH登录尝试,然后继续给我和另一个发送电子邮件任何有违法行为的同事。

我现在已经看了几天,并且取得了很小的成功,任何帮助都会受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

我认为你真正追求的是像fail2ban这样的守护进程,它专门用于检查日志文件是否存在入侵企图。

来自fail2ban wiki:

  

Fail2ban扫描日志文件(例如/ var / log / apache / error_log)并禁止IP   显示恶意迹象 - 密码失败太多,寻求   一般来说,Fail2Ban用于更新防火墙   在指定的时间内拒绝IP地址的规则,   虽然任何其他任意行动(例如发送电子邮件,或   也可以配置弹出CD-ROM托盘)。盒子外面   Fail2Ban附带了各种服务的过滤器(apache,curier, ssh ,   等)。

这可能比你自己烘焙的任何解决方案都要好。


也就是说,如果您确实想要自己动手,那么实现定期检查文件的简单方法就是每隔五分钟读取一次并查看它是否已更改。

更智能的方法是使用操作系统的文件监控服务,该服务挂钩到文件系统驱动程序,并在文件更改后立即通知您。这具有双重好处,即您的代码将占用更少的CPU时间,并且只要文件发生更改,它就会立即响应。

在Linux上,该服务称为inotify。 BSD和Windows具有相同的功能。

答案 1 :(得分:0)

您可以每隔几分钟运行一次cron作业,检查该文件中的更改。如果有任何更改,它会通过使用,例如smtplib向您发送电子邮件。以下是使用sendgrid进行smtplib使用的示例:http://docs.sendgrid.com/documentation/get-started/integrate/examples/python-email-example-using-smtp/

如何判断文件是否被修改?

  1. 您在上一个脚本运行中保留了该文件的副本,并将其与当前内容进行比较
  2. 您检查文件的last modification time
  3. 这只是一个可以调整的一般概念,所有的“成分”都可以在谷歌上找到,所以你应该能够通过谷歌搜索来实现它。

    希望这有帮助。

答案 2 :(得分:0)

作为一项关于cron工作的粗略想法:

with open('/var/log/auth.log') as auth:
    for line in auth:
        if 'blahblah' in line:
            # send email

您需要查看email module的电子邮件详细信息。您还需要一种方法来跟踪已扫描的内容,因此您最终不会发送重复的电子邮件。