امنیت و فایروال / فایروال

VPN فورتی گیت: IPsec site-to-site و دسترسی کارمندان

VPN فورتی گیت در FortiOS 7.6؛ تونل IPsec site-to-site با IKEv2، route، blackhole و policy، عیب یابی تونل و دسترسی کارمندان با FortiClient به جای SSL VPN.

نوشته‌ی تیم پیکوگاید ۱۲ دقیقه مطالعه
در این صفحه
  1. وضعیت SSL VPN در FortiOS 7.4 و 7.6
  2. site-to-site بین دو FortiGate
  3. phase 1 و phase 2
  4. آدرس‌ها، policy و route
  5. روش GUI
  6. بررسی و عیب یابی تونل
  7. دسترسی کارمندان با FortiClient و IPsec
  8. کانفیگ
  9. FortiClient
  10. قدم بعدی

VPN فورتی گیت در FortiOS 7.6 دو کاربرد اصلی دارد. برای site-to-site یک تونل IPsec با IKEv2 بین دو FortiGate می‌سازید (phase1-interface و phase2-interface)، مسیر شبکه‌ی طرف مقابل را به اینترفیس تونل می‌دهید، یک blackhole route با distance 254 کنارش می‌گذارید و دو policy بدون NAT برای رفت و برگشت می‌نویسید. برای دسترسی کارمندان، از FortiOS 7.6.3 به بعد SSL VPN tunnel mode روی هیچ مدلی وجود ندارد و طبق Release Notes جایگزین آن IPsec VPN است؛ راهنمای مهاجرت Fortinet برای این کار IKEv2 با FortiClient را توصیه می‌کند که روی TCP پورت 443 هم کار می‌کند. کانفیگ پایه‌ی دستگاه در کانفیگ اولیه‌ی فورتی گیت و منطق policy در Policy و NAT در فورتی گیت آمده است.

وضعیت SSL VPN در FortiOS 7.4 و 7.6

نسخه SSL VPN tunnel mode web mode (از 7.6.3 با نام Agentless VPN)
7.4 (طبق Release Notes نسخه‌ی 7.4.12) هست، به جز مدل‌های entry-level سری G: 50G، 70G، 90G و انواعشان مثل tunnel mode
7.6.0 تا 7.6.2 از مدل‌های ۲ گیگابایتی حذف شده است: 40F، 60F، 61F و FGR-60F مثل tunnel mode
7.6.3 به بعد و 8.0 روی هیچ مدلی نیست؛ از GUI و CLI حذف شده هست، به جز 40F، 50G، 60F، 61F، FGR-60F (نسخه‌ی ۲ گیگ)، 70G، 90G و 91G

طبق Release Notes نسخه‌ی 7.6.7، تنظیمات SSL VPN tunnel mode هنگام ارتقا به 7.6.3 یا بالاتر منتقل نمی‌شود و Fortinet از مشتری‌ها می‌خواهد پیش از ارتقا دسترسی کاربران را به IPsec منتقل کنند. Best Practices نسخه‌ی 7.6 هم برای دسترسی از راه دور IPsec VPN را پیشنهاد می‌کند و ZTNA و FortiSASE را گزینه‌های غیر VPN می‌داند. اگر مطمئن نیستید دستگاهتان ۲ گیگابایتی است:

diagnose hardware sysinfo conserve

اگر total RAM کمتر از 2000 MB باشد، دستگاه جزو همین مدل‌هاست.

site-to-site بین دو FortiGate

دفتر مرکزی (HQ) شعبه (BR1)
IP اینترفیس wan1 203.0.113.2 198.51.100.2
شبکه‌ی داخلی (lan) 192.168.10.0/24 192.168.20.0/24
نام تونل to-BR1 to-HQ

در مسیر بین دو دستگاه UDP 500 و UDP 4500 (IKE و NAT-T) باید باز باشد و اگر NAT در مسیر نیست، ESP (پروتکل شماره‌ی 50) هم. برخی ارائه دهنده‌ها این پورت‌ها را محدود می‌کنند؛ در Best Practices آمده که پورت IKE روی FortiGate قابل تغییر است.

phase 1 و phase 2

