اوبنتوسرورشبکهلینوکسهک و امنیت

آموزش راه‌اندازی سرور VPN با پروتکل IKEv2 با استفاده از StrongSwan در اوبونتو 24.04

مقدمه
یک شبکه خصوصی مجازی (VPN) به شما اجازه می‌دهد تا ترافیک اینترنت خود را هنگام عبور از شبکه‌های ناامن (مانند شبکه‌های کافی‌شاپ، فرودگاه یا کنفرانس‌ها) به صورت امن رمزنگاری کنید.

پروتکل تبادل کلید اینترنت نسخه ۲ (IKEv2) یک پروتکل است که امکان تونل‌زنی مستقیم IPSec بین سرور و کلاینت را فراهم می‌کند. در پیاده‌سازی‌های VPN با IKEv2، پروتکل IPSec وظیفه رمزنگاری ترافیک شبکه را بر عهده دارد. پروتکل IKEv2 به صورت پیش‌فرض روی برخی پلتفرم‌ها (مانند OS X 10.11 به بالا، iOS 9.1 به بالا و ویندوز 10) پشتیبانی می‌شود و نیازی به نصب نرم‌افزار اضافی ندارد. همچنین این پروتکل در برابر قطعی‌های موقت کلاینت مقاومت بالایی دارد.

در این آموزش، شما یک سرور VPN با پروتکل IKEv2 را با استفاده از نرم‌افزار StrongSwan روی یک سرور اوبونتو 24.04 راه‌اندازی خواهید کرد. سپس نحوه اتصال به آن از طریق کلاینت‌های ویندوز، مک‌او‌اس (macOS)، اوبونتو، iOS و اندروید را یاد می‌گیرید.

(نکته: از آنجایی که نسخه‌های قدیمی‌تر اوبونتو مانند 20.04 به پایان عمر خود رسیده‌اند، در این مقاله مراحل را برای اوبونتو 24.04 به‌روزرسانی کرده‌ایم.)

پیش‌نیازها
برای تکمیل این آموزش به موارد زیر نیاز دارید:

  • یک سرور اوبونتو 24.04 که طبق راهنمای راه‌اندازی اولیه سرور در پارمین کلود (Parmin Cloud) پیکربندی شده باشد، شامل یک کاربر غیر روت (non-root) با دسترسی sudo و فایروال.

مرحله ۱ — نصب StrongSwan

ابتدا StrongSwan را نصب می‌کنیم. StrongSwan یک دیمون (Daemon) متن‌باز IPSec است که ما آن را به عنوان سرور VPN خود پیکربندی خواهیم کرد. ما همچنین کامپوننت زیرساخت کلید عمومی (PKI) را نصب می‌کنیم تا بتوانیم یک مرجع صدور گواهی (Certificate Authority یا CA) برای زیرساخت خود ایجاد کنیم.

ابتدا کش پکیج محلی را به‌روزرسانی کنید:

sudo apt update

سپس نرم‌افزارها را نصب کنید:

sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins

پکیج libcharon-extauth-plugins اطمینان حاصل می‌کند که کلاینت‌های مختلف بتوانند با استفاده از نام کاربری و رمز عبور مشترک با سرور احراز هویت کنند. پکیج libstrongswan-extra-plugins نیز برای پشتیبانی StrongSwan از مجموعه‌های رمزنگاری منحنی بیضوی (Elliptic Curve) که از крипتوگرافی Curve25519 استفاده می‌کنند، شامل شده است.


مرحله ۲ — ایجاد مرجع صدور گواهی (CA)

یک سرور IKEv2 برای معرفی خود به کلاینت‌ها به یک گواهی (Certificate) نیاز دارد. برای کمک به ایجاد گواهی مورد نیاز، پکیج strongswan-pki شامل ابزاری به نام pki است که برای تولید CA و گواهی‌های سرور استفاده می‌شود.

