איך לפתוח יציאה ב-Linux

הקדמה

A port is a communication endpoint. Within an operating system, a port is opened or closed to data packets for specific processes or network services.

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

היציאות הראשונות 1024 (מספרי יציאה 0 עד 1023) נקראות מספרי יציאה ידועים ומוקצות לשירותים הנפוצים ביותר. אלו כוללים SSH (יציאה 22), HTTP (יציאה 80), HTTPS (יציאה 443).

יציאות שנמצאות מעל ל-1024 נקראות יציאות אפמרליות.

  • יציאות בין 1024 ל-49151 נקראות יציאות רשומות/משתמש.
  • יציאות בין 49152 ל-65535 נקראות יציאות דינמיות/פרטיות.

במדריך זה, תפתח יציאת אפמרלי על Linux, מאחר ושירותים רבים משתמשים ביציאות ידועות.

הפעל את היישומים שלך מ-GitHub באמצעות פלטפורמת היישומים של DigitalOcean. תן ל-DigitalOcean להתמקד בהתרחבות היישום שלך.

דרישות מוקדמות

כדי להשלים את המדריך הזה, יהיה עליך:

רשימת כל היציאות הפתוחות

לפני שפותחים יציאה ב־Linux, יש לבדוק את רשימת כל היציאות הפתוחות ולבחור יציאת ephemeral שאינה כבר ברשימה זו.

יש להשתמש בפקודת netstat כדי לרשום את רשימת כל היציאות הפתוחות, כולל TCP ו־UDP, שהם הפרוטוקולים הנפוצים ביותר להעברת חבילות בשכבת הרשת.

  1. netstat -lntu

זה ידפיס:

  • כל הגנרטורים השומעים (-l)
  • מספר היציאה הספציפית (-n)
  • יציאות TCP (-t)
  • יציאות UDP (-u)
Output
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp6 0 0 ::1:5432 :::* LISTEN tcp6 0 0 ::1:6379 :::* LISTEN tcp6 0 0 :::22 :::* LISTEN udp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN

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

וודא שאתה מקבל פלטים עקביים באמצעות פקודת ss לרשום גנרטורים ששומעים עם יציאה פתוחה:

  1. ss -lntu

זה ידפיס:

Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* tcp LISTEN 0 128 127.0.0.1:5432 0.0.0.0:* tcp LISTEN 0 128 127.0.0.1:27017 0.0.0.0:* tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:* tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* tcp LISTEN 0 128 [::1]:5432 0.0.0.0:* tcp LISTEN 0 128 [::1]:6379 0.0.0.0:* tcp LISTEN 0 128 [::]:22 0.0.0.0:*

זה יציג בערך את אותן יציאות פתוחות כמו netstat.

פתיחת פורט ב-Linux כדי לאפשר חיבורים TCP

כעת, פתחו פורט סגור והפכו אותו לפועל למטרת קבלת חיבורים TCP.

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

וודאו שהפורט 4000 לא בשימוש באמצעות הפקודה netstat:

  1. netstat -na | grep :4000

או באמצעות הפקודה ss:

  1. ss -na | grep :4000

הפלט צריך להישאר ריק, מאמת שהוא לא בשימוש כרגע, כך שתוכלו להוסיף את כללי הפורט ידנית ל־גדרי האש של מערכת iptables.

למשתמשי Ubuntu ומערכות המשתמשות ב־ufw

השתמשו ב־ufw – לקוח שורת פקודה ל־UncomplicatedFirewall.

הפקודות שלכם ייראו כך:

  1. sudo ufw allow 4000

ראו את איך להגדיר כללי גישה בגדר כללי גישה של ufw עבור ההפצה שלכם.

הערה:

  • Ubuntu 14.04: "אפשר טווחי פורטים מסוימים"
  • \begin{hebrew}
    אובונטו 16.0.4/18.0.4/20.0.4/22.0.4: "אפשר חיבורים אחרים / טווחי פורטים ספציפיים"
  • דביאן 9/10/11: "אפשר חיבורים אחרים / טווחי פורטים ספציפיים"

למערכות המבוססות על CentOS ו-firewalld

השתמש ב-\code{firewall-cmd} – לקוח שורת פקודה עבור השירות הרקעי \code{firewalld}.

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

  1. firewall-cmd --add-port=4000/tcp

ראה את איך להגדיר את \code{firewalld} עבור ההפצה שלך.

הערה:

  • CentOS 7/8: "הגדרת כללים עבור היישומים שלך / פתיחת פורט עבור האזורים שלך"
  • Rocky Linux 8/9: "הגדרת כללים עבור היישומים שלך / פתיחת פורט עבור האזורים שלך"

