איך להגדיר שרת VPN IKEv2 עם StrongSwan על Ubuntu 22.04

הקדמה

A virtual private network, or VPN, allows you to securely encrypt traffic as it travels through untrusted networks, such as those at the coffee shop, a conference, or an airport.

התקשרות מפתח האינטרנט v2, או IKEv2, הוא פרוטוקול המאפשר טנון ישיר של IPSec בין השרת והלקוח. ביישומי VPN של IKEv2, IPSec מספק הצפנה לתעבורת הרשת. IKEv2 נתמך באופן מובנה בכמה פלטפורמות (OS X 10.11+, iOS 9.1+, ו- Windows 10) ללא צורך ביישומים נוספים, והוא מתמודד בצורה חלקה עם בעיות של הלקוח.

במדריך זה, תצביע על שרת VPN של IKEv2 באמצעות StrongSwan על שרת Ubuntu 22.04. לאחר מכן, תלמד כיצד להתחבר אליו עם לקוחות Windows, macOS, Ubuntu, iOS, ו- Android.

דרישות קדם

כדי להשלים מדריך זה, תצטרך:

שלב 1 — התקנת StrongSwan

ראשית, תתקינו את StrongSwan, דמון IPSec קוד פתוח שתקבעו כשרת VPN שלכם. תתקינו גם את רכיב אינפרהסטרוקטורת מפתחות הציבורי (PKI) כדי שתוכלו ליצור מרכז אימות מסמכים (CA) שיספק אישורי זיהוי עבור האינפרהסטרקטורה שלכם.

התחילו על ידי עדכון המטמון המקומי של החבילות:

  1. sudo apt update

לאחר מכן, התקינו את התוכנה על ידי הקלדת:

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

החבילה הנוספת libcharon-extauth-plugins משמשת כדי לוודא שלקוחות שונים יוכלו לאמת את עצמם לשרת שלכם באמצעות שם משתמש וסיסמה משותפים. החבילה libstrongswan-extra-plugins כלולה כך ש-Strongswan תומך בקבוצות חיפוש אליפטיות המשתמשות בספריית הצפירה Curve25519.

עכשיו שהכל מותקן, המשיכו ליצירת התעודות שלכם.

שלב 2 — יצירת מרכז אישורים

שרת IKEv2 דורש תעודה כדי לזהות את עצמו בפני לקוחות. כדי לעזור ביצירת התעודה הנדרשת, החבילה strongswan-pki מגיעה עם כלי בשם pki ליצירת מרכז אישורים ותעודות שרת.

להתחיל, צרו מספר ספריות כדי לאחסן את כל הנכסים שתעבדו עליהם. מבנה הספריות יתאים לחלק מהספריות ב־/etc/ipsec.d, שם תצטרכו בסופו של דבר להעביר את כל הפריטים שתיצורו אליהם:

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

אז נעול את ההיתרים כך שקבצינו הפרטיים לא יוכלו להיות נראים למשתמשים אחרים:

  1. chmod 700 ~/pki

עכשיו שיש לך מבנה ספרייתי לאחסון הכל, תוכל ליצור מפתח ראשי. זה יהיה מפתח RSA בגודל של 4096 סיביות שישמש לחתימה על תעודת ה־Certificate Authority הראשית שלך.

הריצו את הפקודות הבאות כדי ליצור את המפתח:

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

לאחר מכן, תוכל להמשיך ליצירת תעודת ה־Certificate Authority הראשית שלך, באמצעות המפתח שכתבת עכשיו לחתום על תעודת ה־root:

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

הדגל --lifetime 3650 משמש לוודא שתעודת ה־root של רשות ה־Certificate Authority תהיה תקפה למשך 10 שנים. תעודת ה־root של רשות אינה משתנה בדרך כלל, מאחר שיש להפיץ אותה מחדש לכל שרת ולקוח שסומכים עליה, לכן 10 שנים הם ערך ברירת המחדל הבטוח.

תוכל לשנות את הערך של השם המיוחס (DN) למשהו אחר אם תרצה. השם המשותף (שדה CN) כאן הוא רק המצביע, כך שאין צורך שיתאים לכלום בתשתיות שלך.

עכשיו שיש לך את רשות ה־Certificate Authority הראשית שלך פעילה ועובדת, תוכל ליצור תעודה שהשרת VPN ישתמש בה.

שלב 3 — יצירת תעודה עבור שרת ה-VPN

כעת תיצור תעודה ומפתח עבור שרת ה-VPN. התעודה הזו תאפשר ללקוח לאמת את אותנות השרת באמצעות תעודת ה-CA שיצרנו לאחרונה.

ראשית, צור מפתח פרטי עבור שרת ה-VPN בעזרת הפקודה הבאה:

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

עכשיו, צור וחתום על תעודת השרת של ה-VPN עם המפתח של רשות התעודות שיצרת בשלב הקודם. בצע את הפקודה הבאה, אך שנה את השם המשותף (CN) ואת שדה שם הנושא החלופי (SAN) לשם DNS של שרת ה-VPN או לכתובת ה-IP שלו:

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

