• ایرانشل
  • وبلاگ
    • مفاهیم امنیت شبکه
    • معرفی راهکارها و سرویس‌های امنیتی
    • آموزش‌‌ راهکارهای امنیت شبکه
    • تهدیدات امنیتی
  • اخبار
  • دوره‌های امنیت
    • مسیرهای شغلی امنیت سایبری

ورود

رمز عبور را فراموش کرده اید؟

هنوز عضو نشده اید؟ عضویت در سایت
ایرانشل
  • ایرانشل
  • وبلاگ
    • مفاهیم امنیت شبکه
    • معرفی راهکارها و سرویس‌های امنیتی
    • آموزش‌‌ راهکارهای امنیت شبکه
    • تهدیدات امنیتی
  • اخبار
  • دوره‌های امنیت
    • مسیرهای شغلی امنیت سایبری
ورود و ثبت نام

وبلاگ

وبلاگ > آموزش‌‌ راهکارهای امنیت شبکه > نحوه راه اندازی تونل IPsec در لینوکس

نحوه راه اندازی تونل IPsec در لینوکس

آموزش‌‌ راهکارهای امنیت شبکه
ارسال شده توسط حسن نعمتی
7 نوامبر 2020
2.61k بازدید

تونل IPsec

Strongswan یک نرم افزار متن باز و سازگار با اکثر سیستم عامل‌ها و کامل می‌باشد که در سناریوهای مبتنی بر IPsec برای امن سازی لایه شبکه استفاده می‌شود.IPsec در واقع از دو مکانیزم زیر برای امنیت لایه شبکه استفاده می‌کند.

Authentication Header(AH)
Encapsulation Security Payload(ESP)

ارکان اصلی امنیت اطلاعات

  • Confidentiality
  • Integrity
  • Authenticity
  • Availablity
  • NonRepudiation

با توجه به ارکان اصلی امنیت اطلاعات، IPsec کار حفظ یکپارچگی و احراز هویت بسته‌ها را با استفاده از پروتکل AH و مولفه ESP آن محرمانگی و سایر ویژگی های امنیتی مورد نیاز را فراهم می‌کند. در حال حاضر StrongSwan یک پیاده سازی متن باز از پروتکل IPsec می‌باشد که بدلیل استفاده گسترده آن در اکثر محصولات امنیتی به عنوان زیرساخت تونل Site-to-Site، ابزاری شناخته شده می‌باشد. Strongswan ازهر دو نسخه تبادل کلید (IKE v1/2) پشتیانی می‌کند.

