大規模ゲームでGitLFS使ったらgitlabサーバから拒否られた
はじめに
結構大規模のソシャゲを運用してるんですが、アセット部分の管理にSVNを使っておりまして。
運用年数が増えるにつれて使ってるSVNサーバの容量が数TB規模に…。コンナニフエルノ…
そのため、gitへ移行してGitLFSにしようぜ!と相成りました。
GitLFSとは
git自体はソースコードの管理は得意なものの、音声・動画・画像などの容量の大きなファイルを扱うことが不得意。
そのため、それら大きなファイルを扱うために Git LFS(Large File Storage) という便利な機能が用意されてます。
詳しくはわかりやすいbacklogのGitLFS説明などをご参考に。
GitLFSで運用開始
頑張ってアセットをSVNからgitへ移行し、さぁ運用開始。
初っ端はちまちま上げてたので、大きな問題なくいい感じに使えていました。GitLFS下でうまく動いている、と思ってました…
少しした頃、使っているゲームエンジンのバージョンアップに伴い、多くのアセットファイルを一気に上げる必要になりました。
それを上げてもらっている最中、他のプロジェクトから
「gitlabサーバ落ちてません?」
と連絡が。…ん?サービスは落ちてはない。なんか接続できない…
んーなんでだ?って思いつつも取り急ぎ調査してみると、アクセスが拒否られている。
DoS攻撃対策が効きすぎ…?ということでちょっと止めるわけにはいけない状況ので一旦DoS攻撃対策の設定をOFFにして回避。
ひとまずこれで!と連絡して別作業してたら
「あの…またgitlabサーバ繋がらないんですが…」
と連絡が(;´Д`)
しっかりと原因調査
え、何、ガチで攻撃されてる!?と思ってgitlabサーバのログを見てみる。
Rack_Attack: blacklist XXX.XXX.XXX.XXX POST /YYYYYYYY/info/lfs/objects/batch
Rack_Attack: blacklist XXX.XXX.XXX.XXX POST /YYYYYYYY/info/lfs/objects/batch
Rack_Attack: blacklist XXX.XXX.XXX.XXX POST /YYYYYYYY/info/lfs/objects/batch
Rack_Attack: blacklist XXX.XXX.XXX.XXX POST /YYYYYYYY/info/lfs/objects/batch
Rack_Attack: blacklist XXX.XXX.XXX.XXX POST /YYYYYYYY/info/lfs/objects/batch
Rack_Attack: blacklist XXX.XXX.XXX.XXX POST /
…あれ?このXXX.XXX.XXX.XXXって…ウチの会社ですな。
ん?lfs…?
これバージョンアップで上げようとしてるアセットのせいか!!!これが大量アクセスでDoS扱いされてんのか!!
ということで原因は判明しました\(^o^)/
解決策
必要な作業なのでホワイトリストに追加しなければ、ということでホワイトリストへ追加。
グローバルIPはCMANやcurlでそういうサイトにアクセスして調べます。
curl inet-ip.info
gitlabサーバにアクセスし、/etc/gitlab/gitlab.rb
のrack_attack_git_basic_auth
にあるip_whitelist
の配列に会社のグローバルIPを追加。
コメントアウトされてる場合はそれ解除。
gitlab_rails['rack_attack_git_basic_auth'] = {
'enabled' => true,
'ip_whitelist' => ["127.0.0.1", '会社のグローバルIP'],
'maxretry' => 10,
'findtime' => 60,
'bantime' => 3600
}
反映するために以下実行。
gitlab-ctl reconfigure
これでOK!!!
無事gitlabから拒否られることはなくなりました。
最後に
元々ホワイトリストに会社のGIP登録はあったんですが、古かった。
ネット回線を数年前に変えたため、GIP変わってたんですよね…
それの登録が漏れていた。
インフラ担当者は募集してるんですけどね!
決まったらこのあたりの管理お願いしたいなぁ。それまではエンジニア皆で頑張って保守!
Discussion