باید برای شرکت یک میل سرور با دامین شرکت راه اندازی میکردم. پروژه docker-mailserver رو پیدا کردم که همه ابزارهای مورد نیاز یک میل سرور رو داکرایز کرده. این سرور ایمیل شامل اجزایی مانند SMTP، IMAP، LDAP، Antispam و Antivirus است. هدف اصلی این پروژه سادگی و قابلیت استقرار و بروزرسانی آسان است.
برای راه اندازیش فایل docker-compose.yaml رو دریافت میکنید و برای خودتون تنظیمش میکنید و با زدن دستور docker copmose up میل سرور بالا میاد. هنگام بالا اومدن میل سرور بهت ۱۲۰ ثانیه وقت میده که اولین یوزر ایمیل رو بسازی که با دستور زیر میتونیم انجامش بدیم.
docker exec -it <container name> setup email add test@example.com
حالا باید رکورد های MX و A رو توی dns server وارد کنید. من از cloadflare استفاده میکنم که مراحلش اینطوری هست:
میل سرور آماده هست. حالا با یک کلاینت ایمیل مثل outlook یا thunderbird میتونید بهش وصل بشید.
اما مشکلات از اینجا شروع میشه که یوزرها بخواهند به میل سرورهای معروف مثل gmail ایمیل بفرستند.
اگر ریکورد PTR توی dns server نساخته باشید gmail پیام هاتون رو قبول نمیکنه که این رو توی report undeliver به یوزر میگه.
رکورد PTR در DNS یک رکورد معکوس است که یک آدرس IP را به یک نام دامنه مرتبط می کند. به عبارت دیگر، برعکس رکوردهای A که یک نام دامنه را به یک آدرس IP مرتبط می کنند.
این رکورد در امنیت ایمیل کاربرد دارد و کمک می کند تا از اسپم جلوگیری شود.
خب این ساده هست و ریکورد رو میسازیم.
مشکل بعدی اینه که gmail از میل سرورهای غیر معتبر ایمیل قبول نمیکنه. یا ایمیل ها رو به spam میفرسته. اینجا باید DKIM و SPF و DMARC رو فعال کنیم.
پروتکلهای DKIM، SFP و DMARC برای احراز هویت ایمیل و جلوگیری از حملات فیشینگ و اسپم استفاده میشوند.
در یک جمله، DKIM و SFP از ایمیلهای جعلی جلوگیری میکنند و DMARC به سرور گیرنده میگوید که در صورت جعل ایمیل، چه کاری باید انجام دهد.
کلی مقاله خوب فارسی هست به خوبی توضیح دادند. مثل این : تایید اعتبار ایمیل با DKIM, SPF و DMARC و جلوگیری از حملات فیشینگ
اول environmentهای زیر رو توی فایل docker-composeمون قرار میدیم.
environment: - ENABLEDKIM=true - ENABLESPF=true - ENABLEDMARC=true
برای تولید کلیدهای رمزنگاری DKIM دستور زیر رو میزنیم
docker exec -it <container name> setup config dkim keysize 2048 domain 'example.com' docker restart <container name>
اگر مسیرهای mount رو در فایل docker-compose.yaml رو تغییر نداده باشید باید این فایل تولید شده باشد که بازش میکنیم.
./docker-data/dms/config/opendkim/keys/example.com/mail.txt
اگه میل سرورتون mail.example.com باشه محتویاتش شبیه این هست که باید در dns server قرارش بدیم
mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; " "p=BIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArgMs5e28HH9iditeX0ExTqOD2F7zA0mx+J8wPJVRm7u/akdtUfuCJUdA6Oa3YH0EfOIq0VnrWgQtadVV/cc/IKdvE1WW6FHjSTf9rYFCVyddkgLHGW99T//8Zg2F6K6jEUo+WPQWTnXW6EjQ6+393HrUy+QPn6WseMjzFZZkCSEBj2q/Fom1LU53mpog+LNqPwBDTnxKFnskCd" "kBvs3Ab9r4MsV7MV5wKXvdwP8pIemR439nzR3bp6g4HEE/LY6M3OFpAzcqARbE7vV5lmB1QAhYJjPxdR/V3jlOyXFzqs547ecEjbzXCXkYYkbHpmTEZ0bENVbnLJ25NNSkM8FqWGcrhEmWA8Omg0cd7CKv+OC5BtIbZVv5s7ObIrAV527/6kvtoo5UrVgFuVt3PwyEdFF3POFEhUGTuU1EAh2Vodt+DqB9keMX6Ns0uZm3Vps8BaXirHXg" "nxmLoa0+bB+G75M5KGbbJtdjEkuvE5JoS6NYFgdo98FfWIsX9EwoUXamVqZUOiYZX9qdLAJU5T4JGMWQd3Sv7UITovOU9/dJqwaPOTZJdpEngPMFt2B14dK4R9hGYdyRLDjD0OH56rXRK4cjpdQK7NdlEbzn/DguryRZqfpt4X0/xXNbNVcLlXN8CFtJc3mHsg0nhgUiSKKH+T8+6wB4xrbgaQjwkV+hSMECAwEAVQ==" ) ; ----- DKIM key mail for example.com
اگه از کلودفلر استفاده میکنید باید یک ریکورد TXT به نام mail._domainkey بسازید و در قسمت content محتویات فایل بالا رو به صورت زیر بگذارید:
p=BIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArgMs5e28HH9iditeX0ExTqOD2F7zA0mx+J8wPJVRm7u/akdtUfuCJUdA6Oa3YH0EfOIq0VnrWgQtadVV/cc/IKdvE1WW6FHjSTf9rYFCVyddkgLHGW99T//8Zg2F6K6jEUo+WPQWTnXW6EjQ6+393HrUy+QPn6WseMjzFZZkCSEBj2q/Fom1LU53mpog+LNqPwBDTnxKFnskCdkBvs3Ab9r4MsV7MV5wKXvdwP8pIemR439nzR3bp6g4HEE/LY6M3OFpAzcqARbE7vV5lmB1QAhYJjPxdR/V3jlOyXFzqs547ecEjbzXCXkYYkbHpmTEZ0bENVbnLJ25NNSkM8FqWGcrhEmWA8Omg0cd7CKv+OC5BtIbZVv5s7ObIrAV527/6kvtoo5UrVgFuVt3PwyEdFF3POFEhUGTuU1EAh2Vodt+DqB9keMX6Ns0uZm3Vps8BaXirHXgnxmLoa0+bB+G75M5KGbbJtdjEkuvE5JoS6NYFgdo98FfWIsX9EwoUXamVqZUOiYZX9qdLAJU5T4JGMWQd3Sv7UITovOU9/dJqwaPOTZJdpEngPMFt2B14dK4R9hGYdyRLDjD0OH56rXRK4cjpdQK7NdlEbzn/DguryRZqfpt4X0/xXNbNVcLlXN8CFtJc3mHsg0nhgUiSKKH+T8+6wB4xrbgaQjwkV+hSMECAwEAVQ==
بعد از ذخیره کردن و گذشت مدت زمان مورد نیاز برای آپدیت dns serverها از طریق ابزار DKIM Record Checker میتونیم چک کنیم که رکورد ساخته شده معتبر هست یا نه.
برای فعال کردن SPF، رکورد TXT زیر را به سرور DNS اضافه میکنید که نامش میشه دامنه شما مثلا example.com .
v=spf1 mx ~all
برای فعال کردن DMARC یک ریکورد TXT دیگه درست میکنیم
name: _dmarc
content:
v=DMARC1; p=none; rua=mailto:dmarc.report@example.com; ruf=mailto:dmarc.report@example.com; sp=none; ri=86400
بعد از ذخیره کردن و گذشت مدت زمان مورد نیاز برای آپدیت dns serverها از طریق ابزار DMARC Analyzer میتونیم چک کنیم که رکورد ساخته شده معتبر هست یا نه.
توضیحات اینکه هرکدوم از اون تگ های DMARC چی هست توی همون مقاله بالا گفته شده.
من قبلا با میل سرور کار نکردم. به مرور با توجه به مشکلاتی که بهش بر میخورم این مقاله آپدیت میکنم. چند تا لینک خوب هم که به کار من آمد رو اینجا میگذارم.
https://docker-mailserver.github.io/docker-mailserver/edge
http://www.freekb.net/Articles?tag=Docker%20Mailserver%20(Email)
https://www.heeney.ie/2022/09/20/how-to-set-up-mail-server-using-docker<br/>