הערה: אם אתה משתמש בכתובת IP במקום שם DNS, יהיה עליך לציין מספר רב של רשומות --san. השורה בבלוק הפקודות הקודם שבה אתה מציין את שם ההבדל (--dn ...) תצטרך להיות מותאמת עם הרשומה הנוספת כמו השורה המצוטטת להלן:

--dn "CN=כתובת_IP" --san @כתובת_IP --san כתובת_IP \

הסיבה לקיום הרשומה הנוספת --san @כתובת_IP היא שחלק מהלקוחות יבדקו האם לתעודת ה-TLS יש רשומת DNS ורשומת כתובת IP עבור שרת כאשר הם מאמתים את הזהות שלו.

האפשרות --flag serverAuth משמשת לציון כי התעודה תשמש באופן ברור לאימות של השרת, לפני ההמנה של המנה המוצפנת. האפשרות --flag ikeIntermediate משמשת לתמיכה בלקוחות macOS ישנים.

עכשיו שיצרת את כל קבצי ה-TLS/SSL שנדרשים ל-StrongSwan, תוכל להעביר את הקבצים למקום בספריית /etc/ipsec.d על ידי הקלדה של:

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

בשלב זה, יצרת זוג תעודות שישמשו לאבטחת התקשורת בין הלקוח לשרת. חתמת גם את התעודות עם מפתח ה-CA, כך שהלקוח יוכל לאמת את אימות השרת VPN באמצעות תעודת ה-CA. עם כל התעודות האלו מוכנות, אתה מוכן להמשיך להגדרת StrongSwan.

שלב 4 — הגדרת StrongSwan

StrongSwan מגיע עם קובץ הגדרות ברירת מחדל עם דוגמאות, אך נצטרך לבצע את רוב ההגדרות באופן ידני. בואו נגבה את הקובץ לצורך התייחסות לפני שנתחיל לבנות מחדש מהתחלה:

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

צור ופתח קובץ הגדרות חדש ריק באמצעות עורך הטקסט שאתה מעדיף. כאן, נשתמש ב-nano:

  1. sudo nano /etc/ipsec.conf

הערה: במהלך עבודתך במקטע זה להגדיר את החלק השרת של ה-VPN שלך, תתעסק בהגדרות שמתייחסות לצדי החיבור. בעת עבודה עם VPN פרוטוקול ה-IPSec, הצד "שמאלה" מתייחס למערכת המקומית שאתה מגדיר, במקרה זה השרת. ההגדרות שמתייחסות לצד "ימין" בהגדרות אלו יתייחסו ללקוחות רחוקים, כמו טלפונים ומחשבים אחרים.

כאשר תמשיך להגדיר לקוחות במהלך ההדרכה הזו, קבצי התצורה של הלקוח יתייחסו אל עצמם באמצעות הגדרות "שמאלה" שונות, והשרת יתייחס בעזרת תודעת "ימין".

ראשית, נספר ל־StrongSwan לרשום מצבי daemon לצורך איתור שגיאות ולאפשר חיבורים כפולים. הוסף את השורות הבאות לקובץ:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

לאחר מכן, ניצור מקטע הגדרות עבור ה-VPN שלנו. נספר גם ל־StrongSwan ליצור טונלי VPN של IKEv2 ולטעון את מקטע הגדרה זה באופן אוטומטי בעת הפעלתו. הוסף את השורות הבאות לקובץ:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

נגדיר גם איתור dead-peer כדי לנקות חיבורים "תלויים" במקרה שהלקוח מנותק באופן בלתי צפוי. הוסף את השורות הבאות:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

לבסוף, נגדיר את פרמטרי IPSec של צד "שמאלה" של השרת. כל הפרמטרים הבאים מבטיחים שהשרת מוגדר לקבל חיבורים מלקוחות ולזהות את עצמו בצורה נכונה. תוסיף כל אחת מההגדרות הללו לקובץ /etc/ipsec.conf כאשר תהיה מוכר בהן ובסיבתן הן משמשות:

  • left=%any הערך %any מבטיח שהשרת ישתמש בממשק הרשת שבו הוא מקבל חיבורים נכנסים לתקשורת לקוחות עתידית. לדוגמה, אם אתה מחבר לקוח דרך רשת פרטית, השרת ישתמש בכתובת ה-IP הפרטית בה הוא מקבל תעבורה לשאר החיבור.
  • leftid=@server_domain_or_IP אפשרות זו שולטת בשם שהשרת מציג ללקוחות. בשילוב עם האפשרות הבאה leftcert, האפשרות leftid מבטיחה שהשם שהוגדר לשרת והשם המבוטח (DN) שמכיל בתעודה הציבורית יתאימו.
  • leftcert=server-cert.pem אפשרות זו היא נתיב לתעודה הציבורית של השרת שהגדרת בשלב 3. בלעדיה, השרת לא יוכל לאמת את עצמו עם לקוחות או לסיים את המו"פ של קביעת ה- IKEv2.
  • leftsendcert=always הערך always מבטיח שכל לקוח שמתחבר לשרת יקבל תמיד עותק של תעודת הציבור של השרת כחלק מהגדרת החיבור ההתחלתית.
  • leftsubnet=0.0.0.0/0 האפשרות האחרונה בצד "שמאל" שתוסיף אומרת ללקוחות על התת-רשתות שניתן להגיע אליהן מאחורי השרת. במקרה זה, 0.0.0.0/0 משמש לייצוג כל קבוצת כתובות IPv4, העונה שהשרת יספר ללקוחות לשלוח את כל התעבורה שלהם דרך ה- VPN כברירת מחדל.

