השרת שלך ב־Linux רץ, ואתה רוצה לבדוק אם פורט מסוים פתוח כדי שתוכל לגשת אליו מרחוק. בדיקה עבור פורטים פתוחים היא משימה די נפוצה עבור מנהלי מערכות, וישנם כמה דרכים שונות לעשות זאת ב־Linux.
במאמר זה, תלמד כמה דרכים לבדוק אם פורט פתוח ב־Linux כך שתוכל לבחור אילו מתאימות לך הכי טוב. מוכן? המשך לקרוא!
נדרשים
ההדרכה הזו תהיה מצגת ידיים. אם ברצונך להמשיך, וודא שיש לך את הבאים.
- A Linux computer. This guide uses Ubuntu 20.04, but any recent Linux distribution should work.
- גישה לטרמינל. אם אתה משתמש בסביבת שולחן עבודה גרפית, חפש תוכנת מודד טרמינל בתפריט היישומים שלך. או, אם התחברת לשרת מרחוק באמצעות SSH,
- A user account with
sudo
privileges. For simplicity, this tutorial uses the root user.
בדיקה האם פורט פתוח ב־Linux באמצעות netstat
הדרך הראשונה לבדוק אם פורט פתוח ב־Linux היא על ידי הרצת פקודת netstat
. פקודה זו מציגה חיבורי רשת, טבלאות ניתוב, והמון סטטיסטיקות של ממשקי רשת.
פקודת netstat
היא חלק מחבילת net-tools
, וחבילה זו עשויה שלא להגיע כברירת מחדל עם ההפצה שלך של Linux. ב־Ubuntu, התקן את netstat
על ידי הרצת הפקודות הבאות בטרמינל.
נניח שיש לך שרת אינטרנט NGINX פעיל ותרצה לבדוק האם פתח ה-80
פתוח. תוכל לבצע זאת על ידי הרצת הפקודה הבאה. החלף 80
במספר הפתח שתרצה לבדוק.
הדגלים -tulpn
מורים ל־netstat
להציג את כל פתחי ההאזנה. הפקודה grep
הראשונה מוצאת ומסננת את השורה המכילה את המילה LISTEN
בתוצאה. הפקודה grep
השנייה מסננת את התוצאות כך שיציג רק פריטים התואמים :80
.
כדי לדעת עוד על הדגלים של netstat, הרץ את הפקודה netstat –help.
אם הפתח פתוח, תראה את הפלט הבא. כפי שתוכל לראות, הפלט מציג שהפתח 80 פתוח במערכת. tcp הוא סוג הפרוטוקול, ו־:::80
מציין שזהו פתח TCPv6. 0.0.0.0:80
אומר שהפתח פתוח לכל כתובות IPv4. 80
הוא פתח ה-HTTP המוגדר כברירת מחדל שמספק גישה לאתר.

בדיקה אם פתח פתוח באמצעות ss
הפקודה ss
היא עוד פקודת שורת פקודה לבדיקת פתחי פתיחה. הפקודה הזו מציגה סטטיסטיקת תקשורת תוך שימוש בסוקטים, אשר ניתן להשתמש בהם לאימות האם פורט מסוים פתוח או לא. הפקודה ss
מציגה מידע נוסף על פתחי פתיחה בהשוואה לכלים אחרים.
כמו הפקודה netstat
, הדגל -t
מציין ל-ss
להציג רק סוקטים של TCP, -u
להציג רק סוקטים של UDP, ו־-l
להצגת סוקטים המקשיבים בלבד. הדגל -p
מציין את שם התהליך או ה־PID שמשתמש בפורט.
תראו את הפלט הבא אם הפורט פתוח. כפי שניתן לראות, הפלט כולל את שם התהליך וה־PID לכל פורט שמאזין. במקרה זה, פורט 80 פתוח והשרת האינטרנט NGINX משתמש בו.

