הקדמה
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, שהם הפרוטוקולים הנפוצים ביותר להעברת חבילות בשכבת הרשת.
- netstat -lntu
זה ידפיס:
- כל הגנרטורים השומעים (
-l
) - מספר היציאה הספציפית (
-n
) - יציאות TCP (
-t
) - יציאות UDP (
-u
)
OutputActive 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
לרשום גנרטורים ששומעים עם יציאה פתוחה:
- ss -lntu
זה ידפיס:
OutputNetid 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
:
- netstat -na | grep :4000
או באמצעות הפקודה ss
:
- ss -na | grep :4000
הפלט צריך להישאר ריק, מאמת שהוא לא בשימוש כרגע, כך שתוכלו להוסיף את כללי הפורט ידנית ל־גדרי האש של מערכת iptables.
למשתמשי Ubuntu ומערכות המשתמשות ב־ufw
השתמשו ב־ufw
– לקוח שורת פקודה ל־UncomplicatedFirewall.
הפקודות שלכם ייראו כך:
- 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}.
הפקודות שלך ייראו כך:
- firewall-cmd --add-port=4000/tcp
ראה את איך להגדיר את \code{firewalld} עבור ההפצה שלך.
הערה:
- CentOS 7/8: "הגדרת כללים עבור היישומים שלך / פתיחת פורט עבור האזורים שלך"
- Rocky Linux 8/9: "הגדרת כללים עבור היישומים שלך / פתיחת פורט עבור האזורים שלך"
להפצות לינוקס אחרות
השתמש ב-\code{iptables} לשינוי כללי הסינון של החבילות IPv4 של המערכת.
- 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
לכל לקוח מחובר:
- ls | nc -l -p 4000
כעת, לאחר שלקוח פתח חיבור TCP ביציאה 4000
, הוא יקבל את תוצאת ls
. השאר את ההפעלה הזו לבד זמנית.
פתח חלון פקודה נוסף על אותו המחשב.
מאחר שפתחת יציאת TCP, השתמש ב־telnet
כדי לבדוק את התקיפות על ידי TCP. אם הפקודה אינה קיימת, התקן אותה באמצעות מנהל החבילות שלך.
הזן את כתובת ה-IP של השרת ומספר היציאה (4000
בדוגמה זו) והפעל את הפקודה הבאה:
- telnet localhost 4000
הפקודה זו מנסה לפתוח חיבור TCP ב־localhost
ביציאה 4000
.
תקבל פלט דומה לזה, המציין שחיבור התקבל עם התוכנית המאזינה (nc
):
OutputTrying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.sh
התוצאה של ls
(while.sh
, בדוגמה זו) נשלחה גם ללקוח, המציין חיבור TCP מוצלח.
השתמש ב־nmap
כדי לבדוק האם הפורט (-p
) פתוח:
- nmap localhost -p 4000
פקודה זו תבדוק את הפורט הפתוח:
OutputStarting 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