Nginx GitLab发布临时IP禁令-403禁止

Nginx GitLab发布临时IP禁令-403禁止,nginx,gitlab,ip-address,access-control,Nginx,Gitlab,Ip Address,Access Control,我的GitLab实例设置偶尔会对我们自己的IP地址实施IP禁令,导致办公室中的所有用户在任何网页或git请求上都被403/禁止 这项禁令是由于身份验证的反复错误而实施的,这是一个单独的问题,但我想阻止我们自己的IP地址被IP禁止。大约持续一个小时 在nginx日志中,gitlab_access.log或gitlab_error.log文件中不会弹出任何异常。服务器仍在运行,在禁令生效期间,外部IP地址不受影响 我希望能够将我们自己的IP地址列入白名单,或者能够在禁令出现后禁用禁令(重启gitla

我的GitLab实例设置偶尔会对我们自己的IP地址实施IP禁令,导致办公室中的所有用户在任何网页或git请求上都被403/禁止

这项禁令是由于身份验证的反复错误而实施的,这是一个单独的问题,但我想阻止我们自己的IP地址被IP禁止。大约持续一个小时

在nginx日志中,gitlab_access.log或gitlab_error.log文件中不会弹出任何异常。服务器仍在运行,在禁令生效期间,外部IP地址不受影响


我希望能够将我们自己的IP地址列入白名单,或者能够在禁令出现后禁用禁令(重启gitlab不会解除禁令)。如果这两种方法都不可行,那么只需找到将禁令持续时间从一小时缩短到一小时的设置也可以。

我们正在运行Gitlab EE,对我们来说,这个问题是由在Gitlab CI runner上的构建内部使用和Gitlab服务器上的组合引起的

背景 为了解决git lfs 1.2.1的问题(尽管克隆了公共存储库,但仍坚持要求用户名和密码),构建包含以下内容:

git clone https://fakeuser:fakepassword@git.domain.com/group/repo.git
在构建时,这导致来自运行程序的每个LFS请求触发使用fakeuser的登录尝试,显然每次都失败了。但是,由于服务器实际上不需要登录,因此客户端可以继续使用LFS下载文件,构建过程就通过了

问题 IP禁止在安装软件包
机架攻击
时开始。默认情况下,在10次登录尝试失败后,
rack attack
将禁止源IP一小时。这导致所有跑步者都被完全阻止进入Gitlab(即使从跑步者那里访问网页也会返回
403禁止的

解决方法(不安全) 如果服务器(在我们的例子中是Gitlab Runner)是可信的,一个短期解决方法是将服务器的IP添加到
机架攻击
配置中的白名单中。也可以调整禁止时间,或允许更多失败的尝试

/etc/gitlab/gitlab.rb
中的配置示例:

gitlab_rails['rack_attack_git_basic_auth'] = {
  'enabled' => true,
  'ip_whitelist' => ["192.168.123.123", "192.168.123.124"],
  'maxretry' => 10,
  'findtime' => 60,
  'bantime' => 600
}
在本例中,我们将服务器
192.168.123.123
192.168.123.124
列为白名单,并将禁止时间从1小时调整为10分钟(600秒)
maxretry=10
允许用户在禁止前10次错误获取密码,
findtime=60
表示失败的尝试计数器在60秒后重置

然后,在更改生效之前,您应该重新配置gitlab
sudo gitlab ctl重新配置

有关配置示例的
YAML
版本的更多详细信息,请参阅

注意:白名单服务器不安全,因为它完全禁用白名单IP上的阻止/限制

解决方案
这个问题的解决方案应该是停止失败的登录尝试,或者可能只是缩短禁止时间,因为白名单使Gitlab容易受到来自所有白名单服务器的密码暴力攻击。

请按照以下步骤删除IP的禁止

  • 在生产日志中查找已被阻止的IP:

    grep“框架攻击”/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:


  • GitLab文档来源:

    GitLab使用redis存储被禁止的ip,以查找redis密钥

  • 使用
    sudo find/-name redis.conf
  • 使用sudogrepunixsocket/var/opt/gitlab/redis/redis.conf查找redis套接字
  • 通过redis cli-s/var/opt/gitlab/redis/redis.socket通过套接字连接到redis服务器,然后查找并删除被禁止的ip

  • RE:你的解决方案:我正在试验的另一种配置是对失败登录的指数禁止时间,即大致如下:“在10秒内20次失败登录后,禁止(短时间)。在5分钟内40次失败登录后,禁止(长一点)……在1天内200次失败登录后,禁止(短时间)(更长的时间)”。我们遇到了相同的问题,但没有看到失败的登录,只是一些创建映像的作业,虽然不太多,但比平常更多。当出现峰值作业时,这种情况会发生两次,有时由于资源被禁止而失败,但登录没有失败。不确定这是否有帮助,但请查看另一个问题来源。
    /var/opt/gitlab/redis/redis.conf
    
    unixsocket /var/opt/gitlab/redis/redis.socket
    
    redis-cli -s /var/opt/gitlab/redis/redis.socket
    redis /var/opt/gitlab/redis/redis.socket> keys *attack*
    "cache:gitlab:rack::attack:allow2ban:ban:115.171.85.150"
    redis /var/opt/gitlab/redis/redis.socket> del cache:gitlab:rack::attack:allow2ban:ban:115.171.85.150