امروزه قدرتمند ترین Email Server های دنیا روی سیستم عامل لینوکس کار می کنند و از ابزار های قدرتمند لینوکسی در این زمینه می توان Postfix و Dovecot را نام برد. همانطور که همه می دانیم راه اندازی و نگهداری یک میل سرور یکی از امور و وظایف مهم هر ادمین و مهندس شبکه ای میباشد. سرویس postfix امکان هندل کردن ارتباطات SMTP و همچنین ارسال ایمیل برای تمامی کاربران ایجاد شده در Mail Server را فراهم می آورد.
همچنین توصیه میشود مطالعه کنید.
نحوه امنیت بخشیدن به ایمیل ها با استفاده از راه اندازی TLS و SSL در Postfix و Dovecot
آموزش نصب Amavisd، Spamassassin و آنتی ویروس Clamav
نحوه بلاک کردن ایمیل های یک دامنه خاص در postfix
نحوه نصب و راه اندازی Bind DNS Server در لینوکس
نحوه تعریف رکورد DKIM در سرور Bind
معرفی انواع رکوردهای DNS (مانند A - MX - PTR - SOA - SPF - NS - TXT - DKIM - CNAME)
سرویس dovecot نرم افزاری است که در Mail Server های لینوکسی به عنوان سرویس IMAP, POP3 مورد استفاده قرار می گیرد و ایمیل های ورودی را به mailbox کاربران را منتقل می کند. هم چنین، وظیفه ی authenticate کردن کاربران را نیز بر عهده دارد.
محیط عملیاتی ما و پیش نیازها برای پیاده سازی :
Postfix :
روی CentOS 7 به صورت پیش فرض postfix نصب میباشد و نیاز به نصب آن نیست. فقط از نصب آن مطمئن شوید و اجرای آن به هنگام boot را فعال کنید.
فایل های کانفیگ postfix در مسیر /etc/postfix قرار دارند. دو فایل اصلی main.cf و master.cf که در ابتدا از هر دوی آنها بک آپ میگیریم.
اگر چه در centos 7 روی postfix به صورت پیش فرض نام یوزر و گروه postfix برای اجرای سرویس وجود دارد، اما ما به یک user و group مجزا نیاز خواهیم داشت. به صورت تکنیکی ما میتوانیم از یوزر postfix استفاده کنیم اما توصیه نمیشود که از UID کمتر از 500 استفاده کنید. بنابراین یک یوزر و گروه جدید ایجاد میکنیم.
خطای home directory exist را نادیده بگیرید. UID و GID را به خاطر بسپارید زیرا در تنظیمات بعدی به این دو عدد نیاز خواهیم داشت. در این خروجی UID=1001 و GID=1001 میباشد.
اکنون فایل main.cf را باز کرده و مقادیر زیر را تغییر دهید.
مقدار www.example.com را با domain سرور خود جایگزین کنید. دقت کنید که به صورت پیش فرض مقدار inet_interface برابر با localhost میباشد و شما باید این خط را در فایل کامنت کنید یا اینکه برابر با all بگذارید.همچنین ما به جای mbox از فرمت Maildir استفاده میکنیم زیرا بهتر است. همچنین خط های زیر را در پایان فایل main.cf اضافه کنید. از قرار دادن UID و GID درست (با توجه به آنچه که در بالا مشاهده کردیم) مطمئن شوید.
اکنون فایل جدیدی به نام /etc/postfix/virtual_domains ایجاد کنید. این فایلی ایست که تمام دامین های شما در آن لیست خواهد شد. البته شما باید مطمئن شوید که رکوردهای MX دامین تان به ip آدرس ماشین centos اختصاص داده شده باشد.
فرمت فایل شبیه به زیر میباشد.
دایرکتوری ایمیل و ساب دایرکتوری ها را برای دامین ها ایجاد کنید و پرمیژن های مناسب را به آنها بدهید. این مسیر مکانی است که ایمیل های مربوط به همه virtual domain ها در آن ذخیره خواهند شد.
بعد از اینکه موارد بالا را انجام دادید، زمانیکه ایمیلی دریافت شود، postfix دایرکتوری های Maildir را به صورت اتوماتیک ایجاد خواهد کرد و زمانیکه هر ایمیلی به این مقصد ها ارسال یا دریافت میشوند پرمیژن های مناسب را اختصاص میدهد، در نهایت فایلی به نام /etc/postfix/vmailbox ایجاد کنید :
سپس با استفاده از یک ویرایشگر متنی مانند vim/vi یا nano تمام user های میل سرور را به فایل vmailbox اضافه کنید. همانند زیر :
نکته : مطمئن شوید که هر خط با اسلش "/" تمام شود در غیر اینصورت ایمیل ها ارسال نخواهند شد.
یوزر مجازی (Virtual User) با نام habili@domain-1.com (دقت کنید که برای این کاربر login به سرور میسر نیست و تمام کاربران به صورت ویرچوال ساخته میشوند.) ایمیل هایش به مسیر /var/mail/vhosts/domain-1.com/habili ذخیره میشوند. شما نیاز نیست که به صورت دستی ساب دایرکتوری ها را ایجاد کنید. زمانیکه همه چیز مرتب و postfix در حال اجرا باشد خودش حواسش به ایجاد ساختار maildir (دایرکتورهای cur, new, tmp) هست.
شما میتوانید آدرس catch-all را ایجاد کنید، که در بالا آنرا ایجاد کردیم این خط به postfix میگوید که ایمیل هایی که به کاربران ناموجود در آن دامین (domain-1.com) ارسال میشوند را دریافت کند. که در حقیقت به معنای انبوهی از ایمیل های اسپم میباشد. که البته این مورد توصیه نمیشود.
و اما اگر بخواهید از یوزر واقعی به نام asal در centos خود استفاده کنید چه؟ در اینجا برای اینکه بخواهیم برای این کاربر ایمیل دریافت کنیم باید او را نیز همانند یک یوزر ویرچوال در نظر بگیریم و آنرا به یک ویرچوال دامین اختصاص دهیم. این شیوه آسانتری برای نگه داری از هاست و یوزرهای ویرچوال میباشد که با فایل های کانفیگ مجزا سر و کار دارند.
ممکن است شما بخواهید که همه ای ایمیل آدرس ها (vmailbox) در فایل کانفیگ یک پیشوند hash: داشته باشند. این مورد برای سرعت بخشیدن به lookup ها مفید است. postfix میتواند برای ذخیره اکانت های ایمیل از hash: (Berkeley-DB), mySQL or PostgreSQL databases استفاده کند.
فایل virtual aliases را ایجاد و همچنین یک فایل alias لوکال بسازید.
به محض اینکه مورد بالا را انجام دادید موارد زیر را انجام دهید تا یک فایل hash شده (extentions.db) بسازید.
نکته : شما باید دستورات زیر را برای اعمال تغییرات برای هر یک از این فایل ها (virtual_domains و vmailbox) اجرا کنید.
در اینجا شما نیاز دارید سرویس postfix را برای اعمال تغییرات انجام شده restart کنید.
log فایل را بررسی کنید :
شما باید مشاهده کنید که سرویس start شده باشد. بررسی کنید که postfix در حال اجرا باشد و روی پورت 25 در حال listen باشد.
نکته : شما میتوانید postfix را با استفاده از دستورات systemctl start postfix و systemctl stop postfix استارت و stop کنید و همچنین فایل های کانفیگ را با دستور systemctl reload postfix ریلود کنید.
از دامین دیگری (gmail یا hotmail) به habili@domain-1.com ایمیل ارسال کنید و log فایل ها را مشاهده نمایید.
باید چیزی شبیه به زیر مشاهده کنید.
اگر لاگی مشاهده نکردید و مطمئن هستید که postfix روی پورت 25 در حال گوش دادن است به احتمال زیاد یک مشکل فایروالی دارید. پورت SMTP را باز کنید.
اگر شما دایرکتوری /var/mail/vhosts/domain-1/habili/new را بررسی کنید فایلی را مشاهده خواهید کرد. این ایمیل شماست که به habili ارسال کردید.
و اما اینکه چگونه این یوزر ویرچوال قادر به دریافت ایمیل خواهد بود؟ البته که یوزر برای دریافت ایمیل باید اول login کند اما با چه پسوردی؟ که در ادامه به آن خواهیم پرداخت.
Dovecot :
به منظور دریافت ایمیل ها ما dovecot را نصب و راه اندازی میکنیم. dovecot یک کلاینت open source ی برای pop و imap میباشد. ورژن 2 این سرویس دارای فایل کانفیگ های زیادی میباشد. فایل اصلی /etc/dovecot/dovecot.conf میباشد، اما شما بخش های include زیادی را در این فایل میبینید که به دایرکتوری /etc/dovecot/conf.d اشاره کرده است که در این دایرکتوری فایل های کانفیگ زیادی داریم. به صورت پیش فرض dovecot روی centos نصب نیست، پس در ابتدا آنرا با دستور زیر نصب میکنیم.
از فایل /etc/dovecot/dovecot.conf یک بک آپ میگیریم و سپس خط زیر را از کامنت در میاوریم.
سپس به دایرکتوری conf.d رفته و خط های زیر را در فایل های زیر تغییر میدهیم.
10-auth.conf
10-logging.conf
10-mail.conf
10-master.conf
10-ssl.conf
اگر فایل 10-auth.conf بررسی کنید ما خط #!include auth-system.conf.ext را کامنت کردیم و خط !include auth-passwdfile.conf.ext را از کامنت خارج کردیم. نگاه به این فایل (auth-passwdfile.conf.ext) بیندازید. همانطور که خواهید دید :
این قسمت به ما میگوید دیتابیس username/password در فایل /etc/dovecot/users میباشد. برای ایجاد کردن یک password با مکانیزم SHA512-CRYPT دستور زیر را اجرا کنید.
از شما خواسته میشود که دوباره پسورد وارد کنید و خروجی شبیه به زیر میباشد.
اکنون فایل /etc/dovecot/users را ایجاد و یا در صورت وجود داشتن باز کنید و پسوردها را بعد از username کپی و پیست کنید. در اینجا من یوزر habili@domain-1.com با پسوردی که در بالا ایجاد کردم قرار دادم، پس خطی شبیه به زیر خواهم داشت.
فراموش نکنید که 4 عدد colon "::::" بعد از پسورد قرار دهید. حتی اگر شما برای کاربران پسورد یکسان استفاده کنید آنها به صورت متفاوت encrypt خواهند شد.
مشکل این سناریو این است که کاربر نهایی قادر نخواهد بود که پسوردش را تغییر دهد. بنابراین شما باید برای آنها پسورد ایجاد و یا تغییر دهید و آنها قادر به reset پسوردشان نیستند. انواعی از اسکریپت های perl برای این داستان موجود است و حتی شما میتوانید یک نمونه اسکریپت برای خودتان بنویسید.
حالا dovecot را start کنید و اجرا شدن اتوماتیک آنرا به هنگام بوت سیستم، نیز فعال کنید و هر گونه error ی را نیز بررسی نمایید. اکنون dovecot ما باید در حال اجرا باشد و برای کانکشن های pop و imap در حال listen کردن باشد.
اکنون، سرور ایمیل مان را چک میکنیم شما باید آنرا از طریق سرور و با استفاده از telnet انجام دهید.
در مثال بالا من pop3 را تست کردم. برای تست imap همانند زیر telnet بزنید.
در صورت تمایل شما میتوانید دریافت این ایمیل ها را از یک میل کلاینت همانند outlook, operamail یا هر MUA مورد نظر دیگری تست کنید. اکنون سرور میتواند از دامین های دیگر ایمیل دریافت کند و همچنین شما میتوانید این ایمیل ها را از بیرون با استفاده از pop و imap دریافت کنید. چیزی که نیاز است این است که ما بتوانیم به این ایمیل ها پاسخ دهیم (با استفاده از کلاینت مورد نظرمان). امروزه روی اکثر provider های اصلی پورت 25 بلاک میباشد. (به طور مثال Verizon, Comcast) در نتیجه ما از SASL در postfix استفاده خواهیم کرد و از dovecot برای authenticate (اهراز هویت) کردن کاربران با استفاده از ترکیب username و password استفاده خواهیم کرد، بعلاوه ما از certificate استفاده خواهیم کرد، بنابراین به جای pop3 و imap ما از معادل امن تر آنها pop3s و imaps که به ترتیب روی پورت های 995 و 993 اجرا میشوند استفاده خواهیم کرد. در اینجا شما میتوانید 993 و 995 را باز کنید و پورت های 110 و 143 را روی فایروال ببندید. ما دیگر از این پورت ها استفاده نخواهیم کرد. (pop3 و imap)
پورت های پیش فرض SMTP/IMAP/POP3 به صورت زیر میباشد :
موفق باشید...
همچنین توصیه میشود مطالعه کنید.
نحوه امنیت بخشیدن به ایمیل ها با استفاده از راه اندازی TLS و SSL در Postfix و Dovecot
آموزش نصب Amavisd، Spamassassin و آنتی ویروس Clamav
نحوه بلاک کردن ایمیل های یک دامنه خاص در postfix
نحوه نصب و راه اندازی Bind DNS Server در لینوکس
نحوه تعریف رکورد DKIM در سرور Bind
معرفی انواع رکوردهای DNS (مانند A - MX - PTR - SOA - SPF - NS - TXT - DKIM - CNAME)
سرویس dovecot نرم افزاری است که در Mail Server های لینوکسی به عنوان سرویس IMAP, POP3 مورد استفاده قرار می گیرد و ایمیل های ورودی را به mailbox کاربران را منتقل می کند. هم چنین، وظیفه ی authenticate کردن کاربران را نیز بر عهده دارد.
محیط عملیاتی ما و پیش نیازها برای پیاده سازی :
- CentOS 7.1.1503 (fresh install)
- Kernel 3.10.0-229.4.2.e17.x86_64
- postfix 2.10.1
- dovecot 2.2.10
- amavisd-new 2.10.1
- spamassasin 3.4.0
- clamav 0.98.7
- pigeonhole 0.4.3
- create PTR record
- create mail record
- create MX record
Postfix :
روی CentOS 7 به صورت پیش فرض postfix نصب میباشد و نیاز به نصب آن نیست. فقط از نصب آن مطمئن شوید و اجرای آن به هنگام boot را فعال کنید.
کد PHP:
systemctl status postfix | grep enabled
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled)
فایل های کانفیگ postfix در مسیر /etc/postfix قرار دارند. دو فایل اصلی main.cf و master.cf که در ابتدا از هر دوی آنها بک آپ میگیریم.
کد PHP:
cd /etc/postfix
cp main.cf main.cf.ORIG
cp master.cf master.cf.ORIG
اگر چه در centos 7 روی postfix به صورت پیش فرض نام یوزر و گروه postfix برای اجرای سرویس وجود دارد، اما ما به یک user و group مجزا نیاز خواهیم داشت. به صورت تکنیکی ما میتوانیم از یوزر postfix استفاده کنیم اما توصیه نمیشود که از UID کمتر از 500 استفاده کنید. بنابراین یک یوزر و گروه جدید ایجاد میکنیم.
کد PHP:
groupadd vpostfix && useradd vpostfix -g vpostfix -s /sbin/nologin -c "Virtual postfix user" -d /var/empty
خطای home directory exist را نادیده بگیرید. UID و GID را به خاطر بسپارید زیرا در تنظیمات بعدی به این دو عدد نیاز خواهیم داشت. در این خروجی UID=1001 و GID=1001 میباشد.
کد PHP:
grep vpostfix /etc/passwd && grep vpostfix /etc/group
vpostfix:x:1001:1001:Virtual postfix user:/var/empty:/sbin/nologin
vpostfix:x:1001:
اکنون فایل main.cf را باز کرده و مقادیر زیر را تغییر دهید.
کد PHP:
myhostname = www.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
home_mailbox = Maildir/
مقدار www.example.com را با domain سرور خود جایگزین کنید. دقت کنید که به صورت پیش فرض مقدار inet_interface برابر با localhost میباشد و شما باید این خط را در فایل کامنت کنید یا اینکه برابر با all بگذارید.همچنین ما به جای mbox از فرمت Maildir استفاده میکنیم زیرا بهتر است. همچنین خط های زیر را در پایان فایل main.cf اضافه کنید. از قرار دادن UID و GID درست (با توجه به آنچه که در بالا مشاهده کردیم) مطمئن شوید.
کد PHP:
# Virtual domain config
virtual_mailbox_domains = /etc/postfix/virtual_domains
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
# Make sure you replace these UID:GID numbers
virtual_minimum_uid = 1001
virtual_uid_maps = static:1001
virtual_gid_maps = static:1001
virtual_alias_maps = hash:/etc/postfix/virtual
اکنون فایل جدیدی به نام /etc/postfix/virtual_domains ایجاد کنید. این فایلی ایست که تمام دامین های شما در آن لیست خواهد شد. البته شما باید مطمئن شوید که رکوردهای MX دامین تان به ip آدرس ماشین centos اختصاص داده شده باشد.
کد PHP:
cd /etc/postfix/
touch virtual_domains
فرمت فایل شبیه به زیر میباشد.
کد PHP:
# Put each domain in a separate line.
domain-1.com
domain-2.net
domain-3.org
دایرکتوری ایمیل و ساب دایرکتوری ها را برای دامین ها ایجاد کنید و پرمیژن های مناسب را به آنها بدهید. این مسیر مکانی است که ایمیل های مربوط به همه virtual domain ها در آن ذخیره خواهند شد.
کد PHP:
mkdir /var/mail/vhosts
chgrp -R vpostfix /var/mail
cd /var/mail/vhosts
mkdir domain-1.com
mkdir domain-2.net
mkdir domain-3.org
cd ..
chown -R vpostfix:vpostfix vhosts
بعد از اینکه موارد بالا را انجام دادید، زمانیکه ایمیلی دریافت شود، postfix دایرکتوری های Maildir را به صورت اتوماتیک ایجاد خواهد کرد و زمانیکه هر ایمیلی به این مقصد ها ارسال یا دریافت میشوند پرمیژن های مناسب را اختصاص میدهد، در نهایت فایلی به نام /etc/postfix/vmailbox ایجاد کنید :
کد PHP:
# cd /etc/postfix/
# touch vmailbox
# vim vmailbox
سپس با استفاده از یک ویرایشگر متنی مانند vim/vi یا nano تمام user های میل سرور را به فایل vmailbox اضافه کنید. همانند زیر :
کد PHP:
habili@domain-1.com domain-1.com/habili/
asal@domain-1.com domain-1.com/asal/
@domain-1.com domain-1.com/catch-all/
mohammad@domain-2.net domain-2.net/mohammad//
نکته : مطمئن شوید که هر خط با اسلش "/" تمام شود در غیر اینصورت ایمیل ها ارسال نخواهند شد.
یوزر مجازی (Virtual User) با نام habili@domain-1.com (دقت کنید که برای این کاربر login به سرور میسر نیست و تمام کاربران به صورت ویرچوال ساخته میشوند.) ایمیل هایش به مسیر /var/mail/vhosts/domain-1.com/habili ذخیره میشوند. شما نیاز نیست که به صورت دستی ساب دایرکتوری ها را ایجاد کنید. زمانیکه همه چیز مرتب و postfix در حال اجرا باشد خودش حواسش به ایجاد ساختار maildir (دایرکتورهای cur, new, tmp) هست.
شما میتوانید آدرس catch-all را ایجاد کنید، که در بالا آنرا ایجاد کردیم این خط به postfix میگوید که ایمیل هایی که به کاربران ناموجود در آن دامین (domain-1.com) ارسال میشوند را دریافت کند. که در حقیقت به معنای انبوهی از ایمیل های اسپم میباشد. که البته این مورد توصیه نمیشود.
و اما اگر بخواهید از یوزر واقعی به نام asal در centos خود استفاده کنید چه؟ در اینجا برای اینکه بخواهیم برای این کاربر ایمیل دریافت کنیم باید او را نیز همانند یک یوزر ویرچوال در نظر بگیریم و آنرا به یک ویرچوال دامین اختصاص دهیم. این شیوه آسانتری برای نگه داری از هاست و یوزرهای ویرچوال میباشد که با فایل های کانفیگ مجزا سر و کار دارند.
ممکن است شما بخواهید که همه ای ایمیل آدرس ها (vmailbox) در فایل کانفیگ یک پیشوند hash: داشته باشند. این مورد برای سرعت بخشیدن به lookup ها مفید است. postfix میتواند برای ذخیره اکانت های ایمیل از hash: (Berkeley-DB), mySQL or PostgreSQL databases استفاده کند.
فایل virtual aliases را ایجاد و همچنین یک فایل alias لوکال بسازید.
کد PHP:
touch /etc/postfix/virtual
cd /etc
postalias aliases
به محض اینکه مورد بالا را انجام دادید موارد زیر را انجام دهید تا یک فایل hash شده (extentions.db) بسازید.
نکته : شما باید دستورات زیر را برای اعمال تغییرات برای هر یک از این فایل ها (virtual_domains و vmailbox) اجرا کنید.
کد PHP:
postmap /etc/postfix/virtual_domains
postmap /etc/postfix/vmailbox
در اینجا شما نیاز دارید سرویس postfix را برای اعمال تغییرات انجام شده restart کنید.
کد PHP:
systemctl restart postfix
log فایل را بررسی کنید :
کد PHP:
tail /var/log/maillog
شما باید مشاهده کنید که سرویس start شده باشد. بررسی کنید که postfix در حال اجرا باشد و روی پورت 25 در حال listen باشد.
کد PHP:
ps -eaf | grep postfix
root 1627 1 0 Jun01 ? 00:00:00 /usr/libexec/postfix/master -w
postfix 1647 1627 0 Jun01 ? 00:00:00 qmgr -l -t unix -u
postfix 19407 1627 0 10:53 ? 00:00:00 pickup -l -t unix -u
postfix 19853 1627 0 12:05 ? 00:00:00 smtpd -n smtp -t inet -u -s 2
postfix 19854 1627 0 12:05 ? 00:00:00 proxymap -t unix -u
root 19862 19748 0 12:06 pts/0 00:00:00 grep --color=auto postfix
ss -l | grep smtp
u_str LISTEN 0 100 private/smtp 14560 * 0
tcp LISTEN 0 100 127.0.0.1:smtp *:*
tcp LISTEN 0 100 ::1:smtp
نکته : شما میتوانید postfix را با استفاده از دستورات systemctl start postfix و systemctl stop postfix استارت و stop کنید و همچنین فایل های کانفیگ را با دستور systemctl reload postfix ریلود کنید.
از دامین دیگری (gmail یا hotmail) به habili@domain-1.com ایمیل ارسال کنید و log فایل ها را مشاهده نمایید.
کد PHP:
tail -f /var/log/maillog
باید چیزی شبیه به زیر مشاهده کنید.
اگر لاگی مشاهده نکردید و مطمئن هستید که postfix روی پورت 25 در حال گوش دادن است به احتمال زیاد یک مشکل فایروالی دارید. پورت SMTP را باز کنید.
کد PHP:
firewall-cmd --add-service=smtp --permanent
success
firewall-cmd --reload
success
اگر شما دایرکتوری /var/mail/vhosts/domain-1/habili/new را بررسی کنید فایلی را مشاهده خواهید کرد. این ایمیل شماست که به habili ارسال کردید.
و اما اینکه چگونه این یوزر ویرچوال قادر به دریافت ایمیل خواهد بود؟ البته که یوزر برای دریافت ایمیل باید اول login کند اما با چه پسوردی؟ که در ادامه به آن خواهیم پرداخت.
Dovecot :
به منظور دریافت ایمیل ها ما dovecot را نصب و راه اندازی میکنیم. dovecot یک کلاینت open source ی برای pop و imap میباشد. ورژن 2 این سرویس دارای فایل کانفیگ های زیادی میباشد. فایل اصلی /etc/dovecot/dovecot.conf میباشد، اما شما بخش های include زیادی را در این فایل میبینید که به دایرکتوری /etc/dovecot/conf.d اشاره کرده است که در این دایرکتوری فایل های کانفیگ زیادی داریم. به صورت پیش فرض dovecot روی centos نصب نیست، پس در ابتدا آنرا با دستور زیر نصب میکنیم.
کد PHP:
yum install dovecot
از فایل /etc/dovecot/dovecot.conf یک بک آپ میگیریم و سپس خط زیر را از کامنت در میاوریم.
کد PHP:
protocols = imap pop3 lmtp
10-auth.conf
کد PHP:
disable_plaintext_auth = no
#!include auth-system.conf.ext
!include auth-passwdfile.conf.ext
10-logging.conf
کد PHP:
log_path = /var/log/dovecot.log
auth_verbose = no
auth_debug = no
verbose_ssl = no
10-mail.conf
کد PHP:
mail_home = /var/mail/vhosts/%d/%n
mail_location = maildir:~
mail_uid = 1001 # These are the GID and UID numbers for postfix
mail_gid = 1001 # Don't just put random numbers here. Check above.
mail_privileged_group = vpostfix
10-master.conf
کد PHP:
unix_listener auth-userdb {
mode = 0600
user = vpostfix
group = vpostfix
}
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = vpostfix
group = vpostfix
}
10-ssl.conf
کد PHP:
ssl = no
# ssl_cert = </etc/ssl/certs/dovecot.pem
# ssl_key = </etc/ssl/private/dovecot.pem
اگر فایل 10-auth.conf بررسی کنید ما خط #!include auth-system.conf.ext را کامنت کردیم و خط !include auth-passwdfile.conf.ext را از کامنت خارج کردیم. نگاه به این فایل (auth-passwdfile.conf.ext) بیندازید. همانطور که خواهید دید :
کد PHP:
passdb {
driver = passwd-file
args = scheme=CRYPT username_format=%u /etc/dovecot/users
}
userdb {
driver = passwd-file
args = username_format=%u /etc/dovecot/users
}
این قسمت به ما میگوید دیتابیس username/password در فایل /etc/dovecot/users میباشد. برای ایجاد کردن یک password با مکانیزم SHA512-CRYPT دستور زیر را اجرا کنید.
کد PHP:
doveadm pw -s SHA512-CRYPT
از شما خواسته میشود که دوباره پسورد وارد کنید و خروجی شبیه به زیر میباشد.
کد PHP:
# doveadm pw -s SHA512-CRYPT
Enter new password:
Retype new password:
{SHA512-CRYPT}$6$zrIRwPLVuk54nyVb$F69mK51tsSospb4LK.W3mP4Eye/kWm5A6kEZ1fzXAS66JYO.7nuNeW3v2KaI.lQYGfMWAu1L.DGoqMJopgI7H/
اکنون فایل /etc/dovecot/users را ایجاد و یا در صورت وجود داشتن باز کنید و پسوردها را بعد از username کپی و پیست کنید. در اینجا من یوزر habili@domain-1.com با پسوردی که در بالا ایجاد کردم قرار دادم، پس خطی شبیه به زیر خواهم داشت.
کد PHP:
habili@domain-1.com:{SHA512-CRYPT}$6$msw7wKnnk68yYotS$/9TBd1rnJY3WxnST9CWrCh/pHKn1FxwV6mIDacYKiKQCLh7ehEqVOvA71vKKsHU8fNN83cD4hobBT3RbbQ5nm1::::::
فراموش نکنید که 4 عدد colon "::::" بعد از پسورد قرار دهید. حتی اگر شما برای کاربران پسورد یکسان استفاده کنید آنها به صورت متفاوت encrypt خواهند شد.
مشکل این سناریو این است که کاربر نهایی قادر نخواهد بود که پسوردش را تغییر دهد. بنابراین شما باید برای آنها پسورد ایجاد و یا تغییر دهید و آنها قادر به reset پسوردشان نیستند. انواعی از اسکریپت های perl برای این داستان موجود است و حتی شما میتوانید یک نمونه اسکریپت برای خودتان بنویسید.
حالا dovecot را start کنید و اجرا شدن اتوماتیک آنرا به هنگام بوت سیستم، نیز فعال کنید و هر گونه error ی را نیز بررسی نمایید. اکنون dovecot ما باید در حال اجرا باشد و برای کانکشن های pop و imap در حال listen کردن باشد.
کد PHP:
systemctl start dovecot
systemctl enable dovecot
tail /var/log/dovecot.log
ss -l | grep pop3
ss -l | grep imap
کد PHP:
telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user habili@domain-1.com
+OK
pass topsecret
+OK Logged in.
stat
+OK 2 2037
list
+OK 2 messages:
1 1027
2 1010
.
quit
+OK Logging out.
Connection closed by foreign host.
در مثال بالا من pop3 را تست کردم. برای تست imap همانند زیر telnet بزنید.
کد PHP:
telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN] Dovecot ready.
? login habili@domain-1.com topsecret
? OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE BINARY MOVE] Logged in
? list "" "*"
* LIST (\HasNoChildren) "." INBOX
? OK List completed.
? logout
* BYE Logging out
? OK Logout completed.
Connection closed by foreign host.
در صورت تمایل شما میتوانید دریافت این ایمیل ها را از یک میل کلاینت همانند outlook, operamail یا هر MUA مورد نظر دیگری تست کنید. اکنون سرور میتواند از دامین های دیگر ایمیل دریافت کند و همچنین شما میتوانید این ایمیل ها را از بیرون با استفاده از pop و imap دریافت کنید. چیزی که نیاز است این است که ما بتوانیم به این ایمیل ها پاسخ دهیم (با استفاده از کلاینت مورد نظرمان). امروزه روی اکثر provider های اصلی پورت 25 بلاک میباشد. (به طور مثال Verizon, Comcast) در نتیجه ما از SASL در postfix استفاده خواهیم کرد و از dovecot برای authenticate (اهراز هویت) کردن کاربران با استفاده از ترکیب username و password استفاده خواهیم کرد، بعلاوه ما از certificate استفاده خواهیم کرد، بنابراین به جای pop3 و imap ما از معادل امن تر آنها pop3s و imaps که به ترتیب روی پورت های 995 و 993 اجرا میشوند استفاده خواهیم کرد. در اینجا شما میتوانید 993 و 995 را باز کنید و پورت های 110 و 143 را روی فایروال ببندید. ما دیگر از این پورت ها استفاده نخواهیم کرد. (pop3 و imap)
پورت های پیش فرض SMTP/IMAP/POP3 به صورت زیر میباشد :
موفق باشید...
کامنت