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

使用python从日志文件中提取信息并发送通知电子邮件,python,ssh,freebsd,Python,Ssh,Freebsd,我正在从事一个项目,该项目要求我从日志文件中提取信息,并在发现特定信息时发送通知。例如,我正在处理的确切问题是,我需要创建一个python脚本,该脚本将查看may/var/log/auth.log(FreeBSD系统)并提取任何无效的SSH登录尝试,然后在有冒犯行为时继续给我和另一位同事发电子邮件 我已经到处找了几天了,但几乎没有成功。非常感谢您的帮助。您可以每隔几分钟运行一次cron作业,检查该文件中的更改。如果有任何更改,它将通过电子邮件发送给您,例如使用smtplib。下面是一个使用sen

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


我已经到处找了几天了,但几乎没有成功。非常感谢您的帮助。

您可以每隔几分钟运行一次
cron
作业,检查该文件中的更改。如果有任何更改,它将通过电子邮件发送给您,例如使用
smtplib
。下面是一个使用sendgrid的smtplib示例:

如何确定文件是否被修改

  • 您保留了文件在上一次脚本运行中的副本,并将其与当前内容进行比较
  • 你检查一下档案
  • 这只是一个可以调整的总体想法,所有的“成分”都可以在谷歌上找到,所以你应该能够通过谷歌自己实现它


    希望这有帮助。

    您可以每隔几分钟运行一次
    cron
    作业,检查该文件中的更改。如果有任何更改,它将通过电子邮件发送给您,例如使用
    smtplib
    。下面是一个使用sendgrid的smtplib示例:

    如何确定文件是否被修改

  • 您保留了文件在上一次脚本运行中的副本,并将其与当前内容进行比较
  • 你检查一下档案
  • 这只是一个可以调整的总体想法,所有的“成分”都可以在谷歌上找到,所以你应该能够通过谷歌自己实现它


    希望这能有所帮助。

    我认为您真正想要的是一个类似于
    fail2ban
    的守护进程,它专门用于检查日志文件中的入侵企图

    Fail2ban扫描日志文件(例如/var/log/apache/error_log)并禁止IP 显示恶意标志——密码失败太多,正在查找 对于漏洞攻击等,通常故障2可用于更新防火墙 在指定时间内拒绝IP地址的规则, 尽管有任何其他任意行为(如发送电子邮件),或 也可以配置弹出CD-ROM托盘)。开箱即用 Fail2Ban为各种服务提供了过滤器(apache、curier、ssh, 等等)

    这可能比你自己烘焙的任何解决方案都更有效


    也就是说,如果你真的想自己滚动,那么实现定期检查文件的简单方法就是每五分钟读取一次,看看是否有更改

    更聪明的方法是使用操作系统的文件监视服务,该服务钩住文件系统驱动程序,并在文件更改时通知您。这有两个好处,即您的代码将占用更少的CPU时间,并且每当文件更改时,它将立即响应


    在Linux上,该服务称为
    inotify
    。BSD和Windows有一个等价的功能。

    我认为您真正想要的是一个类似于
    fail2ban
    的守护进程,它专门用于检查日志文件中是否有入侵企图

    Fail2ban扫描日志文件(例如/var/log/apache/error_log)并禁止IP 显示恶意标志——密码失败太多,正在查找 对于漏洞攻击等,通常故障2可用于更新防火墙 在指定时间内拒绝IP地址的规则, 尽管有任何其他任意行为(如发送电子邮件),或 也可以配置弹出CD-ROM托盘)。开箱即用 Fail2Ban为各种服务提供了过滤器(apache、curier、ssh, 等等)

    这可能比你自己烘焙的任何解决方案都更有效


    也就是说,如果你真的想自己滚动,那么实现定期检查文件的简单方法就是每五分钟读取一次,看看是否有更改

    更聪明的方法是使用操作系统的文件监视服务,该服务钩住文件系统驱动程序,并在文件更改时通知您。这有两个好处,即您的代码将占用更少的CPU时间,并且每当文件更改时,它将立即响应


    在Linux上,该服务称为
    inotify
    。BSD和Windows有一个等效的功能。

    作为cron作业的粗略概念:

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

    您将要查看电子邮件的详细信息。您还需要一种跟踪已扫描内容的方法,这样您就不会发送重复的电子邮件。

    对于cron作业来说,这是一个粗略的想法:

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

    您将要查看电子邮件的详细信息。您还需要一种跟踪已扫描内容的方法,这样您就不会发送重复的电子邮件。

    注意:我提供了一种我认为可以解决实际问题的解决方案(SSH日志文件监控)但是,如果您真的想在Python中推出自己的自定义解决方案,Gabi和Ethan的答案将对您有所帮助。注意:我给出了我认为可以解决您实际问题的解决方案(SSH日志文件监控),但是Gabi和Ethan的答案将帮助您在Python中推出自己的自定义解决方案。如我的答案所示,操作系统的文件监视服务可能是检查文件是否已更改的更好方法。与其反复轮询文件以查看其
    mtime
    是否已更改,只需请求操作系统在文件写入时通知您即可。(在Linux上,使用
    inotify
    )在FreeBSD上,您可以通过devel/py kqueue端口使用kqueue(2)。在我的回答中,操作系统的文件监视服务可能是检查文件是否已更改的更好方法。而不是反复轮询文件以查看是否