如果在日志中多次匹配,则配置 logstash 禁止 IP 地址

Configure logstash to ban IP address if it match several times in log

我想将我的 logstash 配置为禁止在日志文件中匹配 5 次的 IP 地址,但我不知道如何计算该 IP 被找到的次数,我的实际配置文件如下所示:

input {
  file {
    path => "/home/myuser/mygameserver/server_log.txt"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "[(?<date>[.*?])] BAD RCON ATTEMPT BY: %{IP:clientip}" }
  }
}

output {
  exec {
    type => abuse
    command => "iptables -A INPUT -s %{clientip} -j DROP"
  }
}

日志输出是这样的:

[17/11/2015 22:38:02] BAD RCON ATTEMPT BY: 179.214.221.81
[17/11/2015 22:38:02] BAD RCON ATTEMPT BY: 179.214.221.81
[17/11/2015 22:38:02] BAD RCON ATTEMPT BY: 179.214.221.81
[17/11/2015 22:38:02] BAD RCON ATTEMPT BY: 179.214.221.81
[17/11/2015 22:38:02] BAD RCON ATTEMPT BY: 179.214.221.81
[17/11/2015 22:38:02] BAD RCON ATTEMPT BY: 179.214.221.81
[17/11/2015 22:38:02] BAD RCON ATTEMPT BY: 179.214.221.81
[17/11/2015 22:38:02] BAD RCON ATTEMPT BY: 179.214.221.81
[17/11/2015 22:38:02] BAD RCON ATTEMPT BY: 179.214.221.81
[17/11/2015 22:38:02] BAD RCON ATTEMPT BY: 179.214.221.81

我认为配置文件是正确的,我只是想在它上面放一个计数器,只有在日志中找到该 IP 地址 5 次时才执行防火墙禁令。

metrics{} 将计算通过 logstash 的项目数。它通过 'meter' 参数将计数组合在一起,文档显示了如何使用变量(如您的 IP 地址)作为值。因此,这可以为您创建一个新事件,其中包含在特定时间段内看到的 IP 计数。

throttle{} 可用于强制显示 IP 地址的次数,方法是在达到指定次数时添加标签。

既然您已经对它们进行了计数并应用了限制,您就可以执行一些操作了。您没有描述如何更新您的防火墙,但 logstash 有一个 http{} output 可以用适当的数据命中一些 URL。此输出在节流过滤器设置的标签上是有条件的 ("if")。

希望对您有所帮助。