QNAP NASのIP制限をターミナルから行う

QNAP NASにはIP制限機能があり、特定のIPアドレスからのアクセスをブロックしたり許可したりできます。
これは、通常は以下のような管理画面から設定して行います。

ipblock-gui

しかし、Webサーバを外部に公開する場合は沢山のIPアドレスから攻撃を受けることになります。
これらを拒否するために一つ一つ管理画面から入力するのは多大な労力です。
出来れば自動でブロックしたいものです。
ターミナル上から該当する設定ファイルを書き換えられれば自動化は出来そうです。

上記のIP制限情報は以下の設定ファイルに書き込まれています。

 /etc/config/ipsec_allow.conf ・・・許可リスト
 /etc/config/ipsec_deny.conf ・・・拒否リスト

したがって、このファイルを直接編集すると管理画面から入力せずともIP制限情報を追加できます。
このファイルの中身は以下のようになっています。

0:91.207.5.186::0:1394452356
0:111.111.111.111::0:1394839501
1:222.222.222.222:255.255.192.0:30:1394874102
2:222.222.222.222:234.234.234.234:60:0:1394897777
0:123.123.123.123::0:1397868990
0:124.124.124.124::0:1397869709

1行1行がIP制限情報に相当します。
これは以下の形式になっています。

Arg1:Arg2:Arg3:Arg4:Arg5

Arg1(Type)
 0 : 単一のIPアドレス
 1 : IPアドレスとネットマスクを設定し、特定のネットワークのIPアドレスを指定
 2 : IP範囲

Arg2
 (Type 0) IP
 (Type 1) IP
 (Type 2) 開始IP

Arg3
 (Type 0) 未使用
 (Type 1) ネットマスク
 (Type 2) 終了IP

Arg4
 ブロック期間(分単位)。0で無期限。

Arg5
 ブロック開始時刻。
 以下コマンドで得られる表現形式である。

date +%s

比較的単純な構造です。

上記ファイルの変更内容を有効にするには、以下コマンドを実行します。

/sbin/ip_filter ; /etc/init.d/qsyncman.sh restart

上記IP制限の処理は以下シェルにまとめておきました。
宜しければご自由にお使い下さい。

#!/bin/sh

FILE="/etc/config/ipsec_deny.conf"      # 許可リストの場合はipsec_allow.confに変える
DATE=`date +%s`

echo $1:$2:$3:$4:$DATE >> $FILE
/sbin/ip_filter ; /etc/init.d/qsyncman.sh restart

■参考サイト
Automated Blacklist Creation
Deny list with IP-addresses