phase 1 هویت دو طرف را با کلید مشترک (PSK) یا گواهی تأیید می‌کند و کانال امن مذاکره را می‌سازد. phase 2 تعیین می‌کند کدام ترافیک با چه الگوریتمی رمز شود. روی HQ:

config vpn ipsec phase1-interface
    edit "to-BR1"
        set interface "wan1"
        set ike-version 2
        set peertype any
        set net-device disable
        set proposal aes256gcm-prfsha384 aes256-sha256
        set dhgrp 20 21
        set remote-gw 198.51.100.2
        set psksecret <pre-shared-key>
    next
end
config vpn ipsec phase2-interface
    edit "to-BR1"
        set phase1name "to-BR1"
        set proposal aes256gcm aes256-sha256
        set dhgrp 20 21
        set auto-negotiate enable
        set src-subnet 192.168.10.0 255.255.255.0
        set dst-subnet 192.168.20.0 255.255.255.0
    next
end
  • ike-version 2: پیش فرض CLI در 7.6.7 هنوز IKEv1 است، پس آن را صریح بنویسید. در 8.0 طبق Release Notes، CLI هنگام انتخاب IKEv1 هشدار می‌دهد و طبق Fortinet Community پیش فرض نصب‌های جدید IKEv2 است.
  • dhgrp: پیش فرض CLI در 7.6 گروه‌های 14 و 5 است و Release Notes نسخه‌ی 8.0 آن را به 20 و 21 تغییر داده است. روی 7.6 مقدار را خودتان بدهید.
  • proposal و dhgrp باید دست کم یک مقدار مشترک با طرف مقابل داشته باشند؛ وگرنه phase 1 یا phase 2 بالا نمی‌آید.
  • auto-negotiate enable در phase 2 پیش فرض خاموش است. با روشن کردنش SA بدون منتظر ماندن برای ترافیک ساخته می‌شود و تونل حتی بدون ترافیک بالا می‌ماند.
  • selectorها: src-subnet و dst-subnet در دو طرف باید قرینه‌ی هم باشند. پیش فرض هر دو 0.0.0.0 0.0.0.0 است؛ با تجهیز وندور دیگر معمولاً subnet دقیق لازم است.

روی BR1 همین دستورها را با نام to-HQ، remote-gw 203.0.113.2، همان PSK و selectorهای برعکس بزنید.

آدرس‌ها، policy و route

هر تونل مبتنی بر route یک اینترفیس مجازی هم‌نام خودش می‌سازد و policy و route به همین اینترفیس اشاره می‌کنند. طبق Troubleshooting Tip در Fortinet Community، بدون policy تونل اصلاً بالا نمی‌آید و در debug پیام ignoring request to establish IPsec SA, no policy configured دیده می‌شود.

config firewall address
    edit "HQ-LAN"
        set subnet 192.168.10.0 255.255.255.0
    next
    edit "BR1-LAN"
        set subnet 192.168.20.0 255.255.255.0
    next
end
config firewall policy
    edit 0
        set name "HQ-to-BR1"
        set srcintf "lan"
        set dstintf "to-BR1"
        set srcaddr "HQ-LAN"
        set dstaddr "BR1-LAN"
        set action accept
        set schedule "always"
        set service "ALL"
    next
    edit 0
        set name "BR1-to-HQ"
        set srcintf "to-BR1"
        set dstintf "lan"
        set srcaddr "BR1-LAN"
        set dstaddr "HQ-LAN"
        set action accept
        set schedule "always"
        set service "ALL"
    next
end
config router static
    edit 0
        set dst 192.168.20.0 255.255.255.0
        set device "to-BR1"
    next
    edit 0
        set dst 192.168.20.0 255.255.255.0
        set blackhole enable
        set distance 254
    next
end
  • NAT روی policyهای تونل خاموش بماند. اگر NAT روشن باشد، مبدأ بسته با selector جور نمی‌شود و debug flow خطای No matching IPsec selector, drop می‌دهد.
  • blackhole route: وقتی تونل قطع است، route تونل غیرفعال می‌شود و بدون blackhole، ترافیک شبکه‌ی شعبه از مسیر پیش فرض و رمز نشده به سمت اینترنت می‌رود. به علاوه sessionهای UDP و ICMP روی مسیر اشتباه می‌مانند و بعد از بالا آمدن تونل هم کار نمی‌کنند. Fortinet مقدار 254 را پیشنهاد می‌کند؛ 255 را نگذارید، چون route با distance 255 هرگز در جدول مسیریابی نصب نمی‌شود.
  • اگر چند شعبه دارید، می‌توانید subnetهای همه را در یک address group بگذارید و برای کل آن یک blackhole بسازید. برای استفاده از آبجکت در route، گزینه‌ی Static route configuration را روی آدرس روشن کنید.

