در مقاله قبلی ما نحوه راه اندازی یک Mail Server لینوکسی را به شما آموزش دادیم، در این پست قصد داریم نحوه نصب و راه اندازی پروتکل TLS در Postfix و SSL در Dovecot را شرح دهیم. دو پروتکل SSL و TLS با هدف امن کردن ارتباطات مابین کلاینت و سرور طراحی و پیادهسازی شده اند. این پروتوکل ها از طریق اهراز هویت و رمزنگاری ارتباطات را امن کرده و در این راستا به جهت امن کردن دادهها از cipher suite ها استفاده میکنند. هر cipher suite مجموعه ای از الگوریتمهای authority, encryption و Message Authority Code یا (MAC) است. در پیاده سازی و کانفیگ TLS/SSL تنظیمات باید کاملا درست انجام شده و cipher suite های امنی مورد استفاده قرار گیرد. این دو پروتوکل را روی انواع سرورها مورد استفاده قرار می دهند. از جمله سرورهایی که این دو پروتوکل نقش مهمی در آنها ایفا می کنند postfix و dovecot است.
همچنین توصیه میشود مطالعه کنید.
آموزش نصب و راه اندازی Mail Server لینوکسی با Postfix و Dovecot
آموزش نصب Amavisd، Spamassassin و آنتی ویروس Clamav
Postfix و TLS
فایل /etc/postfix/main.cf را ویرایش کنید و خطوط زیر را به انتهای آن اضافه کنید.
نکته : در postfix v 2.10 خط آخر مورد نیاز میباشد.
سپس، فایل /etc/postfix/master.cf را ویرایش کنید و comment ها را از بخش submission حذف کنید.
بعد از تغییرات سرویس postfix را restart کنید.
برای کسب اطلاعات بیشتر که این مقدار به چه معنا است، لینک هایی که در آخر این پست ذکر شده را بررسی کنید.
اگر شما دستور زیر را اجرا کنید :
متوجه خواهید شد که postfix نیز در حال listen کردن روی پورت 587 میباشد. در صورتی که در فایروال تان این پورت فعال نیست آنرا به فایروال اضافه کنید، اما پورت 25 را نبندید. این پورت برای ارتباط بین سرورها استفاده میشود.
اگر شما دستور telnet localhost 587 را اجرا کنید و EHLO something.com را تایپ کنید شما مشاهده میکنید که postfix با STARTTLS پاسخ میدهد.
برای خارج شدن CTRL-] را فشار دهید و سپس quit را تایپ کنید.
Dovecot و SSL
فایل 10-auth.conf را ویرایش و خط زیر را به yes تغییر دهید.
سپس فایل 10-ssl.conf را ویرایش و همانند زیر تغییر دهید.
ما از certificate های self-signed استفاده خواهیم کرد، اما میتوانید این سایت http://www.startssl.com/ را برای certificate های رایگان بررسی کنید. گواهینامه های self-signed جعلی هستند، بنابراین زمانیکه قصد دارید ایمیلی send/recive کنید، از شما برای پذیرفتن یک certificate جعلی، سوال پرسیده میشود اما هدف این است که به شما نشان دهیم چطور از آنها استفاده کنید.
بر خلاف دامین های virtual آپاچی، شما برای هر یک از virtual domain ها به چندین certificate نیاز نخواهید داشت.
به برخی سوالات برای دریافت certificate پاسخ دهید.
certificate را امضاء کنید.
فایل های certificate باید در مسیر /etc/postfix باشند. postfix و dovecot را restart کنید.
شما میتوانید SMTP SSL/TLS را روی پورت 587 تست کنید.
سپس ehlo something.com را تایپ کنید، Enter را فشار دهید و سپس mail from:habili@domain-1.com را تایپ کنید. اگر تمام مراحل به درستی کار کنند شما تا اینجای کار درست پیش رفته اید. برای تست SASL در postfix و dovecot تایپ کنید :
اگر بخواهید میتوانید در فایروال IMAP و POP3 را همانند زیر باز کنید.
در اینجا شما باید قادر به ارسال ایمیل از MUA مورد علاقه خود باشید اما برای ارسال و دریافت شما بایست یکسری تغییرات اعمال کنید. برای مثال در Outlook شما باید تغییرات زیر را اعمال کنید.
بنابراین در اینجا نیازی به پورت های 110 و 143 نداریم و به جای آنها باید از 995 برای POP3 و 587 برای SMTP و 993 برای IMAP استفاده کنید. username آدرس ایمیل شما و password رمز عبوریست که شما با استفاده از دستور doveadm pw ایجاد کردید.
دقت کنید که اگر شما میخواهید یک کلاینت web مانند Roundcube استفاده کنید و Roundcube روی همان سروری که postfix و dovecot هستند نصب باشد نیازی ندارید که هیچ پورتی غیر از 25 را باز کنید.
همچنین توصیه میشود مطالعه کنید.
آموزش نصب و راه اندازی Mail Server لینوکسی با Postfix و Dovecot
آموزش نصب Amavisd، Spamassassin و آنتی ویروس Clamav
Postfix و TLS
فایل /etc/postfix/main.cf را ویرایش کنید و خطوط زیر را به انتهای آن اضافه کنید.
کد PHP:
# TLS
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/myserver.key
smtpd_tls_cert_file = /etc/postfix/server.crt
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
# SASL
smtpd_sasl_type = dovecot
broken_sasl_auth_clients = yes
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_relay_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
سپس، فایل /etc/postfix/master.cf را ویرایش کنید و comment ها را از بخش submission حذف کنید.
کد PHP:
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
کد PHP:
systemctl restart postfix
اگر شما دستور زیر را اجرا کنید :
کد PHP:
ss -l | grep submission
grep submission /etc/services
کد PHP:
firewall-cmd --add-port=587/tcp
firewall-cmd --reload
کد PHP:
telnet localhost 587
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 master.iandreev.us ESMTP Postfix
EHLO asdf.com
250-master.iandreev.us
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
Dovecot و SSL
فایل 10-auth.conf را ویرایش و خط زیر را به yes تغییر دهید.
کد PHP:
disable_plaintext_auth = yes
کد PHP:
ssl = yes
ssl_cert = </etc/postfix/server.crt
ssl_key = </etc/postfix/myserver.key
بر خلاف دامین های virtual آپاچی، شما برای هر یک از virtual domain ها به چندین certificate نیاز نخواهید داشت.
کد PHP:
cd /etc/postfix
openssl genrsa -out myserver.key 1024
openssl req -new -key myserver.key -out myserver.csr
کد PHP:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IR
State or Province Name (full name) [Some-State]:NJ
Locality Name (eg, city) []:Tehran
Organization Name (eg, company) [Internet Widgits Pty Ltd]:linux-zone
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.domain-1.com
Email Address []:habili@domain-1.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
کد PHP:
openssl x509 -req -days 3650 -in myserver.csr -signkey myserver.key -out server.crt
کد PHP:
systemctl restart postfix
systemctl restart dovecot
کد PHP:
openssl s_client -starttls smtp -connect localhost:587
کد PHP:
doveadm auth test -a /var/spool/postfix/private/auth habili@domain-1.com secret
passdb: habili@domain-1.com auth succeeded
extra fields:
user=habili@domain-1.com
کد PHP:
firewall-cmd --add-port=993/tcp
firewall-cmd --add-port=995/tcp
firewall-cmd --reload
بنابراین در اینجا نیازی به پورت های 110 و 143 نداریم و به جای آنها باید از 995 برای POP3 و 587 برای SMTP و 993 برای IMAP استفاده کنید. username آدرس ایمیل شما و password رمز عبوریست که شما با استفاده از دستور doveadm pw ایجاد کردید.
دقت کنید که اگر شما میخواهید یک کلاینت web مانند Roundcube استفاده کنید و Roundcube روی همان سروری که postfix و dovecot هستند نصب باشد نیازی ندارید که هیچ پورتی غیر از 25 را باز کنید.