להפצות לינוקס אחרות

השתמש ב-\code{iptables} לשינוי כללי הסינון של החבילות IPv4 של המערכת.

  1. iptables -A INPUT -p tcp --dport 4000 -j ACCEPT

ראה את איך להגדיר חומת אש באמצעות \code{iptables} עבור ההפצה שלך.

הערה:
\end{hebrew}

  • שורת הפקודה של Ubuntu 12.04: "חומת אש בסיסית"
  • שורת הפקודה של Ubuntu 14.04: "קבלת חיבורים נדרשים אחרים"

בדיקת היציאה החדשה לחיבורי TCP

כעת שפתחת בהצלחה יציאת TCP חדשה, הגיע הזמן לבדוק אותה.

ראשית, הפעל את netcat (nc) והאזן (-l) ביציאה (-p) 4000, ובזמן זה שלח את תוצאת ls לכל לקוח מחובר:

  1. ls | nc -l -p 4000

כעת, לאחר שלקוח פתח חיבור TCP ביציאה 4000, הוא יקבל את תוצאת ls. השאר את ההפעלה הזו לבד זמנית.

פתח חלון פקודה נוסף על אותו המחשב.

מאחר שפתחת יציאת TCP, השתמש ב־telnet כדי לבדוק את התקיפות על ידי TCP. אם הפקודה אינה קיימת, התקן אותה באמצעות מנהל החבילות שלך.

הזן את כתובת ה-IP של השרת ומספר היציאה (4000 בדוגמה זו) והפעל את הפקודה הבאה:

  1. telnet localhost 4000

הפקודה זו מנסה לפתוח חיבור TCP ב־localhost ביציאה 4000.

תקבל פלט דומה לזה, המציין שחיבור התקבל עם התוכנית המאזינה (nc):

Output
Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. while.sh

התוצאה של ls (while.sh, בדוגמה זו) נשלחה גם ללקוח, המציין חיבור TCP מוצלח.

השתמש ב־nmap כדי לבדוק האם הפורט (-p) פתוח:

  1. nmap localhost -p 4000

פקודה זו תבדוק את הפורט הפתוח:

Output
Starting Nmap 7.60 ( https://nmap.org ) at 2020-01-18 21:51 UTC Nmap scan report for localhost (127.0.0.1) Host is up (0.00010s latency). Other addresses for localhost (not scanned): ::1 PORT STATE SERVICE 4000/tcp open remoteanything Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds

הפורט נפתח. פתחת בהצלחה פורט חדש במערכת ה־Linux שלך.

הערה: nmap מציג רק פורטים פתוחים שיש להם יישום שמאזין כרגע. אם אינך משתמש באפליקציה שמאזינה, כמו netcat, זה יציג את הפורט 4000 כסגור מאחר שאין אפליקציה שמאזינה בפורט כרגע. באופן דומה, telnet לא יעבוד מאחר שהוא גם דורש אפליקציה שמאזינה להתחבר. זהו הסיבה שבגללה nc הוא כלי כל כך שימושי. זה מדמה סביבות כאלו בפקודה פשוטה.

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

שמירת כללים

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

עבור חומת האש של ufw

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

ל firewalld

יש להשתמש בדגל --permanent.

יש להסתכל ב-איך להגדיר את firewalld עבור ההפצה שלך.

הערה:

  • CentOS 7/8: "הגדרת כללים עבור היישומונים שלך"
  • Rocky Linux 8/9: "הגדרת כללים עבור היישומונים שלך"

ל iptables

יש לשמור על כללי התצורה. בהמלצה למידע נוסף, יש להשתמש ב־iptables-persistent.

יש להסתכל ב-איך להקים חומת אש באמצעות iptables עבור ההפצה שלך.

הערה:

  • Ubuntu 12.04: "שמירת כללי Iptables"
  • Ubuntu 14.04: "שמירת תצורת Iptables שלך"

סיכום

במדריך זה, למדת כיצד לפתוח יציאה חדשה ב-Linux ולהגדיר אותה לחיבורים נכנסים. כמו כן, השתמשת ב-netstat, ss, telnet, nc, ו־nmap.

המשך את הלמידה שלך עם איך פקסיה ה-iptables עובדת, חפירה עמוקה לארכיטקטורת Iptables ו-Netfilter, הבנה של קפיצים, ו־איך להשתמש בכלים כמו Top, Netstat, Du, וכלים נוספים לניטור של משאבי השרת.

Source:
https://www.digitalocean.com/community/tutorials/opening-a-port-on-linux