روش GUI

در 7.6 مسیر VPN → VPN Tunnels → Create New → IPsec Tunnel from template است و قالب Site to Site را انتخاب می‌کنید. نام تونل حداکثر ۱۵ نویسه است. طبق Fortinet Community، این قالب selectorها، آدرس‌ها، route تونل، blackhole route و policyها را خودکار می‌سازد و گزینه‌ی Transport (از 7.6 برای IKEv2) هم در همین مراحل است. بعد از ساخت، خروجی را با show vpn ipsec phase1-interface بررسی کنید تا بدانید قالب چه چیزی نوشته است.

بررسی و عیب یابی تونل

get vpn ipsec tunnel summary
diagnose vpn ike gateway list name to-BR1
diagnose vpn tunnel list name to-BR1
diagnose vpn tunnel up to-BR1
execute ping-options source 192.168.10.1
execute ping 192.168.20.1
  • get vpn ipsec tunnel summary: وضعیت کلی phase 2 همه‌ی تونل‌ها.
  • diagnose vpn ike gateway list: وضعیت phase 1؛ established یعنی IKE SA ساخته شده و connecting یعنی مذاکره به نتیجه نرسیده است.
  • diagnose vpn tunnel list: SAهای phase 2 و شمارنده‌های enc و dec. اگر enc بالا می‌رود و dec نه، بسته‌ها می‌روند ولی جوابی از طرف مقابل نمی‌رسد.
  • execute ping-options source: آدرس مبدأ ping را یکی از IPهای LAN خود FortiGate بگذارید تا بسته در selector تونل بگنجد.

در GUI همین اطلاعات در Dashboard → Network → IPsec است و دکمه‌ی Bring Up تونل را دستی بالا می‌آورد. اگر phase 1 بالا نمی‌آید، debug IKE را روی طرف پاسخ دهنده بگیرید. از 7.4.1 دستور قدیمی log-filter dst-addr4 به log filter rem-addr4 تغییر کرده است:

diagnose debug reset
diagnose vpn ike log filter clear
diagnose vpn ike log filter rem-addr4 198.51.100.2
diagnose debug console timestamp enable
diagnose debug application ike -1
diagnose debug enable

هم‌زمان در نشست دیگری رسیدن بسته‌ها را ببینید:

diagnose sniffer packet any "host 198.51.100.2 and (port 500 or port 4500)" 4 0 a

بعد از کار diagnose debug disable و diagnose debug reset را بزنید. برای پاک کردن SAها و مذاکره‌ی دوباره: diagnose vpn tunnel flush to-BR1 و diagnose vpn ike gateway clear name to-BR1.

نشانه علت محتمل
هیچ بسته‌ای روی UDP 500 یا 4500 نمی‌رسد remote-gw اشتباه، route به IP طرف مقابل از اینترفیس دیگری است، یا مسیر بالادست پورت را بسته
phase 1 در حالت connecting می‌ماند PSK، نسخه‌ی IKE، proposal یا DH group دو طرف یکی نیست
phase 1 بالاست، phase 2 نه selectorها قرینه نیستند یا proposal و PFS دو طرف فرق دارد
تونل بالاست ولی ترافیک عبور نمی‌کند policy یا route نیست، NAT روی policy روشن است، یا gateway سرور مقصد FortiGate نیست
تونل مرتب قطع و وصل می‌شود مشکل خط اینترنت، یا DPD که local-in policy جلویش را گرفته

دسترسی کارمندان با FortiClient و IPsec

