
في المقالة السابقة ، نظرنا إلى تثبيت بسيط لـ IP PBX (IP PBX) Asterisk 16 من مستودع عادي على خادم افتراضي RuVDS مع Ubuntu 20.04 . في مثل هذا التكوين ، يجب ألا تعرض خدمة VoIP للجمهور: تحتاج إلى عمل إعدادات إضافية ، بما في ذلك تلك المتعلقة بأمن المعلومات.
تحديد نموذج التهديد
بادئ ذي بدء ، دعنا نتعرف على المخاطر التي ستواجهها الشركة التي وضعت PBX افتراضيًا على الإنترنت. ينحدر كل تنوعهم إلى قائمة قصيرة:
- تسرب البيانات السرية وتلف المحتوى (اختطاف الجلسة) ؛
- الوصول غير المصرح به إلى أنظمة معلومات الشركة بسبب نقاط الضعف في النجمة والبرامج الأخرى الموجودة على الخادم ، على وجه الخصوص ، بسبب التكوين غير الصحيح ؛
- انقطاع PBX الظاهري بسبب هجمات رفض الخدمة ؛
- إعادة بيع حركة المرور بعد اختراق PBX (أكثر أنواع الهجوم شيوعًا).
ترتبط بعض الثغرات الأمنية ارتباطًا مباشرًا ببرنامج Asterisk. يقوم مطورو IP PBX بإصدار التصحيحات بانتظام ، ولا يمكن لمسؤولي النظام تثبيت التحديثات إلا في الوقت المناسب. لا تضمن هذه الطريقة أمانًا كاملاً ، لذا من المفيد أيضًا تقييد وصول العملاء إلى خادم المهاتفة عبر بروتوكول الإنترنت. دعونا نرى ما يجب فعله لتنظيم المهاتفة الآمنة.
تكوين جدار الحماية
أسهل طريقة لحماية نفسك هي تقييد اتصالات العميل بجدار حماية. نظرًا لأن VDS لديه IP حقيقي ، فلا داعي لحل مشاكل حركة المرور عبر NAT. يبقى السماح بالاتصالات الواردة من المشتركين ، وحظر جميع الآخرين الذين يستخدمون Netfilter . على خوادم RuVDS الظاهري مع أوبونتو، تم تكوينه باستخدام المثبتة مسبقا UFW (غير معقدة جدار حماية) فائدة . إذا لم تكن حزمة ufw مثبتة لديك ، فمن السهل إصلاحها:
sudo apt-get install ufw
أولاً ، دعنا نتحقق من الحالة:
sudo ufw status verbose
بشكل افتراضي ، يتم تعطيل UFW (الحالة: غير نشط) ، ولكن لا يجب أن تتسرع في تمكينه: إذا لم تقم بتغيير الإعدادات ، فسيبدأ اختراق جميع الحزم الواردة من الجذر وستفقد الوصول إلى الخادم عبر SSH. كحد أدنى ، يجب أن تسمح بالاتصالات الواردة على المنفذ 22 ، بينما يمكنك استخدام ملف تعريف تطبيق OpenSSH المثبت مسبقًا (عرض ملفات التعريف: قائمة تطبيقات sudo ufw):
# 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) ، لكن لا يجب الجمع بين أدوات مساعدة مختلفة - فهذا محفوف بالمشاكل. لن يعمل بدون تصفية حركة المرور ، لأن النجمة الخاصة بك لن تقف لمدة ساعة عند فتحها لجميع الرياح ، حيث ستظهر مثل هذه الصور المضحكة في وحدة التحكم:

نظرًا لأن المستخدمين البعيدين في المنزل (نظريًا) ، كقاعدة عامة ، لديهم عنوان IP حقيقي مخصص ، ولا نحتاج إلى أي شيء آخر. بخلاف ذلك ، يجب أن تهتم بإنشاء شبكة افتراضية خاصة آمنة: ستكون أيضًا مفيدة للوصول إلى موارد الشركة الأخرى التي لا ينبغي كشفها للجمهور. الدفاعات الأكثر تعقيدًا (fail2ban ، إلخ) لا ترتبط مباشرةً بالنجمة. سننظر إليهم في السياق العام في مشاركات أخرى أيضًا.
التخلص من الوحدات غير الضرورية
لا يرتبط هذا الجزء من التكوين بالأمان بشكل مباشر ، ولكنه ضروري بشكل عام. بالإضافة إلى ذلك ، كلما قلت الفرص التي يوفرها نظام PBX للعملاء ، زادت صعوبة اختراقه - سيؤدي غياب الوظائف غير الضرورية إلى تعقيد حياة المهاجمين المحتملين إلى حد ما.
يبدو الحد الأدنى من وظائف PBX كما يلي:
- دعم SIP ؛
- دعم برنامج الترميز G711 alaw فقط (إذا كنت ترغب في ذلك ، يمكنك إضافة جميع برامج الترميز المتاحة) ؛
- تسجيل المكالمات؛
- دعم تنسيق WAV (إذا رغبت في ذلك ، يمكنك إضافة دعم لجميع التنسيقات المتاحة) ؛
- اختياري : دعم تخزين تفاصيل المكالمة على خادم قاعدة البيانات.
لإدارة خدمة النجمة بشكل تفاعلي ، استخدم وحدة التحكم النصية المضمنة:
sudo asterisk -rvv
يتم تخزين ملفات الوحدة النمطية * .so في الدليل / usr / lib / asterisk / modules / . يمكن أن يكون التحميل والتنزيل في وحدة التحكم دون الحاجة إلى إعادة تشغيل الخادم (يتم تحديد اسم الوحدة بدون امتداد ، على سبيل المثال ، chan_sip بدلاً من chan_sip.so ): إعدادات وحدة النجمة الموجودة في ملف التكوين /etc/asterisk/modules.conf . بشكل افتراضي ، يتم تحميل جميع الوحدات النمطية المتوفرة تلقائيًا عند بدء تشغيل الخادم ، ولكن يمكن تغيير ذلك بسهولة باستخدام التحميل التلقائي = نعم | لا توجد معلمة . دعنا نعدل ملف التكوين ، بعد عمل نسخة احتياطية من ملف التوزيع:
module load NAME
module unload NAME
sudo mv /etc/asterisk/modules.conf /etc/asterisk/modules.conf.b
sudo nano /etc/asterisk/modules.conf
هناك طريقتان للتكوين. في الحالة الأولى ، نقوم بتمكين التحميل التلقائي لجميع الوحدات الموجودة ، وتعطيل الوحدات غير الضرورية من خلال modules.conf (القسم [الوحدات] ): ملاحظة ، هنا نحدد اسم الملف بالامتداد. الخيار الثاني هو تعطيل التحميل التلقائي للجميع وتحديد الوحدات الضرورية فقط في قسم [modules] من ملف modules.conf ، على سبيل المثال ، مثل هذا: بعد التحرير ، قم بتغيير حقوق الوصول:
[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
نحن ننظر إلى قائمة الوحدات المحملة في وحدة تحكم النجمة:
module show

نضيف وحدات أخرى حسب الذوق. هذه هي الطريقة التي سيبحث بها ملف modules.conf عن تكوين IP PBX بوظيفة مطورة بشكل كافٍ:
محتوى 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:
module reload
إذا كنت بحاجة إلى إعادة تشغيل Asterisk ، فاستخدم الأمر التالي بدلاً من وحدة التحكم المضمنة:
sudo systemctl restart 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 على خادم فعلي وأردت توصيل الخطوط التناظرية به من خلال لوحة واجهة هاتفية ، فستحتاج إلى حزمة النجمة-dahdi .
تكوين VoIP
لنقم الآن بتغيير ملف sip.conf حتى نتمكن من العمل مع النجمة:
sudo nano /etc/asterisk/sip.conf
أضف الأسطر التالية إلى القسم [عام] ، إذا لم تكن قد قمت بذلك بالفعل: المعلمة الأولى تحمي النجمة من هجمات القوة الغاشمة. إذا لم تقم بتمكينه ، فسيقوم الخادم بإبلاغ المهاجمين عند عدم وجود المشترك. بعد العثور على رقم صالح ، يمكن للمخترق استخدام القوة الغاشمة لكلمات المرور. إذا كانت alwaysauthreject = نعم ، فستبدو أخطاء المصادقة للمشتركين الحاليين وغير الموجودين كما هي ويصعب تخمين كلمة المرور. المعلمة allowguest = no تحظر ما يسمى. مكالمات الضيف لمستخدمي PBX. يمكنك أيضًا تغيير المنفذ الذي تستمع إليه Asterisk إلى منفذ غير قياسي باستخدام توجيه bindport (وبالمثل ، يتم تكوين العنوان الذي يستمع إلى خدمة 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 ، تحتاج إلى إعادة تشغيل وحدة SIP عبر وحدة التحكم Asterisk:
sip reload
أوامر وحدة التحكم المضمنة الأخرى للعمل مع وحدة SIP:
sip show peers- عرض حالة جميع الجذوع / الأقران ؛
sip show registry- عرض جميع التسجيلات.
sip show channels- عرض القنوات النشطة ؛
sip show settings- عرض الإعدادات العامة لوحدة SIP.

Dialplan وكل الكل
غالبًا ما يشار إلى خطة توجيه المكالمات أو مخطط الاتصال على أنها قلب النجمة. يتم تخزينه في ملف /etc/asterisk/extensions.conf وهو في الأساس نص برمجي يجعل PBX تستجيب للأحداث الخارجية. يمكن كتابة نصوص خطة الاتصال بلغات مختلفة ، لكننا سننظر في النص المدمج الذي ظهر في الإصدارات الأولى من IP PBX الشهير. بعد تكوين علامة النجمة وبدء تشغيلها ، سيكون هناك بعض المحتوى في ملف extension.conf . دعنا نستبدلها بنصنا الخاص: بناء جملة البرنامج النصي بسيط جدًا ، وسوف ندخل في مزيد من التفاصيل في المقالة التالية. لاحظ فقط أن خطة الاتصال الخاصة بـ Asterisk تعتمد على أربعة مفاهيم مركزية:
[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 باستخدام وحدة تحكم النجمة:
dialplan reload
لعرض مخطط الطلب الحالي ، استخدم الأمر:
dialplan show

لاحظ أنه ، على سبيل المثال ، يمكن للوحدات النمطية التي قمت بتحميلها إجراء تغييرات على مخطط الطلب.
يسمح PBX الآن للمشتركين الداخليين بالتواصل مع بعضهم البعض ، وكذلك إجراء مكالمات خارجية داخل روسيا عبر SIPNET. هذا ليس كثيرًا ، ولكنه كافٍ للدرس الثاني. في التكوين الحالي ، تم استخدام وحدة chan_sip المتوقفة ، والتي سيتم إيقافها في النهاية في علامة النجمة. في المقالة التالية سوف ننظر في الترحيل إلى مكتبة PjSIPللعمل مع مكدس بروتوكول VoIP ، بالإضافة إلى تمديد مخطط الطلب لتلقي المكالمات الواردة وتنظيم المؤتمرات وحل مهام توجيه المكالمات الأخرى. قد يكون القراء المهتمون قد لاحظوا أن بعض الوحدات المحملة لم يتم استخدامها في الأمثلة: سنحتاجها لتعلم كيفية تسجيل المكالمات وإنشاء قوائم الانتظار والقيام بحيل أخرى مثيرة للاهتمام.

اقرأ مدونتنا)
