我应该如何为在容器中运行的sshd和使用systemd的日志结合使用自定义fail2ban过滤器?

时间:2018-02-13 19:11:07

标签: systemd fail2ban

我在使用Docker的容器中运行SSH守护程序。由于后者由systemd管理,sshd记录为stdout,因此检测攻击者的相关数据会显示在systemd日记中,但其条目有一个额外的前缀,如这样:

Feb 13 21:51:25 my.example.com dockerd[427]: Feb 13 18:51:25 sshd[555]: Invalid user ts3bot from 180.166.17.122 port 43474

使用此代码段配置jail:

[sshd]

enabled = true
mode    = aggressive
filter  = sshd[mode=%(mode)s]
port    = ssh

来自filters.d/sshd.conf的这一行似乎包含了我想要改变的内容:

journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd

但我无法在journalmatch的配置中找到任何有用的文档。我使用fail2ban 0.10。

有人可以解释如何解释等号右边的部分吗?

当我希望弄清楚如何调整该值时,我应该直接编辑filters.d/sshd.conf(从Arch包中提供)还是其他地方?

1 个答案:

答案 0 :(得分:1)

为了保留主机系统本身有额外sshd监狱的选项,这就是我要做的:

  1. 版本 - 使用fail2ban版本> = 0.9,支持使用systemd作为后端。 (顺便说一句:版本0.11很新,可能还不稳定,但我喜欢新功能,可以自动增加来自同一IP的每个新匹配的禁用时间。)

  2. Jail - 创建一个单独的jail jail.d/sshd-docker。根据需要采用原始sshd jail中的设置。也许可以先从安全性的低禁令开始,然后再增加。将backend = systemd添加到新sshd-docker个监狱。可能看起来像这样:

    [sshd-docker]
    enabled  = true
    filter   = sshd-docker
    action   = iptables
    backend  = systemd
    maxretry = 5
    findtime = 1d
    bantime  = 2w
    
  3. 过滤器 - 我更喜欢保留过滤器文件和原始jail.conf文件不变,因此我可以轻松升级到较新的fail2ban版本。因此,我建议将过滤器文件filter.d/sshd.conf复制到filter.d/sshd-docker.conf并在sshd-docker jail中引用该新过滤器(如上所示)。

  4. 过滤器/正则表达式 - 在filter.d/sshd-docker.conf中采用正则表达式来匹配您的日志条目。可以像改变这个一样简单

    _daemon = sshd
    

    _daemon = docker
    

    因为_daemon指令用于构造__prefix_line正则表达式,如filter.d/common.conf中所示。

  5. 过滤器/ journalmatch - 据我在fail2ban-regex手册页中看到,journalmatch指令会覆盖其他过滤器。因此,您可能还需要在filter.d/sshd-docker.conf

    中更改此行
    journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd
    

    journalmatch = 
    

    (在fail2ban 0.11中你也可以删除这一行。不确定以前的版本何时停止在过滤器文件中需要journalmatch =条目。)

  6. 测试 - 重新加载fail2ban并检查其工作原理。