web-dev-qa-db-ja.com

GitLabが一時的なIP禁止を発行-403禁止

GitLabインスタンスのセットアップにより、私たち自身のIPアドレスにIPが禁止されることがあり、その結果、オフィスのすべてのユーザーが403/Webページまたはgitリクエストで禁止されます。

エラーの繰り返しの結果として禁止が導入されていますが、これはまったく別の問題ですが、私たち自身のIPアドレスがIP禁止されるのを防ぎたいと思います。約1時間続きます。

Nginxログでは、gitlab_access.logまたはgitlab_error.logファイルに異常なものは何も表示されません。サーバーはまだ実行されており、禁止が実施されている間は外部IPアドレスは影響を受けません。

自分のIPアドレスをホワイトリストに登録できるようにしたい、または禁止が発生したら無効にできるようにしたい(gitlabを再起動しても禁止は解除されない)。どちらも不可能な場合は、禁止期間を1時間から微調整する設定を見つけるだけでも問題ありません。

20
Blazing

Gitlab EEを実行していますが、この問題は、Gitlab CIランナーのビルド内で git lfs を使用し、 インストール済み - rack-attack gem Gitlabサーバー上。

バックグラウンド

git-lfs 1.2.1の問題(パブリックリポジトリを複製しているにもかかわらずユーザー名とパスワードを要求する場合)を回避するために、ビルドには次の行が含まれていました。

git clone https://fakeuser:[email protected]/group/repo.git

ビルド時に、これにより、ランナーからのすべてのLFSリクエストがfakeuserでのログイン試行をトリガーすることになり、明らかに毎回失敗しました。ただし、サーバーが実際にログインする必要はないため、クライアントはLFSを使用してファイルのダウンロードを続行でき、ビルドは成功しました。

問題

パッケージrack-attackがインストールされたときにIP禁止が開始されました。デフォルトでは、ログイン試行に10回失敗すると、rack-attackは1時間、Origin IPを禁止します。これにより、すべてのランナーがGitlabから完全にブロックされました(ランナーからWebページにアクセスしても、403 Forbiddenが返されます)。

回避策(安全でない)

サーバー(この場合はGitlabランナー)が信頼されている場合の短期的な回避策は、サーバーのIPをrack-attack構成のホワイトリストに追加することです。禁止時間を調整したり、失敗した試行をさらに許可したりすることもできます。

/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 reconfigure

詳細および構成例のYAMLバージョンについては、 gitlab.yml.example を参照してください。

注:ホワイトリストサーバーは、ホワイトリストに登録されたIPのブロック/スロットルを完全に無効にするため、安全ではありません。

溶液

この問題の解決策は、失敗したログイン試行を停止するか、または禁止時間を短縮することです。これは、ホワイトリストにより、Gitlabがすべてのホワイトリストサーバーからのパスワードブルートフォース攻撃に対して脆弱になるためです。

15
jonatan

次の手順に従って、IPの禁止を解除します

  1. 実動ログでブロックされたIPを見つけます。

    grep "Rack_Attack" /var/log/gitlab/gitlab-Rails/production.log

  2. ブラックリストはRedisに保存されているため、redis-cliを開く必要があります。

    /opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket

  3. 次の構文を使用してブロックを削除し、ブラックリストに登録されている実際のIPに置き換えることができます。

    del cache:gitlab:rack::attack:allow2ban:ban:<ip>

GitLab Docsのソース: ブロックされたIPをRedis経由でRack Attackから削除

8
Pavlo Neyman

gitlabはredisを使用して禁止されたIPを保存し、redisキーを見つけ、

  1. redis.confを含むredis構成ファイルSudo find / -name redis.confを検索します
/var/opt/gitlab/redis/redis.conf
  1. Sudo grep unixsocket /var/opt/gitlab/redis/redis.confでredisソケットを見つける
unixsocket /var/opt/gitlab/redis/redis.socket
  1. redis-cli -s /var/opt/gitlab/redis/redis.socketでソケットを使用してredisサーバーに接続し、禁止IPを見つけて削除します
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
0
Kris Roofe