ابتدا چند دایرکتوری برای ذخیره تمام فایل‌هایی که روی آن‌ها کار می‌کنیم ایجاد کنید. ساختار دایرکتوری با برخی از دایرکتوری‌های موجود در /etc/ipsec.d مطابقت دارد، جایی که در نهایت تمام موارد ایجاد شده را به آنجا منتقل خواهیم کرد:

mkdir -p ~/pki/{cacerts,certs,private}

سپس مجوزها را قفل کنید تا فایل‌های خصوصی شما توسط کاربران دیگر دیده نشوند:

chmod 700 ~/pki

اکنون که ساختار دایرکتوری را داریم، می‌توانیم یک کلید ریشه (Root Key) تولید کنیم. این یک کلید RSA 4096 بیتی خواهد بود که برای امضای گواهی ریشه CA ما استفاده می‌شود:

pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

سپس، با استفاده از کلیدی که به تازگی تولید کردیم، گواهی ریشه CA را ایجاد و امضا می‌کنیم:

pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
    --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

فلگ --lifetime 3650 تضمین می‌کند که گواهی ریشه CA برای ۱۰ سال معتبر خواهد بود.


مرحله ۳ — تولید گواهی برای سرور VPN

اکنون یک گواهی و کلید برای سرور VPN ایجاد می‌کنیم. این گواهی به کلاینت اجازه می‌دهد تا با استفاده از گواهی CA که به تازگی تولید کردیم، اصالت سرور را تایید کند.

ابتدا یک کلید خصوصی برای سرور VPN ایجاد کنید:

pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

سپس، گواهی سرور VPN را با کلید CA ایجاد و امضا کنید. در دستور زیر، فیلد Common Name (CN) و Subject Alternate Name (SAN) را با نام دامنه یا آدرس IP سرور VPN خود جایگزین کنید:

pki --pub --in ~/pki/private/server-key.pem --type rsa \
    | pki --issue --lifetime 1825 \
        --cacert ~/pki/cacerts/ca-cert.pem \
        --cakey ~/pki/private/ca-key.pem \
        --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
        --flag serverAuth --flag ikeIntermediate --outform pem \
    >  ~/pki/certs/server-cert.pem

نکته: اگر از آدرس IP به جای نام دامنه استفاده می‌کنید، باید چندین ورودی --san را مشخص کنید. خط مربوط به نام متمایزکننده (--dn) باید با ورودی‌های اضافی مانند زیر اصلاح شود:
--dn "CN=IP address" --san @IP_address --san IP_address \
دلیل این ورودی --san @IP_address اضافی این است که برخی کلاینت‌ها هنگام بررسی هویت سرور، بررسی می‌کنند که آیا گواهی TLS هم دارای ورودی DNS و هم ورودی آدرس IP است یا خیر.

اکنون که تمام فایل‌های TLS/SSL مورد نیاز StrongSwan را تولید کردیم، آن‌ها را به دایرکتوری /etc/ipsec.d/ منتقل کنید:

