fail2banのban通知をLine Notifyを使ってLINEグループに通知する

[Line Notify](https://notify-bot.line.me/ja/)というLINEのサービスを使うと、コマンドベースで任意のグループにメッセージを送れるようになります。
そこで、不正アクセスなどを検知した`fail2ban`が、特定のIPアドレスをbanしたときに、LINEグループに通知するようにしてみました。

このような感じに、スタンプの送信も可能です。
<img width="300" alt="linenotify4.png" src="https://qiita-image-store.s3.amazonaws.com/0/151669/59ddb77a-2004-a7e9-c0c4-1e3e8fd2baaa.png">


# バージョン
CentOS 7.3
fail2ban 0.9.6

# LINE側の準備
[Line Notify](https://notify-bot.line.me/ja/)はブラウザ上で操作します。 また通知用のLINEグループを作成するため、スマートフォンとブラウザの両方で操作が必要になります。

## LINEアプリに通知用のグループ作成
1. [Line Notify](https://notify-bot.line.me/ja/)をブラウザで開き、自分のLINEアカウントでログインします。
2. 自分のLINEアプリのトークに、**LINE Notify**から通知が来ていることを確認してください。 
3. fail2ban通知用のグループを自身のLINEアプリ上に作成します。 今回は、**fail2ban**というグループ名で作成しました。
4. 作ったグループのメンバーに**LINE Notify**を追加します。 これで、LINEアプリ側の準備は整いました。

## Line Notifyの通知用トークン作成
1. 次に、ブラウザ上の[Line Notify](https://notify-bot.line.me/ja/)の*マイページ* にいきます。
<img width="350" alt="linenotify1.png" src="https://qiita-image-store.s3.amazonaws.com/0/151669/595fc6d6-cc5e-3fb7-5064-133360f539b6.png">

2. *Generate token*をクリックます。 
<img width="350" alt="linenotify3.png" src="https://qiita-image-store.s3.amazonaws.com/0/151669/5d265aff-f51e-9945-1275-04f8c9d11d32.png">


3. トークン用の設定画面が出るので、トークン名と事前に作成した**fail2ban**用のグループを選択します。今回は、トークン名は**TEST**としています。 *Ganarate token*をクリックします。
<img width="350" alt="linenotify.png" src="https://qiita-image-store.s3.amazonaws.com/0/151669/9430bff8-0d25-8157-c8da-982e69901d1e.png"> 

4. トークンが画面に出てくるので、コピーしてとっておきます。
<img width="350" alt="linenotify5.png" src="https://qiita-image-store.s3.amazonaws.com/0/151669/6187b77b-9c26-d6f8-4a70-dcecb08c4258.png">


# fail2banの設定
fail2banにはLINE通知用のアクションは無いため、新規に作成します。 作成したactionをjailの定義に組み込みます。

## actionの作成
`/etc/fail2ban/action.d`下にLINE通知用のactionファイルを新規に作成します。 今回は、send-line.confというファイルにしています。

```
vi /etc/fail2ban/action.d/send-line.conf 
```
設定内容は、これだけです。
`xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`は、Line Notifyで取得したトークンです。差し替えてください。

```/etc/fail2ban/action.d/send-line.conf
[Definition]

actionban = curl -X POST -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' -F 'message=[Fail2Ban] <name>: banned <ip>' -F 'stickerPackageId=1' -F 'stickerId=14' https://notify-api.line.me/api/notify

[Init]
name = default
```

+ message : テキストメッセージ
+ stickerPackageId ： スタンプグループID
+ stickerId ： スタンプID

スタンプグループIDやスタンプIDの一覧は、以下URLにて公開されています。
Lineスタンプ一覧：[ttps://devdocs.line.me/files/sticker_list.pdf](https://devdocs.line.me/files/sticker_list.pdf)

テキスト通知だけで良いのであれば、`stickerPackageId`と`stickerId`を適宜外してください。

## jailの設定
今回は、sshdのjail設定に、先ほど作成したLINE通知設定を組み込んでみました。

```
vi /etc/fail2ban/jail.d/02-enable-jail.conf
```

sshdのセクションの`action`に`send-line[name=sshd]`を追加します。

```/etc/fail2ban/jail.d/02-enable-jail.conf
[sshd]
enabled = true
action  = firewallcmd-multiport[name=sshd, port="ssh", protocol=tcp, blocktype=DROP]
          sendmail-whois-ipjailmatches[name=sshd, sender=fail2ban@xxx.co.jp, dest=root@xxx.co.jp]
          send-line[name=sshd]
```

これで、準備は完了です。

#確認
sshdのjailをリロードしてみます。

```
# fail2ban-client reload sshd
```

うまくいけば、ban通知がLINEに来るはずです。
<img width="350" alt="linenotify4.png" src="https://qiita-image-store.s3.amazonaws.com/0/151669/59ddb77a-2004-a7e9-c0c4-1e3e8fd2baaa.png">

# 参考
LINE Engineers' Blog: [http://developers.linecorp.com/blog/ja/?p=3819](http://developers.linecorp.com/blog/ja/?p=3819)