بدلیل اینکه تبادل کلید بخشی اصلی و مهم پروتکل IPsec را تشکیل می‌دهد این پروتکل برای امن سازی تبادل کلید از مکانیزم IKE برای تبادل کلید بین طرفین استفاده می‌کند. IKE همچنین برای امن سازی فرآیند تبادل کلید از الگوریتم‌های رمزنگاری و یکپارچگی AES ،SHA وسایر الگوریتم‌های رمزنگاری و یکپارچه سنجی و کتابخانه‌های OpenSSL پشتیبانی ‌می‌کند. با وجود این الگوریتم‌های امنیتی پیاده سازی شده در هسته لینوکس در اصلی‌ترین قسمت پروتکل (IPsec (ESP&AH استفاده می‌شوند.

ویژگی های StrongSwan

  • پشتیبانی از احراز هویت مبتنی بر کلید اشتراکی (PSK)
  • پشتیبانی از گواهی دیجیتال (X.509) برای احراز هویت
  • پشتیبانی از IKE ورژن 1 و 2 برای تبادل کلید
  • ادغام افزونه‌ها و کتابخانه‌های Third party
  • پشتیبانی از رمز سخت افزار با استفاده از پروژه openSc

در نرم افزار متن باز StrongSwan هر دو مد ایجاد تونل IPsec یعنی Gateway-to-Gateway و Road warrior پشتیبانی می‌شود. در تونل Site-to-Site با وجود اینکه ترافیک شبکه در دستگاه‌های ورودی سازمان رمزنگاری و رمزگشایی می شود. ولی با برقراری تونل امن Site-to-Site یک کانال امن دومی نیز از Gateway تا کاربر نهایی یا دستگاه نیز ایجاد می‌شود.

در ادامه قصد داریم نرم افزار StrongSwan را برروی Ubuntu نسخه ۱۶.۰۴ نصب کنیم و نحوه یکپارچه سازی OpenSC با Strongswan برای استفاده از توکن‌های سخت افزاری (HSM) و کارت‌های هوشمند برای نگهداری کلید خصوصی و عمومی وهمچنین گواهی‌های دیجیتال را نشان دهیم. در آخر نیز نحوه ایجاد تونل Site-to-Site با استفاده از کلید PSK و گواهی‌ دیجیتال را نشان خواهیم داد. توکن‌های سخت افزار پشتیبانی شده در StrongSwan با استفاده از OpenSc (مجموعه ای از ابزارها و کتابخانه ها) به عنوان یک پروژه متن باز انجام شده است. همچنین ساختار اصلی فایل PKCS#15 و دسترسی به کارت هوشمند از طریق رابط نرم افزاری PKCS#11 توسط ابزارها و کتابخانه‌های OpenSc فراهم شده است.

کارتهای هوشمند سازگار با Opensc

  • WestCOS
  • SetCOS
  • CardOS
  • STARCOS
  • ASEPCOS

نصب StrongSwan با استفاده از فایل باینری و کامپایل Source کد

با توجه به توزیع‌های مختلف لینوکس تقریبا بسته‌های باینری ارایه شده از StrongSwan، قابل نصب بر روی تمام توزیع‌های لینوکس می‌باشد. در ادامه نحوه نصب StrongSwan با استفاده از فایل باینری و سورس کد در ادامه توضیح داده شده است.

برای نصب بسته باینری StrongSwan فقط کافسیت دستور زیر را اجرا کنیم.

 [email protected] $ sudo apt install strongswan
StrongSwan Binry Installation

بعد از نصب StrongSwan برروی اوبونتو، فایل ها و پوشه‌های پیکربندی آن در دایرکتوری etc/ ذخیره می‌شوند.

  • ipsec.conf
  • ipsec.secrets
  • ipsec.d
  • strongswan.conf
  • strongswan.d

کامپایل و نصب StrongSwan با استفاده از source

  • OpenSc (برای پشتیبانی از HSM در StrongSwan)
  • PC/SC (برای پشتیبانی از کارتخوان هوشمند در پلتفرم اوبونتو لازم است)
  • کتابخانه GMP (برای عملیات ریاضی در StrongSwan لازم است)
  • ابزار OpenSSL (نسخه پیاده سازی شناخته شده از الگوریتم های رمزنگاری مانند AES, SHA1).
  • PKCS (استانداردهای رمزنگاری کلید عمومی) 1، 7، 8، 11، 12.

در این مقاله، ابزار PCSC-Lite همراه با OpenSC بر روی سیستم عامل اوبونتو نصب می شود تا پشتیبانی از کارتخوان های هوشمند را اضافه کند. PCSC-Lite برای خوانندگان CCID توصیه می شود.

پیش نیازهای نصب StrongSwan از سورس کد

نصب OpenSc

[email protected] $ sudo apt install opensc 

نصب GMP library

 [email protected] $ sudo apt install libgmp10

نصب کتابخانه توسعه GMP

[email protected] $ sudo apt install libgmp-dev

نصب OpenSSl libcrypto

[email protected] $ sudo apt install libssl-dev

کامپایل و نصب StrongSwan

برای شروع نصب StrongSwan به مسیر /usr/src/ رفته و با استفاده از دستور wget آخرین نسخه StrongSwan را دانلود کنید.

 [email protected] $ cd /usr/src
 [email protected] $ wget https://download.strongswan.org/strongswan-5.5.0.tar.gz 

با استفاده از دستور زیر فایل را از حالت فشرده خارج کرده و از داخل فایل اسکریپت پیکربندی را اجرا کنید.

 [email protected] $ tar -xvf strongswan-5.5.0.tar.gz
 [email protected] $ cd strongswan-5.5.50 

در ابتدا اسکریپت پیکربندی را جهت بررسی وابستگی‌های StrongSwan اجرا کنید. همانطور که در زیر نشان داده شده پشتیبانی HSM از قبل در آخرین نسخه برای StrongSwan فعال شده است.

StrongSwan HSM

اسکریپت پیکربندی را اجرا کنید و از فلگ prefix /usr/local برای مشخص کردن مسیر ذخیره فایل‌های کامپایل شده استفاده کنید، و با استفاده از فلگ enable-openssl پشتیبانی از openssl را فعال کنید.

[email protected] $ ./configure --prefix=/usr/local --enable-openssl

عکس زیر نشان می دهد که هیچ خطایی بعد از اجرای اسکریپت پیکربندی وجود ندارد. دلیل این موضوع است که تمام پیش نیازهای از قبل روی سیستم نصب شده‌اند.

StrongSwan Prequesties

دو دستور زیر را برای کامپایل و نصب StrongSwan در مسیر usr/local/ اجرا کنید.

 [email protected] $ sudo make
 [email protected] $ sudo make install  

در اینجای کار کامپایل و نصب StrongSwan انجام شده و فایل‌ها و پوشه‌های مربوط به پیکربندی StrongSwan در مسیر/usr/local/etc/ کپی می شوند. پیکربندی مربوط به تونل‌های VPN در فایل ipsec.conf و تنظیمات مربوط به کلید محرمانه در فایل ipsec.secrets ذخیره می شود. همچنین پیکربندی‌های مربوط به پلاگین‌های StrongSwan در دایرکتوری strongswan.d ذخیره می شود.

در StrongSwan هر دو مد Transport و Tunnel برای IPsec توسط strongswan پشتیبانی می‌شود. ولی فقط در حالت Tunnel است که امنیت کانال Site-to-Site فراهم می‌شود. یکی دیگر از ویژگی‌های مهم StrongSwan این است که می‌توانیم با استفاده از آن با سایر محصولات و دستگاه‌هایی مانند سیسکو، هوآوی و جونیپر که از تونل IPsec پشتیبانی می‌کنند، تونل برقرار نماییم.

تنطیمات تونل Site-to-Site

شکل زیرنحوه قرارگیری VPN Gateway Device که بر روی آن StrongSwan راه اندازی شده است را در یک شبکه نشان می‌دهد. در این سناریو یک کانال ارتباطی امن بین شبکه های خصوصی 192.168.223.0/24 و 192.168.222.0/24 ایجاد می شود.

Network Senario

قبل از استفاده از IPsec بین شبکه‌های خصوصی A و B، مطمئن شوید که مسیریابی بین دستگاه‌های VPN سازمان برقرار ‌باشد. بایستی ابتدا دستگاه VPN سمت A بتواند دستگاه VPN از راه دور B را پینگ کند. همچنین بین این دو دستگاه بایستی پورت‌های مورد نیاز (UDP 500 و 4500 UDP) برای برقراری IPsec قابل دسترس باشند.

همانطور که در زیر نشان داده شده است، پیکربندی پیش فرض ابزار StrongSwan در مسیر usr/local/etc/ قرار دارد.

StronSwan Installation path

تونل IPsec مبتنی بر کلید مشترک (Pre-Shared key)

در حالت اول یک تونل مبتنی بر کلید مشترک بین دستگاه‌های VPN برقرار می شود. در این مد از Diffie-Hellman، معرف‌ترین الگوریتم به اشتراک گذاری کلید توسط StrongSwan برای احراز هویت Gatewayها استفاده می شود.

پیکربندی VPN

سرور A :

فایل اصلی مربوط به پیکربندی سیاست‌ها و تونل‌های StrongSwan در فایل ipsec.conf قرار دارد. برای برقراری تونل نیاز است موارد زیر را در فایل کانفیگ IPsec انجام دهیم.

  • نسخه IKE
  • نوع تونل
  • Gatewayهای مبدا و مقصد
  • مشخص کردن شبکه‌های خصوصی دو طرف

تنظیمات مورد نیاز برای سرور A :

[email protected] $ vi /usr/local/etc/ipsec.conf
config setup
 charondebug="all"
 uniqueids="yes"
 strictcrlpolicy="no"
conn %default
conn tunnel Teh-TBZ
 left=192.168.1.101
 eftsubnet=192.168.223.0/24
 right=192.168.1.102
 rightsubnet=192.168.222.0/24
 ike=aes256-sha2_256-modp1024!
 esp=aes256-sha2_256!
 keyingtries="0"
 ikelifetime="1h"
 lifetime="8h"
 dpddelay="30"
 dpdtimeout="120"
 dpdaction="request"
 authby="PSK"
 auto="start"
 keyexchange="ikev2"
 type=tunnel

تنظیمات مربوط به IPsec secrets ( کلیدهای مشترک، رمز عبور کلید خصوصی، پین مورد نیاز برای باز کردن قفل HSM) در فایل ipsec.secrets ذخیره می‌شود. طبق تنظیمات انجام شده در فایل ipsec.secrets کلید مشترک بین Gateway مقدار “test123456” تعیین شده است.

[email protected] $ sudo vi /usr/local/etc/ipsec.secrets 
192.168.1.101 192.168.1.102 : PSK "test123456" 

تنظیمات مورد نیاز برای سرور B :

[email protected] $ vi /usr/local/etc/ipsec.conf
config setup
 charondebug="all"
 uniqueids="yes"
 strictcrlpolicy="no"
conn %default
conn tunnel TBZ-TEH
 left=192.168.1.102
 leftsubnet=192.168.222.0/24
 right=192.168.1.101
 rightsubnet=192.168.223.0/24
 ike=aes256-sha2_256-modp1024!
 esp=aes256-sha2_256!
 keyingtries="0"
 ikelifetime="1h"
 lifetime="8h"
 dpddelay="30"
 dpdtimeout="120"
 dpdaction="request"
 authby="PSK"
 auto="start"
 keyexchange="ikev2"
 type=tunnel

اعمال تنظیمات مورد نیاز در فایل ipsec.secrets برای سرور B :

[email protected] $ sudo vi /usr/local/etc/ipsec.secrets
192.168.1.102 192.168.1.101 : PSK "test123456" 

تونل IPsec مبتنی بر گواهی دیجیتال

در تنظیمات مربوط به تونل مبتنی بر گواهی x.509 (احراز هویت کلید عمومی) نیاز است گواهی‌هایی مورد نیاز برای احراز هویت طرفین از طریق مرجع صدور گواهینامه (C)، ایجاد شود.

ایجاد گواهی self-sign برای CA با استفاده از ابزار PKI

وارد مسیر usr/local/etc/ipsec.d شده و دستورات زیر را اجرا کنید:

[email protected] $ cd /usr/local/etc/ipsec.d

ایجاد کلید حضوصی برای سرور CA جهت استفاده برای امضای گواهی‌ها

[email protected] $ ipsec pki --gen --type rsa --size 4096 --outform pem > private/strongswanKey.pem
ایجاد گواهی عمومی برای سرور CA
[email protected] $ ipsec pki --self --ca --lifetime 3650 --in private/strongswanKey.pem --type rsa --dn "C=IR,  O=Iranshell, CN=Root CA" outform pem > cacerts/stronswanCert.pm
صدور گواهی برای سرور A
[email protected] $ ipsec pki --gen --type rsa --size 4096 --outform pem > private/client1key.pem
[email protected] $ chmod 600 private/client1key.pem
[email protected] $ ipsec pki --pub --in private/client1key.pem --type rsa / ipsec pki --issue --lifetime 730 --cacert cacert/strongswanCert.pem--cakey private/strongswanKey.pem --dn "C=IR, O=Iranshell, CN=device1" --flag serverAuth --flag ikeIntermediate --outform pem > certs/client1Cert.pem

مشابه سرور A، جفت کلید عمومی و خصوصی و گواهی ایجاد شده را برای سرور B ایجاد می کینم :

[email protected] $ ipsec pki --gen --type rsa --size 4096 --outform pem > private/client2key.pem
[email protected] $ chmod 600 private/client2key.pem
[email protected] $ ipsec pki --pub --in private/client2key.pem--type rsa / ipsec pki --issue --lifetime 730 --cacert cacert/strongswanCert.pem--cakey private/strongswanKey.pem --dn "C=IR, O=Iranshell, CN=device2" --flag serverAuth --flag ikeIntermediate --outform pem > certs/client2Cert.pem 

پس از تولید موفقیت آمیز گواهی‌های سرور CA و Deviceها، مرحله بعدی تغییر پیکربندی ipsec.conf و ipsec.secrets بر روی نقطه A و B می‌باشد.

اعمال تنظیمات مورد نیاز برای سرور A
[email protected] $ vi /usr/local/etc/ipsec.conf
config setup
 charondebug="all"
 uniqueids="yes"
 strictcrlpolicy="no"
conn %default
conn tunnel Teh-TBZ
 left=192.168.1.101
 leftsubnet=192.168.223.0/24
 right=192.168.1.102
 rightsubnet=192.168.222.0/24
 ike=aes256-sha2_256-modp1024!
 esp=aes256-sha2_256!
 keyingtries="0"
 ikelifetime="1h"
 lifetime="8h"
 dpddelay="30"
 dpdtimeout="120"
 dpdaction="request"
 authby="rsasig"
 auto="start"
 keyexchange="ikev2"
 type=tunnel

 leftcert=client1Cer.pem
 leftid="C=IR, O=Iranshell, CN=device1"
 rightid="C=IR, O=Iranshell, CN=device2"  
اعمال تنطیمات مورد نیاز در فایل ipsec.secrets سرور A :
[email protected] $ sudo vi /usr/local/etc/ipsec.secrets
C=IR, O=Iranshell, CN=device1  C=IR, O=Iranshell, CN=device2 : RSA client1key.pem
اعمال تنظیمات مورد نیاز برای سرور B
[email protected] $ vi /usr/local/etc/ipsec.conf
config setup
 charondebug="all"
 uniqueids="yes"
 strictcrlpolicy="no"
conn %default
conn tunnel TBZ-TEH
 left=192.168.1.102
 leftsubnet=192.168.222.0/24
 right=192.168.1.101
 rightsubnet=192.168.223.0/24
 ike=aes256-sha2_256-modp1024!
 esp=aes256-sha2_256!
 keyingtries="0"
 ikelifetime="1h"
 lifetime="8h"
 dpddelay="30"
 dpdtimeout="120"
 dpdaction="request"
 authby="rsasig"
 auto="start"
 keyexchange="ikev2"
 type=tunnel

 leftcert=client2Cer.pem
 leftid="C=IR, O=Iranshell, CN=device2"
 rightid="C=IR, O=Iranshell, CN=device1" 

اعمال تنظیمات مورد نیاز در فایل ipsec.secrets سرور B :

[email protected] $ sudo vi /usr/local/etc/ipsec.secrets
C=IR, O=Iranshell, CN=device2 C=IR, O=Iranshell, CN=device1 : RSA client2key.pem 

در آخر دستور ipsec restart را برای اعمال تغییرات اجرا می‌کنیم. برای بررسی وضعیت تونل‌ها از دستور ipsec statusallاستفاده می‌کنیم.

اشتراک گذاری:
برچسب ها: IPsecStrongSwan

دیدگاهتان را بنویسید لغو پاسخ

درباره ایرانشل

تیم ایرانشل با این هدف تشکیل شده است‌ تا بتوانند با کمک شما همراهان عزیز اقدامات مثبتی در جهت شفاف‌سازی نیازمندی‌های امنیتی، معرفی سرویس‌ها و راهکارهای امنیتی انجام دهد.

عضویت در خبرنامه

اطلاعات تماس
  • تهران - خیابان شریعتی - بالاتر از پل سیدخندان
  • 09125162976
  • [email protected]
شبکه‌های اجتماعی
کلیه حقوق این وب سایت متعلق به ایرانشل می‌باشد.
جستجو

جستجو با زدن Enter و بستن با زدن ESC