עכשיו שאתה מכיר את כל אפשרויות הצד "שמאל" הרלוונטיות, הוסף אותם כולם לקובץ כמו כך:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

הערה: בעת הגדרת זיהוי השרת (leftid), כלול את התו @ רק אם השרת VPN יזוהה על ידי שם דומיין:

/etc/ipsec.conf
    . . .    leftid=@vpn.example.com
    . . .

אם השרת ייזוהה על ידי כתובת ה-IP שלו, פשוט הזן את כתובת ה-IP:

/etc/ipsec.conf
    . . .
    leftid=your_server_ip
    . . .

לאחר מכן, ניתן להגדיר את פרמטרי IPSec של צד "ימין" של הלקוח. כל אחד מהפרמטרים הבאים מודיע לשרת כיצד לקבל חיבורים מלקוחות, כיצד הלקוחות צריכים לאמת את השרת, ואת טווחי כתובות ה-IP הפרטיות ושרתי DNS שהלקוחות ישתמשו בהם. הוסף כל אחד מהגדרות אלה לקובץ /etc/ipsec.conf לאחר שתהיה מודע למה הן ולמה הן משמשות:

  • right=%any האפשרות %any לצד "ימין" של החיבור מורה לשרת לקבל חיבורים נכנסים מכל לקוח מרחוק.
  • rightid=%any אפשרות זו מבטיחה כי השרת לא ידחה חיבורים מלקוחות שמספקים זיהוי לפני הקמת המנהרה המוצפנת.
  • rightauth=eap-mschapv2 אפשרות זו מגדירה את השיטה לאימות שהלקוחות ישתמשו בה כדי לאמת את השרת. eap-mschapv2 משמש כאן לתמיכה רחבה יותר כדי לתמוך בלקוחות כמו Windows, macOS ומכשירי Android.
  • rightsourceip=10.10.10.0/24 אפשרות זו מורה לשרת להקצות כתובות IP פרטיות ללקוחות מטווח ה-IP המצויין 10.10.10.0/24.
  • rightdns=8.8.8.8,8.8.4.4 כתובות ה-IP הללו הם מפתחי DNS הציבוריים של Google. ניתן לשנות אותם כדי להשתמש במפתחי DNS ציבוריים אחרים, מפתחי DNS של שרת ה-VPN, או כל מפתח DNS אחר שהלקוחות יכולים להגיע אליו.
  • rightsendcert=never אפשרות זו מכוונת את השרת שהלקוחות אינם צריכים לשלוח תעודה כדי לאמת את עצמם.

עכשיו שאתה מכיר את האפשרויות הדרושות לצד "נכון" עבור ה-VPN, הוסף את השורות הבאות ל-/etc/ipsec.conf:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

עכשיו נגיד ל-StrongSwan לבקש מהלקוח למסור פרטי משתמש כאשר הם מתחברים:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

לבסוף, הוסף את השורות הבאות כדי לתמוך בלקוחות Linux, Windows, macOS, iOS ו-Android. השורות האלה מפרטות את האלגוריתמים לחלוקת מפתח, גיבוב, אימות והצפנה שונים (נקראים בדרך כלל Cipher Suites) שסטרונגסוואן יאפשר ללקוחות שונים להשתמש בהם:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    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!

כל ערכת האלגוריתם הנתמכת מופרדת מהאחרות בפסיק. לדוגמה chacha20poly1305-sha512-curve25519-prfsha512 היא אחת מהערכות, ו-aes256gcm16-sha384-prfsha384-ecp384 היא ערכת אחרת. הערכות האלגוריתם שמפורטות כאן נבחרו כדי לוודא את הגישות הרחבות ביותר לתאימות בין לקוחות Windows, macOS, iOS, Android ו-Linux.

הקובץ התצורה השלם צריך להיראות כך:

/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!

שמור וסגור את הקובץ לאחר שבדקת שהוספת את כל השורות בצורה נכונה. אם השתמשת ב-nano, עשה זאת על ידי לחיצה על CTRL + X, Y, ואז ENTER.

עכשיו שהגדרת את פרמטרי ה-VPN, תוכל להתקדם ליצירת חשבון כך שמשתמשים יוכלו להתחבר לשרת.

שלב 5 — הגדרת אימות ה-VPN

השרת של ה-VPN שלך מוגדר כעת לקבלת חיבורי לקוח, אך עדיין לא הוגדרו אישורים. עליך להגדיר כמה דברים בקובץ התצורה המיוחד בשם ipsec.secrets:

  • עליך לספר ל-StrongSwan איפה למצוא את המפתח הפרטי של תעודת השרת שלנו, כך שהשרת יוכל לאמת ללקוחות.
  • כמו כן, עליך להגדיר רשימת משתמשים שיהיו מורשים להתחבר ל-VPN.

