暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Fail2ban 非ban即选

生有可恋 2022-06-25
1203

ban在英文中是禁止的意思,而“非ban即选”是王者荣耀中选英雄的用的术语,表示很重要的意思。Fail2ban 是一款保护Linux服务器免受攻击的软件,字面意思Fail to ban 是失败则禁止的意思,工作原理是监控日志,如果日志中太多失败尝试则禁止相应IP访问服务器。


Fail2ban 是基于python开发的,github 项目地址为:

  • https://github.com/fail2ban/fail2ban


Fail2ban是通过监控日志发现攻击者IP然后调用 iptables 添加拒绝策略对攻击者IP进行封堵。


大部分Linux发行版都带了Fail2ban,我们只需要安装并启动服务即可启用Fail2ban。


Ubuntu下安装:

    sudo apt-get update && apt install -y fail2ban

    CentOS下安装:

      sudo yum install -y epel-release && yum install -y fail2ban

      启动服务:

        sudo systemctl enable fail2ban
        sudo systemctl stop fail2ban
        sudo systemctl start fail2ban


        使用默认配置即可对大部分系统日志进行监控,我们可以尝试使用错误密码连接服务器看fail2ban是如何工作的。


        当使用 ssh 使用错误密码多次连接服务器,在/var/log/auth.log 中会有连接失败记录

          $ grep Failed /var/log/auth.log
          sshd[181134]: Failed password for root from 192.168.10.200 port 51959 ssh2
          sshd[181279]: Failed password for root from 192.168.10.200 port 51960 ssh2
          sshd[181279]: Failed password for root from 192.168.10.200 port 51960 ssh2

          此时 fail2ban 监控到多次失败,于是对来访IP实行禁止

            $ tail -f var/log/fail2ban.log
            INFO Log rotation detected for var/log/auth.log
            INFO [sshd] Found 192.168.10.200
            INFO [sshd] Found 192.168.10.200
            INFO [sshd] Found 192.168.10.200
            INFO [sshd] Found 192.168.10.200
            INFO [sshd] Found 192.168.10.200
            NOTICE [sshd] Ban 192.168.10.200


            从日志中可以看到 fail2ban 对攻击者IP实行了禁止动作,在 iptables 中可以看到相应的规则:

              $ iptables -nL
              Chain INPUT (policy ACCEPT)
              target prot opt source destination
              f2b-sshd tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22


              Chain f2b-sshd (1 references)
              target prot opt source destination
              REJECT all -- 192.168.10.200 0.0.0.0/0 reject-with icmp-port-unreachable
              RETURN all -- 0.0.0.0/0 0.0.0.0/0



              fail2ban 实际执行的动作为:

                iptables -N f2b-sshd
                iptables -I INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
                iptables -A f2b-sshd -j RETURN
                iptables -I f2b-sshd -s 192.168.10.200/32 -j REJECT --reject-with icmp-port-unreachable


                我们可以模拟执行上述规则,如果需要删除测试的链,执行命令为:

                  iptables -F f2b-sshd
                  iptables -D INPUT 1
                  iptables -X f2b-sshd


                  当超过监控时长攻击者没有再发现攻击,此时 fail2ban 会在 iptables 中取消禁止。

                    $ tail -f var/log/fail2ban.log
                    NOTICE [sshd] Unban 192.168.10.200


                    fail2ban 监控的日志文件为:

                      $ cat /etc/fail2ban/paths-debian.conf
                      [DEFAULT]
                      syslog_mail = /var/log/mail.log
                      syslog_mail_warn = /var/log/mail.warn
                      syslog_authpriv = /var/log/auth.log
                      syslog_user  =  /var/log/user.log
                      syslog_ftp = /var/log/syslog
                      syslog_daemon =  /var/log/daemon.log
                      syslog_local0 =  /var/log/messages
                      apache_error_log = /var/log/apache2/*error.log
                      apache_access_log = /var/log/apache2/*access.log
                      exim_main_log = /var/log/exim4/mainlog
                      proftpd_log = var/log/proftpd/proftpd.log


                      如果需要人工检查入侵痕迹,这些日志目录也是检查项之一。


                      全文完。


                      如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。



                      文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                      评论