Asterisk13のインストールからの続きで、1.8系から13への移行したときの備忘録です。
【追記 2016/11/22】
1.8系から持って行くファイルは sip.conf, iax.conf, extensions.conf の3ファイルです。
上記3ファイルをコピー後、Asterisk13 をスタートさせると以下の NOTICE や WARNING がログに残りました。
まずは、NOTICE については1.8の sip.conf に subscribecontext = default という記述があったので、これを削除します。
次にWARNINGについては、!!! PLEASE NOTE に書かれているように、nat に関しては個別に記述しないで general で記述しなくてはいけないようです。私の環境では以下の様に変更しました。
※IP電話の各個別の設定からは nat と qualify の記述は削除しました。
【変更前】
[general]
externip = 210.138.113.xxx
externhost = xxx.it-tutor.jp
localnet = 192.168.0.0/255.255.255.0
allowguest = no
maxexpirey = 3600
defaultexpirey = 3600
context = extd
bindport = 5060
bindaddr = 0.0.0.0
srvlookup = yes
alwaysauthreject = yes
videosupport = yes
disallow = all
allow = g722
allow = ulaw
allow = g729
allow = speex
allow = h264
allow = h263
allow = h263p
language = jp
【変更後】
[general]
externip = 160.16.204.xxx
externhost = xxx.it-tutor.jp
;localnet = 192.168.0.0/255.255.255.0 #ローカルIPは持っていないので…
allowguest = no
maxexpirey = 3600
defaultexpirey = 3600
context = extd
bindport = 5060
bindaddr = 0.0.0.0
srvlookup = yes
alwaysauthreject = yes
nat = force_rport,comedia #natの設定
qualify = 10000
videosupport = yes
disallow = all
allow = speex
allow = g729
allow = ulaw
allow = g722
allow = h264
allow = h263
allow = h263p
language = jp
iax.conf については、使っていなければ1.8からコピーする必要はありません。
Zoiper等のSIPクライアントからIAX2を使ってAsterisk13に接続する場合には、iax.conf の general に transfer = no を追加してください。
[general]
language = jp
disallow = all
allow = g729
allow = speex
allow = gsm
allow = ulaw
requirecalltoken = no
transfer = no
これまでの設定変更で1.8系のコンフィグが Asterisk13 で動くようになります。
しかし、このままではグローバル環境に裸でいるようなものなので、最低限のセキュリティ対策が必要です。
ここからは、ssh と Asterisk に対しての私が行っている防御方法です。
ssh については、TCPラッパーでの防御+パスワード認証の禁止(=publicキーを使っての接続だけを許可)+Fai2banという方法です。
特にpublicキーを使っての接続であればリトライという現象は原則発生しないので、エラー1回で ban するというルールにしています。
/etc/hosts.deny
sshd: ALL
/etc/hosts.allow
sshd: xxx.113.138.210.bn.2iij.net *.it-tutor.jp *.lonnie.co.jp
/etc/ssh/sshd_config
PasswordAuthentication no
UsePAM no
【注意】ssh接続のアクセスコントロールを行う時には、必ず1つのsshセッションを張ったままにすることが大切です。ssh はすでに接続済のセッションに関してはTCPラッパーの設定を変更したり、sshd の再起動をしてもセッションは切れません。もし何か設定ミスをして新しくssh接続できなくなったとしても残してあるセッションから復旧が可能になります。全ての設定変更が終わり、接続テストを行って大丈夫!!と確認できるまで、別ウィンドウでssh接続のセッションは残しておきましょう( top でも表示させて…)。
ssh に関しての fail2ban の jail.conf はこんな感じです。
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 1
次にAsterisk13の fai2ban の設定について、まずはフィルターから…
/etc/fail2ban/filter.d/asterisk.conf
次に jail.conf はこのような感じにしています。普通のフィルター+recidive という構成です。
recidive の設定は今回初めて使ってみましたが、なかなか良い感じです。下記の構成だと30分間に2回以上エラー(フィルターに引っかかる)があると1時間 ban します。また、6時間以内に2回以上 ban された相手については1週間 ban します。
これで今の所外部からのアタックを防いでいます。
最後になりますが、http://www.voip-info.jp/index.php/SIP-Fail2ban を参照して Asterisk にパッチを当ててください。特に INVITE による Brute force 攻撃は最近増えてきたので、このパッチは必須だと思います。
この IP-PBX 用のサーバは、さくらVPS の東京リージョンで動いています。ここからアジルクラウド(ITSP)のサーバまでのレイテンシは2ms程度、自宅や事務所から IP-PBX までは 8ms 程なので VoIPシステムを動かすには申し分の無い環境です。Mobile 環境からは g729a や speex を使えば音声の遅延も感じること無く快適に使えます。
※早く Asterisk でオフィシャルに Opus が使えるようになると良いのですが…
追記 2016/10/30
アジルクラウドさんの会社名が変わったようです。新しい会社名はCloco株式会社になりました。
http://www.clocoinc.com/cloco/news/notice/release_161025/
追記その2 2016/11/22
クロコさんのログインサーバへのアクセス方法が若干変わりました。ログインサーバ名については変更はないのですが、レジストする際にアクセス元(自分)のポート番号を50,000番台にしないと着信に問題が出るようです。自分から接続する際に使うポート番号の設定については『送信元ポート番号の範囲を決める方法:Debian&RTX1100』を参考にしてください。