服务器遭遇暴力破解,封禁恶意IP——fail2ban工具使用

07-14 1424阅读

针对服务器频繁遭受密码破解尝试的情况,使用fail2ban是一种有效的防御手段。fail2ban能够监控服务器日志文件(如SSH登录尝试),并自动将显示恶意行为的IP地址封禁,从而减少对服务的攻击和未授权访问。

服务器遭遇暴力破解,封禁恶意IP——fail2ban工具使用
(图片来源网络,侵删)

基本使用

以下是如何配置fail2ban来实现个人需求,下例为“在密码输入错误一次后永久封禁该IP地址”的步骤:

安装fail2ban

如果系统尚未安装fail2ban,可以通过包管理器安装:

  • 对于基于Debian的系统(如Ubuntu):

     sudo apt-get update
     sudo apt-get install fail2ban
  • 对于基于RPM的系统(如CentOS):

     sudo yum install epel-release
     sudo yum install fail2ban

    配置fail2ban

    1. 创建配置文件的本地副本:

      fail2ban读取/etc/fail2ban/jail.conf文件,但推荐不直接修改这个文件,而是创建一个本地副本jail.local进行自定义设置,因为jail.conf可能会在包更新时被覆盖。

       sudo cp /etc/fail2ban/jail.{conf,local}
    2. 编辑jail.local文件:

      使用文本编辑器编辑/etc/fail2ban/jail.local文件。你需要添加或修改以下段落来满足“密码输入错误一次后永久封禁”这一需求。

       [DEFAULT]
       bantime = -1  # 永久封禁
       findtime = 60  # 在60秒的时间窗口内考虑失败尝试
       maxretry = 1  # 最大尝试次数为1
       ​
       [sshd]
       enabled = true
      • bantime = -1表示被封禁的IP地址将永久不被允许访问。

      • findtime和maxretry的组合意味着如果在60秒内有1次失败尝试,就触发封禁动作。

    3. 重启fail2ban服务:

      应用配置更改后,需要重启fail2ban服务:

       ​
       sudo systemctl restart fail2ban

    查看和管理封禁的IP地址

    • 查看被fail2ban封禁的IP地址列表:

       sudo fail2ban-client status sshd
    • 解封某个特定的IP地址:

       sudo fail2ban-client set sshd unbanip IP_ADDRESS
       ​
       eg:
       # fail2ban解封命令:
       fail2ban-client set [$JAIL_Name] unbanip [xx.xx.xx.xx]
       fail2ban-client set sshd unbanip 192.168.5.25

      注意事项

      • 将maxretry设置为1和永久封禁(bantime = -1)是一个非常严格的策略,可能会导致误封合法用户。建议在应用这样的策略之前仔细考虑潜在的后果。

      • 定期检查和维护封禁列表,以确保没有误封的IP地址。

        扩展

        加入模块

        由于一些原因,eg服务器无法使用ssh的22端口正常远程登录,故做了nginx转发来进行远程登录。但这意味着,如果恶意IP是通过nginx转发来破解密码登录的话,在lastb下显示的则是127.0.0.1的本机IP,无法直接查看到源IP。针对于这一现象,加入在fail2ban工具中加入

        eg:监狱nginx转发日志,来封禁日志中的异常IP
        1. 首先撰写该模块conf文件,该conf文件中failregex的信息,具体根据nginx转发日志模块的信息编写,以下为本eg服务器的参考。

          vim /etc/fail2ban/filter.d/nginx-ssh.conf

           [Definition]
           failregex = ^ \[.*\] TCP 200 .* "127\.0\.0\.1:22" ".*" ".*" ".*"$
           ignoreregex =
        2. jail.local中加入该模块信息

          [nginx-ssh]
          enabled = true
          filter = nginx-ssh
          logpath = /usr/local/nginx/conf/tcp.d/tcp-access.log
          maxretry = 5
          findtime = 6000
          bantime = -1
          port = all	#意为封禁该ip访问服务器所有端口
          
        3. 重启服务

          systemctl restart fail2-ban

        4. 查看

          fail2ban-client status nginx-ssh

          Status for the jail: nginx-ssh |- Filter | |- Currently failed: 22 | |- Total failed: 281 | - File list: /usr/local/nginx/conf/tcp.d/tcp-access.log- Actions |- Currently banned: 15 |- Total banned: 15 `- Banned IP list: 124.152.99.57 45.183.247.34 223.99.54.6 108.179.217.143 87.107.190.59 103.78.12.14 80.94.92.68 218.17.142.207 171.106.204.37 134.122.41.53 168.76.123.59 103.154.184.109 162.215.216.231 172.245.91.171 115.204.226.136

        ---------------------

        ---------------------

         

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]