معمولا در اکثر شرکتها لازم است کارمندان از راه دور به منابع شرکت دسترسی داشته باشند. برای اینکه این دسترسی به صورت امن صورت گیرد پروتکلهای مختلفی مانند PPTP, L2TP, L2TP/IPSec, OPENVPN, SSTP و … وجود دارند.
از میان این پروتکلها PPTP دیگر یک پروتکل امن به شمار نمیآید. بعضی از شرکتها مانند اپل دیگر از این پروتکل در محصولات خود پشتیبانی نمیکنند.
یکی از پروتکلهایی که از آن میتوان به صورت مستقل و یا ترکیب آن با L2TP برای ایجاد یک تانل امن استفاده کرد، IPSec است. در واقع IPSec به مجموعهای از پروتکلها اشاره میکند که جهت امن کردن ارتباطات در شبکههای IP قابل استفاده هستند.
تانل IPSec میتواند به دو صورت site to site و یا remote client باشد.
به طور خلاصه میتوان گفت هدف IPSec فراهم آوردن نیازهای امنیتی زیر است.
1- Confidentiality: برای تامین این نیاز IPSec از رمزنگاری (encryption) استفاده میکند. دادههای رمزنگاری شده در صورتی که در بین راه شنود شوند قابل فهم نخواهند بود.
2- Integrity: برای فراهم کردن این نیاز از hash استفاده میشود تا این اطمینان حاصل شود که دادههای دریافت شده دقیقا همان دادههای ارسال شده هستند و در بین راه به صورت تصادفی یا عمدی تغییر نکردهاند.
3-Authentication: برای اینکه دو سمت ارتباط اطمینان داشته باشند که طرف مقابل همان کسی است که ادعا میکند، IPSec امکان احراز هویت را فراهم میکند. انجام احراز هویت توسط pre shared key و همچنین digital certificate امکان پذیر است.
4- Anti replay: به این معنا که امکان ذخیره و سپس استفاده کردن از اطلاعات مهمی مانند اطلاعات احراز هویت که بین دو سمت رد و بدل میشوند، نباشد.
IPSec از پروتکل IKE برای ایجاد SA به معنای Security Association بین دو طرف ارتباط استفاده میکند. Security Association به معنای توافق بر سر یک سری پارامترهای امنیتی مثل الگورتیم رمزنگاری، الگوریتم hash و … است.
IKE دارای دو فاز است که با نامهای IKE Phase 1 و IKE Phase 2 شناخته میشوند.
میتوان گفت در این فاز دو طرف ارتباط به دنبال ایجاد یک مسیر امن بین یکدیگر برای تبادل پیامهای کنترلی با هم هستند.
در این فاز دو طرف بر سر پارامترهایی مانند الگوریتم رمزنگاری مورد استفاده، روش hash و … مذاکره میکنند. در صورت تفاهم در انتهای این فاز یک SA یا به عبارتی یک تانل بین دو طرف ایجاد میشود. گاها به این تانل IKE SA گفته میشود.
در این فاز دو طرف پس از ایجاد تانل یا مسیر مرحله اول به دنبال ایجاد تانل بین یکدیگر برای تبادل دادههای کاربران بین یکدیگر به صورت امن هستند.
در این فاز نیز مانند فاز قبلی دو طرف بر سر پارامترهایی مذاکره میکنند و در صورت تفاهم یک SA یا تانل بین دو طرف ایجاد میشود. به این تانل اصطلاحا IPSec SA گفته میشود.
ابتدا تنظیمات اولیه شبکه مانند آدرس IP و default route را انجام میدهیم.
/ip address
add address=192.168.200.2/24 interface=ether2 network=192.168.200.0
/ip route
add distance=1 gateway=192.168.200.1
یک address pool برای آدرسهایی که میخواهیم به vpn clientها اختصاص دهیم در نظر میگیریم.
/ip pool
add name=pool1 ranges=192.168.230.0/24
محدوده آدرسهایی که برای remote clientها در نظر گرفته ایم را NAT میکنیم. تا این کلاینتها دسترسی به اینترنت نیز داشته باشند.
/ip firewall nat
add action=masquerade chain=srcnat out-interface=UPLINK \
src-address=192.168.230.0/24
ipsec policy group صرفا یک نام است که از آن در قسمتهای دیگر استفاده خواهیم کرد.
/ip ipsec policy group
add name=GROUP1
در قسمت mode config مشخص میکنیم که به کلاینتها از کدام pool و با چه subnet maskی آدرس داده شود. در اینجا از address poolی که قبلا تعریف کردیم استفاده میکنیم. همچنین میتوان آدرس سرورهای dns را برای کلاینتها مشخص کرد.
/ip ipsec mode-config
add address-pool="IPSec Pool" address-prefix-length=32 name=\
CFG1 static-dns=8.8.8.8,9.9.9.9 system-dns=no
نکته: به صورت پیش فرض اکثر کلاینتها پس از متصل شدن VPN تمام ترافیک خود را به سمت تانل ارسال میکنند. برای اینکه به کلاینت بگوییم فقط ترافیک به مقصدهای خاصی را از طریق تانل ارسال کند میتوان از گزینه split include استفاده کرد. در این فیلد باید محدوده آدرسهای مورد نظر را مشخص کرد.
در این قسمت تنظیمات مربوط به ipsec phase 1 را انجام میدهیم. تنظیماتی مانند الگورتیم رمزنگاری مورد استفاده در فاز اول، نوع گروه دفی هلمن و …
نکته: Diffie-Hellman یک پروتکل انتقال کلید است. این پروتکل این امکان را فراهم میکند تا دو طرف یک ارتباط که قصد استفاده از رمزنگاری متقارن را دارند، کلید مشترکی را ایجاد کرده و با یکدیگر به اشتراک بگذراند. هر گروه دفی هلمن بیانگر میزان بزرگی کلید ایجاد شده است. معمولا گروههای بزرگتر به معنی طول کلید بیشتر و امنیت بیشتر هستند.
نکته: دفی هلمن از یک الگوریتم غیرمتقارن برای تبادل کلیدها استفاده میکند.
/ip ipsec profile
add enc-algorithm=aes-256,aes-192,aes-128 name=profile1
Proposal Check: نحوه بررسی life time برای فاز 2 را مشخص میکند. مقدار این life time در قسمت ipsec proposal مشخص میشود.
Life Time: مشخص کردن طول عمر SA توسط این پارامتر انجام میشود و زمان پیش فرض 1 روز است.
DPD interval: کاربرد Dead Peer Detection بررسی در دسترس بودن طرف مقابل است. امکان غیر فعال کردن DPD نیز وجود دارد.
NAT Traversal: در صورت فعال نبودن NAT Traversal اگر یکی از طرفین پشت NAT قرار گرفته باشد امکان برقراری ارتباط از طریق IPSec وجود نخواهد داشت.
تعدادی دیگر از تنظیمات مربوط به ipsec phase 1 در این قسمت انجام میشود.
/ip ipsec peer
add name=peer1 passive=yes profile=profile1 send-initial-contact=no
Exchange mode: نحوه تبادل و مذاکره برای پارامترهای فاز 1 را مشخص میکند. در این قسمت میتوان از نسخه 2 پروتکل IKE نیز استفاده کرد. در نسخه 2 برای فاز 1 تعداد پیامهای کمتری برای مذاکره استفاده میشود. درو روش main و aggressive مربوطه به IKE نسخه 1 میشوند. به طور کلی میتوان گفت روش main از روش aggressive امنتر است.
Address: میتوان محدوده آدرس سمت کلاینت را در اینجا وارد کرد تا در صورتی که آدرس کلاینت در این محدوده باشد تنظیمات این peer برای او اعمال شود.
Local Address: در صورتی که روتر دارای چند آدرس باشد مشخص میکند که آدرس مبدا برای برقراری SA کدام آدرس روتر باشد.
Send INITIAL_CANTACT: میتوان مشخص کرد که بسته initial_contact توسط روتر ارسال بشود یا خیر. معمولا remote clientها شروع کننده یک ارتباط هستند و برای آنها نیازی نیست که سمت روتر این گزینه فعال باشد. همچنین در صورت استفاده از mode config و xauth بسته initial_contact ارسال نخواهد شد.
در قسمت ipsec proposal پارامترهای مربوط به فاز دوم ipsec را مشخص میکنیم.
برای احراز هویت امکان استفاده از md5 و انواع مختلف sha وجود دارد.
برای رمزنگاری نیز لیست مفصلی از الگوریتمهای رمزنگاری متقارن پشتیبانی میشود.
/ip ipsec proposal
add enc-algorithms=aes-256-cbc,aes-128-cbc name=proposal1 pfs-group=none
PFS Group: مشخص کردن گروه دفی هلمن برای Perfect Forward Secrecy از طریق این گزینه قاب انجام است. استفاده از PFS اختیاری است و میتواند موجب افزایش امنیت شود.
در این قسمت مهمترین عملی که انجام میشود احراز هویت peer است.
در قسمت peer نام peer1 که در مراحل قبلی تعریف کردیم را انتخاب میکنیم.
روش احراز هویت را pre-shared-key-xauth قرار میدهیم.
با توجه به روش احراز هویتی که انتخاب کردیم باید قسمت secret که در واقع همان pre-shared-key است و قسمتهای username و password را پر کنیم.
/ip ipsec identity
add auth-method=pre-shared-key-xauth generate-policy=\
port-strict mode-config=CFG1 password=123 peer=peer1 \
policy-template-group=GROUP1 secret=12345678 username=\
a.karimi
نکته: در صورتی که بخواهیم username و password از روی یک radius server خوانده شوند باید گزینه XAuth Use Radius را فعال کنیم.
/ip ipsec settings
set xauth-use-radius=yes
ipsec policy مشخص کننده این است که تنظیمات امنیتی ipsec (فرستادن بسته از طریق تانل و انجام رمزنگاری و …) برای چه بستههایی صورت گیرد.
در این قسمت از proposal و گروهی که در قسمتهای قبل ایجاد کردیم استفاده میکنیم.
/ip ipsec policy
add dst-address=0.0.0.0/0 group=GROUP1 proposal=proposal1 \
src-address=0.0.0.0/0 template=yes
در گوشی اندروید به قسمت تنظیمات VPN میرویم و یک اتصال جدید به صورت زیر ایجاد میکنیم.
همانطور که مشاهده میکنید نوع را IPSec Xauth PSK قرار میدهیم.
در صورتی که کلاینت بتواند به صورت موفقیت آمیز به سرور متصل شود در قسمت Active peers و Installed SA میتوان این امر را مشاهده کرد.
[admin@MikroTik] /ip ipsec active-peers> print detail
Flags: R - responder, N - natt-peer
0 RN id="a.karimi" local-address=192.168.200.2 port=4500
remote-address=192.168.50.254 port=37708
state=established side=responder
dynamic-address=192.168.230.255 uptime=14m8s
last-seen=5s ph2-total=1
[admin@MikroTik] /ip ipsec installed-sa> print detail
Flags: H - hw-aead, A - AH, E - ESP
0 E spi=0x7D8E078 src-address=192.168.50.254:37708
dst-address=192.168.200.2:4500 state=mature
auth-algorithm=sha256 enc-algorithm=aes-cbc
enc-key-size=256
auth-key="ac75627c92bad874145189f15430b5731e1aff6560913553
c4204504ad65429a"
enc-key="f0a9105c9bc77b35e8fe3e54ba452eac32a0d7605b86fd53d
3b7d47434ce9911"
addtime=aug/29/2019 17:48:59 expires-in=2h46m9s
add-lifetime=2h24m/3h current-bytes=411381
current-packets=2850 replay=128
1 E spi=0xC5E40F26 src-address=192.168.200.2:4500
dst-address=192.168.50.254:37708 state=mature
auth-algorithm=sha256 enc-algorithm=aes-cbc
enc-key-size=256
auth-key="0823ffc208f95a86e9e01106edddd85ce5d305a5c9c55d46
ceb8c73acca5bc76"
enc-key="c3b09eb4ced6308b292773aadaa7bf099bcef1ad0c21a4a77
ffb6e1a541b3887"
addtime=aug/29/2019 17:48:59 expires-in=2h46m9s
add-lifetime=2h24m/3h current-bytes=1648550
current-packets=2767 replay=128