Language: he
אבטחת VPS מהבסיס: מפתחות SSH, חומת אש ו-Fail2ban
אין להניח ש-VPS חדש מאובטח מיד לאחר התקנת Ubuntu. עוד לפני שמגדירים גישה, השרת כבר גלוי לסורקים: הם מנסים סיסמאות SSH, מחפשים לוחות בקרה חשופים ובודקים חולשות נפוצות. במדריך הזה נעבור על השלבים הבסיסיים לאבטחת VPS מאפס: יצירת משתמש נפרד, הגדרת אימות באמצעות מפתח SSH, הגבלת פורטי רשת עם UFW והוספת Fail2ban. כל השלבים עובדים עם Ubuntu 22.04 ו-24.04 כאשר הפקודות מופעלות על ידי משתמש בעל הרשאות sudo.
לפני שמתחילים: הכינו רשימת פורטים
אל תפתחו פורטים «ליתר ביטחון». שרת Web טיפוסי זקוק ל:
22/tcp— SSH; עדיף להגביל לפי כתובת IP או להעביר לפורט אחר רק כאמצעי נוסף;80/tcp— HTTP; נדרש בדרך כלל להפניה ל-HTTPS ולאימות תעודה;443/tcp— HTTPS.
פורט של אפליקציה, כגון 3000, 8080 או 9000, לא צריך להיות נגיש מהאינטרנט אם Nginx או Caddy פועלים לפניו. קשרו את האפליקציה ל-127.0.0.1 או אפשרו את הפורט שלה רק ברשת הפנימית. ראשית בדקו מה מאזין בשרת:
sudo ss -tulpnלאחר התקנת Docker בדקו בנפרד את כללי iptables שלו: פרסום -p 3000:3000 עלול לחשוף פורט מחוץ לתצורה הצפויה. בשירות ציבורי בטוח יותר להשתמש בפרוקסי HTTPS ולהשאיר את הפורט הפנימי מוסתר.
שלב 1. עדכון המערכת ויצירת מנהל
התחברו ל-VPS באמצעות פרטי הגישה שקיבלתם והתקינו עדכונים:
sudo apt update
sudo apt full-upgrade -y
sudo apt install -y ufw fail2ban unattended-upgradesצרו משתמש אישי. החליפו את alex בשם שלכם:
sudo adduser alex
sudo usermod -aG sudo alexאל תסירו את הגישה המקורית לפני שבדקתם את החשבון החדש בחלון טרמינל נפרד. זהו כלל חשוב: קל יותר לתקן טעות ב-SSH כאשר הסשן הנוכחי עדיין פתוח.
שלב 2. יצירת מפתח SSH והתקנתו בשרת
במחשב Linux, macOS או Windows PowerShell שלכם הפעילו:
ssh-keygen -t ed25519 -C "alex@my-computer"לחצו Enter כדי לשמור את המפתח בקובץ ברירת המחדל, ולאחר מכן הגדירו משפט סיסמה. לעולם אל תשלחו את המפתח הפרטי בצ'אט, אל תשימו אותו במאגר ואל תעתיקו אותו ל-VPS. רק הקובץ עם הסיומת .pub צריך לעבור לשרת:
ssh-copy-id alex@SERVER_IPאם ssh-copy-id אינו זמין, הציגו את המפתח הציבורי באמצעות Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub ב-PowerShell, ולאחר מכן הוסיפו אותו לשרת:
sudo install -d -m 700 -o alex -g alex /home/alex/.ssh
sudo nano /home/alex/.ssh/authorized_keys
sudo chown alex:alex /home/alex/.ssh/authorized_keys
sudo chmod 600 /home/alex/.ssh/authorized_keysהדביקו את המפתח בשורה אחת ובדקו את הכניסה לפני השבתת הסיסמאות:
ssh alex@SERVER_IP
sudo whoamiהתוצאה הצפויה של הפקודה האחרונה היא root. אם לקוח ה-SSH אינו מוצא את המפתח, ציינו אותו במפורש: ssh -i ~/.ssh/id_ed25519 alex@SERVER_IP.
שלב 3. השבתת כניסת root ואימות בסיסמה
גבו את תצורת SSH:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_configודאו שהקובץ מכיל את הפרמטרים האלה:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
MaxAuthTries 3ב-Ubuntu ההגדרות עשויות להימצא בתוך /etc/ssh/sshd_config.d/*.conf, לכן בדקו את התצורה האפקטיבית:
sudo sshd -t
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries'אם sshd -t מדווח על שגיאה, אל תפעילו מחדש את השירות עד שתתקנו את התחביר. לאחר שהבדיקה מצליחה, החילו את ההגדרות:
sudo systemctl reload sshהשאירו את חיבור ה-SSH הישן פתוח ובדקו כניסה באמצעות מפתח בחלון חדש. השבתת הסיסמאות בלי מפתח מאומת היא הדרך הנפוצה ביותר לאבד גישה לשרת.
שלב 4. הגדרת UFW בלי לחסום את SSH
UFW הוא מעטפת נוחה לכללי הרשת של Linux. הגדירו תחילה ברירות מחדל מאובטחות, ולאחר מכן אפשרו SSH ופורטי Web:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enableאשרו את ההפעלה רק לאחר שהוספתם את כלל ה-SSH. בדקו את התוצאה:
sudo ufw status verbose
sudo ufw status numberedלכתובת IP משרדית קבועה אפשר להגביל את ה-SSH לכתובת הזו:
sudo ufw delete allow 22/tcp
sudo ufw allow from YOUR.PUBLIC.IP to any port 22 proto tcp comment 'SSH office'השתמשו באפשרות הזו רק עם IP קבוע ועם גישה למסוף של הספק: אם הכתובת תשתנה, אתם עלולים לנעול את עצמכם בחוץ.
איך לפתוח פורט של אפליקציה באופן זמני
אם צריך לבדוק שירות ישירות, צרו כלל עם מקור מוגבל:
sudo ufw allow from YOUR.PUBLIC.IP to any port 8080 proto tcpלאחר הבדיקה מחקו אותו באמצעות המספר שמוצג על ידי ufw status numbered:
sudo ufw delete RULE_NUMBERאל תשתמשו ב-sudo ufw allow 1:65535/tcp: כלל כזה הופך את חומת האש לפורמלית בלבד.
שלב 5. הפעלת Fail2ban עבור SSH
Fail2ban מנתח יומנים ומוסיף כלל חסימה זמני לאחר כמה ניסיונות כניסה כושלים. הוא אינו מחליף מפתחות SSH או חומת אש, אך מפחית את הרעש מניסיונות brute-force אוטומטיים.
צרו תצורה מקומית כדי שעדכוני חבילות לא יחליפו את ההגדרות שלכם:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.localהגדירו ערכים סבירים בסעיף [DEFAULT]:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
banaction = ufw
[sshd]
enabled = true
port = 22הפעילו את השירות ובדקו את ה-jail:
sudo systemctl enable --now fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshdבפלט של sshd בדקו את מספר הניסיונות הכושלים ואת הכתובות שנחסמו. אל תוסיפו את ה-IP שלכם לרשימת החסימה. לחריג קבוע השתמשו ב-ignoreip = 127.0.0.1/8 YOUR.PUBLIC.IP בתוך [DEFAULT].
שלב 6. הפעלת עדכונים אוטומטיים
עדכונים אוטומטיים שימושיים לחבילות אבטחה, אך עדיין צריך לנהל אתחולי kernel:
sudo dpkg-reconfigure -plow unattended-upgrades
sudo systemctl status unattended-upgradesפעם בשבוע בדקו אם נדרש אתחול:
test -f /var/run/reboot-required && echo 'Требуется перезапуск'לפני אתחול ידני ודאו שיש לכם מפתח פעיל וגישה למסוף ה-VPS. לאחר האתחול בדקו את שירותי האפליקציה, Nginx, UFW ו-Fail2ban.
שלב 7. בדיקת התוצאה מבחוץ
בדקו את ההגנה ממחשב אחר, ולא רק באמצעות קריאת התצורה:
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no alex@SERVER_IPהפקודה אמורה להסתיים בדחייה. בדקו בנפרד כניסה תקינה באמצעות מפתח:
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 alex@SERVER_IPב-VPS בדקו כתובות מאזינות וכללים:
sudo ss -lntup
sudo ufw status numbered
sudo fail2ban-client status sshdפורט האפליקציה צריך להאזין ב-127.0.0.1 אם הוא אינו מיועד לגישה ישירה. ממארח חיצוני אפשר להשתמש ב-nmap SERVER_IP, אך סרקו רק את השרת שלכם: בדיקת תשתית של מישהו אחר ללא רשות עלולה להפר את החוק ואת כללי הספק.
גיבויים ושחזור
הגנת SSH אינה מגינה מפני מחיקת נתונים, טעות מנהל או אפליקציה שנפרצה. שמרו עותקים של מסד הנתונים, התצורה וקובצי המשתמשים בנפרד מה-VPS. תצורה מינימלית כוללת גיבוי יומי, כמה גרסאות מהימים הקודמים ובדיקות שחזור תקופתיות.
אל תכתבו סיסמאות או טוקנים בסקריפטים של טקסט רגיל. אם סוד נחשף, בטלו אותו מיד וצרו חדש.
איך לבחור VPS לפרויקט מאובטח
האבטחה מתחילה בשליטה בתשתית. ב-VPS אתם יכולים לבחור בעצמכם את מערכת ההפעלה, כללי חומת האש, שיטת הגישה, הגיבויים ומיקום השירותים. לאתר קטן או ל-API, רשת יציבה, אחסון SSD ומסוף שחזור חשובים יותר מעודף של ליבות וירטואליות.
כאשר אתם משיקים פרויקט על VPS ב-tropic.host, הגדירו מראש את נקודות הכניסה הציבוריות שלו: ברוב המקרים SSH, HTTP ו-HTTPS מספיקים. השאירו את מסד הנתונים ולוחות הבקרה בתוך הרשת הפנימית. ככל שהפרויקט גדל, הפרדת מופעי VPS עבור האפליקציה, מסד הנתונים והניטור עוזרת לבודד תחומי כשל.
טעויות נפוצות
- השבתת סיסמאות לפני בדיקת כניסה באמצעות מפתח. השאירו את הסשן הנוכחי פתוח ובדקו כניסה חדשה בנפרד.
- השארת
22/tcpפתוח לכל העולם כאשר אפשר לאפשר אותו רק מכתובות מהימנות. - פרסום פורטי Docker ישירות. בדקו קודם את כללי Docker ו-UFW.
- התקנת Fail2ban בלי לבדוק שוב את היומנים. לאחר שינויים בדקו את
journalctl -u sshואת מצב ה-jail.
סיכום
אבטחת VPS בסיסית אינה דורשת זמן רב כאשר מבצעים את השלבים בסדר הנכון: צרו משתמש נפרד, התקינו מפתח SSH, אמתו גישה, השביתו כניסת root וסיסמאות, הפעילו UFW, הגדירו Fail2ban והפעילו עדכונים אוטומטיים. לאחר מכן הוסיפו גיבויים, רישום וניטור חיצוני.
השלבים האלה אינם הופכים שרת לבלתי חדיר, אך הם מסלקים את טעויות ההגדרה הראשוניות הנפוצות ביותר. הצעד הבא הוא להתאים את פרופיל האבטחה לאפליקציה הספציפית: עדכון תלויות, הגבלת הרשאות שירות, הגנה על לוחות מנהל ובדיקה קבועה של פורטים פתוחים.
FAQ
האם צריך לשנות את פורט ה-SSH שמוגדר כברירת מחדל?
לא בהכרח. העברת הפורט מפחיתה רעש אוטומטי, אך אינה מחליפה מפתחות, סיסמאות מושבתות, UFW או Fail2ban. אם שיניתם את הפורט, עדכנו את כלל חומת האש ואת הפרמטר port ב-jail של Fail2ban.
מה לעשות אם איבדתי גישה לאחר הגדרת UFW?
השתמשו במסוף Web או במסוף החירום של הספק, ולאחר מכן בדקו את כלל ה-SSH ואת תצורת sshd. אל תסגרו את הסשן הישן והפעיל עד שאישרתם את הכניסה החדשה.
האם Fail2ban מספיק כדי להגן על SSH?
לא. Fail2ban מגיב לכשלי כניסה שכבר התרחשו. הבסיס צריך להיות מפתחות SSH, אימות בסיסמה מושבת, הרשאות משתמש מינימליות וחומת אש מוגבלת.
האם אפשר לאפשר SSH מכתובת IP אחת בלבד?
כן, אם הכתובת קבועה: הוסיפו כלל UFW מסוג allow from עבור ה-IP הזה. דאגו מראש לגישה למסוף הספק או לאפשרות חלופית, מפני שהחיבור ייחסם לאחר שינוי הכתובת.
באיזו תדירות צריך לבדוק את אבטחת ה-VPS?
לאחר כל שינוי ב-SSH, בחומת האש או בפרסום פורטי Docker, הפעילו בדיקת פורטים ובדקו את הכניסה. בתחזוקה שגרתית עברו על עדכונים ויומנים לפחות פעם בשבוע, ובדקו שחזור גיבוי באופן קבוע.
