رمز نگاری در ویپ – بخش اول – ارسال اطلاعات ایمن به ویپ
رمز نگاری سیگنالینگ یعنی چی ؟
در این مقاله به صورت ساده با کارکرد سیگنالینگ تلفنی آشنا میشیم ، مفهومش رو درک میکنیم و نحوه کدگزاری صدا با tls رو یاد میگیریم .
در پست های قبل نصب ایزابل issabel به صورت قدم به قدم یاد گرفتیم و در این پست میخوایم اون رو به صورت جالبی امن کنیم !
خیلی ساده مفهوم سگنالینگ در ویپ :
به صورت خیلی ساده وقتی شما گوشی تلفن رو بر میدارید و به من زنگ میزنید ، قبل از اینکه من گوشی رو بردارم و یا اصلا شما صدای بوق رو بشنوید ، یه سری اطلاعات بین شما و مرکز تلفن رد و بدل میشه .
اطلاعاتی مثل اینکه شماره تلفن شما چند ، شما اصلا کی هستین و یا با کی کار دارید .
مخابرات و یا سیستم تلفنی VoIP یا هر سیستمی رو که اسمش رو بشه گذاشت مرکز تلفن ، به سمت من یه پیام ارسال میکنه که در چه حالی ؟ ( مثلا دارم با کسی صحبت میکنم ؟ یا اصلا من در دسترس هستم یا نه )
اگر مشکلی نباشه سرور به من میگه شما با من کار دارید و تلفن من با شماره شما شروع به زنگ خوردن میکنه .
من گوشی رو که برداشتم کانال ارتباطی تحت عنوان RTP که مخفف [ Real Time Porotocol ] هست بین من و شما بر قرار میشه و کار سیگنالینگ در این مرحله تموم میشه چون انتقال صدا یا تصویر با RTP هست . و اگر شما تلفن رو قطع کنید پیام سگنالینگ قطع به سمت من ارسال میشه و من هم پیام باشه رو برای شما ارسال میکنم ! چه باحال !
این پیام هایی که بین ما رد و بدل میشه رو سگنالینگ مخابراتی گفته میشه .
چطور مرکز تلفن VoIP هک میشه ؟
خوب مفهوم سیگنالینگ رو که فهمیدیم .میریم سراغ اینکه بفهمیم چرا مهمه که از رمزنگاری در این لایه حتما استفاده کنیم ؟
اطلاعات از مبدا خارج میشه و به مقصد میرسه اگر در این بین یه نفر این اطلاعات رو بتونه دریافت کنه به راحتی میتونه اطلاعات رد و بدل شده رو بخونه که خیلی بده ، مثلا بفهمه شما کی هستین و با کی میخواید صحبت کنید .
این وضعیت بدتر هم میشه وقتی شما از یک شبکه بیسیم استفاده میکنید .
در شبکه های کابلی اطلاعات مستقیما از مبدا به مقصد میرسه و نفر سومی نمیتونه اطلاعات رو حتی ببینه . ولی در شبکه های بی سیم ( Wi-Fi ) اطلاعات واسه همه ارسال میشه و هر کس اطلاعات خودش رو بر فقط میخونه ، پس نفر سوم میتونه اطلاعات شما رو واسه خودش نگه داره (البته یکم امنیت بیشتره ، یکم !).
رمز نگاری در ویپ چطور انجام میشه ؟
اول از همه ببنیم TLS چیه ؟
TLS چیست ؟
پروتکل TLS یا Transport Layer Security یکی از انواع پروتکلهای رمزنگاری هست. این پروتکل وظیفش ارتباطی ایمن بین سرور و کلاینت در بستر شبکه هست .
برقراری ارتباط از طریق TLS، نیازمند پیش نیازهایی از جمله کلیدهای نامتقارن (شامل کلید عمومی و کلید خصوصی) و کلید سیشن (Session key) است. کلید عمومی همانطور که از نامش مشخصه، برای اشخاص سوم شخص قابل استفادست. اما کلید خصوصی فقط توسط ارسال کننده و دریافت کننده اطلاعات، قابل استفادست.
به صورت ساده اطلاعات با یک کلید کد میشه و با کلید دیگه ای اون اطلاعات کد گشایی میشه و اگر شما کلید کد کننده رو نداشته باشید نمیتونید اطلاعات رو استفاده کنید .
مراحل راه اندازی TLS در ویپ بر مبنای Astersik
ساخت کلید برای رمز نگاری :
ابتدا در حالت سوپر یوزر وارد کنسول لینوکس سرور بشید .
با دستور زیر یک پوشه برای ساخت کلید ها بسازید
۱ |
mkdir /etc/asterisk/keys |
برای ساخت هم میتونید از Hostname استفاده کنید و یا از IP یا اگر سرور رو به صورت مستقیم به اینترنت متصل کردید از DNS هم میتونید استفاده کنید .
با دستور زیر میتونید Hostname سرور رو ببینید .
۱ |
hostname |
یا از مسیر etc/hostname/ اون رو تغییر بدید . دقت داشته باشید اگر این مقدار رو تغییر دادید سرور رو یکبار reboot کنید .
حالا با استفاده از اسکریپت “ast_tls_cert” یک کلید اختصاصی برای سرور خودمون درست میکنیم . دستور به صورت زیر استفاده میشه و جزئیات هم در زیر دستور مینویسم .
۱ |
./ast_tls_cert -C pbx.mycompany.com -O "My Super Company" -d /etc/asterisk/keys |
- C- : این پارامتر برای تعیین آدرس DNS,Hostname,IP سرور ما هست .
- O- : این پارامتر برای تعیین نام مجموعه / شرکت و یا گروه ماست .
- d- : این پارامتر برای تعیین آدرس ذخیره شدن کلید هاست.
- بعد از وارد کردن کد بالا از شما یک پسورد درخواست میکنه ، پسورد رو حتما ذخیره کنید .
اسکریپ “ast_tls_cert” به صورت پیش فرض روی سیستم های ایزابل و elastix نیست میتونید با دستور زیر اون رو نصب کنید . اگر با دستور پایین نتونستید وارد آدرس موجود در لینک زیر بشید و محتویات آدرس رو داخل فایل ast_tls_cert به وصیله vi ذخیره کنید .
۱۲۳ cd /usr/binwget --no-check-certificate https://raw.githubusercontent.com/asterisk/asterisk/master/contrib/scripts/ast_tls_certchmod a+x ast_tls_cert
این دستور رو وارد کنید .
۱ |
ls /etc/asterisk/keys/ |
بعد از اجرای درست این دستور باید این فایل ها رو در پوشه ای که در دستور بالا وارد کردیم رو ببینیم .
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ |
asterisk.crt asterisk.key ca.cfg ca.key tmp.cfg asterisk.csr asterisk.pem ca.crt |
ساخت کلید برای کلایت ها :
حالا با استفاده از همون اسکریپت “ast_tls_cert” اقدام به ساخت کلید برای کاربران میکنیم .
۱ |
./ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C mycompany.com -O "My Super Company" -d /etc/asterisk/keys -o client |
- -m : وقتی این مقدار رو برابر با client قرار میدیم یعنی درخواست ما کلید برای کلاینت هست و برای سرور نمیخوایم .
- -c : آدرس فایل .crt که قصد استفاده از اون رو داریم برای ساخت کلید کلاینت .
- -k : آدرس فایل .keyکه قصد استفاده از اون رو داریم برای ساخت کلید کلاینت .
- -C : برای تعیین آدرس IP و یا DNS کلاینت که میشه همون تلفن ویپ و یا Softphone ما .
- -O : این پارامتر برای تعیین نام مجموعه / شرکت و یا گروه ماست .
- -o : تعیین یک اسم برای کلید ساخته شده .
بعد از وارد کردن دستور بالا از شما همون رمز عبوری که هنگام ساختن از شما دریافت کرد رو میخواد .
اگر مراحل رو درست رفته باشید تا اینجا محتویات پوشه ای که کلید ها رو داخل اون میسازیم با دستور زیر پک کنید .
۱ |
ls /etc/asterisk/keys/ |
این فایل ها رو باید ببینید . دقت داشته باشید نام فایل های ساخته جدید به -o بستگی داره.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ |
asterisk.crt asterisk.csr asterisk.key asterisk.pem client.crt client.csr client.key client.pem ca.cfg ca.crt ca.key tmp.cfg |
اگر کلاینت شما درخواست کلید با پسوند .P12 رو داشت با دستور زیر فایلتون رو تبدیل کنید .
۱ |
# openssl pkcs12 -export -out MySuperClientCert.p12 -inkey ca.key -in ca.crt -certfile asterisk.crt |
” توصیه میکنم برای امنیت بیشتر قسمت فایلی که برای client ساخته شده و پسوند .pem رو داره با notepad باز کنیم و RSA PRIVET KEY رو حذف کنید چون کلاینتها به این قسمت احتیاج ندارن و امنیت رو ارتقا میده .
در انتها به کلید ها برای استریسک دسترسی ایجاد کنید
۱ |
chown -R asterisk.asterisk /etc/asterisk/keys/ |
مراحل ساخت کلید تمام شد الان میریم سراغ پیکربندی سیستم برای SIP و PJSIP .
فعال سازی TLS برای PJSIP :
خوب بریم سراغ فعال کردن TLS برای chan_pjsip
در مرحله اول باید tls رو برای پروتکل pjsip فعال کنیم . وارد فایل pjsip.onf بشید و دستورات زیر رو در آخر این فایل اضافه کنید .
۱ ۲ ۳ ۴ ۵ ۶ ۷ |
[transport-tls] type=transport protocol=tls bind=0.۰.۰.۰:۵۰۶۱ cert_file=/etc/asterisk/keys/asterisk.crt priv_key_file=/etc/asterisk/keys/asterisk.key method=sslv23 |
نکته : پروتوکل استفاده شده برای ساخت کلید ها رمز نگاری SSLv23 هست
برای تنظیم کاربر نهایی (تلفن و یا نرم افزاری که به عنوان داخلی از اون استفاده میکنید ) تنظیمات زیر رو اعمال کنید
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ |
[malcolm] type=aor max_contacts=1 remove_existing=yes [malcolm] type=auth auth_type=userpass username=malcolm password=useabetterpasswordplease [malcolm] type=endpoint aors=malcolm auth=malcolm context=local disallow=all allow=g722 dtmf_mode=rfc4733 media_encryption=sdes |
در بعضی موارد که ارتباط شما با مشکل مواجه میشه (بیشتر در pjsip ورژن ۲.۴.۵ ) و خطای Connection refused رو دریافت میکنید ، در تنظیمات کاربر نهایی (تلفن و یا نرم افزاری که به عنوان داخلی از اون استفاده میکنید ) عبارت rewrite_contact = yes رو به تنظیمات کاربر نهایی اضافه کنید
فعال سازی TLS برای SIP :
حالا مراحل فعال سازی برای SIP رو پیش میریم .
ابتدا باید tls رو برای پروتکل sip فعال کنیم . وارد فایل sip_general_custom.conf بشید و دستورات زیر رو در آخر این فایل اضافه کنید .
۱ ۲ ۳ ۴ ۵ ۶ ۷ |
tlsenable=yes tlsbindaddr=0.۰.۰.۰ tlscertfile=/etc/asterisk/keys/asterisk.pem tlscafile=/etc/asterisk/keys/ca.crt tlsdontverifyserver=no ;tlscipher=DES-CBC3-SHA tlsclientmethod=sslv23 |
بعد از وارد کردن مقادیر بالا و reload کردن سرویس asterisk ، پشتیبانی از tls در پروتکل sip فعال میشه .
حالا باید این تنظیمات رو روی داخلی که مدنظر داریم در حالت tls فعالیت کنه وارد کنیم .
این مراحل رو هم میشه از فایل تنظیمات asterisk انجام داد و هم از پنل وب . بسته به اینی که دارید از elastix یا freepbx و یا issable استفاده میکنید این کار رو انجام بدید .
من این مراحل رو طبق آموزش با فایل تنظیمات asterisk انجام میدم . اگر نیاز بود بگید تا آموزش ار طریق وب رو هم در سایت قرار بدم .
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ |
[۱۰۱] type=peer secret=123456789 // WEEK PASSWORD host=dynamic context=local dtmfmode=rfc2833 disallow=all allow=g722 transport=tls |
حالا فایل client.pem رو به تلفن و یا سافت فون بدید و تنظیمات رو روی tls قرار بدید .
پورتی که در حالت SIP بر روی استریسک ۱۳ استفاده میشه به صورت پیش فرض ۵۰۶۱ هست .
توصیه میکنم برای امنیت بیشتر سرورتون از این مقاله ها غافل نشید :
منبع : سایت رسمی Asterisk
Thanks for your blog, nice to read. Do not stop.