کارمند با FortiClient به WAN دفتر مرکزی وصل می‌شود، نام کاربری و رمز (و در صورت نیاز رمز دوم) را وارد می‌کند و یک IP از بازه‌ی VPN می‌گیرد. تصمیم‌های اصلی پیش از کانفیگ:

  • IKEv2: راهنمای مهاجرت Fortinet آن را توصیه می‌کند، چون فقط IKEv2 روی TCP کار می‌کند. به علاوه FortiClient از 7.4.4 به بعد IKEv1 را پشتیبانی نمی‌کند.
  • Transport: در IKEv2 سه گزینه دارید: UDP، Auto (اول UDP و در صورت شکست TCP) و TCP. TCP به FortiClient 7.4.1 یا بالاتر نیاز دارد و برای شبکه‌هایی مفید است که فقط ترافیک TCP را عبور می‌دهند، مثل برخی شبکه‌های مهمان. گزینه‌ی Fortinet encapsulation را خاموش بگذارید، چون FortiClient آن را پشتیبانی نمی‌کند.
  • احراز هویت کاربر: در IKEv2 با EAP انجام می‌شود. کاربر محلی FortiGate (با FortiToken) و RADIUS با روش پیش فرض FortiClient یعنی EAP-MSCHAPv2 کار می‌کنند. LDAP روی Active Directory با EAP-MSCHAPv2 کار نمی‌کند، چون FortiGate رمز ساده را برای bind ندارد و AD به طور پیش فرض attributeهای جایگزین را هم نمی‌دهد. راه حل یا EAP-TTLS روی FortiClient 7.4.3 یا بالاتر است (با EMS، یا در نسخه‌ی رایگان با ویرایش دستی فایل کانفیگ FortiClient)، یا احراز هویت کاربران از طریق RADIUS (مثلاً NPS ویندوز). SAML هم فقط در IKEv2 و از FortiClient 7.2.4 پشتیبانی می‌شود.
  • split tunnel: با آن فقط ترافیک شبکه‌های داخلی از تونل می‌رود. در قالب GUI پیش فرض روشن و در کانفیگ دستی پیش فرض خاموش است.

کانفیگ

ساده‌ترین راه، قالب Remote Access با VPN client type برابر FortiClient در همان مسیر VPN Tunnels است؛ phase 1 و 2، بازه‌ی IP، آدرس‌ها و policy را با هم می‌سازد. معادل CLI، بر اساس مثال Fortinet Community و با گروه کاربری VPN-Users که از قبل ساخته شده:

config firewall address
    edit "VPN-Split"
        set subnet 192.168.10.0 255.255.255.0
    next
end
config vpn ipsec phase1-interface
    edit "RA-IKEv2"
        set type dynamic
        set interface "wan1"
        set ike-version 2
        set peertype any
        set net-device disable
        set mode-cfg enable
        set proposal aes256gcm-prfsha384 aes256-sha256
        set dhgrp 20 21
        set eap enable
        set eap-identity send-request
        set authusrgrp "VPN-Users"
        set ipv4-start-ip 10.99.0.10
        set ipv4-end-ip 10.99.0.200
        set dns-mode auto
        set ipv4-split-include "VPN-Split"
        set save-password enable
        set transport tcp
        set psksecret <pre-shared-key>
    next
end
config vpn ipsec phase2-interface
    edit "RA-IKEv2"
        set phase1name "RA-IKEv2"
        set proposal aes256gcm aes256-sha256
        set dhgrp 20 21
    next
end
config firewall policy
    edit 0
        set name "RA-to-LAN"
        set srcintf "RA-IKEv2"
        set dstintf "lan"
        set srcaddr "all"
        set dstaddr "VPN-Split"
        set action accept
        set schedule "always"
        set service "ALL"
    next