בוא נפתח את קובץ הסודות לעריכה:

  1. sudo nano /etc/ipsec.secrets

ראשית, ספר ל-StrongSwan איפה למצוא את המפתח הפרטי וכיצד לפרוס אותו.

/etc/ipsec.secrets
: RSA "server-key.pem"

ודא שהשורה מתחילה בתו הנקודה-שנייה : ושיש רווח אחרי כך כך שהשורה כולה תקרא : RSA "server-key.pem".

לאחר מכן, עליך להגדיר אישורי משתמש. אתה יכול לבחור כל שם משתמש או סיסמה שתרצה:

/etc/ipsec.secrets
your_username : EAP "your_password"

שמור וסגור את הקובץ. עכשיו שסיימת לעבוד עם פרמטרי ה-VPN, הפעל מחדש את שירות ה-VPN כך שההגדרות שלנו יישם:

  1. sudo systemctl restart strongswan-starter

עכשיו ששרת ה-VPN הוגדר באופן מלא עם אפשרויות השרת ואישורי המשתמש, הגיע הזמן להמשיך ולהגדיר את החומה האש החשובה ביותר.

שלב 6 — הגדרת החומה האש והפעלת העברת כתובות IP של הליבה

עם הגדרת StrongSwan הושלמה, עליך להגדיר את החומה האש כך שתאפשר תעבורת VPN ותפנה אותה.

אם עקבת אחרי המדריך להגדרת השרת הראשוני, כדאי שתהיה לך חומת אש UFW מופעלת. אם עדיין לא הגדרת UFW, כדאי להתחיל על ידי הוספת כלל שיאפשר חיבורי SSH דרך החומה האש כך שההפעלה הנוכחית לא תסגר לך בעת הפעלת UFW:

  1. sudo ufw allow OpenSSH

לאחר מכן, הפעל את החומה האש על ידי הקלדת:

  1. sudo ufw enable

לאחר מכן, הוסף כלל שיאפשר תעבורת UDP לפורטים הסטנדרטיים של IPSec, 500 ו־4500:

  1. sudo ufw allow 500,4500/udp

בשלב הבא, עליך לפתוח את אחד מקבצי ההגדרה של UFW כדי להוסיף מספר מדיניות רמה נמוכה עבור הפנייה והעברת חבילות IPSec. אך לפני זאת עליך למצוא איזו ממשק רשת על שרת השליחה הוא משמש לגישה לאינטרנט. מצא את הממשק הזה על ידי שאילתת התקן המשוייך למסלול ברירת המחדל:

  1. ip route show default

הממשק הציבורי שלך צריך להיות אחרי המילה "dev". לדוגמה, התוצאה הבאה מציגה את הממשק בשם eth0, שמודגש בדוגמה הבאה:

Output
default via your_server_ip dev eth0 proto static

כאשר יש לך את ממשק הרשת הציבורי שלך, פתח את קובץ /etc/ufw/before.rules בעורך הטקסט שלך. החוקים בקובץ זה מתווספים לגישה האש שלך לפני שאר חוקי הקלט והפלט הרגילים. הם משמשים להגדרת טרנסלציה של כתובות רשת (NAT) כך שהשרת יכול לנתב חיבורים מול לקוחות והאינטרנט כראוי.

  1. sudo nano /etc/ufw/before.rules

ליד ראש הקובץ (לפני השורה *filter), הוסף את הבלוק התצורה הבא. שנה כל מופע של eth0 בתצורה להעברה לשם הממשק שמצאת עם ip route. השורות *nat יוצרות חוקים כך שהאש יכול לנתב ולשנות תעבורה בין לקוחות ה-VPN והאינטרנט. השורה *mangle מכוונת את גודל מקטע החבילה המקסימלית כדי למנוע בעיות פוטנציאליות עם חלק מלקוחות ה-VPN:

/etc/ufw/before.rules
*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 והשרשורים, הוסף קובץ נוסף של הגדרות:

/etc/ufw/before.rules
. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

-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

שורות אלו מספרות לאש להעביר תעבורת ESP (Encapsulating Security Payload) כך שלקוחות ה-VPN יוכלו להתחבר. ESP מספקת אבטחה נוספת לחבילות ה-VPN שלנו כאשר הן עוברות רשתות לא מהותרות.

כאשר אתה מסיים, שמור וסגור את הקובץ לאחר שאימתת שהוספת את כל השורות בצורה נכונה. אם השתמשת ב-nano, עשה זאת על ידי לחיצה על CTRL + X, Y, אז ENTER.

לפני שתפעיל את הגדרות האש, עליך גם לשנות כמה פרמטרי קרנל הרשת כדי לאפשר ניתוב מממשק אחד לאחר. הקובץ ששולט בהגדרות אלה נקרא /etc/ufw/sysctl.conf. עליך להגדיר כמה דברים בקובץ זה.