sudo cp -r ~/pki/* /etc/ipsec.d/

مرحله ۴ — پیکربندی StrongSwan

StrongSwan یک فایل پیکربندی پیش‌فرض با چند نمونه دارد، اما ما باید بیشتر تنظیمات را خودمان انجام دهیم. ابتدا فایل پیش‌فرض را برای مرجع پشتیبان‌گیری کنید:

sudo mv /etc/ipsec.conf{,.original}

یک فایل پیکربندی جدید و خالی ایجاد و باز کنید (در اینجا از nano استفاده می‌کنیم):

sudo nano /etc/ipsec.conf

نکته: هنگام کار با VPN های IPSec، قراردادها سمت چپ (left) به سیستم محلی (سرور) و سمت راست (right) به کلاینت‌های ریموت (موبایل و کامپیوترها) اشاره دارد.

ابتدا به StrongSwan می‌گوییم که وضعیت دیمون را برای دیباگ لاگ کند و اتصالات تکراری را مجاز کند:

/etc/ipsec.conf

config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

سپس یک بخش پیکربندی برای VPN خود ایجاد می‌کنیم و به StrongSwan می‌گوییم که تونل‌های IKEv2 ایجاد کند:

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

تنظیمات تشخیص قطعی همتا (Dead-peer detection) را برای پاکسازی اتصالات معلق اضافه کنید:

    dpdaction=clear
    dpddelay=300s
    rekey=no

اکنون پارامترهای IPSec سمت «چپ» (سرور) را پیکربندی می‌کنیم:

    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

(نکته: هنگام پیکربندی leftid، اگر از دامنه استفاده می‌کنید علامت @ را قرار دهید (مثلاً @vpn.example.com). اگر از IP استفاده می‌کنید، علامت @ را حذف کنید و فقط IP را بنویسید).

سپس پارامترهای سمت «راست» (کلاینت) را پیکربندی می‌کنیم:

    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

در نهایت، تنظیمات مربوط به درخواست اعتبار از کلاینت و الگوریتم‌های رمزنگاری (Cipher Suites) را اضافه کنید:

    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

فایل نهایی باید به شکل زیر باشد. پس از تایید صحت خطوط، فایل را ذخیره کرده و ببندید:

/etc/ipsec.conf

config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

مرحله ۵ — پیکربندی احراز هویت VPN

سرور VPN ما اکنون برای پذیرش اتصالات کلاینت پیکربندی شده است، اما هنوز هیچ اعتبارنامه‌ای (Credentials) تعریف نکرده‌ایم. باید یک فایل به نام ipsec.secrets را پیکربندی کنیم:

فایل را باز کنید:

sudo nano /etc/ipsec.secrets

ابتدا به StrongSwan می‌گوییم کلید خصوصی سرور کجاست:

: RSA "server-key.pem"

سپس، اعتبارنامه‌های کاربر را تعریف کنید (نام کاربری و رمز عبور دلخواه خود را وارد کنید):

your_username : EAP "your_password"

فایل را ذخیره کرده و ببندید. سپس سرویس VPN را ری‌استارت کنید تا تنظیمات اعمال شوند:

sudo systemctl restart strongswan-starter

مرحله ۶ — پیکربندی فایروال و IP Forwarding

با تکمیل پیکربندی StrongSwan، باید فایروال را تنظیم کنیم تا ترافیک VPN را عبور داده و فوروارد کند.

اگر راهنمای راه‌اندازی اولیه را دنبال کرده باشید، فایروال UFW شما فعال است. ابتدا ترافیک SSH را مجاز کنید:

sudo ufw allow OpenSSH

سپس قوانینی برای باز کردن پورت‌های استاندارد IPSec (500 و 4500 UDP) اضافه کنید:

sudo ufw allow 500,4500/udp

اکنون باید رابط شبکه عمومی (Public Interface) سرور خود را پیدا کنید:

ip route show default

رابط عمومی شما در خروجی بعد از کلمه dev قرار دارد (مثلاً eth0).

سپس فایل /etc/ufw/before.rules را باز کنید تا قوانین مسیریابی سطح پایین (NAT) را اضافه کنید:

sudo nano /etc/ufw/before.rules

نزدیک به بالای فایل (قبل از خط *filter)، بلوک زیر را اضافه کنید. دقت کنید که eth0 را با نام رابط شبکه خود جایگزین کنید:

*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

سپس، پس از تعاریف *filter و زنجیره‌ها، بلوک زیر را برای عبور ترافیک ESP اضافه کنید:

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

فایل را ذخیره و ببندید.

اکنون پارامترهای کرنل شبکه را برای فعال کردن فورواردینگ (IP Forwarding) ویرایش کنید. فایل /etc/ufw/sysctl.conf را باز کنید:

sudo nano /etc/ufw/sysctl.conf

خطوط زیر را به انتهای فایل اضافه کنید:

net/ipv4/ip_forward=1
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1

فایل را ذخیره کنید. سپس فایروال را غیرفعال و مجدداً فعال کنید تا این تنظیمات اعمال شوند:

sudo ufw disable
sudo ufw enable

مرحله ۷ — تست اتصال به VPN

برای اتصال، ابتدا باید گواهی CA که ساخته‌اید را روی دستگاه کلاینت خود نصب کنید. محتویات فایل گواهی را مشاهده کنید:

cat /etc/ipsec.d/cacerts/ca-cert.pem

خروجی را (شامل خطوط -----BEGIN CERTIFICATE----- و -----END CERTIFICATE-----) در یک فایل با نام ca-cert.pem روی کامپیوتر خود ذخیره کنید.

اتصال از ویندوز:

  1. کلیدهای WINDOWS+R را فشار دهید، mmc.exe را تایپ کنید و کنسول مدیریت را باز کنید.
  2. از منوی File به Add or Remove Snap-in بروید، Certificates را انتخاب کرده و Add را بزنید.
  3. Computer Account را انتخاب کرده و Local Computer را تایید کنید.
  4. در بخش Trusted Root Certification Authorities، گواهی ca-cert.pem را Import کنید.
  5. به Network and Sharing Center بروید، Set up a new connection or network را زده و Connect to a workplace را انتخاب کنید.
  6. آدرس IP یا دامنه سرور را وارد کرده و متصل شوید. نام کاربری و رمز عبوری که در مرحله ۵ ساختید را وارد کنید.

اتصال از مک‌او‌اس (macOS):

  1. روی فایل گواهی دابل‌کلیک کنید تا در Keychain Access باز شود.
  2. روی گواهی وارد شده دابل‌کلیک کرده و بخش IP Security (IPSec) را روی Always Trust تنظیم کنید.
  3. به System Preferences > Network بروید و با کلیک روی علامت + یک اتصال VPN از نوع IKEv2 بسازید.
  4. آدرس سرور و نام کاربری/رمز عبور خود را وارد و متصل شوید.

اتصال از اوبونتو:
StrongSwan را روی کلاینت نصب کنید:

sudo apt update
sudo apt install strongswan libcharon-extra-plugins

گواهی CA را کپی کنید:

sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

فایل /etc/ipsec.secrets را ویرایش کرده و نام کاربری و رمز عبور خود را وارد کنید:

your_username : EAP "your_password"

فایل /etc/ipsec.conf را ویرایش کنید:

config setup

conn ikev2-rw
    right=server_domain_or_IP
    rightid=server_domain_or_IP
    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
    leftid=username
    leftauth=eap-mschapv2
    eap_identity=%identity
    auto=start

برای اتصال دستور sudo systemctl start strongswan-starter را اجرا کنید.

اتصال از iOS و اندروید:
فایل گواهی را برای خود ایمیل کنید، روی آن ضربه زده و نصب کنید. سپس در تنظیمات VPN دستگاه خود، یک اتصال از نوع IKEv2 ایجاد کرده و آدرس سرور به همراه نام کاربری و رمز عبور را وارد کنید. در اندروید می‌توانید از اپلیکیشن StrongSwan استفاده کنید.


رفع مشکلات اتصال

اگر قادر به اتصال به VPN نیستید، نام سرور یا آدرس IP استفاده شده را بررسی کنید. آدرس سرور باید با Common Name (CN) که هنگام ایجاد گواهی تنظیم کردید مطابقت داشته باشد. اگر از IP استفاده می‌کنید، مطمئن شوید هنگام ساخت گواهی از هر دو فلگ --san @IP_address و --san IP_address استفاده کرده‌اید.

همچنین بررسی کنید که مقدار leftid در فایل /etc/ipsec.conf اگر از دامنه استفاده می‌کنید دارای علامت @ باشد و اگر از IP استفاده می‌کنید بدون @ باشد.


نتیجه‌گیری
در این آموزش، شما یک سرور VPN با استفاده از پروتکل IKEv2 و نرم‌افزار StrongSwan ساختید. اکنون می‌توانید مطمئن باشید که فعالیت‌های آنلاین شما، فارغ از اینکه کجا هستید و با چه دستگاهی به اینترنت متصل می‌شوید، امن و رمزنگاری شده باقی خواهد ماند.

از همراهی شما با پارمین کلود سپاسگزاریم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا