仮想PBX。パート2:Asteriskのセキュリティ問題を解決し、通話を設定する



前回の記事では、Ubuntu20.04を使用するRuVDS仮想サーバー上の通常のリポジトリからのIPPBX(IP PBX)Asterisk16の簡単なインストールについて説明しましたこのような構成では、VoIPサービスを公開しないでください。情報セキュリティに関連する設定など、追加の設定を行う必要があります。



脅威モデルの定義



まず、仮想PBXをインターネット上に配置した企業が直面するリスクを把握しましょう。それらの多様性はすべて、短いリストにまとめられます。



  • 機密データの漏洩とコンテンツの破損(セッションの乗っ取り)。
  • Asteriskおよびサーバー上の他のソフトウェアの脆弱性、特に不適切な構成による企業情報システムへの不正アクセス。
  • サービス拒否攻撃による仮想PBXの中断。
  • PBX(最も一般的なタイプの攻撃)をハッキングした後にトラフィックを再販します。


一部の脆弱性は、Asteriskソフトウェアに直接関連しています。IP PBX開発者は定期的にパッチをリリースし、システム管理者はタイムリーにのみ更新をインストールできます。この方法は完全なセキュリティを保証するものではないため、IPテレフォニーサーバーへのクライアントのアクセスを制限することも価値があります。安全な電話を整理するために何をすべきか見てみましょう。



ファイアウォールの構成



自分自身を保護する最も簡単な方法は、ファイアウォールへのクライアント接続を制限することです。VDSには実際のIPがあるため、NATを通過するトラフィックの問題を解決する必要はありません。サブスクライバーからの着信接続を許可し、Netfilterを介して他のすべての接続をブロックするために残っています上の仮想サーバーのRuVDSのUbuntuで、それがプリインストールされている使用して構成されているUFW(合併症のないファイアウォール)ユーティリティをufwパッケージがインストールされていない場合は、簡単に修正できます。



sudo apt-get install ufw


まず、ステータスを確認しましょう。



sudo ufw status verbose


デフォルトでは、UFWは無効(ステータス:非アクティブ)ですが、急いで有効にしないでください。設定を変更しないと、すべての着信パケットがルートでハッキングされ始め、SSH経由でサーバーにアクセスできなくなります。少なくとも、ポート22での着信接続を許可する必要がありますが、プレインストールされたOpenSSHアプリケーションプロファイルを使用できます(プロファイルの表示:sudo ufw app list):



#    SSH 
#   IP,   
sudo ufw allow OpenSSH
#    IP (  )
sudo ufw allow from XXX.XXX.XXX.XXX to any port 22
#       IP ()    Asterisk
sudo ufw allow from XXX.XXX.XXX.XXX
#   
sudo ufw enable


フィルタリングポリシーを表示するには、次のコマンドを使用します。



sudo ufw status verbose




ルールを削除するには、ルールの番号を確認する必要があります。



sudo ufw status numbered
sudo ufw delete N




Netfiler(同じiptables)を構成するための他のツールがありますが、異なるユーティリティを組み合わせるべきではありません-それは問題を抱えています。このような面白い写真がコンソールに表示されるため、すべての風にさらされているときにアスタリスクが1時間待機しないため、トラフィックをフィルタリングしないと機能しません。





リモートユーザーは(理論的には)自宅にいるので、原則として、彼らは本当の専用IPを持っており、他に何も必要ありません。それ以外の場合は、安全な仮想プライベートネットワークの作成に注意する必要があります。これは、一般に公開してはならない他の企業リソースにアクセスする場合にも役立ちます。より洗練された防御(fail2banなど)は、Asteriskに直接関係していません。他の投稿でも、一般的なコンテキストでそれらを見ていきます。



不要なモジュールを取り除く



構成のこの部分はセキュリティに直接関係していませんが、一般的に必要です。さらに、PBXがクライアントに提供する機会が少ないほど、ハッキングが難しくなります。不要な機能がないため、潜在的な攻撃者の生活がある程度複雑になります。



最小のPBX機能は次のようになります。



  • SIPサポート;
  • G711 alawのみのコーデックのサポート(必要に応じて、使用可能なすべてのコーデックを追加できます)。
  • 通話録音;
  • WAV形式のサポート(必要に応じて、使用可能なすべての形式のサポートを追加できます)。
  • オプション:データベースサーバーに通話の詳細を保存するためのサポート。


