fail2ban、denyhosts、blockhostsなどといった、ログを監視してパケットフィルタリングによるアクセス制限を行うツールについて、主にDebian GNU/Linuxを対象として調査したものです。(2013年4月27日時点)
いずれのソフトも、/var/log/auth.logなどのログを監視して、指定されたパターンのアクセスエラーが一定回数を超えるようであれば、iptablesやTCP Wrapperなどを利用してアクセス制限を行うツールです。いわゆるDoSアタックやブルートフォースアタックなどの攻撃の影響を抑えることができます。また、いずれもPythonで実装されており、アクセス制限を行うログパターンなどの設定は、正規表現を利用して簡単に記述できます。
下記の中でもfail2banが人気で、DebianのPopularity contest(人気コンテスト)では、コンテスト参加者のうちfail2banのインストール数が11096、denyhostsのインストール数が2821と4倍近く開いています。これは、ssh/apache/vsftpd/postfixといった色々なサービスを対象として監視できるfail2banと、sshに特化してシンプルに監視できるdenyhostsに人気が分かれており、オールマイティなfail2banのほうが人気なようです。blockhostsはDebianパッケージになっていませんが、導入はそれほど難しくないため、IPv6でも監視したい場合に便利でしょう。
fail2ban | denyhosts | blockhosts | |
---|---|---|---|
対応サービス | 色々なサービス(ssh/apache等) | sshのみ | sshd/proftpd等 |
フィルタリング | iptables/TCP Wrapper等 | TCP Wrapper | iptables/TCP Wrapper |
実装言語 | Python | Python | Python |
IPv6対応 | ☓ | ☓ | ○(blockhosts 2.7.0以降) |
Debianパッケージ | ○ あり | ○ あり | ☓ なし |
シェルスクリプト等で指定した行を抽出するのに、head/tailコマンドの組み合わせではなく、sed/awkを利用すると良い。よく忘れるのでメモ。
□ sedの利用例 --------------------------------------- * test.txtの3行目を出力 $ sed -n '3p' test.txt * test.txtの3-5行目を出力 $ sed -n '3,5p' test.txt * test.txtの3-5行目を削除して出力 $ sed '3,5d' test.txt --------------------------------------- * 解説 man sedを実行して参照すること + コマンドオプション -n, --quiet, --silent 自動的にパターンスペースを出力するのを止める + アドレス アドレス範囲は addr1,addr2 形式で指定する。 + コマンド p :現在のパターンスペースを出力する d :パターンスペースを削除して、次の処理を開始する
□ awkの利用例 --------------------------------------- * test.txtの3行目を出力 $ awk 'NR==3' test.txt * test.txtの3-5行目を出力 $ awk 'NR==3,NR==5' test.txt --------------------------------------- * 解説 man awkを実行して参照すること + 組み込み変数 NR :現在までに読み込んだ入力レコード数の合計。