【问题标题】:I'm seeing a lot of 500s in rails log from potential threats, how do I auto identify and block?我在 Rails 日志中看到很多来自潜在威胁的 500,如何自动识别和阻止?
【发布时间】:2025-11-29 22:55:02
【问题描述】:

我在 Rails 中看到很多 500 错误,比如

"ActionController::RoutingError (No route matches [GET] "/SQLiteManager/main.php"):" 

及其变体。显然,机器人试图找到一种登录方式。

是否有用于 rails 的 fail2ban 类型 gem 或 apache 中的其他东西来阻止这些客户端或 IP?

【问题讨论】:

    标签: ruby-on-rails apache


    【解决方案1】:

    如果您想在应用程序级别阻止 IP 地址,您可以在 application_controller 中使用简单的 before_filter 进行处理,如下所示

    class ApplicationController < ActionController::Base
      before_filter :authorize_request
    
      protected
    
      def authorize_request
        head :unauthorized if blocked_ip_addresses.include?(request_address)
      end
    
      def request_address
        request.env['HTTP_X_REAL_IP'] || request.env['REMOTE_ADDR']
      end
    
      def blocked_ip_addresses
        $redis.smembers('blocked_ip_address')
      end   
    end
    

    您可以通过以下方式将可疑 IP 地址添加到您的 redis 中

    $redis.sadd('blocked_ip_address','XX.XX.XX.XX')
    

    如果您不使用 redis,您可以将列表保存在数组中并手动更新它,这需要重新启动/部署应用程序。

    【讨论】: