logo NodeSeekbeta

【教程】配置Fail2Ban来阻止恶意登录

系统要求:

  • Python 版本 >= 3.5 或者 PyPy3

    python3 --version
    pypy3 --version
    
  • python-setuptools 和 python-distutils(或 python3-setuptools)

    在 Python 解释器中尝试导入这两个模块来检查是否安装:

    import setuptools
    import distutils
    

    未报错即证明安装成功

    安装方式:

    sudo apt-get install python3-setuptools python3-distutils  #Debian or Ubuntu 
    sudo yum install python3-setuptools  # CentOS or RHEL
    

    (注:一般情况下,在 CentOS 或 RHEL 系统中,distutils 通常已经在安装 Python 的时候自动安装了)

  • (可选)pyinotify >= 0.8.3,可能需要:

    • Linux 版本 >= 2.6.13
  • (可选)systemd >= 204 并与 python 绑定:

    • python-systemd 包
  • (可选)dnspython

安装流程:

  1. 下载源代码:

    • 你可以直接下载 tar 文件,然后解压:

      tar xvfj fail2ban-master.tar.bz2
      cd fail2ban-master
      
    • 或者你可以从 GitHub 克隆源代码:

      git clone https://github.com/fail2ban/fail2ban.git
      cd fail2ban
      
  2. 安装:

    在下载源代码的目录下,执行以下命令进行安装:

    sudo python setup.py install
    

    这会将 Fail2Ban 安装到 python 的库目录中,将可执行脚本放置到 /usr/bin,将配置文件放置到 /etc/fail2ban。

  3. 接下来,可以通过以下命令来检查 Fail2Ban 是否正确安装:

    fail2ban-client -h
    

    可以通过以下命令来查看安装的 Fail2Ban 的版本:

    fail2ban-client version
    
  4. 接下来,将 fail2ban 设置为自动启动服务,将适合你的 Linux 发行版的脚本从 files 目录复制到 /etc/init.d。

    例如,在 Debian 系统中:

    cp files/debian-initd /etc/init.d/fail2ban
    update-rc.d fail2ban defaults
    service fail2ban start
    
  5. 接下来即可通过fail2ban-client -h来查看具体的配置过程

    举例:配置Fail2Ban使得对10分钟内登录失败次数达到3次的IP进行永久封锁

    1. 创建 jail。这里将 jail 命名为 myjail,并使用 polling 作为后端:

      fail2ban-client add myjail polling
      
    2. 设置 jail 的日志路径。这里将 /var/log/auth.log 设置为要监视的日志文件:

      fail2ban-client set myjail addlogpath /var/log/auth.log
      
    3. 添加失败正则表达式。这个表达式将用于匹配登录失败的日志条目。具体的表达式需要根据实际日志格式进行修改:

      fail2ban-client set myjail addfailregex '^Failed password for .* from <HOST>'
      
    4. 设置封禁时间。这里设置 bantime-1,表示一旦 IP 被封禁,该封禁将永不过期:

      fail2ban-client set myjail bantime -1
      
    5. 设置失败次数。这里设置 maxretry3,表示如果一个 IP 地址在 findtime 时间内登录失败3次,那么该 IP 地址将被封禁:

      fail2ban-client set myjail maxretry 3
      
    6. 设置查找时间。这里设置 findtime600,表示如果一个 IP 地址在过去的10分钟(600秒)内登录失败次数达到 maxretry,也就是3次,那么该 IP 地址将被封禁:

      fail2ban-client set myjail findtime 600
      
    7. 最后,启动 jail:

      fail2ban-client start myjail
      

    完成以上步骤后,Fail2Ban 将开始监视 /var/log/auth.log 文件,如果在10分钟内有任何 IP 地址登录失败3次,那么该 IP 地址将被永久封禁。

用技术帖吸引你们进来,在最后我来打个广告
第一届鸡术大赛正式开幕,欢迎参与https://www.nodeseek.com/post-16082-1
目前报名人数:0/16 xhj017

12
  • 绑定

  • 沒用 fail2ban,我是換端口換密鑰登錄或是用防火牆只允許特定IP段登錄

  • 技术贴,绑定

  • 改端口或者用密钥登录就可以了。个人一直不认同直接在主机封锁IP这类操作。考虑极端情况,如果海量IP打过来触发规则拉入黑名单,那主机也会因为名单过长而炸机。 xhj001

  • 不错,其实没重要数据的机器换端口禁root强密码也够用了

  • 绑定

  • @bash #4 密钥登录的确好办法

  • @yumi #5 基本上是够了,目前在被海量IP尝试破root,于是写了这样一篇教程 ac01

  • @Testcharon #2 好办法,主要是中转机害怕限制IP会不小心封禁到自己,其余的那几台都只允许中转机IP了 xhj003

12

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有15767位seeker

🎉欢迎新用户🎉