Asteriskでfail2ban

Asterisk 11.2.1からSecurityログ形式が新しくなりました。この頁の上半分は無効にしたので頁下部を参照願います。

SIPサーバに対してはブルートフォースアタックが来ることが多い。

Asteriskでもfail2banを使って不正なアクセスを弾きたいが、ノーマルのAsteriskのログにはブルートフォースアタックなどは何故かサーバのIPが記録されて肝心のリモートホストの情報が残らないのでfail2banで弾くことができない。

Asteriskバージョンパッチファイル
11.08patch-channels-chan_sip.c__asterisk11.08.txt
11.10patch-channels-chan_sip.c__asterisk11.10.txt

使い方

# portsnap fetch update でportsを更新する。
# portsdb -F で、portsのメタ情報を更新する。
# pkg update でpkgのメタ情報を更新する。

# pkg search asterisk11(新規インストール)
 または
# pkg version -v | grep asterisk11(更新) で最新のasterisk11のバージョンを確認する。

確認したバージョンと対応するこのページのパッチファイルをダウンロードする。 ダウンロードしたパッチファイルをpatch-channels-chan_sip.c__asterisk11.10.txt  を  patch-channels-chan_sip.cのようにリネームする。
"__asterisk{Ver.No}.txt"が不要な部分
リネームしたパッチファイルを/usr/ports/net/asterisk11/files/に置く。

新規インストールの場合

# cd /usr/ports/net/asterisk11
# make install
# echo asterisk_enable=\"YES\" >> /etc/rc.conf

更新の場合

# portupgrade asterisk11

/usr/local/etc/fail2ban/jail.local

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[DEFAULT]
ignoreip = 127.0.0.1 192.168.0.0/24 #弾く対象から外すIPアドレス
bantime  = 259200 #秒
findtime  = 86400 #秒
backend = auto

[asterisk]
enabled  = true
filter   = asterisk11  #新規作成のフィルタ
action   = pf  #Linuxの場合はpfではなくiptablesかと・・
           sendmail-whois[name=Asterisk, dest=foo@example.com, sender=bar@example.com]
logpath  = /var/log/asterisk/security  #Securityログを分けた場合(最下部参照)
maxretry = 1

/usr/local/etc/fail2ban/filter.d/asterisk11.conf   (新規作成のフィルタファイル)

1
2
3
4
5
6
7
8
[Definition]

failregex = SECURITY.* SecurityEvent="FailedACL".*RemoteAddress=".+?/.+?//.+?".*
            SECURITY.* SecurityEvent="InvalidAccountID".*RemoteAddress=".+?/.+?//.+?".*
            SECURITY.* SecurityEvent="ChallengeResponseFailed".*RemoteAddress=".+?/.+?//.+?".*
            SECURITY.* SecurityEvent="InvalidPassword".*RemoteAddress=".+?/.+?//.+?".*

ignoreregex =

Securityログを分離する場合

/usr/local/etc/asterisk/logger.conf
security => security   #行頭の"#"を外す
関連記事: