Simple Mail Transfer Protocol

תרשים להסבר מימוש הפרוטוקול
Simple Mail Transfer Protocol (בראשי תיבות: SMTP; בתרגום חופשי: פרוטוקול פשוט להעברת דואר) הוא הפרוטוקול הסטנדרטי לשליחת דואר אלקטרוני דרך האינטרנט.

== תיאור הפרוטוקול ==
SMTP משמש למשלוח דואר אלקטרוני בין שרתים שונים, עד שיגיע לשרת היעד, אך אינו מאפשר למשתמש לשלוף את הודעות הדואר המיועדות אליו מן השרת. קיימים פרוטוקולים אחרים המיועדים לשליפה של הודעות דואר, כגון POP3 ו-IMAP.

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

SMTP עובר מעל TCP ומשתמש בדרך כלל בפורט 25. פורט לקבלת נתונים הוא פורט 587. SMTPS הוא חיבור SMTP מוצפן באמצעות SSL ומשתמש בדרך כלל בפורט 465.

שורשיו של פרוטוקול SMTP נעוצים ב-1982 (במסמך ). ימיו הראשונים של האינטרנט עוד בהיותו ARPANet, ומכאן פשטותו היחסית. הפשטות הזו מתבטאת בין השאר בהיעדר מנגנון אימות 'חזק' לגבי מספר שדות, בהם שדה "השולח" ("From"). חולשה זו מאפשרת לכל אדם בעולם להתחזות לכל כתובת אחרת, מה שהופך את הפרוטוקול למטרה קלה עבור ספאמרים. קיימות מספר יוזמות אשר מנסות להתמודד עם הבעיה, כגון שיטת ה-DomainKeys.

פרוטוקול SMTP עודכן בשנת 2008 באמצעות ESMTP (במסמך ) הנותן מענה לבעיית האבטחה של הפרוטוקול ומעניק לו תכונות נוספות. פרוטוקול זה נמצא בשימוש נרחב כיום.

=== מציאת שרת SMTP ושימוש ב-DNS ===
איתור שרת ה-SMTP שאליו תנסה המערכת השולחת להעביר את ההודעה נעשה על ידי בקשת DNS מסוג MX (Mail eXchange). במידה ומוגדר יותר משרת MX אחד, המערכת תבחר את השרת בעל העדיפות הגבוהה ביותר (המספר הנמוך ביותר) במידה ומוגדרים מספר שרתים עם אותה עדיפות, יתבצע תהליך Round Robin בן השרתים.

כמו כן, שרתים רבים משתמשים בפרוטוקול ה-DNS על מנת לוודא שאכן קיים שם תחום בשם מתאים לזה שציין השולח. ברוב המקרים בקשת השליחה תידחה במידה ששם התחום לא קיים. מנגנון זה הוא חלק מההתמודדות של שרתי SMTP עם בעיית דואר הזבל האלקטרוני. בנוסף, עלתה לאחרונה הצעה להרחיב את רשומת TXT כך שתכיל את רשימת השרתים להם מאושר להעביר דואר אלקטרוני. צורת רישום זו מכונה "רשומת SPF".

=== בעיות אבטחה ב SMTP ===
SMTP הוא פרוטקול ותיק וכתוצאה מהפריסה של המערכות והצורך לשמור על תאימות לאחור קיים אתגר בשדרוג מהפרוטוקול הזה לפרוטוקולים מתקדמים ומאובטחים יותר.
בין בעיות האבטחה של הפרוטוקול ניתן למנות:
* פרטיות: הפרוטוקול מעביר מידע ללא כל הצפנה ובמידה וקיימת האזנה בדרך ניתן לקרוא את כל ההודעה ללא כל מניעה.
* שלמות: הפרוטוקול מעביר מידע ללא כל סוג של בדיקת שלמות כך שניתן לשנות את המידע מבלי שהמערכת תאתר את השנוי או תתריע עליו.
* הזדהות: שליחת דואר מתבצעת ללא כל הזדהות (למעט מתן כתובת מייל) כך שניתן לבצע Spoofing בקלות יחסית.

=== שיטות אבטחה ב SMTP ===
* Relay Control: שרתי דואר אמורים לוודא שכתובת המקור או כתובת היעד היא כתובת פנימית, במידה ושתי הכתובות חיצוניות או שתי הכתובות פנימיות תתבצע חסימה.
* Harvesting Control: זיהוי של שליחת דברי דואר למשתמשים רבים ברצף וניתוח הודעות השגיאה על מנת ליצר רשימה של כתובות קיימות.
* Reverse Lookup: הפיכת שם השרת השולח לכתובת IP של ה MX על ידי השרת המקבל וביצוע השוואה לכתובת השרת השולח, מכייון שארגונים רבים משתמשים בשרת שונה לקבלת ושליחת מייל, השיטה מייצרת False Positive גבוה ואינה אמינה.
* TLS: יצירת הצפנה בין זוג שרתי דואר, ההצפנה יכולה להיות מבוססת תעודות מאושרות בין שרתים ש"מכירים" זה את זה או תעודות Self Signed בין שרתים שאינם "מכירים"
* SPF: בניית רשומת DNS הכוללת את כתובות כל שרתי הדואר שיכולים לשלוח מייל ובכך לתת לשרת המקבל לוודא שהשרת השולח אכן מורשה לשלוח מיילים בשם הארגון.
* DKIM: חתימה דיגיטלית בעזרת מפתח פרטי השמור בשרת השולח של חלקים חשובים במייל, החתימה תיבדק בעזרת מפתח ציבורי המפורסם בעזרת רשומת DNS.
* DMARC: המלצה של הארגון השולח לארגון המקבל באיזה פעולות לנקוט כאשר מתקבל מייל שנכשל בבדיקת SPF ו/או DKIM.

=== הדגמת עבודה ב-SMTP ===

כאשר נתחבר למכונה מרוחקת, שבה מותקן שרת SMTP, היא תצפה לשורה המתחילה ב-HELO ולאחריה שם התחום של השרת שמבקש להתחבר אליה. למשל:
<syntaxhighlight lang="text">
HELO mydomain.com
</syntaxhighlight>
לאחר מכן, נשלח "MAIL FROM" וכתובת המקור של הדואר, על מנת לציין שמדובר בשליחת הודעת דואר. למשל:
<syntaxhighlight lang="text">
MAIL FROM:<romeo@bogus.net>
</syntaxhighlight>
בשלב הבא נשלח "RCPT TO" עם כתובת היעד. למשל:
<syntaxhighlight lang="text">
RCPT TO:<juliet@fakenet.com>
</syntaxhighlight>
הפקודה DATA מציינת את תחילת המידע שנשלח. שורה שתכיל נקודה בלבד תציין את סוף המידע. למשל:
<syntaxhighlight lang="text">
DATA
I`m sorry to say that I want to leave you.
.
</syntaxhighlight>
לבסוף על מנת לסיים את ההתקשרות נכתב:
<syntaxhighlight lang="text">
QUIT
</syntaxhighlight>

== ראו גם ==
* מונחים ברשת מחשבים
* מונחים בתוכנה

==קישורים חיצוניים==

קטגוריה:פרוטוקולי אינטרנט
קטגוריה:דואר אלקטרוני