آرمان بیکیان
آرمان بیکیان
خواندن ۴ دقیقه·۱ سال پیش

راه اندازی میل سرور با Docker-mailserver

باید برای شرکت یک میل سرور با دامین شرکت راه اندازی میکردم. پروژه ‌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 استفاده میکنم که مراحلش اینطوری هست:

  • وارد حساب کاربری کلودفلیر خود شوید و دامنه مورد نظر را انتخاب کنید.
    به بخش DNS بروید.
  • یک رکورد A یا AAAA برای زیردامنه ایمیل خود اضافه کنید:
    نوع رکورد A یا AAAA را انتخاب کنید، بستگی به این دارد که آدرس IP شما برای سرور ایمیل IPv4 یا IPv6 باشد.
    نام زیردامنه ایمیل خود را (مانند "mail") در فیلد نام وارد کنید.
    آدرس IP سرور ایمیل خود را در فیلد آدرس IPv4 یا IPv6 وارد کنید.
    روی دکمه ذخیره کلیک کنید.
  • یک رکورد MX اضافه کنید:
    نوع رکورد MX را انتخاب کنید.
    نام زیردامنه ایمیل خود را (مانند "mail") در فیلد نام وارد کنید.
    نام سرور ایمیل خود را (مانند "mail.example.com") در فیلد سرور ایمیل وارد کنید.
    (زمان به زندگی) TTL را به مقدار مورد نظر تنظیم کنید.
    روی دکمه ذخیره کلیک کنید.

میل سرور آماده هست. حالا با یک کلاینت ایمیل مثل outlook یا thunderbird میتونید بهش وصل بشید.


اما مشکلات از اینجا شروع میشه که یوزرها بخواهند به میل سرورهای معروف مثل gmail ایمیل بفرستند.

اگر ریکورد PTR توی dns server نساخته باشید gmail پیام هاتون رو قبول نمیکنه که این رو توی report undeliver به یوزر میگه.

رکورد PTR در DNS یک رکورد معکوس است که یک آدرس IP را به یک نام دامنه مرتبط می کند. به عبارت دیگر، برعکس رکوردهای A که یک نام دامنه را به یک آدرس IP مرتبط می کنند.
این رکورد در امنیت ایمیل کاربرد دارد و کمک می کند تا از اسپم جلوگیری شود.
خب این ساده هست و ریکورد رو میسازیم.

مشکل بعدی اینه که gmail از میل سرورهای غیر معتبر ایمیل قبول نمیکنه. یا ایمیل ها رو به spam میفرسته. اینجا باید DKIM و SPF و DMARC رو فعال کنیم.

پروتکل‌های DKIM، SFP و DMARC برای احراز هویت ایمیل و جلوگیری از حملات فیشینگ و اسپم استفاده می‌شوند.

  • پروتکل‌DKIM (DomainKeys Identified Mail) یک امضای دیجیتال به ایمیل اضافه می‌کند تا سرور گیرنده بتواند مطمئن شود که ایمیل از دامنه ادعا شده ارسال شده است.
  • پروتکل‌SFP (Sender Policy Framework) یک لیست سرورهای مجاز برای ارسال ایمیل از یک دامنه خاص را تعریف می‌کند.
  • پروتکل‌DMARC (Domain-based Message Authentication, Reporting and Conformance) از DKIM و SFP برای احراز هویت ایمیل استفاده می‌کند و به سرور گیرنده می‌گوید که در صورت عدم موفقیت در احراز هویت، چه کاری باید انجام دهد.

در یک جمله، 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 ( &quotv=DKIM1; h=sha256; k=rsa; &quot &quotp=BIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArgMs5e28HH9iditeX0ExTqOD2F7zA0mx+J8wPJVRm7u/akdtUfuCJUdA6Oa3YH0EfOIq0VnrWgQtadVV/cc/IKdvE1WW6FHjSTf9rYFCVyddkgLHGW99T//8Zg2F6K6jEUo+WPQWTnXW6EjQ6+393HrUy+QPn6WseMjzFZZkCSEBj2q/Fom1LU53mpog+LNqPwBDTnxKFnskCd&quot &quotkBvs3Ab9r4MsV7MV5wKXvdwP8pIemR439nzR3bp6g4HEE/LY6M3OFpAzcqARbE7vV5lmB1QAhYJjPxdR/V3jlOyXFzqs547ecEjbzXCXkYYkbHpmTEZ0bENVbnLJ25NNSkM8FqWGcrhEmWA8Omg0cd7CKv+OC5BtIbZVv5s7ObIrAV527/6kvtoo5UrVgFuVt3PwyEdFF3POFEhUGTuU1EAh2Vodt+DqB9keMX6Ns0uZm3Vps8BaXirHXg&quot &quotnxmLoa0+bB+G75M5KGbbJtdjEkuvE5JoS6NYFgdo98FfWIsX9EwoUXamVqZUOiYZX9qdLAJU5T4JGMWQd3Sv7UITovOU9/dJqwaPOTZJdpEngPMFt2B14dK4R9hGYdyRLDjD0OH56rXRK4cjpdQK7NdlEbzn/DguryRZqfpt4X0/xXNbNVcLlXN8CFtJc3mHsg0nhgUiSKKH+T8+6wB4xrbgaQjwkV+hSMECAwEAVQ==&quot ) ; ----- 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/>

dockermail serverCloudFlare
شاید از این پست‌ها خوشتان بیاید