机架攻击
机架攻击,也被称为Rack :: Attack,是一个rubygem ,旨在保护GitLab能够自定义限制和阻止用户IP。您可以通过限制来自大量请求的IP地址的请求来防止强力密码攻击,刮板或任何其他违规者。如果您发现节流不足以保护您免受滥用客户的侵害,Rack Attack可提供IP白名单,黑名单,Fail2ban风格过滤和跟踪功能。
默认情况下,用户登录,用户注册(如果启用)和用户密码重置限制为每分钟6个请求。经过6次尝试后,客户必须等待下一分钟才能再次尝试。
如果您按照官方指南安装或升级了GitLab,则 默认情况下应启用此功能。如果您的实例未暴露给任何传入连接,建议禁用机架攻击。
有关如何使用这些选项的更多信息,请查看 机架攻击自述文件。
设置
Omnibus GitLab
打开/etc/gitlab/gitlab.rb你的编辑器
添加以下内容:
gitlab_rails['rack_attack_git_basic_auth']={'enabled'=>true,'ip_whitelist'=>["127.0.0.1"],'maxretry'=>10,'findtime'=>60,'bantime'=>3600}
重新配置GitLab:
sudo gitlab-ctl reconfigure
可以配置以下设置:
enabled:默认情况下,它被设置为true。将其设置false为禁用Rack Attack。
ip_whitelist:将任何IP阻止白名单。它们必须格式化为ruby数组中的字符串。例如,["127.0.0.1", "127.0.0.2", "127.0.0.3"]。
maxretry:在指定时间内请求的最大次数。
findtime:在IP被列入黑名单之前,最大的时间失败请求数可以对IP进行计数。
bantime:列入黑名单的IP将在几秒钟内被阻止的总时间。
从源安装
这些设置可以在中找到config/initializers/rack_attack.rb。如果缺少config/initializers/rack_attack.rb,需要执行以下步骤才能启用对GitLab实例的保护:
在config/application.rb查找并取消注释以下行:
config.middleware.useRack::Attack
复制config/initializers/rack_attack.rb.example到config/initializers/rack_attack.rb
打开config/initializers/rack_attack.rb,查看 paths_to_be_protected并添加您需要保护的任何其他路径
重新启动GitLab:
sudo service gitlab restart
如果你想要更多的限制/轻松的油门规则,编辑 config/initializers/rack_attack.rb和更改limit或period值。例如,如果你设置limit: 3和period: 1.seconds(这将允许每秒3个请求),则更加宽松的节流规则 。您还可以通过添加到paths_to_be_protected 变量来将其他路径添加到受保护的列表中。如果你改变了这些设置,不要忘记重新启动你的GitLab实例。
通过Redis从Rack Attack中删除阻止的IP
如果您想要删除阻止的IP,请按照下列步骤操作:
查找生产日志中被阻止的IP:
grep "Rack_Attack" /var/log/gitlab/gitlab-rails/production.log
由于黑名单存储在Redis中,因此您需要打开redis-cli:
/opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket
您可以使用以下语法删除该块,替换为列入黑名单的实际IP:
del cache:gitlab:rack::attack:allow2ban:ban:《ip》
确认具有IP的密钥不再显示:
keys *rack::attack*
或者,将IP添加到白名单以防止它再次被列入黑名单(请参阅设置)。
故障排除
机架式攻击会将负载平衡器列入黑名单
如果所有流量似乎来自负载平衡器,机架攻击可能会阻止您的负载平衡器。在这种情况下,您需要:
配置nginx[real_ip_trusted_addresses]。这将使用户的IP不被列为负载平衡器IP。
在Rack Attack 设置中将负载均衡器的IP地址列入白名单。
重新配置GitLab:
sudo gitlab-ctl reconfigure
通过Redis移除该块。