בדיקת אם פורט פתוח באמצעות lsof
הפקודה lsof
היא עוד כלי מועיל לבדיקת פתחי פתיחה. שם הפקודה lsof
מציין רשימת קבצים פתוחים, אשר מציג מידע על קבצים שפתוחים במערכת. המידע כולל מזהים של קבצים, מזהים של תהליכים, מזהים של משתמשים, ועוד.
איך רישום קבצים פתוחים עוזר לך לקבוע אם פורט פתוח? כנראה שכבר שמעת את הביטוי "הכל בלינוקס הוא קובץ", והביטוי הזה אומר מה שהוא אומר.
לדוגמה, נניח שתרצה לבדוק אם פורט 22 פתוח והמשתמשים שלך יכולים להתחבר ב־SSH אל השרת שלך. הרץ את הפקודה הבאה כדי לרשום קבצים פתוחים עם חיבורים פעילים בפורט 22.
הדגל -i
מורה ל־lsof
להציג את כל תוך־החורים באינטרנט הפתוחים. הדגל -P
מציג מספרי פורט במקום שמות השירותים. והדגל -n
מונע חיפושי DNS ושמות שירותים, כך שתראה את כתובות ה־IP במקום שמות המארחים המרוחקים.
אם הפורט פתוח, תראה את הפלט הבא. כפי שאתה יכול לראות, הפלט מכיל מידע על:
1027 הוא מזהה התהליך של שירות sshd.
root הוא מזהה המשתמש שמשתמש בפורט.
3u ו־4u הם מזהים קובץ עבור IPv4 ו־IPv6, בהתאמה.
31035 ו־31037 הם פורטי הרשת עבור IPv4 ו־IPv6, בהתאמה.
:22 מציין כי פורט 22 פתוח עבור כל כתובות IPv4 ו־IPv6.
- (LISTEN) מראה כי הפורט מאזין לחיבורים נכנסים.
0t0 הוא מצב הקצה של הסוקט, המעיד על כך שהסוקט נמצא במצב האזנה (LISTEN).

בדיקה אם פורט פתוח באמצעות nmap
עד כה, ראית איך לבדוק אם פורט פתוח בלינוקס באמצעות שורת הפקודה. אך מה אם ברצונך לבדוק אם פורט פתוח במכונה מרוחקת? במקרה כזה, אתה יכול להשתמש בכלי nmap
.
אך לפני הרצת nmap
, חשוב לזכור כי כלי זה עשוי שלא להיות חלק מהחבילות הבסיסיות בהפצת הלינוקס שלך. במקרה כזה, עליך תחילה להתקין את nmap
על ידי הרצת הפקודה הבאה.
כעת, הפעל את הפקודה הבאה כדי לבדוק אם יש פתח פתוח במכשיר מרוחק. פקודה זו בודקת אם הפתח 22
פתוח על 159.89.176.25
כך שהמשתמש יכול להתחבר ב-SSH לשרת שלך. החלף את כתובת ה-IP כפי שנדרש עם שלך.
כפי שאתה רואה, הפלט מכיל מידע על:
- זמן התחלת סריקת הפורטים (2022-06-30 16:58 UTC).
- כתובת ה-IP של המכשיר המרוחק (159.89.176.25).
- מצב הפורט (פתוח).
- השירות שמשתמש בפורט (ssh).
- מצב המארח (פעיל).

התוצאה מאשרת שמשתמשים יכולים להתחבר ב-SSH למחשב באמצעות כתובת ה-IP והפורט.
הצילום מסך למטה מראה חיבור SSH הוצלח לשרת, מאמת שהפורט 22 פתוח.