תחילה עליך להפעיל העברת חבילות IPv4 כך שתעבור תעבורה בין ממשקי ה-VPN והרשת הציבורית על השרת. לאחר מכן, עליך להשבית את גילוי ה-MTU של הנתיב כדי למנוע בעיות בפיצול חבילות. לבסוף, לא נאפשר הפניות ICMP ולא נשלח הפניות ICMP כדי למנוע תקפי man-in-the-middle.

פתח את קובץ ההגדרות של פרמטרי הקרנל של UFW באמצעות nano או העורך הטקסט המועדף עליך:

  1. sudo nano /etc/ufw/sysctl.conf

כעת הוסף את ההגדרה הבאה net/ipv4/ip_forward=1 בסוף הקובץ כדי לאפשר העברת חבילות בין ממשקים:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_forward=1

לבסוף, חסום את שליחת וקבלת חבילות הפניית ICMP על ידי הוספת השורות הבאות לסוף הקובץ:

/etc/ufw/sysctl.conf
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

לבסוף, כבה את גילוי ה-MTU על ידי הוספת השורה הבאה לסוף הקובץ:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_no_pmtu_disc=1

שמור את הקובץ כאשר תסיים. כעת תוכל להפעיל את כל השינויים שלך על ידי ניטור והפעלת האש, מאחר ו-UFW מחדש את הגדרות אלו בכל פעם שהוא מתנתק:

  1. sudo ufw disable
  2. sudo ufw enable

תתבקש לאשר את התהליך. הקלד Y כדי להפעיל את UFW שוב עם ההגדרות החדשות.

שלב 7 — בדיקת חיבור ה-VPN על Windows, macOS, Ubuntu, iOS ו- Android

עכשיו שהכל מוכן, זמן לנסות את זה. תחילה, תצטרך להעתיק את תעודת ה-CA שיצרת ולהתקין אותה על המכשירים הלקוח שלך שיתחברו ל-VPN. הדרך הקלה ביותר לעשות זאת היא להיכנס לשרת שלך ולהפיק את תוכן קובץ התעודה:

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

תראה פלט דומה לזה:

Output
-----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----END CERTIFICATE-----

העתק את הפלט הזה למחשב שלך, כולל את השורות -----BEGIN CERTIFICATE----- ו־ -----END CERTIFICATE-----, ושמור אותו בקובץ בשם שניתן לזהות, כגון ca-cert.pem. ודא שהקובץ שאתה יוצר כולל את הסיומת .pem.

בנוסף, ניתן להשתמש ב-SFTP כדי להעביר את הקובץ למחשב שלך.

לאחר שהורדת את קובץ ה-ca-cert.pem למחשב שלך, אתה יכול להגדיר את החיבור ל-VPN.

חיבור מ- Windows

ישנם מספר דרכים לייבא את תעודת השורש ולהגדיר את Windows כך שיתחבר ל-VPN. השיטה הראשונה משתמשת בכלים גרפיים עבור כל שלב. השיטה השנייה משתמשת בפקודות PowerShell שניתן לתסריט ולשנות להתאמה להגדרת ה-VPN שלך.

הערה: הוראות אלו נבדקו על התקנות של Windows 10 הרצות גרסאות 1903 ו-1909.

הגדרת Windows עם כלים גרפיים

ראשית, ייבא את תעודת השורש על ידי המשכת השלבים הבאים:

  1. לחץ WINDOWS+R כדי להציג את תיבת הדו"ח (Run), והזן mmc.exe כדי להפעיל את עקרון ניהול Windows.

  2. מתפרקת לתפריט ה־File, נווט אל Add or Remove Snap-in, בחר Certificates מתוך רשימת ה snap-ins הזמינים, ולחץ על Add.

  3. נרצה שה-VPN יעבוד עם כל משתמש, אז בחר Computer Account ולחץ Next.

  4. אנו מגדירים דברים על המחשב המקומי, אז בחר Local Computer, ואז לחץ Finish.

  5. תחת הצומת שורש קונסולה, פתח את הקטע אישורים (מחשב מקומי), הרחב את רשת האישורים האמינים לשורש, ואז בחר בקטע אישורים:

  6. מתוך תפריט פעולה, בחר כל המשימות ולחץ על ייבוא כדי להציג את אשף ייבוא האישורים. לחץ על הבא כדי לעבור את ההקדמה.

  7. במסך קובץ לייבוא, לחץ על כפתור ה־עיון, ווודא שאתה משנה את סוג הקובץ מ-"אישור X.509 (.cer;.crt)" ל-"כל הקבצים (.)", ואז בחר בקובץ ca-cert.pem ששמרת. לאחר מכן לחץ על הבא.

  8. ודא שהחנות של התעודות מוגדרת להיות רשת מקומית אמון, ולחץ על הבא.

  9. לחץ על סיום כדי לייבא את התעודה.

לאחר מכן, קבע את ה-VPN בעזרת השלבים הבאים:

  1. הפעל לוח הבקרה, ונווט אל מרכז הרשת והשיתוף.
  2. לחץ על הגדרת חיבור או רשת חדשה, ואז בחר התחברות למקום עבודה.
  3. בחר השתמש בחיבור האינטרנט שלי (VPN).
  4. הזן את פרטי שרת ה-VPN. הזן את שם הדומיין או כתובת ה-IP של השרת בשדה כתובת האינטרנט, ומלא את שם היעד במשהו שמתאר את החיבור ל-VPN שלך. לאחר מכן לחץ על בוצע.

