zoukankan      html  css  js  c++  java
  • fail2Ban ubuntu

    一、安装
    sudo apt-get install -y fail2ban


    二、配置
    Fail2Ban 配置文件格式 INI,存于 /etc/fail2ban 目录:

    fail2ban.conf : fail2ban 程序运行的日志和数据库等参数。
    jail.conf : 禁止(ban)相关参数。
    filter.d/* : jail.conf 中涉及“节”(section,如 [sshd] )的过滤器,由正则表达式构成。
    action.d/* : jail.conf 中涉及“节”(section,如 [sshd] )的处理器。

    它们皆为安装文件,直接修改将导致后续升级 无法自动合并 配置文件。Fail2Ban 提供了自定义配置文件的机制:

    fail2ban.conf 可依此通过 fail2ban.d/* 和 fail2ban.local 来重定义相关选项。
    jail.conf 可依此通过 jail.d/* 和 jail.local 来重定义相关选项。

    默认安装,/etc/fail2ban/jail.d/defaults-debian.conf 已启用 sshd 的 jail

    通常,除 jail.conf 外,不需要改变配置。以下着重介绍 jail.conf 中的参数,它们不仅是默认(全局)参数(隶属于 [DEFAULT]),
    而且可在具体 jail 中重定义(如 [sshd])。

    常用参数

    ignoreip : 忽略不 IP 地址(CIDR 格式)或机器名,以空格分隔。
    bantime : 主机被禁止时长,默认 600 秒。
    maxretry : 在 findtime 时间窗口中,允许主机认证失败次数。达到最大次数,主机将被禁止。
    findtime : 查找主机认证失败的时间窗口。 不意味 着每隔 findtime 时间扫描一次日志。

    高版本 Fail2ban 支持 s (秒), m (分)和 d (天)作为时间单位,如 10m 和 1d

    backend
    默认 auto ,支持 4 种文件修改的监控后端:

    pynotify : inotify 的 Python 绑定。在 Debian/Ubuntu 中,对应 python3-pyinotify 包。
    gamin : KDE 和 GNOME 等桌面使用的文件监控系统,通常基于 inotify 实现。 在 Debian/Ubuntu 中,对应 gamin 包。
    polling : 周期性扫描相关系统日志。相对于其它几种后端,或将占用 更多 CPU 时间。
    systemd : 通过 Systemd 的 Python 绑定来访问 systemd 日志,logpath 将无效。 在 Debian/Ubuntu 中,对应 python3-systemd 包。
    auto : 依此尝试 pyinotify , gamin 和 polling

    通常,在安装 fail2ban 安装包时,将自动安装 iptables , whois , python3-pyinotify 和 python3-systemd ,
    即启用 pyinotify 后端。除非 APT 配置 APT::Install-Recommends "false"; (如:/etc/apt/apt.conf)或 --no-install--recommends 。

    最佳实践
    建议将 bantime 设为 86400 (即 1 天)。如 jail.local :

    [DEFAULT]
    bantime = 86400
    findtime = 600
    maxretry = 3

    [sshd]
    bantime = 86400
    findtime = 600
    maxretry = 3


    修改后,须重载 fail2ban :

    sudo service fail2ban reload

    /var/log/fail2ban.log 将出现类似:

    2021-02-20 17:04:59,580 fail2ban.observer [2615]: INFO Observer start...
    2021-02-20 17:04:59,583 fail2ban.database [2615]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3'
    2021-02-20 17:04:59,583 fail2ban.jail [2615]: INFO Creating new jail 'sshd'
    2021-02-20 17:04:59,593 fail2ban.jail [2615]: INFO Jail 'sshd' uses pyinotify {}
    2021-02-20 17:04:59,596 fail2ban.jail [2615]: INFO Initiated 'pyinotify' backend
    2021-02-20 17:04:59,597 fail2ban.filter [2615]: INFO maxLines: 1
    2021-02-20 17:04:59,611 fail2ban.filter [2615]: INFO maxRetry: 3
    2021-02-20 17:04:59,611 fail2ban.filter [2615]: INFO findtime: 600
    2021-02-20 17:04:59,611 fail2ban.actions [2615]: INFO banTime: 86400
    2021-02-20 17:04:59,611 fail2ban.filter [2615]: INFO encoding: UTF-8
    2021-02-20 17:04:59,611 fail2ban.filter [2615]: INFO Added logfile: '/var/log/auth.log' (pos = 34274, hash = 5cdc6285962a0352611a54aa860667fc35ededc1)
    2021-02-20 17:04:59,614 fail2ban.jail [2615]: INFO Jail 'sshd' started
    2021-02-20 17:08:12,674 fail2ban.server [2615]: INFO Reload all jails
    2021-02-20 17:08:12,674 fail2ban.server [2615]: INFO Reload jail 'sshd'
    2021-02-20 17:08:12,674 fail2ban.filter [2615]: INFO maxLines: 1
    2021-02-20 17:08:12,674 fail2ban.filter [2615]: INFO maxRetry: 3
    2021-02-20 17:08:12,675 fail2ban.filter [2615]: INFO findtime: 600
    2021-02-20 17:08:12,675 fail2ban.actions [2615]: INFO banTime: 86400
    2021-02-20 17:08:12,675 fail2ban.filter [2615]: INFO encoding: UTF-8
    2021-02-20 17:08:12,675 fail2ban.server [2615]: INFO Jail 'sshd' reloaded
    2021-02-20 17:08:12,675 fail2ban.server [2615]: INFO Reload finished.

    三、查看状态


    sudo fail2ban-client status sshd

    输出类似:

    Status for the jail: sshd
    |- Filter
    | |- Currently failed: 2
    | |- Total failed: 5343
    | `- File list: /var/log/auth.log
    `- Actions
    |- Currently banned: 178
    |- Total banned: 1354
    `- Banned IP list: ...


    列表 iptables 的规则:

    iptables -S

    输出类似:

    -P INPUT ACCEPT
    -P FORWARD ACCEPT
    -P OUTPUT ACCEPT
    -N fail2ban-ssh
    -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
    -A fail2ban-nginx-http-auth -j RETURN
    -A fail2ban-ssh -s <IP 1> -j REJECT --reject-with icmp-port-unreachable
    -A fail2ban-ssh -s <IP 2> -j REJECT --reject-with icmp-port-unreachable
    ...
    -A fail2ban-ssh -j RETURN

  • 相关阅读:
    【nodejs原理&源码杂记(8)】Timer模块与基于二叉堆的定时器
    【nodejs原理&源码赏析(7)】【译】Node.js中的事件循环,定时器和process.nextTick
    【nodejs原理&源码赏析(6)】深度剖析cluster模块源码与node.js多进程(下)
    【nodejs原理&源码赏析(5)】net模块与通讯的实现
    【nodejs原理&源码赏析(4)】深度剖析cluster模块源码与node.js多进程(上)
    工作一年多的感慨与总结(二)
    工作一年多的感慨与总结(一)
    动手实践Mybatis插件
    MySQL存储引擎
    Tomcat类加载架构
  • 原文地址:https://www.cnblogs.com/vicowong/p/14979897.html
Copyright © 2011-2022 走看看