目次
こんにちは角田(tsunoda)です。
ゼノバース2のレイドボス強ぇ~。。
最長老に会いたいけどなかなか会ってくれません(´ཀ`」 ∠)
Happy Halloween☆
そんな中先日、fail2banとCloud Armorの組み合わせでIPをbanしたのでご紹介します。
fail2banとは
fail2banとは、SSH等の不正アクセス(ログイン失敗)を検知し、一定時間そのIPアドレスからのアクセスをブロックするソフトです。
通常、fail2banは単体では使用せず、iptablesやfirewalldとともに使用します。
今回はCloud Armorを使用した次第です。
Cloud Armorとは
GCPのglobal HTTP(S) Load Balancerの新しいセキュリティ対策サービスです。
主な機能は以下になります。
DDoS対策
IP制限(whitelist,bkacklist)
まだbetaなので無料です☆
Policy,ルールの作成
CloudArmorのPolicyとルールを作成してみます。
Policyの作成
$ gcloud beta compute security-policies create sample-policy
Policyが作成されました。
次にルールの作成を行なってみましょう。
$ gcloud beta compute security-policies rules create 1000 \
--action deny-403 --security-policy sample-policy \
--description "block" --src-ip-ranges xxx.xxx.xxx.xxx/32
・1000は優先度です。
数字が低いほど優先度が上です。
・–action
許可、拒否の設定ができます。
拒否ステータスは以下が選択可能です。
403(サクセス拒否)
404(ファイル未検出)
502(不正なゲートウェイ)
・–security-policy
対象となるsecurity-policyの選択。
・–src-ip-ranges
許可または拒否したいIP。
ルールが作成されました。
fail2banでbanされたらCloudArmor発動!
fail2banでbanが実行
↓
そのIPに対してCLoud Armorで拒否ルールを作成
↓
unbanされたら拒否ルールを削除する。
という一連の流れをfail2ban側で設定します。
今回はnginxを使用しています。
まずはポリシールールの作成、削除のスクリプトを作成しておきます。
/test/make-policy.sh
/test/delete-policy.sh
作成したスクリプトをfail2ban/action.d/nginx-dos.conf
このファイルに登録しておきます。
[Definition]
actionban = sh /test/make-policy.sh
actionunban = sh /test/delete-policy.sh
さらにそのnginx-dos.confをfail2ban/jail.local
の
nginx-dosルールのactionに登録する。
[nginx-dos]
enabled = true
port = http,https
filter = nginx-dos
logpath = /var/log/fail2ban/fail2ban.log
maxretry = 15
findtime = 10
bantime = 180
action = nginx-dos
10秒の間に15回同じIPからアクセスが来たらそのIPを180秒banします。
すると、banされればactionbanに登録したmake-policy.shが、
unbanされればactionunbanに登録したdelete-policy.shが実行され、
ポリシールールの作成、削除が可能になります。
Cloud Armorの特徴
Cloud Armorを色々触って得た特徴をご紹介します。
・反映に時間がかかる。
ルールの作成、削除が実際に反映されるのに少し時間がかかりました。
2〜3分。
図のように、計算上はbantimeと同じ時間banされますが、
反映時間がまちまちなので30~60秒ぐらいbantimeとズレる事があります。
・同時にルールの作成、削除ができない。
ポリシールールを作成、または削除していると、
その間での新たな作成、削除はエラーで返ってきちゃいます。
まとめ
反映までに時間がかかるので、その間に負荷が上がってしまう事が考えられますが、
LB越しでのfail2banとの併用は大量のbotアクセスに対する対策になります。
LBでの拒否なので、今まではサーバ毎にバラバラにカウントしていたものが、
1台検知したら他のサーバでもbanできます。
betaで無料ですが、logは貯まるのでその料金は気をつけなきゃです。
fail2banは条件を分けてbantimeを設定できたり、
ホワイトリストも作れるし、
banactionもある程度自由なので個人的に好きだ!好きなんだよ!
それとGCPのサービスCloud Armorを合せて使ってみるのは面白かったです。
botアクセスによるサーバ負荷にお困りの方には一つの選択肢になるのではと思います。
株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。
grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud (GCP)、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。
お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。