end
  • transport tcp: پورت از ike-tcp-port در config system settings می‌آید و طبق Release Notes، از 7.6.1 در نصب‌های جدید 443 است. اگر پورت مدیریتی HTTPS (admin-sport) هم 443 باشد، GUI روی اینترفیسی که تونل رویش است در دسترس نمی‌ماند؛ یکی از دو پورت را عوض کنید. اگر TCP لازم ندارید، این خط را حذف کنید تا تونل روی UDP بماند.
  • گروه کاربری: یا در phase 1 با authusrgrp، یا در policy؛ نه هر دو. اگر گروه‌های مختلف دسترسی متفاوت دارند، گروه را در policyها بگذارید.
  • policy را محدود کنید: به جای service ALL فقط سرویس‌هایی را باز کنید که کارمندان لازم دارند.
  • چند تونل dialup روی یک WAN: در IKEv2 FortiGate تونل‌ها را با Network ID از هم جدا می‌کند و این تنظیم در FortiClient بدون EMS قابل تنظیم نیست. برای سازمان کوچک یک تونل با چند گروه در policy ساده‌تر است.
  • رمز دوم: اگر کاربران با FortiToken گاهی وصل نمی‌شوند، Fortinet افزایش negotiate-timeout از ۳۰ ثانیه‌ی پیش فرض (مثلاً به 50) را پیشنهاد می‌کند تا کاربر فرصت وارد کردن کد را داشته باشد.

FortiClient

روی FortiClient یک اتصال IPsec VPN بسازید: Remote Gateway آدرس WAN، روش احراز هویت Pre-shared key با همان کلید، و در Advanced Settings نسخه‌ی IKE را 2 و در صورت نیاز Transport را TCP بگذارید. proposal و DH group باید با phase 1 و 2 روی FortiGate جور باشند. طبق Release Notes نسخه‌ی 7.4.7، نسخه‌ی رایگان VPN-only از 7.4.3 به بعد به روز نشده و همان 7.4.3 قابل استفاده است. در سازمان‌های بزرگ‌تر، راهنمای مهاجرت Fortinet مدیریت متمرکز پروفایل‌ها با FortiClient EMS را ترجیح می‌دهد.

برای بررسی اتصال یک کاربر، علاوه بر diagnose vpn tunnel list، debug احراز هویت را هم بگیرید و در فیلتر، IP عمومی کاربر را بگذارید:

diagnose vpn ike log filter rem-addr4 <user-public-ip>
diagnose debug application ike -1
diagnose debug application fnbamd -1
diagnose debug application eap_proxy -1
diagnose debug enable

قدم بعدی

برای چند شعبه، به جای تونل جدا برای هر شعبه، طراحی hub and spoke با ADVPN و مسیریابی پویا روی تونل‌ها را بررسی کنید؛ اصول انتخاب مسیر در OSPF از صفر آمده است. اگر شعبه‌ها روتر میکروتیک دارند، پیش از ساخت تونل IPsec بین FortiGate و RouterOS تفاوت‌های نسخه‌ها را در RouterOS 6 در برابر RouterOS 7 ببینید.

منابع

  1. FortiOS 7.6.7 Release Notes fortinetweb.s3.amazonaws.com
  2. FortiOS 7.6.0 Release Notes fortinetweb.s3.amazonaws.com
  3. FortiOS 7.4.12 Release Notes fortinetweb.s3.amazonaws.com
  4. FortiOS 8.0.0 Release Notes fortinetweb.s3.amazonaws.com
  5. FortiOS 7.6.0 SSL VPN to IPsec VPN Migration fortinetweb.s3.amazonaws.com
  6. FortiOS 7.6.0 Best Practices fortinetweb.s3.amazonaws.com
  7. FortiOS 7.6.7 CLI Reference fortinetweb.s3.amazonaws.com
  8. FortiOS 7.6 Troubleshooting Cheat Sheet fortinetweb.s3.amazonaws.com
  9. FortiClient (Windows) 7.4.7 Release Notes fortinetweb.s3.amazonaws.com
  10. Fortinet Community — Technical Tip: Recommended Release for FortiOS community.fortinet.com
  11. Fortinet Community — Technical Tip: How to configure VPN Site to Site between FortiGates community.fortinet.com
  12. Fortinet Community — Technical Tip: Using Blackhole routes in site-to-site IPsec VPN community.fortinet.com
  13. Fortinet Community — Troubleshooting Tip: Troubleshooting IPsec site-to-site tunnel connectivity community.fortinet.com
  14. Fortinet Community — Technical Tip: IPsec dial-up tunnel using IKEv2 with FortiToken 2FA for local users community.fortinet.com
  15. Fortinet Community — Technical Tip: IKEv2 dial up VPN with LDAP authentication community.fortinet.com
  16. Fortinet Community — Technical Tip: New FortiOS 7.6 site-to-site IPsec VPN using the GUI template community.fortinet.com