---
title: "fail2banとCloud Armorでbanする | grasys blog"
url: "https://blog.grasys.io/post/tsunoda/cloud-armor-2/"
description: "こんにちは角田(tsunoda)です。 ゼノバース２のレイドボス強ぇ 。。 最長老に会いたいけどなかなか会ってくれません(´ཀ\\ 」 ∠) Happy Halloween☆ そんな中先日、fail2banとCloud Armorの組み合わせでIPをbanしたのでご紹介します。 fail2banとは fail2banと…"
---

# fail2banとCloud Armorでbanする

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[tsunoda](/authors/tsunoda/)
-   公開日：2018年10月31日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#Cloud Armor](/tags/cloud-armor/)

![fail2banとCloud Armorでbanする](/_astro/og-image.DDSiu2Ny_XHpDd.webp)

こんにちは角田(tsunoda)です。  
ゼノバース２のレイドボス強ぇ~。。  
最長老に会いたいけどなかなか会ってくれません(´ཀ\`」 ∠)  
Happy Halloween☆

そんな中先日、fail2banとCloud Armorの組み合わせでIPをbanしたのでご紹介します。

## fail2banとは

fail2banとは、SSH等の不正アクセス（ログイン失敗）を検知し、一定時間そのIPアドレスからのアクセスをブロックするソフトです。  
通常、fail2banは単体では使用せず、iptablesやfirewalldとともに使用します。  
今回はCloud Armorを使用した次第です。

## Cloud Armorとは

GCPのglobal HTTP(S) Load Balancerの新しいセキュリティ対策サービスです。  
主な機能は以下になります。

Plain textcontent\_copy

```
DDoS対策  
IP制限(whitelist,bkacklist)
```

まだbetaなので無料です☆

## Policy,ルールの作成

CloudArmorのPolicyとルールを作成してみます。  
Policyの作成

Plain textcontent\_copy

```
$ gcloud beta compute security-policies create sample-policy
```

![Policy,ルールの作成の画面（1）](/_astro/01-11-4-1024x477-1a7c7374.2oufduhB_Z2m5i7R.webp)

Policyが作成されました。

次にルールの作成を行なってみましょう。

Plain textcontent\_copy

```
$ 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。

![Policy,ルールの作成の画面（2）](/_astro/02-12-3-1024x531-5b730682.CejALDkn_Z4Md6V.webp)

ルールが作成されました。

## fail2banでbanされたらCloudArmor発動！

Plain textcontent\_copy

```
fail2banでbanが実行  
↓
そのIPに対してCLoud Armorで拒否ルールを作成
↓ 
unbanされたら拒否ルールを削除する。  
```

という一連の流れをfail2ban側で設定します。  
今回はnginxを使用しています。

まずはポリシールールの作成、削除のスクリプトを作成しておきます。

Plain textcontent\_copy

```
/test/make-policy.sh
/test/delete-policy.sh
```

作成したスクリプトを  
`fail2ban/action.d/nginx-dos.conf`  
このファイルに登録しておきます。

Plain textcontent\_copy

```
[Definition]

actionban = sh /test/make-policy.sh

actionunban = sh /test/delete-policy.sh
```

さらにそのnginx-dos.confを`fail2ban/jail.local`の  
nginx-dosルールのactionに登録する。

Plain textcontent\_copy

```
[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分。

![Cloud Armorの特徴の画面](/_astro/03-13-3-1024x680-8af6fd22.KiosXCYc_mXnhN.webp)

図のように、計算上はbantimeと同じ時間banされますが、  
反映時間がまちまちなので30~60秒ぐらいbantimeとズレる事があります。

・同時にルールの作成、削除ができない。  
ポリシールールを作成、または削除していると、  
その間での新たな作成、削除はエラーで返ってきちゃいます。

## まとめ

反映までに時間がかかるので、その間に負荷が上がってしまう事が考えられますが、  
LB越しでのfail2banとの併用は大量のbotアクセスに対する対策になります。  
LBでの拒否なので、今まではサーバ毎にバラバラにカウントしていたものが、  
1台検知したら他のサーバでもbanできます。  
betaで無料ですが、logは貯まるのでその料金は気をつけなきゃです。

fail2banは条件を分けてbantimeを設定できたり、  
ホワイトリストも作れるし、  
banactionもある程度自由なので個人的に好きだ！好きなんだよ！  
それとGCPのサービスCloud Armorを合せて使ってみるのは面白かったです。  
botアクセスによるサーバ負荷にお困りの方には一つの選択肢になるのではと思います。

## この記事を書いた人

[![](/_astro/tsunoda.CrA_Wh9V_Z1aOeCP.webp)](/authors/tsunoda/)

### [tsunoda](/authors/tsunoda/)

tsunodaのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/tsunoda/)
