GitLabインスタンスのセットアップにより、私たち自身のIPアドレスにIPが禁止されることがあり、その結果、オフィスのすべてのユーザーが403/Webページまたはgitリクエストで禁止されます。
エラーの繰り返しの結果として禁止が導入されていますが、これはまったく別の問題ですが、私たち自身のIPアドレスがIP禁止されるのを防ぎたいと思います。約1時間続きます。
Nginxログでは、gitlab_access.logまたはgitlab_error.logファイルに異常なものは何も表示されません。サーバーはまだ実行されており、禁止が実施されている間は外部IPアドレスは影響を受けません。
自分のIPアドレスをホワイトリストに登録できるようにしたい、または禁止が発生したら無効にできるようにしたい(gitlabを再起動しても禁止は解除されない)。どちらも不可能な場合は、禁止期間を1時間から微調整する設定を見つけるだけでも問題ありません。
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がすべてのホワイトリストサーバーからのパスワードブルートフォース攻撃に対して脆弱になるためです。
次の手順に従って、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>
GitLab Docsのソース: ブロックされたIPをRedis経由でRack Attackから削除
gitlabはredisを使用して禁止されたIPを保存し、redisキーを見つけ、
redis.conf
を含むredis構成ファイルSudo find / -name redis.conf
を検索します/var/opt/gitlab/redis/redis.conf
Sudo grep unixsocket /var/opt/gitlab/redis/redis.conf
でredisソケットを見つけるunixsocket /var/opt/gitlab/redis/redis.socket
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