SSD Nodes Learn Hosting plans →
מדריכים Matt Connorמאת Matt Connor · עודכן 2026-08-31

איך לבדוק אילו פורטים פתוחים ב-Linux ואיך הם עובדים

רוצים לדעת אילו שירותים מאזינים בפורטים של השרת שלכם? למדו להשתמש בפקודת ss כדי לזהות תעבורה, להבדיל בין פורטים מקומיים לציבוריים ולהבין את ההבדל בין TCP ל-UDP.

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

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

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

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

האזנה (Listening) משמעה שתוכנית ממתינה בפורט

תוכנית המעוניינת לקבל חיבורים מבקשת מה־kernel "להאזין" בפורט מסוים. מרגע זה, הפורט פתוח במכונה והתוכנית משיבה לכל פנייה שמגיעה אליו, בכפוף לחוקי ה־firewall. פורט שאין בו תהליך מאזין פשוט מסרב לחיבורים. לכן, השאלה הראשונה בכל בדיקת אבטחה היא: מה מאזין, והיכן.

הפקודה למתן מענה לשאלה זו היא ss:

sudo ss -tlnp

הדגלים מציינים 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 מציינת איזו תוכנית מחזיקה בכל פורט; כך ניתן לאתר שירות שלא התכוונתם להשאיר פעיל.

העמודה Local Address היא החלק הקריטי

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

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

[::]:80 משמעותו דבר דומה עבור IPv6: האזנה בכל כתובת IPv6, כולל כתובות ציבוריות. תוכנות רבות מבצעות bind לכתובת זו כברירת מחדל, ובמערכות Linux, socket מסוג :: מקבל לעיתים קרובות גם תעבורת IPv4.

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

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

האזנה אינה שקולה לנגישות

הבחנה נוספת תחסוך לכם בלבול רב. פורט פתוח במכונה, כלומר תוכנית שמבצעת האזנה (listening), שונה מפורט שניתן להגיע אליו מבחוץ, כלומר פורט שה-firewall מאפשר גישה אליו. שני התנאים חייבים להתקיים כדי שלקוח מרוחק יוכל להתחבר. שני סוגי הכשלים נראים שונים מצד הלקוח: חיבור שנדחה (refused) משמעו ששום תהליך לא האזין בפורט, בעוד חיבור שנתקע ומסתיים ב-timeout מעיד בדרך כלל על כך שה-firewall השליך את החבילה, וזה בדיוק מה ששתי שגיאות ה-SSH הללו מנסות לומר לכם.

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

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

FAQ

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

הריצו את sudo ss -tlnp עבור TCP או את sudo ss -ulnp עבור UDP. פקודות אלו מציגות את כל ה-sockets המאזינים, את הפורט, את הכתובת המקומית שאליה הם קשורים, ואת התהליך שבבעלותו הם נמצאים. עיינו בעמודה 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 כדי שלא ייחשפו לעולם.

האם עליי לפתוח פורט ב-firewall כדי ששירות יעבוד?

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

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

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