اصولاً بعد از نصب یک mail server باید آن را به صورتremote تست کرد. اما وقتی صحبت از SSL/TLS به میدان میآید کار کمی مشکل میشود. از طرفی ایمیل آدرس شما به صورت کد در میآید و باید این مشکل را قبل از هر چیز رفع کرد.فرض کنید ایمیل آدرسی از همین سایت به آدرس [email protected] با کلمه عبور 123654 وجود دارد . برای کد کردن آن نیاز داریم از خط زیر در command line استفاده نماییم:
1 2 |
# perl -MMIME::Base64 -e 'print encode_base64("\000mohsen\@chpert.net\000123654")' AG1vaHNlbkBjaHBlcnQubmV0ADEyMzY1NA== |
همانطور که میبینید، M- به perl میگوید که چه ماژولی را لود کند. اینجا از ماژول MIME::Base64 استفاده کردهایم. e- یک تکه کد perl را اجرا میکند. print عملکردش همانند php و python است.
تابع encode_base64 رشته مورد نظر را به base64 کد میکند.
نکته: چه قبل از ایمیل آدرس و چه قبل از کلمه عبور باید 000\ گذاشته شود. همچنین قبل از @ باید یک \ گذاشته شود.
در نهایت یک خروجی مبنی بر اینکه این رشته در base64 چه میشود تحویل میگیریم.
نکته: رشته تولید شده را حفظ نمایید که جلوتر به عنوان رشته Authentication شما مورد استفاده قرار میگیرد.
در خطوط پایین شروع به کار میکنیم، موضوع اینجاست که شما خود میدانید پورت SSL یا TLS خود چند است و با دستور telnet شروع به کار میکنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
root@debian:/home/mohsen# telnet us.royaserver.com 25 Trying 198.23.143.231... Connected to us.royaserver.com. Escape character is '^]'. 220-us.royaserver.com ESMTP Exim 4.85 #2 Tue, 21 Jul 2015 04:01:42 +0430 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail. ehlo chpert.net 250-us.royaserver.com Hello chpert.net [5.114.190.3] 250-SIZE 52428800 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN LOGIN 250-STARTTLS 250 HELP AUTH PLAIN AG1vaHNlbkBjaHBlcnQubmV0ADEyMzY1NA== 235 Authentication succeeded 250 OK 250 Accepted DATA 354 Enter message, ending with "." on a line by itself . 250 OK id=1ZHKYC-0006Nz-8x ^] telnet> quit Connection closed. root@debian:/home/mohsen# |
تحلیل فرمانهای بالا: در خط اول یک خط ارتباطی با پورت host و port مربوطه که socket نامیده میشود ایجاد میکنیم.
همه چی انجام میشود تا سر خط ۸ که منتظر دریافت فرمان میشود.
فرق فرمان ehlo با helo: همانطور که میدانید client و server به فرمانی نیاز دارند تا همدیگر را شناسایی کنند. از این رو در پروتکل SMTP فرمان helo در RFC 821 گنجانده شد. ولی برای RFC 2821 که به عنوان ESMTP شناسایی میشود و پروتکلهایی همچون TLS پشتیبانی میشوند فرمان helo نمیتواند کار کند. به دو خروجی زیر دقت نمایید تا بیشتر عمیق شوید:
1 2 3 4 5 6 7 8 9 |
root@debian:/home/mohsen# telnet us.royaserver.com 25 Trying 198.23.143.231... Connected to us.royaserver.com. Escape character is '^]'. 220-us.royaserver.com ESMTP Exim 4.85 #2 Wed, 22 Jul 2015 03:16:23 +0430 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail. helo chpert.net 250 us.royaserver.com Hello chpert.net [5.112.19.111] |
فرمان ehlo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
root@debian:/home/mohsen# telnet us.royaserver.com 25 Trying 198.23.143.231... Connected to us.royaserver.com. Escape character is '^]'. 220-us.royaserver.com ESMTP Exim 4.85 #2 Wed, 22 Jul 2015 03:18:01 +0430 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail. ehlo chpert.net 250-us.royaserver.com Hello chpert.net [5.112.19.111] 250-SIZE 52428800 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN LOGIN 250-STARTTLS 250 HELP |
نکته: اگر از SSL یا TLS استفاده میکنید باید از ehlo استفاده نمایید.
بعد از فرمان ehlo که به نوعی greeting محسوب میشود نوبت به Authentication میرسد. بدین منظور با ehlo تست میشود که آیا نوع Authentication شما از طرف سرور پشتیبانی میشود یا خیر. اگر به خط ۱۳ دقت کنید میبینید که فرمان AUTH پشتیبانی میشود.
خط ۱۵ که تمام شد در خط ۱۶ منتظر دریافت فرمان از شما میباشد، که شما باید آن رشتهای که در بالا تولید کردیم به همراه فرمان AUTH PLAIN وارد نمایید. خط ۱۷ نتیجه authenticate شدن شما میباشد.
از اینجا به بعد باید فرستادن ایمیل را شروع کنیم. اولین فرمان در خط ۱۸ وارد شده است. فرمان mail from: به SMTP میگوید که این ایمیل از کجا ارسال شود.
نکته: دامنه این ایمیل را بر مبنای همان host ارسال نمایید. زیرا شما SPAM شناخته خواهید شد.
فرمان بعدی در خط ۲۰ با rcpt to: مشخص شده است. این فرمان به SMTP میگوید که به چه ایمیل آدرسی ارسال شود.
نکتهای که در فرمان بعدی خیلی حائز اهمیت میباشد میتواند امتیاز SPAM شما را بالا ببرد. فرمان DATA در خط ۲۲ به SMTP میگوید که شما میخواهید یکسری فیلد و body ایمیل را مشخص نمایید. در نهایت برای پایان کار باید در یک خط جدید یک DOT گذاشته تا SMTP بفهمد کار شما تمام شده تا ایمیل را ارسال نماید. در مثال بالا فیلدها را پر نکردیم و یک مثال عادی و خطرناک بود.
خروجی ایمیل رسیده بالا به صورت زیر میشود:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
From - Tue Jul 21 04:03:25 2015 X-Account-Key: account1 X-UIDL: UID30462-1373114068 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 X-Mozilla-Keys: Envelope-to: [email protected] Delivery-date: Tue, 21 Jul 2015 04:02:55 +0430 Received: from [5.114.190.3] (port=1079 helo=chpert.net) by us.royaserver.com with esmtpa (Exim 4.85) id 1ZHKYC-0006Nz-8x |
نکته: در پروتکلهای mail تمام فیلدهایی که با -X شروع میشوند اختیاری هستند و برای خود پروتکل اهمیت ندارند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
root@debian:/home/mohsen# telnet us.royaserver.com 25 Trying 198.23.143.231... Connected to us.royaserver.com. Escape character is '^]'. 220-us.royaserver.com ESMTP Exim 4.85 #2 Tue, 21 Jul 2015 04:01:42 +0430 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail. ehlo chpert.net 250-us.royaserver.com Hello chpert.net [5.114.190.3] 250-SIZE 52428800 250-8BITMIME 250-PIPELINING 250-AUTH PLAIN LOGIN 250-STARTTLS 250 HELP AUTH PLAIN AG1vaHNlbkBjaHBlcnQubmV0ADEyMzY1NA== 235 Authentication succeeded 250 OK 250 Accepted data 354 Enter message, ending with "." on a line by itself From: [email protected] Subject: This is a ssl auth test it's body . 250 OK id=1ZHK5E-0002vY-OO |
تحلیل فرمانهای بالا: هیچ تفاوتی تا سر خط ۲۲ که فرمان data باشد وجود ندارد حتی خود data هم تفاوتی ندارد. اما بعد از آن ۳ فیلد From ، To و Subject پر شدهاند که بلافاصله بدنه ایمیل آمده و طبق پروتکل SMTP باید با DOT خاتمه پذیرد.
خروجی ایمیل رسیده بالا همانند زیر میباشد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
From - Tue Jul 21 03:41:36 2015 X-Account-Key: account1 X-UIDL: UID30461-1373114068 X-Mozilla-Status: 0001 X-Mozilla-Status2: 00000000 X-Mozilla-Keys: Envelope-to: [email protected] Delivery-date: Tue, 21 Jul 2015 03:33:44 +0430 Received: from [5.114.190.3] (port=1435 helo=chpert.net) by us.royaserver.com with esmtpa (Exim 4.85) id 1ZHK5E-0002vY-OO From: [email protected] Subject: This is a ssl auth test it's body |
نکته: به تمام id های برگشته در telnet و سورس ایمیلها دقت فرمایید.