הגדרת Windows בעזרת PowerShell

כדי לייבא את תעודת ה-CA השורש באמצעות PowerShell, תחילה עליך לפתוח פקודת PowerShell עם הרשאות מנהל. כדי לעשות זאת, לחץ על האייקון של תפריט התחל ובחר Windows PowerShell (מנהל). תוכל גם לפתוח פקודה כמנהל ולהקליד powershell.

לאחר מכן נייבא את התעודה באמצעות הפקודה Import-Certificate בפווערשל. בפקודה הבאה, הארגומנט הראשון של -CertStoreLocation יוודא שהתעודה מיובאת לאחסון Trusted Root Certification Authorities של המחשב כך שכל התוכניות והמשתמשים יוכלו לאמת את תעודת שרת ה-VPN. הארגומנט -FilePath צריך להפנות למיקום בו העתקת את התעודה. בדוגמה הבאה הנתיב הוא C:\Users\sammy\Documents\ca-cert.pem. ודא כי אתה עורך את הפקודה כך שהיא תתאים למיקום שבו השתמשת.

  1. Import-Certificate `
  2. -CertStoreLocation cert:\LocalMachine\Root\ `
  3. -FilePath C:\users\sammy\Documents\ca-cert.pem

הפקודה תחזיר משהו דומה לזה:

Output
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root Thumbprint Subject ---------- ------- DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA

כעת כדי להגדיר את ה-VPN באמצעות PowerShell, הפעל את הפקודה הבאה. החלף את שם ה-DNS או כתובת ה-IP של השרת שלך בשורה של -ServerAddress. הדגלים השונים יוודאו שווינדוס מוגדרת נכון עם הפרמטרים האבטחתיים המתאימים שמתאימים לאפשרויות שהגדרת ב- /etc/ipsec.conf.

  1. Add-VpnConnection -Name "VPN Connection" `
  2. -ServerAddress "server_domain_or_IP" `
  3. -TunnelType "IKEv2" `
  4. -AuthenticationMethod "EAP" `
  5. -EncryptionLevel "Maximum" `
  6. -RememberCredential `

אם הפקודה הצליחה, לא יהיה שום פלט. כדי לאמת שה-VPN מוגדר כראוי, השתמש בפקודת Get-VPNConnection:

  1. Get-VpnConnection -Name "VPN Connection"

תקבל פלט דומה לזה:

Output
Name : VPN Connection ServerAddress : your_server_ip AllUserConnection : False Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E} TunnelType : Ikev2 AuthenticationMethod : {Eap} EncryptionLevel : Maximum L2tpIPsecAuth : UseWinlogonCredential : False EapConfigXmlStream : #document ConnectionStatus : Disconnected RememberCredential : True SplitTunneling : False DnsSuffix : IdleDisconnectSeconds : 0

