SSD Nodes Learn
מדריכים Matt Connorמאת Matt Connor · עודכן 2026-07-24

מה זה פורט ואיך בודקים שירותים ב-Linux

למדו מהו פורט וכיצד מערכת ההפעלה מנתבת תעבורה. נלמד להשתמש בפקודה ss כדי לזהות שירותים המקשיבים (listening) ולהבחין בין פורט מקומי לציבורי.

מהו פורט בפועל

פורט הוא מספר המאפשר לשרת אחד להריץ שירותים רבים בו-זמנית ללא ערבוב התעבורה ביניהם. ל-VPS שלך יש כתובת IP אחת, אך הוא עשוי להריץ שרת אינטרנט, שרת SSH וגם מסד נתונים בו-זמנית. כאשר חבילה מגיעה, מערכת ההפעלה צריכה לדעת עבור איזה שירות היא מיועדת. מספר הפורט הוא התשובה. תעבורת אינטרנט עוברת בפורט 443, ו-SSH בפורט 22. כתובת ה-IP מביאה את החבילה אל השרת; הפורט מביא אותה אל התוכנית המתאימה בתוך אותו שרת.

פורט הוא מספר בן 16 סיביות (bits): 16 סיביות מאפשרות טווח מ-0 עד 65535, כאשר המספר 0 שמור, ולכן בפועל הפורטים הם בטווח 1 עד 65535. פורטים מתחת ל-1024 הם ה-"well-known" ports ודורשים הרשאות root כדי להיפתח, וזו הסיבה ששירותים סטנדרטיים נמצאים שם: 22 עבור SSH, 80 עבור HTTP, 443 עבור HTTPS, ו-53 עבור DNS. כל מספר מעל 1024 זמין לשימוש של תוכניות רגילות.

קיימים שני סוגים, TCP ו-UDP, ומספר פורט ב-TCP נפרד מאותו מספר ב-UDP. TCP הוא פרוטוקול מבוסס-חיבור (connection-based) המשמש את רוב השירותים, כגון SSH, HTTP ומסדי נתונים. UDP הוא פרוטוקול ללא-חיבור (connectionless) ומשמש לדברים כמו DNS וכמה סוגי VPN. כאשר פותחים חומת אש (firewall), בדרך כלל מציינים איזה פרוטוקול נדרש, לדוגמה 22/tcp.

Listening פירושו שתוכנית ממתינה בפורט

תוכנית שרוצה לקבל חיבורים מבקשת מה-kernel "להקשיב" (listen) בפורט מסוים. מרגע זה הפורט פתוח במכונה והתוכנית עונה לכל דבר שמגיע אליו, בכפוף לחומת האש. פורט שאין בו תוכנית המקשיבה פשוט דוחה חיבורים. לכן, השאלה הראשונה בכל בדיקת אבטחה היא: מה מקשיב, ובאיזה פורט.

הפקודה כדי לקבל תשובה לכך היא ss:

sudo ss -tlnp

הדגלים (flags) מייצגים TCP (t), שוקטים המקשיבים בלבד (l), פורטים מספריים (n, כך שתוכל לראות את 22 ולא את ssh), והתהליך הבעלים (p). תוצאה טיפית:

State   Recv-Q  Local Address:Port   Process
LISTEN  0       0.0.0.0:22           sshd
LISTEN  0       127.0.0.1:5432       postgres
LISTEN  0       [::]:80              nginx

עמודת ה-Process מ tells אותך איזו תוכנית מחזיקה בכל פורט, וזו הדרך לעקוב אחר תהליך שלא התכוונת להשאיר פועל.

עמודת ה-Local Address היא החלק החשוב

קרא בעיון את הכתובת המופיעה לפני כל פורט, כיוון שהיא קובעת מי יכול להגיע לשירות. ישנם שלושה מקרים שתפגוש باستمرار.

0.0.0.0:22 פירושו "הקשב לכל כתובת IPv4 שיש למכונה זו", כולל הכתובת הציבורית שלה. השירות נגיש מהאינטרנט באמצעות IPv4, בתנאי שחומת האש מאשרת זאת.

[::]:80 פירושו אותו דבר עבור IPv6: הקשב לכל כתובת IPv6, כולל הכתובת הציבורית. תוכניות רבות נקשרות (bind) לכך כברירת מחדל, וב-Linux שוקט מסוג :: מקבל לעיתים גם IPv4.

