Uylin
发布于 2023-08-30 / 32 阅读 / 0 评论 / 0 点赞

Fail2Ban

Fail2Ban

简介

Fail2Ban 是一款入侵防御软件,可以保护服务器免受暴力攻击。 它是用 Python 编程语言编写的。

Fail2Ban 基于auth 日志文件工作,默认情况下它会扫描所有 auth 日志文件,如 /var/log/auth.log、/var/log/apache/access.log 等,并禁止带有恶意标志的IP,比如密码失败太多,寻找漏洞等等标志。

通常,Fail2Ban 用于更新防火墙规则,用于在指定的时间内拒绝 IP 地址。 它也会发送邮件通知。

Fail2Ban 为各种服务提供了许多过滤器,如 ssh、apache、nginx、squid、named、mysql、nagios 等。

Fail2Ban 能够降低错误认证尝试的速度,但是它不能消除弱认证带来的风险。这只是服务器防止暴力攻击的安全手段之一。

安装

CentOS7

    yum -y install epel-release
    yum -y install fail2ban
    systemctl enable fail2ban
    systemctl start fail2ban

Debian

    apt install fail2ban -y
    systemctl enable fail2ban
    systemctl start fail2ban

目录结构

    /etc/fail2ban/
    ├── action.d         # iptables 、mail 等动作文件目录
    ├── fail2ban.conf    # fail2ban 配置文件,定义日志级别、日志、sock 文件位置等
    ├── filter.d         # 条件匹配文件目录,过滤日志关键内容
    ├── jail.conf        # fail2ban 防护配置文件

配置

官方的文档写到:在配置时,我们应该避免修改由 fail2ban 安装创建的文件,我们应该去编写具有 .local 扩展名的新文件。在 .local 新文件里配置的内容会覆盖 jail.conf 内容里相同的值。当我们的配置发生改变了我们可以使用  fail2ban-client reload ,来加载新的配置 /etc/fail2ban/jail.d/jail.local

文件内容:

    # defalut这里是设定全局设置,如果下面的监控没有设置就以全局设置的值设置。
    [DEFAULT]
    # 用于指定哪些地址ip可以忽略 fail2ban 防御,以空格间隔。
    ignoreip = 127.0.0.1/8
    # ssh客户端主机被禁止的时长(默认单位为秒)
    bantime  = 3600
    # 过滤的时长(秒)
    findtime  = 600
    # 匹配到的阈值(允许失败次数)
    maxretry = 3

    [ssh-iptables]
    # 是否开启
    enabled  = true
    # 过滤规则
    filter   = sshd
    # 动作
    action   = iptables[name=SSH, port=ssh, protocol=tcp]
    # 日志文件的路径
    logpath  = /var/log/secure
    # 匹配到的阈值(次数)
    maxretry = 3

常用命令

命令描述
start启动fail2ban server和监狱
stop暂停fail2ban和监狱
reload重新加载配置文件
status查看运行的监控服务数量和列表
set loglevel设置日志等级,有 CRITICAL, ERROR, WARNING,NOTICE, INFO, DEBUG
get loglevel获取当前日志的等级
set idle on/off设置某个监控(监狱)的状态
set addignoreip 设置某个监控(监狱)可以忽略的ip
set delignoreip 删除某个监控(监狱)可以忽略的ip
set banip 将ip加入 监控(监狱)
set unbanip 将ip从监控(监狱)移除

示例:fail2ban-client  set  ssh-iptables  banip  192.168.1.77

Fail2ban-regex

测试筛选规则设否匹配当前的日志格式

   fail2ban-regex /var/log/secure  /etc/fail2ban/filter.d/sshd.conf