برای ارسال ایمیل به افراد دیگر، بایستی یک SMTP سرور راهاندازی کرد. بعد باید مطمئن شد امکان ارسال ایمیل از طریق سرور، جز با یوزر و پسورد تعریف شده وجود ندارد و بعد از احراز هویت نیز فقط با نام کاربری خود، قادر به ارسال ایمیل است و نباید با ایمیل دیگر افراد عضو در سیستم بتواند اقدام به ارسال ایمیل کند.
همینطور باید مطمئن بود که ایمیلهای ارسالی از سروری غیر از آنها که در لیست سفید مشخص شدهاند به دست کاربر نهایی نرسد.
در حالت عادی میتوان هر ایمیلی را با هر فرستندهای که دوست داشته باشید
به هر فردی ارسال کنید. اما mail server که درست تنظیم شده باشد همچون gmail و یاهو ip ایمیل دریافتی را با رکورد spf که صاحب دامین آن را تعریف کرده، تطبیق میدهند و در صورت ناهمخوانی ایمیل مستقیم به بخش اسپم میرود و غیر از آن یک نوشته را به کاربر نمایش میدهند که احتمال فیشینگ ایمیل وجود دارد.
برای تست همه این موارد نیاز به یک SMTP سرور (برای مثال smtp.novid.ir:587) و تعریف چند کاربر ([email protected] و [email protected]) و همینطور ایجاد پسورد برای آنها داریم. ایمیلهای تست به آدرس [email protected] ارسال میشود. برای تست حالتهای مختلف از ابزار قدرتمند SWAKS استفاده خواهیم کرد.
ارسال ایمیل بدون احراز هویت
اگر SMTP سرور به درستی کانفیگ نشود، هر فردی بدون احراز هویت قادر به ارسال ایمیل از طریق آن خواهد بود. به اینگونه سرورها در اصطلاح open mail relay گفته میشود.
با استفاده از ابزار SWAKS و بدون وارد کردن یوزر و پسورد سعی در اسال ایمیل میکنیم.
در صورت موفقیت در ارسال ایمیل، انتظار این رو داشته باشید که سرور به زودی در لیست سیاه قرار خواهد گرفت و تا مدتها دیگر نخواهید توانست میل بفرستید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
novid@novid–salavan ~ $ swaks –t novid@protonmail.com –s smtp.novid.ir:587 –tls —from admin@novid.ir === Trying smtp.novid.ir:587… === Connected to smtp.novid.ir. <– 250 STARTTLS -> STARTTLS <– 220 2.0.0 Start TLS === TLS started with cipher TLSv1.2:ECDHE–RSA–AES256–GCM–SHA384:256 === TLS no local certificate set === TLS peer DN=“/CN=smtp.novid.ir” ~> EHLO novid–salavan <~ 250 AUTH PLAIN ~> MAIL FROM:<admin@novid.ir> <~* 530 5.7.1 Authentication required ~> QUIT <~ 221 2.0.0 Bye === Connection closed with remote host. |
- آپشن t یا همان to ایمیل فرد دریافت کننده است.
- s یا همان server، آیپی یا آدرس smtp سرور مد نظر است که در اینجا از طریق پورت 587 قصد وصل شدن به آن را داریم.
پورت ۲۵ رو بسیاری از دیتاسنترها بستهاند و به دلیل امن نبودن، استفاده از آن توصیه نمیشود. - با استفاده از آپشن tls، کانکشن به smtp سرور به شکل STARTTLS برقرار میشود.
- با آپشن from ایمیل فرستنده را مشخص میکنیم.
معمولا خط بالای QUIT مشکل اصلی در عدم ارسال ایمیل را میگوید.
<~* 530 5.7.1 Authentication required
تست باز یا بسته بودن پورت ۲۵ SMTP سرور
برای تست پورت ۲۵، کامند زیر را اجرا میکنیم.
به شکل پیشفرض swaks از پروتکل امن esmtp جهت اتصال به سرور استفاده میکند.
1 2 3 4 |
novid@novid–salavan ~ $ swaks –t novid@protonmail.com –s smtp.novid.ir:25 —protocol smtp —from admin@novid.ir === Trying smtp.novid.ir:25… *** Error connecting to smtp.novid.ir:25: *** IO::Socket::INET6: connect: No route to host |
که نشان میدهد دسترسی به پورت ۲۵ عملا امکانپذیر نیست.
ارسال ایمیل با احراز هویت
برای ارسال ایمیل با یوزر و پسورد کافیست که آپشن a یا همون auth رو به کامند اضافه کنیم.
بعد از زدن اینتر، یوزر و پسورد به شکل جداگانه پرسیده میشود.
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 32 33 34 |
novid@novid–salavan ~ $ swaks –t novid@protonmail.com –s smtp.novid.ir:587 —tls –a —from admin@novid.ir Username: admin@novid.ir Password: 123456 <– 250 STARTTLS -> STARTTLS <– 220 2.0.0 Start TLS === TLS started with cipher TLSv1.2:ECDHE–RSA–AES256–GCM–SHA384:256 === TLS no local certificate set === TLS peer DN=“/CN=smtp.novid.ir” ~> EHLO novid–salavan <~ 250–smtp.novid.ir <~ 250 AUTH PLAIN ~> AUTH PLAIN AGFkbWluQG5vdmlkLmlyAHJzMm5rZ3NzNQ== <~ 235 2.0.0 OK ~> MAIL FROM:<admin@novid.ir> <~ 250 2.1.0 Ok ~> RCPT TO:<novid@protonmail.com> <~ 250 2.1.5 Ok ~> DATA <~ 354 End data with <CR><LF>.<CR><LF> ~> Date: Mon, 19 Nov 2018 16:19:41 +0300 ~> To: novid@protonmail.com ~> From: admin@novid.ir ~> Subject: test Mon, 19 Nov 2018 16:19:41 +0300 ~> Message–Id: <20181119161941.016258@novid–salavan> ~> X–Mailer: swaks v20170101.0 jetmore.org/john/code/swaks/ ~> ~> This is a test mailing ~> ~> . <~ 250 2.0.0 Ok: queued as 5203E17BEA6 ~> QUIT <~ 221 2.0.0 Bye === Connection closed with remote host. |
ارسال ایمیل بدون فعالسازی tls
تست رو مجدد بدون tls انجام میدیم تا مطمئن شویم تنها راه اتصال به سرور از طریق امن امکان پذیر است.
1 2 3 4 5 6 7 8 9 10 |
novid@novid–salavan ~ $ swaks –t novid@protonmail.com –s smtp.novid.ir:587 –a —from admin@novid.ir Username: admin@novid.ir Password: 123456 === Trying smtp.novid.ir:587… === Connected to smtp.novid.ir. <– 250 STARTTLS *** Host did not advertise authentication -> QUIT <– 221 2.0.0 Bye === Connection closed with remote host. |
ارسال ایمیل با پسورد اشتباه
کامند را با پسورد اشتباه اجرا و انتظار داریم که ایمیل ارسال نشود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
novid@novid–salavan ~ $ swaks –t novid@protonmail.com –s smtp.novid.ir:587 —tls –a —from admin@novid.ir Username: admin@novid.ir Password: 123 === Trying smtp.novid.ir:587… === Connected to smtp.novid.ir. <– 250 STARTTLS -> STARTTLS <– 220 2.0.0 Start TLS === TLS started with cipher TLSv1.2:ECDHE–RSA–AES256–GCM–SHA384:256 === TLS no local certificate set <~ 250 AUTH PLAIN ~> AUTH PLAIN AGFkbWluQG5vdmlkLmlyADEyMw== <~* 535 5.7.8 Authentication credentials invalid *** No authentication type succeeded ~> QUIT *** Remote host closed connection unexpectedly. |
ارسال ایمیل با هویت یک فرد دیگر عضو سیستم
تست رو تغییر داده با یوزر و پسورد صحیح کاربر admin ایمیلی از طرف info بفرستیم.
کافیست که from رو به info تغییر داده و یوزر و پسورد admin رو وارد به ترتیب صحبح وارد نماییم.
1 2 3 4 5 6 7 8 9 10 11 |
novid@novid–salavan ~ $ swaks –t novid@protonmail.com –s smtp.novid.ir:587 —tls –a —from info@novid.ir Username: admin@novid.ir Password: 123456 <~ 235 2.0.0 OK ~> MAIL FROM:<info@novid.ir> <~ 250 2.1.0 Ok ~> RCPT TO:<novid@protonmail.com> <~* 553 5.7.1 <info@novid.ir>: Sender address rejected: not owned by user admin@novid.ir ~> QUIT <~ 221 2.0.0 Bye === Connection closed with remote host. |
ارسال ایمیل با هویت فردی که عضو سیستم نیست
در آخر از طرف فردی که در سیستم وجود ندارد سعی در ارسال ایمیل مینماییم.
1 2 3 4 5 6 7 8 9 |
novid@novid–salavan ~ $ swaks –t novid@protonmail.com –s smtp.novid.ir:587 —tls –a —from null@novid.ir Username: admin@novid.ir Password: 123456 <~ 250 2.1.0 Ok ~> RCPT TO:<novid@protonmail.com> <~* 550 5.1.0 <null@novid.ir>: Sender address rejected: User unknown in virtual mailbox table ~> QUIT <~ 221 2.0.0 Bye === Connection closed with remote host. |
پینوشت: خروجی swaks در این مثالها بخاطر حفظ IP اصلی سرور دستکاری شده است.