127.0.0.1:5432 פירושו "הקשב ל-loopback בלבד". 127.0.0.1 היא הכתובת שבה המכונה משתמשת כדי לדבר עם עצמה, והיא אינה ניתנת לניתוב (routable) מכל מקום אחר. שירות שנקשר לכאן נגיש רק מהשרת עצמו, ולעולם לא מהאינטרנט, ללא קשר להגדרות חומת האש. השורה של Postgres לעיל בטוחה מבחינה מבנית.

הכלל המעשי נובע ישירות מכך: מסד נתונים, מטמון (cache), או לוח בקרה של מנהל מערכת שמשתמשים בו רק האפליקציות שלך, צריכים להיקשר ל-127.0.0.1 ולא ל-0.0.0.0. אם השירות לעולם לא מקשיב בכתובת ציבורית, אין לתוקף דרך להגיע אליו.

Listening אינו זהה ל-Reachable

הבחנה נוספת תמנע בלבולים רבים. העובדה שפורט פתוח במכונה, כלומר תוכנית מקשיבה בו, שונה מהעובדה שהפורט נגיש (reachable) מבחוץ, כלומר חומת האש מאשרת זאת. שני התנאים חייבים להתקיים כדי שלקוח מרוחק יוכל להתחבר.

לכן קיימים שני שכבות של בקרה. אתה מחליט מה מקשיב על ידי הגדרת כתובת ה-bind של כל שירות. ואתה מחליט מה העולם החיצוני יכול להשיג באמצעות חומת אש. שרת המנוהל היטב משתמש בשניהם: שירותים נקשרים רק למקום שבו הם צריכים, וחומת אש חוסמת כל דבר שלא אישרת במפורש. קריאת המצב של מה שמקשיב באמצעות ss היא שלב ראשון; החלטה מה חומת האש מאשרת היא שלב שני, המפורט ב-firewalls 101 with UFW.

ישנה דקות שעלולה להטעות אנשים כאן. IPv4 ו-IPv6 הם נפרדים, וחומת אש המכסה רק IPv4 משאירה את שירותי ה-[::] פתוחים ב-IPv6. למלכודת הספציפית הזו יש מאמר משלה: the IPv6 firewall trap.

FAQ

איך אני יכול לראות אילו פורטים פתוחים בשרת ה-Linux שלי?

הרץ את sudo ss -tlnp עבור TCP או את sudo ss -ulnp עבור UDP. זה יציג רשימה של כל שוקט המקשיב, הפורט, הכתובת המקומית אליה הוא קשור, והתהליך הבעלים שלו. קרא את עמודת ה-Local Address: 0.0.0.0 או [::] פירושו שהשירות חשוף לרשת, בעוד ש-127.0.0.1 פירושו שהוא מקשיב רק למכונה עצמה.

מה ההבדל בין 0.0.0.0 לבין 127.0.0.1?

0.0.0.0 פירושו "הקשב לכל כתובות ה-IPv4", כולל הכתובת הציבורית, כך שניתן להגיע לשירות מהרשת. 127.0.0.1 הוא loopback, הכתובת שבה המכונה משתמשת כדי לדבר עם עצמה, והיא אינה ניתנת לניתוב מכל מקום אחר, לכן שירות שנקשר אליה נגיש רק מקומית. קשרו שירותים פנימיים ל-127.0.0.1 כדי שלא יהיו חשופים לעולם.

האם אני צריך לפתוח פורט בחומת האש כדי ששירות יעבוד?

רק עבור שירותים שחייבים להיות נגישים ממכונות אחרות. שירות שנקשר ל-127.0.0.1 אינו זקוק לכלל בחומת האש מכיוון ששום גורם חיצוני לא יכול להגיע אליו בכל מקרה. שירות ב-0.0.0.0 או [::] זקוק לכלל בחומת האש כדי לאפשר את התעבורה, ועליו להיות חסום כברירת מחדל עד שתתיר זאת.

מה ההבדל בין פורט TCP לפורט UDP?

TCP מבוסס-חיבור ומשמש את רוב השירותים, כגון SSH, שרתי אינטרנט ומסדי נתונים. UDP הוא ללא-חיבור ומשמש את DNS וכמה סוגי VPN. אותו מספר ב-TCP וב-UDP מייצג פורטים נפרדים, לכן 53/tcp ו-53/udp הם שונים. כשאתה כותב כללי חומת אש, עליך לציין את הפרוטוקול, לדוגמה 22/tcp.