Asteriskサービスをインタラクティブに管理するには、組み込みのテキストコンソールを使用します。



sudo asterisk -rvv


モジュールファイル* .soは、/ usr / lib / asterisk / modules / directoryに格納されます。アップロードとダウンロードは、サーバーを再起動せずにコンソールで行うことができます(モジュール名は拡張子なしで指定されます。たとえば、chan_sip.soの代わりにchan_sip): 構成ファイル/etc/asterisk/modules.confにあるアスタリスクモジュール設定。デフォルトでは、使用可能なすべてのモジュールがサーバーの起動時に自動的にロードされますが、これはautoload = yes | noパラメーターを使用して簡単に変更できます。配布ファイルのバックアップコピーを作成した後、構成ファイルを編集しましょう。



module load NAME

module unload NAME








sudo mv /etc/asterisk/modules.conf /etc/asterisk/modules.conf.b
sudo nano /etc/asterisk/modules.conf


構成には2つのアプローチがあります。最初のケースでは、既存のすべてのモジュールの自動ロードを有効にし、modules.conf(セクション[モジュール]を介して不要なモジュールを無効にします。ここでは、拡張子を付けてファイル名を指定することに注意してください。 2番目のオプションは、すべての自動ロードを無効にし、modules.confファイル[modules]セクションで必要なモジュールのみを指定することです。たとえば、次のようになります。 編集後、アクセス権を変更します。



[modules]

autoload=yes

noload => module_name.so












[modules]

autoload = no

load => chan_sip.so

load => codec_alaw.so

load => format_wav.so

load => app_dial.so

load => res_musiconhold.so








sudo chown asterisk:asterisk /etc/asterisk/modules.conf
sudo chmod 640 /etc/asterisk/modules.conf




Asteriskコンソールにロードされたモジュールのリストを確認します。



module show





好みに合わせて他のモジュールを追加します。これは、modules.confファイルが十分に開発された機能を備えIPPBXの構成を探す方法です



modules.confの内容
[modules]



autoload=no ; /usr/lib/asterisk/modules/



; VoIP (SIP)

load => chan_sip.so

load => res_sorcery_config.so

load => res_pjproject.so ; res_rtp_asterisk.so

load => res_rtp_asterisk.so

load => app_dial.so ; res_musiconhold.so

load => app_echo.so

load => bridge_simple.so ;

load => app_bridgewait.so

load => app_transfer.so ;

load => app_verbose.so ;

load => app_voicemail.so ; res_adsi.so

load => app_playback.so ;

load => app_stack.so

load => app_confbridge.so ;

load => app_directory.so

load => res_adsi.so

load => app_system.so ;

load => app_queue.so ;



;

load => func_devstate.so

load => app_chanisavail.so ; ChanIsAvail

load => func_cut.so ; cut



;

load => res_musiconhold.so

load => pbx_config.so



;

load => codec_a_mu.so

load => codec_adpcm.so

load => codec_alaw.so

load => codec_ulaw.so

load => codec_gsm.so

load => codec_lpc10.so

load => codec_g726.so

load => codec_g722.so



;

load => format_gsm.so ; Raw GSM data

load => format_h263.so ; Raw h263 data

load => format_pcm.so ; Raw uLaw 8khz Audio support (PCM)

load => format_wav_gsm.so ; Microsoft WAV format (Proprietary GSM)

load => format_wav.so ; Microsoft WAV format (8000hz Signed Linear)

load => format_mp3.so ; mp3-format



; Dahdi ( VDS )

;load => chan_dahdi.so



;

load => res_parking.so



; res_monitor.so,

load => func_periodic_hook.so

load => func_strings.so ; STRFTIME

; CALLERID, res_monitor.so

load => func_callerid.so

load => func_volume.so

;

load => res_monitor.so

load => app_mixmonitor.so ; app_mixmonitor.so app_dial.so

load => func_channel.so



; MySQL ( )

;load => cdr_mysql.so

;load => res_config_mysql.so ; MySQL RealTime Configuration Driver



; MySQL ODBC ( )

;load => res_odbc.so

;load => res_config_odbc.so

;load => cdr_odbc.so ;



; SNMP ( )

;load => res_snmp.so



; /var/spool/asterisk/outgoing/ ( )

;load => pbx_spool.so



; ( )

;load => app_exec.so ; exec execif

;load => app_while.so ; dialplan

;load => res_sorcery_astdb.so

;load => res_sorcery_realtime.so

;load => app_read.so

;load => app_stack.so

;load => cdr_csv.so ; /var/log/asterisk/cdr-csv/Master.csv

;load => func_cdr.so

;load => func_logic.so

;load => func_timeout.so

;load => func_shell.so

;load => pbx_ael.so

;load => res_ael_share.so

;load => res_agi.so

;load => res_speech.so ; res_agi.so





注:セミコロンを使用して行をコメントアウトできます。



modules.confファイルを変更した後、Asteriskコンソールからモジュールをリロードする必要があります。Asterisk



module reload



を再起動する必要がある場合は、組み込みコンソールの代わりに次のコマンドを使用します。



sudo systemctl restart asterisk


呼び出されたすべてのモジュールをインストールする必要があります。そうしないと、モジュールをロードしようとしたときにAsteriskが失敗します。たとえば、MP3形式をサポートするには、asterisk-mp3パッケージをインストールする必要がありますが、MySQLサーバーを直接操作するには、asterisk-mysqlが必要です



sudo apt-get install asterisk-mp3
sudo apt-get install asterisk-mysql


次のコマンドを使用すると、リポジトリで利用可能なパッケージを簡単に見つけることができます。



apt-cache search asterisk


実際、Asteriskにはさらに多くのモジュールがあり、すべてをリストしているわけではありません。たとえば、物理サーバーにPBXをインストールし、テレフォニーインターフェイスボードを介してアナログ回線を接続する場合は、asterisk-dahdiパッケージが必要になります



VoIPの構成



次に、sip.confファイルを変更して、Asteriskを操作できるようにします。



sudo nano /etc/asterisk/sip.conf


まだ行っていない場合 は、[general]セクションに次の行を追加します 。最初のパラメーターは、ブルートフォース攻撃からAsteriskを保護します。有効にしない場合、サブスクライバーが存在しない場合、サーバーは攻撃者に通知します。有効な番号を見つけると、ハッカーはブルートフォースパスワードに進むことができます。場合alwaysauthreject =はい、既存および非存在加入者の認証エラーは同じように見える、することはより困難であると思いパスワードを。パラメータallowguest = noは、いわゆるを禁止します。 PBXユーザーへのゲストコール。bindportディレクティブを使用して、Asteriskがリッスンするポートを非標準のポートに変更することもできます(同様に、VoIPサービスをリッスンするアドレスはbindaddrを使用して構成されます)。



alwaysauthreject=yes

allowguest=no








sip.confファイルには、サブスクライバー(ピア-英語のピアから)PBXが登録されています。ユーザーが固定IPで作業している場合は、接続を制限する価値があります。また、強力なパスワードを作成し、呼び出し数に制限を導入し、もちろん、外部VoIPプロバイダー(いわゆるトランク-英語トランクから)への



deny=0.0.0.0/0.0.0.0 ;接続を登録する必要があり

permit=xxx.xxx.xxx.xxx/24 ;ます。すべてのノードからの接続を禁止し、特定のサブネットからの接続を許可します。

secret=_ ;サブスクライバーパスワードは耐性が必要です。

call-limit=2 ; 同時呼び出しの数を制限するブルートフォース



結果として、sip.confファイルは次のようになります。



Sip.confコンテンツ
[general]

context=default

allowoverlap=no

udpbindaddr=0.0.0.0

tcpenable=no

tcpbindaddr=0.0.0.0

transport=udp

srvlookup=yes

alwaysauthreject=yes

allowguest=no



; SIPNET c chan_sip

; register

[sipnet]

remotesecret=

defaultuser=

host=sipnet.ru

type=peer

context=sipnet-trunk; dialplan ( extensions.conf)

insecure=invite

callbackextension=s

fromuser=

fromdomain=sipnet.ru

disallow=all

allow=alaw,ulaw

nat=no

directmedia=no

dtmfmode=rfc2833



[office](!)

; , .

; .

type=friend

host=dynamic ; , IP

nat=no ; NAT

deny=0.0.0.0/0.0.0.0 ;

call-limit=2

qualify=yes ; 2

dtmfmode=rfc2833 ; dtmf , rfc2833

; ,

disallow=all

allow=ulaw

allow=alaw

allow=g729

allow=g723

allow=g726

allow=h261

allow=h263

allow=h264

allow=h263p



; () office

[1001](office)

permit=XXX.XXX.XXX.XXX/Netmask

secret=_

callerid= <1001>

context=homeoffice ; dialplan ( extensions.conf)



[1002](office)

permit=YYY.YYY.YYY.YYY

secret=_

callerid= <1002>

context=homeoffice





この場合、サブスクライバー1001は特定のサブネットの任意のアドレスから接続でき、1002は固定IPからのみ接続できます。また、コールルーティングプラン(ダイヤルプラン)で使用される番号、パスワード、名前、およびコンテキストをサブスクライバーに提供しました。トランクを構成する手順は、サービスプロバイダーのサイトで行うのが最適です。この場合、これはSIPNETです。パラメータは、他のピア(拡張機能)のパラメータと似ています。構成ファイル(このエンティティについては以下で説明します)で指定されたコンテキストがdialplanに存在する必要があることにも注意してください。sip.conf



構成ファイルに変更を加えた後、Asteriskコンソールを介してSIPモジュールを再起動する必要があります。SIPモジュールを 操作するための他の組み込みコンソールコマンド:



sip reload







sip show peers-すべてのトランク/ピアのステータスを表示します。

sip show registry-すべての登録の表示。

sip show channels-アクティブなチャネルの表示。

sip show settings-SIPモジュールのグローバル設定を表示します。





ダイヤルプランとすべてすべてすべて



コールルーティングプランまたはダイヤルプランは、多くの場合、Asteriskの心臓部と呼ばれます。これは/etc/asterisk/extensions.confファイルに保存され、基本的にPBXが外部イベントに応答するようにするスクリプトです。通話プランのスクリプトはさまざまな言語で記述できますが、人気のあるIPPBXの最初のバージョンに登場した組み込みのスクリプトを検討します。Asteriskを構成して起動すると、extensions.confファイルにいくつかのコンテンツが含まれますこれを独自のものに置き換えましょう 。スクリプトの構文は非常に単純です。次の記事で詳しく説明します。AsteriskのCallingPlanは、次の4つの中心的な概念に基づいていることに注意してください。



[general]

static=yes

writeprotect=no

priorityjumping=no

autofallthrough=yes

clearglobalvars=no



;

[default]

exten => _X.,1,NoOp()

same => n,Busy()

same => n,HangUp()



; homeoffice

[homeoffice]

;

exten => _1XXX,1,Dial(SIP/${EXTEN})

; SIPNET

exten => _.7XXXXXXXXXX,1,Dial(SIP/${EXTEN}@sipnet)



; sipnet-trunk, SIPNET

[sipnet-trunk]

;








  • コンテキスト-コードの名前付き(名前は角括弧で囲まれています)部分の通信:命令のセット。
  • (extensions) — , exten;
  • — , ( ) ( n — next). exten same;
  • (applications) — . , Dial — , .


拡張機能は、アンダースコアで始まる一連のパターンを使用してマスクで呼び出しを並べ替えます。これにより、PBXは、パターンについて話していることを理解できます。



exten => _1XXX,1,Dial(SIP/${EXTEN})



次に、優先度が示され、引数を渡すアプリケーションの呼び出しは非常に簡単です。



アスタリスクコンソールを使用してダイヤルプランを再起動し



dialplan reload



ます。現在のダイヤルプランを表示するには、次のコマンドを使用します。



dialplan show







たとえば、ロードしたモジュールはダイヤルプランを変更できることに注意してください。



現在、PBXを使用すると、内部サブスクライバーは相互に通信できるだけでなく、SIPNETを介してロシア国内で外部通話を行うことができます。これはそれほど多くはありませんが、2番目のレッスンには十分です。現在の構成では、非推奨のchan_sipモジュールが使用ており、最終的にはAsteriskで廃止されます。次の記事では、PjSIPライブラリへの移行について説明します。VoIPプロトコルスタックと連携し、着信コールの受信、会議の開催、およびその他のコールルーティングタスクの解決のためにダイヤルプランを拡張します。注意深い読者は、ロードされたモジュールの一部が例で使用されていないことに気付いたかもしれません。呼び出しを記録する方法、キューを作成する方法、およびその他の興味深いトリックを行う方法を学ぶ必要があります。





私たちのブログを読む)










All Articles