راه اندازی پروتکل SIP از روی بستر امن در استریسک
پروتکل SIP به صورت پیش فرض از پورت ۵۰۶۰ به منظور اتصال به سرور SIP استفاده مینماید.
حال انکه این پروتکل به صورت ذاتی پروتکلی غیر امن بوده و به راحتی توسط نرم افزارهای
third-party قابل شنود میباشد.قابل ذکر است که ساختار URI پروتکل SIP به صورت مقابل
میباشد: sip:username:password@host:port
راه حل عملی به منظور امن کردن پروتکل
SIP
استفاده از
transport layer security (TLS)
یا لایه امن ارتباطی میباشد.
استفاده از پروتکل SIP
به صورت امن مکانیزم امنیتی است که با
SIP RFC 3261
تعریف شده و برای ارسال پیام های
SIP
از کانال
رمزنگاری شده TLS
استفاده مینماید.از دیگر موارد استفاده از
TLS
میتوان به
HTTPS
اشاره نمود.پروتکل امن
SIP
از پورت
۵۰۶۱ به منظور انتقال پیام ها استفاده مینماید.همچنین ساختار
URI
تعریف شده به صورت مقابل میباشد:
sips:username:password@host:5061
به منظور نصب و راه اندازی SIP امن ۲ مرحله تنظیمات بر روی سرور SIP و کلاینت
SIP انجام دهیم.سرور SIP مورد استفاده در این سناریو Asterisk و نرم افزار کلاینت
Blink میباشد.طبیعی است که مراحل گفته مشابه تنظیم و استفاده دیگر نرم افزارهای
کلاینت SIP مانند zoiper یا eyebeam میباشد.
مرحله اول (TLS) :
توجه:نکته قابل ذکر که باید در نظر داشت این است که حتما باید پکیج libsrtp را در ابتدا
همراه با repository های مربوطه نصب نموده و Asterisk را دوباره compile نمود.
در مرحله اول ابتدا باید Certificate را در سرور تعریف نموده که بتوان با این certificate
بین سرور و کلاینت ارتباط رمزنگاری شده برقرار نمود. در سرور Asterisk ابتدا کلید و certificate
مورد نظر را ایجاد میکنیم.
[root@localhost admin]# mkdir /etc/asterisk/keys [root@localhost admin]# ./ast_tls_cert -C pbx.mycompany.com -O "My Super Company" -d /etc/asterisk/keys The "-C" option is used to define our host - DNS name or our IP address. The "-O" option defines our organizational name. The "-d" option is the output directory of the keys
.
سپس سرور یک رمز از ما درخواست میکند که میتوان به دلخواه passphrase
مورد نظر را وارد کرد.
سپس یک certificate برای کلاینت تعریف و ایجاد میکنیم:
[root@localhost admin]# ./ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C phone1.mycompany.com -O "My Super Company" -d /etc/asterisk/keys -o malcolm The "-m client" option tells the script that we want a client certificate, not a server certificate. The "-c /etc/asterisk/keys/ca.crt" option specifies which Certificate Authority (ourselves) that we're using. The "-k /etc/asterisk/keys/ca.key" provides the key for the above-defined Certificate Authority. The "-C" option, since we're defining a client this time, is used to define the hostname or IP address of our SIP phone The "-O" option defines our organizational name. The "-d" option is the output directory of the keys." The "-o" option is the name of the key we're outputting.
همچنین در این مرحله pass phrase که در مرحله قبل وارد کرده بودیم را دوباره به
منظور باز کردن /etc/asterisk/keys/ca.key وارد میکنیم.
بعد از انجام دادن این مرحله فایل های زیر ساخته میشوند:
asterisk.crt asterisk.csr asterisk.key asterisk.pem malcolm.crt malcolm.csr malcolm.key malcolm.pem ca.cfg ca.crt ca.key tmp.cfg
فایل های Malcolm.pem و ca.crt را به کلاینت SIP کپی میکنیم.
تنظیمات SIP در Asterisk :
داخل فایل sip.conf موجود در asterisk تنظیمات زیر که شامل فعال سازی TLS
میباشد را وارد میکنیم:
tlsenable=yes tlsbindaddr=0.0.0.0 tlscertfile=/etc/asterisk/keys/asterisk.pem tlscafile=/etc/asterisk/keys/ca.crt tlscipher=ALL tlsclientmethod=tlsv1 tcpenable=yes
همچنین SIP Peer خود را به گونه ای تنظیم میکنیم که از پروتکل TLS استفاده نماید:
[malcolm] type=peer secret=malcolm host=dynamic context=local dtmfmode=rfc2833 disallow=all allow=g722 transport=tls context=local
همان گونه که مشاهده میشود در قسمت transport از TLS استفاده میکنیم.
تنظیمات کلاینت SIP :
نرم افزار مورد استفاده در این سناریو blink میباشد که تنظیمات قابل ذکر به
صورت زیر نشان داده شده است:
۱٫ایجاد sip account جدید:
۲٫تنظیمات اکانت شامل تعریف proxy و شماره پورت و پروتکل مورد استفاده:
۳٫تعریف certificate و TLS :
۴٫مشخص نمودن TLS version و CA certificate :
۵٫تنظیمات سمت کلاینت انجام شده است و نرم افزار مطابق زیر قابل رجیستر شدن میباشد:
در داخل سرور asterisk میتوان log زیر را مشاهده نمود:
Registered SIP 'malcolm' at 10.24.250.178:5061 > Saved useragent "Blink 0.22.2 (MacOSX)" for peer malcolm Notice that we registered on port 5061, the TLS port
.
مرحله دوم (SRTP) :
اکنون پروتکل TLS را فعال نموده و سیگنالینگ ما امن میباشد و extension های
شماره گیری شده توسط ما رمز نگاری میشود ولی media هنوز رمزنگاری نمیشود
و مکالمه های RTP به راحتی قابل شنود میباشد.به صورت پیش فرض در زمان نصب
لینوکس پکیج SRTP نصب نمیشود و توسط لینوکس پشتیبانی نمیشود:
[Jan 24 09:29:16] ERROR[10167]: chan_sip.c:27987 setup_srtp: No SRTP module loaded, can't setup SRTP session
.
در لینوکس پکیج SRTP را نصب میکنیم:
[root@localhost admin]# yum install libsrtp
سپس در asterisk داخل فایل sip.conf تنظیمات زیر را وارد میکنیم:
[malcolm] type=peer secret=malcolm host=dynamic context=local dtmfmode=rfc2833 disallow=all allow=g722 transport=tls encryption=yes context=local
همچنین نرم افزار کلاینت SIP را به گونه ای تنظیم میکنیم که از SRTP استفاده نماید:
در asterisk سرویس SIP را reload میکنیم:
localhost*CLI> sip reload Reloading SIP == Parsing '/etc/asterisk/sip.conf': == Found == Parsing '/etc/asterisk/users.conf': == Found == Using SIP CoS mark == Parsing '/etc/asterisk/sip_notify.conf': == Found
نرم افزار کلاینت را دوباره رجیستر کرده و با پروتکل امن تماس برقرار میکنیم: