|
מה זה Port?
הסבר על רגל אחת
כששני מחשבים רוצים לתקשר זה עם זה באמצעות פרוטוקול
ה- TCP/IP הם צריכים להחליט באיזה ערוץ להעביר את המידע.
במילים אחרות, איך ידע מחשב בצד
אחד שהמידע שהוא שולח אכן מגיע ליישום הנכון במחשב בצד השני, ואיך ידע המחשב בצד
השני שהמידע שהוא מקבל אכן נובע מהמחשב הראשון ולאיזה יישום להעלות אותו (שכבת
האפליקציה - השכבה ה- 7 במודל 7
השכבות - ה- OSI Model).
בין כל 2 מחשבים שמתקשרים
ביניהם נוצר Session. למען
האמת, ה- Session לא נוצר תמיד, אלא רק
במידה ועובדים ביישום
כלשהו שמשתמש בפרוטוקול העברת הנתונים שנקרא TCP, ולא
בפרוטוקול ה- UDP. איך יודעים
באיזה סוג פרוטוקול משתמש היישום? אם זה יישום שמחייב בדיקת העברת הנתונים,
יישום אינטרנטי (בד"כ אבל לא תמיד) או יישום שמעביר קבצים - בד"כ הם יעבדו
כברירת
מחדל באמצעות TCP. אם
מדובר ביישום ששואל שאלה ומצפה לתשובה (כמו DNS) או יישום שמכריז
הכרזה ולא מחכה לתשובה (כמו
למשל "שכנים ברשת"), אז בד"כ זה יהיה ב- UDP.
כל יישום שנותן שירותים מתוכנת להקשיב בערוץ תקשורת
מסויים. הערוץ הזה נקרא PORT. כל יישום שמתוכנת לבקש שירות מתוכנת לפנות אל היישום
שנותן את השירותים בערוץ הקבוע מראש, כלומר בפורט הקבוע והידוע מראש. למשל, תוכנת
דואר אלקטרוני יודעת שכשהיא רוצה לשלוח דואר אל שרת הדואר עליה לפנות אל השרת בפורט 25.
במידה והיא תנסה לפנות אל השרת בפורט אחר, לא יהיה שם אף אחד שיענה לה. דפדפן אינטרנט יודע שכדי לגלוש באינטרנט עליו
לפנות לשרת האינטרנט בפורט 80, אחרת לא יענו לו. ואם אתה הולך לאתר מאובטח ב- SSL
אז זה חייב להיות לפורט 443. ואם אתה מושך דואר, אז התוכנה שלך חייבת לפנות אל השרת
בפורט 110. הבנתם את הרעיון.
התוכנה מצד הלקוח שואלת שאלה את השרת.
למשל, דפדפן ישאל
את השרת בפורט 80 "GET אתר אינטרנט שכתובתו היא ככה וככה", והשרת רוצה להחזיר תשובה,
אבל הוא צריך לדעת לאן להחזיר. יתכן ובמחשב שלך רצות 10 תוכנות שונות שכל אחת מהן
שולחת ומקבלת מידע. איך ידע המחשב שלך לאיזו תוכנה להעלות את המידע המתקבל? גם כן
באמצעות פורט, אבל הפעם זהו פורט של קליינט, לא של שירות. השרת יחזיר תשובה אל
הקליינט לאותו פורט שהקליינט מציין בתור פורט המוצא (בניגוד לפורט היעד שהוא השרת
עצמו, נגיד פורט 80).
למשל,
אתה גולש באינטרנט לאתר שכתובתו היא
www.kuku.co.il
פתחת דפדפן אל האתר. מה שקורה בקרע הוא
שהמחשב שלך שולח פאקטים של בקשת מידע מהתחנה שלך
אל השרת, אבל לא סתם מהתחנה אל השרת, אלא מפורט
ספציפי על התחנה אל פורט ספציפי על השרת. במקרה
שלנו, ייתכן והתחנה יצרה פאקט של מידע שיוצא מפורט
(זוהי רק דוגמה) 1034 המקומי, אל פורט 80 של השרת,
והכל מבוסס על פרוטוקול ה-
TCP.
כשהשרת
רוצה להחזיר את התשובה אל התחנה, הוא יעבד את פאקט
התשובה שייצא מפורט 80 אצלו, אל פורט היעד- 1034
בתחנה, וגם כאן הכל ב- TCP.
הפורטים של השירותים הם ידועים וקבועים מראש: מ- 1 ועד
1024.
הפורטים של הקליינטים הם דינאמיים ונעים בטווח מסויים:
מ- 1024 ועד הרבה יותר גבוה-
סביב ה- 49,000.
בעיקרון, יכולים להיות עד 65,535 פורטים למחשב, וחלקם
הגדול כבר תפוס ע"י יישומים שונים. למשל, פורט
תפוס עבור שרת HTTP ופורט אחר תפוס עבור שרת SMTP ופורט
אחר תפוס עבור שרת POP3 וכו'
וכו', יש גם תוכנות בבעלות פרטית כמו למשל PcAnywhere, ICQ, Kazaa וכו'', שכל
אחת "השתלטה" על פורט פנוי ותפסה עליו בעלות. כך שאם אתה מתקין אצלך PcAnywhere וגם
אצל מחשב של חבר ורוצה להתחבר אליו, המחשב שלך "יודע" שהוא צריך ללכת לפורט 5631 או
5632 כי זה הפורט בו מאזינה התוכנה.
לרשימה כמעט מלאה של רוב הפורטים הידועים גשו לכאן:
Well Known
Port Numbers
(רשימה כמעט מלאה אבל יש עוד כמותה. גוגל זה מקום טוב
להתחיל לחפש בו)
בחלק מהתוכנות והשרתים ניתן לשנות את הפורט המקשיב. כך
ניתן בקלות להגדיר שאתר אינטרנט יקשיב בפורט 45213 במקום 80, אבל אז אתה חייב
להודיע לכל העולם שאתה מקשיב בפורט הזה ולא בפורט ברירת המחדל, כי הרי הדפדפנים של
כולנו מתוכנתים ללכת כברירת מחדל לפורט 80. אם נגיד תרצה לעשות זאת אז בשורת ה- URL
תכתוב למשל
http://www.kuku.co.il:45213
(זו רק דוגמא, זה לא יעבוד)
כשמחשבים רוצים להקים
Session ביניהם הם בעצם יוצרים
משהו שנקרא
Socket.
Socket הוא בעצם קשר בין כתובת IP בצד אחד בפורט
המקור, לכתובת
IP בצד שני לפורט יעד - באמצעות פרוטוקול העברת נתונים כמו TCP (או UDP).
יש תוכנות רבות שמסוגלות ללכת למחשב או למספר רב של
מחשבים ולבצע סריקה של הפורטים הפתוחים בהם.
מה זה פורט פתוח? פורט פתוח הוא פורט ש"מקשיב" ומוכן
לקבל שיחות או
Sessions, כלומר זהו פורט שבו יושבת תוכנה נותנת שירותים ומוכנה לקבל
פניות ולענות להן.
למה זה טוב לדעת באיזה פורטים מחשב
כלשהו מקשיב? פשוט מאוד. כך
תדע בצורה מוחלטת אילו תוכנות
נותנות שירותים מותקנות על מחשב היעד, וכך תוכל, אולי, לנצל
פרצות אבטחה ולחדור פנימה או אולי גם להשבית את התוכנה או את השרת כולו.
ברור שהמטרה שלנו
היא לא לגרום לנזק, אבל ע"י ידיעת הפורטים הפתוחים
על מחשב כלשהו אנחנו יכולים גם להתריע ולהזהיר
מפני סכנות כאלה ואחרות. למשל, נניח שאנחנו סורקים
את הרשת המקומית במקום העבודה שלנו (שימו לב,
פעולה כזו עלולה להיות לא-חוקית במקומות רבים,
היזהרו ובידקו היטב את מדיניות מקום העבודה שלכם
בטרם תבצעו פעולה כזו) ואנחנו מוצאים כי מחשבים
רבים "מאזינים" בפורט 12345, הרי שאנחנו יכולים
להניח בוודאות גבוהה מאוד כי אותם מחשבים נגועים
בתוכנה זדונית - סוס טרוייאני - ששמו
NetBUS. במקרה כזה אני
יכול להתריע על כך למנהל הרשת שלי שיוכל לבצע
ניקוי של אותם מחשבים.
לסורק פורטים מבוסס אינטרנט טוב לך לכאן:
www.auditmypc.com
אבל יש עוד רבים כמותו. חפש בגוגל. את זה אתה יכול לבד, נכון
בובי?
כדי לחסום פורטים משתמשים בד"כ ב-
Firewall שבעצם מונע הקמת
Sessions לא רצויים עם מחשבים לא מוכרים וכך מגן על המחשב שלך.
Firewall בסיסי הוא זה שמגיע עם
Windows XP Pro ו- Windows 2000/2003, ורצוי
להפעיל אותו מיד כדי למנוע פרצות מיותרות. לא מדובר ב-
Firewall מקצועי כמו מוצרים אחרים, אבל בניגוד למוצרים אחרים הוא חינמי
וקל מאוד להגדרה. ב- Windows XP Service Pack 2 שופר
ה- Firewall הבסיסי והוא נקרא כעת
Windows Firewall. רצוי להפעיל אותו.
רשימה לא מלאה של
Firewalls לשימוש ביתי וסקירה קצרה
שלהם תוכל למצוא כאן:
Personal Firewall Recommendations
יש פורטים שידועים כפורטים "זנותיים", כלומר כל זאטוט
זב חוטם עם שליטה בעכבר יכול להוריד מהאינטרנט איזה סקריפט זדוני שיחרב לך את המחשב
בשתי שניות. מצד שני יש פורטים שהם מוגדרים כמוגנים יותר ולכן פחות נורא שיהיו
פתוחים. מצד שלישי יש גם פורטים שאתה לא יכול בלעדיהם, כמו למשל פורט 25 על שרת
דואר אלקטרוני, שבלעדיו לא תוכל לשלוח או לקבל דואר כלל.
לרשימה (חלקית) של פורטים ידועים של סוסים טרוייאניים
ושות' ראה כאן:
Trojan Ports
List
כל זה על רגל אחת.
|