ברירת המחדל של Windows בוחרת אלגוריתמים ישנים ואיטיים יותר. הפעל את פקודת ה-Set-VpnConnectionIPsecConfiguration כדי לשדרג את פרמטרי ההצפנה שבהם תשתמש Windows להחלפת המפתחות IKEv2, וכדי להצפין את החבילות:

  1. Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
  2. -AuthenticationTransformConstants GCMAES256 `
  3. -CipherTransformConstants GCMAES256 `
  4. -DHGroup ECP384 `
  5. -IntegrityCheckMethod SHA384 `
  6. -PfsGroup ECP384 `
  7. -EncryptionMethod GCMAES256

הערה: אם ברצונך למחוק את חיבור ה-VPN ולהגדיר אותו מחדש עם אפשרויות שונות, תוכל להפעיל את פקודת ה-Remove-VpnConnection.

  1. Remove-VpnConnection -Name "VPN Connection" -Force

הדגל -Force ידלג על הבקשה לאישור הסרתו. עליך להיות מנותק מה-VPN אם תנסה להסיר אותו באמצעות הפקודה הזו.

התחברות ל-VPN

לאחר שיבואת את התעודה והגדרת ה-VPN באמצעות אחת מהשיטות, חיבור ה-VPN החדש שלך יהיה גלוי תחת רשימת הרשתות. בחר את ה-VPN ולחץ התחבר. יתבקש ממך להזין את שם המשתמש והסיסמה. הקלד אותם, לחץ אישור, ותתחבר.

התחברות מ- macOS

עקוב אחרי השלבים הבאים כדי לייבא את התעודה:

  1. לחץ פעמיים על קובץ התעודה. יופיע חלון קופץ של גישת מפתח עם הודעה שאומרת "גישת מפתח מנסה לשנות את מפתח המערכת. הזן את הסיסמה שלך כדי לאפשר זאת."
  2. הזן את הסיסמה שלך, ואז לחץ על שנה את מפתח המערכת.
  3. הקלק פעמיים על תעודת ה-VPN שיובאה לאחרונה. זה מביא לך חלון מאפיינים קטן שבו תוכל לציין את רמות האמינות. הגדר את אבטחת IP (IPSec) ל- לאמון תמידי ותתבקש שוב להזין את הסיסמה שלך. הגדרה זו נשמרת אוטומטית לאחר הזנת הסיסמה.

עכשיו שהתעודה יובאה והוא נאמן, הגדר את החיבור ל-VPN עם השלבים הבאים:

  1. עבור אל העדפות המערכת ובחר רשת.
  2. לחץ על כפתור ה-"פלוס" הקטן בתחתית השמאלית של רשימת הרשתות.
  3. בחלון הקופץ שמופיע, הגדר את ממשק ל- VPN, הגדר את סוג ה-VPN ל- IKEv2, ותן שם לחיבור.
  4. בשדה שרת ו- ID מרוחק, הזן את שם הדומיין או כתובת ה-IP של השרת. השאר את ID מקומי ריק.
  5. לחץ על הגדרות אימות, בחר שם משתמש, והזן את שם המשתמש והסיסמה שהגדרת עבור משתמש ה-VPN שלך. לאחר מכן לחץ אישור.

לבסוף, לחץ על התחבר כדי להתחבר ל-VPN. עכשיו אתה אמור להיות מחובר ל-VPN.

מתחבר מ- Ubuntu

כדי להתחבר ממכונת Ubuntu, ניתן להגדיר ולנהל את StrongSwan כשירות או להשתמש בפקודה חד פעמית בכל פעם שברצונך להתחבר. הוראות ניתנות לשני האפשרויות.

ניהול של StrongSwan כשירות

כדי לנהל את StrongSwan כשירות, יש לבצע את שלבי התצורה הבאים.

ראשית, עדכן את מטמון החבילות המקומי שלך באמצעות apt.

  1. sudo apt update

לאחר מכן, התקן את StrongSwan והתוספים הנדרשים לאימות.

  1. sudo apt install strongswan libcharon-extra-plugins

כעת יש לך צורך בעותק של תעודת ה-CA בתיקיית /etc/ipsec.d/cacerts כך שהלקוח שלך יוכל לוודא את זהות השרת. הפעל את הפקודה הבאה כדי להעתיק את קובץ ca-cert.pem למקום:

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

כדי לוודא שה-VPN רץ רק לפי דרישת הזדמנות, השתמש ב־systemctl כדי לנטרל את הרצת StrongSwan באופן אוטומטי.

  1. sudo systemctl disable --now strongswan-starter

לאחר מכן, הגדר את שם המשתמש והסיסמה שתשתמש בהם לאימות בשרת VPN. ערוך את /etc/ipsec.secrets באמצעות nano או העורך שתעדיפו.

  1. sudo nano /etc/ipsec.secrets

הוסף את השורה הבאה, ערוך את ערכי שם המשתמש והסיסמה שהגדרת על השרת.

/etc/ipsec.secrets
your_username : EAP "your_password"

לבסוף, ערוך את הקובץ /etc/ipsec.conf כדי להגדיר את הלקוח שלך כך שיתאים לתצורת השרת.

/etc/ipsec.conf
config setup

conn ikev2-rw
    right=server_domain_or_IP
     # זה צריך להתאים לערך של `leftid` בתצורת השרת שלך 
    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

כדי להתחבר ל-VPN, הקלד:

  1. sudo systemctl start strongswan-starter

כדי לנתק שוב, הקלד:

  1. sudo systemctl stop strongswan-starter

שימוש בלקוח charon-cmd עבור חיבורים חד פעמיים

לנהל את StrongSwan כשירות, יהיה עליך לבצע את השלבים הבאים בתצורה.

ראשית, עדכן את מטמון החבילות המקומי שלך באמצעות apt

  1. sudo apt update

בשלב הבא, התקן את StrongSwan והתוספות הנדרשות לאימות:

  1. sudo apt install strongswan libcharon-extra-plugins

עכשיו יהיה עליך לקבל עותק של תעודת ה-CA בתיקיית /etc/ipsec.d/cacerts כך שהלקוח שלך יוכל לאמת את זהות השרת. הרץ את הפקודה הבאה כדי להעתיק את הקובץ ca-cert.pem למקום:

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

בנקודה זו תוכל להתחבר לשרת VPN עם charon-cmd באמצעות תעודת CA של השרת, כתובת ה-IP של שרת ה-VPN, ושם המשתמש שהגדרת.

הרץ את הפקודה הבאה כל פעם שתרצה להתחבר ל-VPN:

  1. sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

כאשר יתבקש ממך, הזן את סיסמת המשתמש של ה-VPN ותתחבר ל-VPN. כדי לנתק, לחץ על CTRL+C בטרמינל והמתן לסגירת החיבור.

התחברות מ-iOS

כדי להגדיר את חיבור ה-VPN במכשיר iOS, עקוב אחר השלבים הבאים:

  1. שלח לעצמך אימייל עם תעודת השורש מצורפת.
  2. פתח את האימייל במכשיר ה-iOS שלך והקש על קובץ התעודה המצורף, ואז הקש על התקן והזן את הקוד הסודי שלך. ברגע שהתעודה מותקנת, הקש על סיום.
  3. עבור אל הגדרות, כללי, VPN והקש על הוסף תצורת VPN. זה יביא את מסך התצורה של חיבור VPN.
  4. הקש על סוג ובחר IKEv2.
  5. בשדה תיאור, הזן שם קצר עבור חיבור ה-VPN. זה יכול להיות כל דבר שתרצה.
  6. בשדות שרת ו-ID מרוחק, הזן את שם הדומיין או כתובת ה-IP של השרת. שדה ID מקומי ניתן להשאר ריק.
  7. הזן את שם המשתמש והסיסמה שלך בסעיף אימות, ואז הקש על בוצע.
  8. בחר בחיבור ה-VPN שיצרת כעת, הקש על המתג בחלק העליון של העמוד, ותתחבר.

מחיבור ממכשירי Android

עקוב אחרי השלבים האלו כדי לייבא את התעודה:

  1. שלח לעצמך אימייל עם התעודה של CA מצורפת. שמור את התעודה של CA בתיקיית ההורדות שלך.
  2. הורד את לקוח StrongSwan VPN מחנות Play.
  3. פתח את האפליקציה. הקש על סמל "עוד" (. . .) בפינה העליונה הימנית ובחר ב-תעודות CA.
  4. לחץ על סמל "עוד" (. . .) בפינה הימנית העליונה שוב. בחר יבוא תעודה.
  5. עיין בתיקיית ההורדות שלך לקובץ התעודה של CA ובחר אותו כדי לייבא אותו לאפליקציה.

עכשיו שהתעודה יובאה לאפליקציית StrongSwan, תוכל להגדיר את חיבור ה-VPN עם השלבים האלה:

  1. באפליקציה, הקש על הוסף פרופיל VPN בחלק העליון.
  2. מלא את שרת עם שם הדומיין של שרת ה-VPN או כתובת ה-IP הציבורית שלו.
  3. ודא ש-IKEv2 EAP (שם משתמש/סיסמה) נבחר כסוג ה-VPN.
  4. מלא את שם המשתמש ואת הסיסמה עם הפרטים שהגדרת על השרת.
  5. בטל את הבחירה ב-בחר באופן אוטומטי בקטע התעודות של CA ולחץ על בחר בתעודת CA.
  6. הקש על לשונית ייבוא בחלק העליון של המסך ובחר ב-CA שיובא (הוא יקרא "שורש CA של VPN" אם לא שינית את ה-DN לפני כן).
  7. אם תרצה, מלא את שם הפרופיל (אופציונלי) עם שם מתיאור יותר מדויק.

כאשר תרצה להתחבר ל-VPN, לחץ על הפרופיל שיצרת כעת באפליקציית StrongSwan.

פתרון בעיות בחיבורים

אם אינך מצליח/ה לייבא את התעודה, וודא שהקובץ נמצא עם סיומת .pem, ולא .pem.txt.

אם אינך מצליח/ה להתחבר ל-VPN, בדוק/י את שם השרת או כתובת ה-IP שהשתמשת בה. שם הדומיין או כתובת ה-IP של השרת חייבים להתאים למה שהגדרת כשם המקובץ המשותף (CN) בעת יצירת התעודה. אם הם לא מתאימים, חיבור ה-VPN לא יעבוד. לדוגמה, אם הגדרת תעודה עם CN של vpn.example.com, עליך להשתמש ב-vpn.example.com כאשר את/ה מזין/ה את פרטי שרת ה-VPN. בדוק שוב את הפקודה שהשתמשת בה כדי ליצור את התעודה ואת הערכים שהשתמשת בהם בעת יצירת חיבור ה-VPN שלך.

לבסוף, בדוק שוב את התצורה של ה-VPN כדי לוודא שערך ה-leftid מוגדר עם סימן @ אם את/ה משתמש/ת בשם דומיין:

/etc/ipsec.conf
    leftid=@vpn.example.com

אם את/ה משתמש/ת בכתובת IP, וודא שהסימן @ נכחד. וכן וודא שכאשר יצרת את קובץ ה-server-cert.pem כלולים שני הדגלים --san @כתובת_IP ו---san כתובת_IP.

סיכום

במדריך זה, בנית/ה שרת VPN שמשתמש בפרוטוקול IKEv2. למדת על הפקודות ששולטות בצדדים השמאלי והימני של חיבורים על שרתים ולקוחות. כמו כן הגדרת קליינט Windows, macOS, iOS, Android או Linux כדי להתחבר ל-VPN.

כדי להוסיף או להסיר משתמשים, עבור לשלב 5 שוב. כל שורה ב־/etc/ipsec.secrets היא עבור משתמש אחד, כך שהוספת או הסרת משתמשים, או שינוי סיסמאות דורשת רק עריכת הקובץ.

עכשיו תוכל להיות בטוח כי פעילויות האינטרנט שלך יישארו מאובטחות בכל מקום שתלך לו ועם כל התקן שתשתמש בו כדי לגשת לאינטרנט.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-22-04