בדיקת פתח פתוח מתוך סקריפט של שורת פקודה
האוטומציה תמיד היא רעיון טוב. בדיקת פתחות פתוחים על ידי הרצת סקריפט של שורת פקודה היא דרך מצוינת לבדוק פתחות מרובים. אתה יכול להשתמש בכל שיטה קודמת לבדיקת פתח פתוח. אך, לדוגמה זו, תכתוב סקריפט של שורת פקודה בסיסי שמפעיל את פקודת Netcat nc
.
1. צור קובץ בשם check_port.sh בתיקיית הבית שלך באמצעות העורך הטקסט המועדף עליך. בדוגמה זו אנו משתמשים ב־nano.
2. העתק את קוד הדוגמה הבא לעורך שלך. החלף את 80 במספר הפורט שברצונך לבדוק.
התנאי if בודק האם הפורט 80 פתוח באמצעות פקודת nc. הפרוטוקולים 2>&1 ו־>/dev/null מפנים את הודעות השגיאה והפלט ל־/dev/null בהתאם. ה־/dev/null הוא קובץ מיוחד שמתמט את כל מה שהוא מקבל.
אם הפורט פתוח, תסקריפט check_port.sh ידפיס "מקוון" למסך. אחרת, התסקריפט ידפיס "לא מקוון".
הקובץ התסקריפטי צריך להיראות דומה לתמונת המסך למטה. שמור את הסקריפט וצא מהעורך.

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

ניתן להשתמש בתסריט הזה כדי לבדוק האם פורט מסוים פתוח בקפיצות זמן או במשימה מתוזמנת. כתיבת תסריטים מועילה במיוחד כאשר יש לבדוק שרתים מרובים. יש רק להעתיק את תסריט check_port.sh זה לכל השרתים שתרצה לבדוק ולהפעיל אותו באמצעות כלים כמו Jenkins או Ansible.
בדיקת פתיחת פורט באמצעות PowerShell
PowerShell מגיע עם cmdlet מובנה לבדיקת חיבורי רשת שנקרא Test-NetConnection
– אך הcmdlet זה זמין רק במערכות Windows. אל תדאג; עדיין ניתן להשתמש ב-PowerShell ב-Linux כדי לבדוק פורטים פתוחים וחיבורים באמצעות הclass TcpClient.
אם המחשב שלך ב-Linux אינו מכיל עדיין PowerShell, התקן אותו על ידי מעקב אחר ההוראות במסמך של Microsoft הבא: התקנת PowerShell על Linux.
1. הפעל את PowerShell על ידי הרצת הפקודה הבאה.

2. לאחר מכן, צור קובץ בשם Test-Port.ps1 באמצעות עורך הטקסט שלך. בדוגמה זו, אנו משתמשים ב-nano.
3. לאחר מכן, העתק את הקוד לתוך העורך שלך. שמור את הקובץ וצא מהעורך לאחר מכן.
הערה: קטע הקוד הזה הוא חלק מ-כלי בדיקת פורטים לכל סוגי התקשורת PowerShell.
4. לאחר שמירת קובץ הסקריפט Test-Port.ps1, הריצו את הפקודה הבאה כדי לבדוק את הפורטים 22, 80, 443 ו-53.
הפרמטר -ComputerName מקבל את רשימת שמות המארחים, שמות המחשב המלאים או כתובות ה-IP של מכונת היעד.
הפרמטר -Port מקבל מערך של מספרי פורט אחד או יותר לבדיקה.
כפי שניתן לראות למטה, התוצאה מראה כי פורטים 22 ו-80 פתוחים (נכון), בעוד שפורט 443 לא (שקר).

כדי להריץ את אותו סקריפט נגד מספר ערכי יעד שונים ופורטים, ערוכו את הקוד למטה כדי להוסיף את כל מחשבי היעד בפרמטר ComputerName ואת מספרי הפורט בפרמטר Port.

סיכום
במאמר זה, למדת כיצד לבדוק אם פורט פתוח או לא ב-Linux. גם למדת לבדוק אם פורט פתוח מתוך סקריפט של שורת פקודה ו-PowerShell. כעת, תוכל להשתמש באחת מהשיטות הללו כדי לבדוק אם פורט פתוח על המחשב שלך או על מחשב מרוחק כלשהו.
אל תעצר כאן, אף על פי כן. תבדוק כתבות אחרות לפתרון בעיות כדי להמשיך לשפר את מיומנויות מנהל המערכת שלך!
Source:
https://adamtheautomator.com/check-if-a-port-is-open-in-linux/