描述

个别用户突然出现403 forbidden
服务器环境:docker
gitlab 版本:8.7
查看日志:

192.161.11.20 - - [08/Jan/2018:17:01:32 +0800] "GET / HTTP/1.1" 403 10 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
192.161.11.20 - - [08/Jan/2018:17:01:49 +0800] "GET / HTTP/1.1" 403 10 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
192.161.11.20 - - [08/Jan/2018:17:02:09 +0800] "GET / HTTP/1.1" 403 10 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
192.161.11.20 - - [08/Jan/2018:17:02:20 +0800] "GET / HTTP/1.1" 403 10 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
192.161.11.20 - - [08/Jan/2018:17:02:20 +0800] "GET / HTTP/1.1" 403 10 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
192.161.11.20 - - [08/Jan/2018:17:02:22 +0800] "GET / HTTP/1.1" 403 10 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
192.161.11.20 - - [08/Jan/2018:17:02:24 +0800] "GET / HTTP/1.1" 403 10 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
192.161.11.20 - - [08/Jan/2018:17:02:25 +0800] "GET / HTTP/1.1" 403 10 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"

统计下次数:

root@783977abd2ec:/home/git/gitlab# cat /var/log/gitlab/nginx/gitlab_access.log | grep 403 | grep "192.161.11.20" | wc -l
62
root@783977abd2ec:/home/git/gitlab#

排查

因为其他用户正常,并且此用户之前也正常。那肯定不是服务器系统配置问题。

找到官方的讨论版:
https://gitlab.com/gitlab-org/gitlab-ce/issues/1171

我挨着查看了以下可能:

  • 检查 session:redis-cli keys '*' | grep '^[a-f0-9]\{32\}$' | wc -l,结果为0。
  • 检查 nginx 配置:之前就排除了。
  • 检查 attack :redis-cli keys '*' | grep 'rack::attack' 有一条数据。
root@9152a066a2ba:/usr/bin#
root@9152a066a2ba:/usr/bin# redis-cli keys '*' | grep 'rack::attack'
cache:gitlab:rack::attack:allow2ban:ban:192.161.11.20
root@9152a066a2ba:/usr/bin# redis-cli -h
redis-cli 2.8.4

这个 ip 正是不能访问的 ip。

找到了问题,就好解决了。我计划的解决方法:

  1. 查找资料,确认能否直接删除掉 redis 中的这条数据。
  2. 搜索 redis-cli 命令用法,用这个命令删除掉这个 key。

第一步还没有做完,这个数据就自动删除了。囧!!!查找资料发现,是可以直接删除的,接下来就是用 redis-cli 删除指定的 key。
第二步:删除 redis 中指定的 key:

redis-cli keys '*' | grep 'rack::attack' | xargs redis-cli DEL

为什么?

在 /home/git/gitlab/config/gitlab.yml 文件中,有rack_attack 配置,如果是内网就直接把 enabled 设置为 false,如果为外网可根据实际情况来调大 maxretry 。

  rack_attack:
    git_basic_auth:
      # Rack Attack IP banning enabled
      enabled: true
      #
      # Whitelist requests from 127.0.0.1 for web proxies (NGINX/Apache) with incorrect headers
      ip_whitelist: [127.0.0.1]
      #
      # Limit the number of Git HTTP authentication attempts per IP
      maxretry: 10
      #
      # Reset the auth attempt counter per IP after 60 seconds
      findtime: 60
      #
      # Ban an IP for one hour (3600s) after too many auth attempts
      bantime: 3600
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