「IAX-Fail2ban」の版間の差分

提供: VoIP-Info.jp
移動先: 案内検索
(新しいページ: 'SIPでのFail2banは'''SIP-Fail2ban'''を参照してください。<br> ここでの解説はSIPとIAXを併用するようになっています。<br> <br> ==fail2ban== ...')
 
 
(他の1人の利用者による、間の2版が非表示)
1行目: 1行目:
 
SIPでのFail2banは'''[[SIP-Fail2ban]]'''を参照してください。<br>
 
SIPでのFail2banは'''[[SIP-Fail2ban]]'''を参照してください。<br>
ここでの解説はSIPとIAXを併用するようになっています。<br>
+
ここでの解説はSIPとIAXを併用するようになっています。併用する場合にはインストール作業自体は、1度やればいいです。あたりまえですが。<br>
 
<br>
 
<br>
 
==fail2ban==
 
==fail2ban==
13行目: 13行目:
 
展開したディレクトリでインストールを実行します。
 
展開したディレクトリでインストールを実行します。
 
  cd fail2ban-0.8.4
 
  cd fail2ban-0.8.4
  python ./setup.py
+
  python ./setup.py install
 
スタートアップ・スクリプトをコピーしておきます(CentOSなどRedHat系の場合の例)。
 
スタートアップ・スクリプトをコピーしておきます(CentOSなどRedHat系の場合の例)。
  cp files/redhat-initd /etc/init.d/fail2ban install
+
  cp files/redhat-initd /etc/init.d/fail2ban
  
 
==設定==
 
==設定==
56行目: 56行目:
 
  failregex = No registration for peer '.*' \(from <HOST>\)
 
  failregex = No registration for peer '.*' \(from <HOST>\)
 
             Host <HOST> failed MD5 authentication
 
             Host <HOST> failed MD5 authentication
 
+
 
  # Option:  ignoreregex
 
  # Option:  ignoreregex
 
  # Notes.:  regex to ignore. If this regex matches, the line is ignored.
 
  # Notes.:  regex to ignore. If this regex matches, the line is ignored.
97行目: 97行目:
 
  enabled  = true
 
  enabled  = true
 
  filter  = asterisk-iax
 
  filter  = asterisk-iax
  action  = iptables-sip[name=ASTERISK, protocol=all]
+
  action  = iptables-iax[name=ASTERISK, protocol=all]
 
             sendmail-whois[name=ASTERISK, dest=root, sender=fail2ban@example.net]
 
             sendmail-whois[name=ASTERISK, dest=root, sender=fail2ban@example.net]
 
  logpath  = /var/log/asterisk/messages
 
  logpath  = /var/log/asterisk/messages

2013年6月25日 (火) 11:13時点における最新版

SIPでのFail2banはSIP-Fail2banを参照してください。
ここでの解説はSIPとIAXを併用するようになっています。併用する場合にはインストール作業自体は、1度やればいいです。あたりまえですが。

fail2ban

ログファイルとiptablesを利用したファイアウォールの一種。Brute Forceアタックの対策に使いやすい。

http://www.fail2ban.org/
http://sourceforge.net/projects/fail2ban/

動作条件

pythonとiptablesが必要。yum install python iptablesなどで入れておいて下さい。

インストール

まずSFからfail2banをダウンロードし、展開します。

tar jxvf fail2ban-0.8.4.tar.bz2

展開したディレクトリでインストールを実行します。

cd fail2ban-0.8.4
python ./setup.py install

スタートアップ・スクリプトをコピーしておきます(CentOSなどRedHat系の場合の例)。

cp files/redhat-initd /etc/init.d/fail2ban

設定

Asteriskのログフォーマットを変更する

Fail2banはそのままではAsteriskのログの日付を認識できないため、Asteriskのログフォーマットを変更します。
/etc/asterisk/logger.confを編集し、日付のフォーマット変更を行います。
[general]セクションにある

dateformat=%F %T

のコメントを外すか、もしこのエントリがなければ記述します。設定を変更したら、Asteriskを再起動するか、loggerモジュールのリロードを行って、変更を有効にします。これによりAsteriskのログの日付形式が以下のように変わりますので、確認してください。

[2010-12-30 09:25:25] NOTICE[17537] chan_sip.c:.....

Asterisk用の定義ファイルを作る

/etc/fail2ban/filter.d ディレクトリに asterisk-iax.conf という名前で以下のようなファイルを作ります。ここで指定したメッセージがBAN基準として使われるメッセージとなります。

Asterisk 1.8系の場合

# Fail2Ban configuration file
#
#
# $Revision: 250 $
#

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
#before = common.conf


[Definition]

#_daemon = asterisk

# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P<host>\S+)
# Values:  TEXT
#

failregex = No registration for peer '.*' \(from <HOST>\)
            Host <HOST> failed MD5 authentication

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

この部分に合致するメッセージが、ログファイルに現れたならばBAN基準になりますので注意して記述します。これ意外にも、引っかけたいメッセージがある場合にはそれも記述するとよいでしょう。
1.6までのメッセージ募集中。編集してください。

BANのアクションを作成する

ここではUDPの4569ポート、つまりIAXだけをBAN対象としたいためアクションをIAX用に作成します。 /etc/fail2ban/action.d で以下のようにしてアクションを作成します。
まず

cp iptables-allports.conf iptables-iax.conf

を行って、全ポート用のアクションをコピーします。次に iptables-sip.conf を編集し、以下のようにBANとUNBANのエントリを修正します。

# Option:  actionban
# Notes.:  command executed when banning an IP. Take care that the
#          command is executed with Fail2Ban user rights.
# Tags:    <ip>  IP address
#          <failures>  number of failures
#          

-p udp と --dport 5073 を actionban と actionunban に追記します。

fail2banの設定ファイルを修正

/etc/fail2ban にある jail.conf ファイルの最後に以下を追加します。

[asterisk-iax]

enabled  = true
filter   = asterisk-iax
action   = iptables-iax[name=ASTERISK, protocol=all]
           sendmail-whois[name=ASTERISK, dest=root, sender=fail2ban@example.net]
logpath  = /var/log/asterisk/messages
maxretry = 5
findtime = 600
bantime = 604800
  • action

BAN処理のアクションを定義します。この例ではiptables-sipを実行します。その後、sendmail-whois で BANしたIPアドレスのwhois情報を dest= で指定された宛先に送ります。このとき使用されるメールのFrom:はfail2ban@exampleになりますので、適切なものに書き換えます。
アクションの所で iptables-allports を指定するとSIPだけでなく、すべてのポートからの接続を蹴るように iptables に設定されます。『怪しい攻撃元』をブロックするという意味では、こちらのアクションの方がより安全と言えます。

  • logpath

Asteriskのログファイルへのパスを記述します。

  • maxretry

何回以上失敗したらBANするかの指定です。

  • findtime

この時間内にmaxretryで指定した回数以上失敗するとBANします。上の例では600秒(10分)の間に、5回以上の失敗があった場合にはBANされます。

  • bantime

ここで指定された期間がBAN期間になります。指定は秒数です。上の例では 60x60x24x7=604800、つまり1週間になります。

fail2banを起動する

/etc/init.d/fail2ban start

起動したら期待の動作をするかどうかを、よく確認してください。試しに故意に間違えたパスワードで5回以上ログインをしてみるなどです。
起動に問題がなければ、fail2banが自動起動されるように登録しておけば良いでしょう。

chkconfig --add fail2ban

起動の確認

iptables -L -v で確認すると

61638 8222K fail2ban-ASTERISK  all  --  any    any     anywhere             anywhere

Chain fail2ban-ASTERISK (1 references)
 pkts bytes target     prot opt in     out     source               destination
 61627 8216K RETURN     all  --  any    any     anywhere             anywhere

のようなエントリがあるはずです。
BANされるとメールが送られ

  11  6424 DROP       udp  --  any    any    xxx.xxx.xxx.xx      anywhere            udp dpt:iax

のようなDROPのエントリが追加されているはずです。