📄 محتوای کامل
در این مطلب با شما هستیم با آموزش راه اندازی میل سرور در لینوکس پس تا انتهای این مطلب ما را حتما همراهی کنید.
برای ارسال یا دریافت ایمیل باید یک میل سرور داشته باشید. در این مقاله به بررسی میل سرور لینوکس و تشریح عملکرد SMTP ( Simple Mail Transfer Protocol ) و سایر پروتکل های مرتبط با ایمیل مانند پروتکل POP ( Post Office Protocol ) و IMAP (Internet Message Access Protocol) و ارتباط بین آنها خواهیم پرداخت.
سرور SMTP لینوکس
SMTP نحوه ارسال ایمیل از یک هاست به هاست دیگر را تعریف می کند و همچنین مستقل از نوع سیستم است. به این معنی که فرستنده و گیرنده می توانند دارای سیستم عامل های متفاوت باشند. SMTP تنها مستلزم آن است که یک سرور قادر باشد یک متن را در قالب کد ASCII و به صورت مستقیم به سرور دیگر ارسال کند، که می توانید این کار را با اتصال به سرور از طریق port ۲۵ که پورت استاندارد SMTP است، انجام دهید. امروزه بیشتر توزیع های لینوکس با دو نوع از متداول ترین سرورهای SMTP پیاده سازی می شوند که عبارتند از Sendmail و Postfix
Sendmail یک میل سرور معروف و رایگان است، اما طراحی آن کمی پیچیده بوده و از امنیت پایین تری برخوردار است.
Postfix میل سرور را یک گام به جلو ارتقاء داده، و به هنگام توسعه امنیت بالاتری را مورد توجه قرار داده است.
اجزاء میل سرویس
سرویس ایمیل در هر mail server از سه جزء تشکیل شده است:
(Mail user agent (MUA: در این بخش که کاربر قادر به مشاهده و کار کردن با آن است در واقع امکان خواندن و نوشتن ایمیل را برای کاربر فراهم می کند مانند: Thunderbird و Microsoft Outlook.
(Mail transport agent (MTA: این بخش مسئولیت انتقال ایمیل از یک سایت به سایت دیگر را بر عهده دارد مانند: Sendmail و Postfix.
(Mail delivery agent (MDA: این بخش نیز وظیفه توزیع پیام های دریافتی را به میل باکس های postfix-maildrop و Procmail در دستگاه های لوکال بر عهده دارد.
آموزش نصب و کانفیگ میل سرور
در این مقاله، به آموزش میل سرور Postfix می پردازیم که امروزه در بین system adminها بسیار محبوب و رایج است. Postfix میل سرور پیش فرض در بیشتر توزیع های مدرن لینوکس است.
ابتدا نصب بودن آن را بر روی سیستم خود، و با دستور زیر بررسی کنید:
rpm -qa | grep postfix $
در صورتی که میل سرور Postfix بر روی سیستم شما نصب نباشد، می توانید از دستور زیر برای نصب آن بر روی توزیع های مبتنی بر Redhat استفاده کنید:
dnf -y install postfix $
سپس برای راه اندازی سرویس postfix و همچنین فعال کردن آن در هنگام راه اندازی سیستم، دستور زیر را وارد کنید:
systemctl start postfix $ systemctl enable postfix $
در توزیع های مبتنی بر Debian مانند اوبونتو نیز می توانید با کمک دستور زیر، عملیات نصب را انجام دهید:
apt-get -y install postfix $
در ادامه و در هنگام نصب، بایستی نوع تنظیمات میل سرور Postfix را انتخاب کنید. از میان چهار گزینه No configuration ،Internet site، Internet with smarthost ،Satellite system و Local only، گزینه No configuration را انتخاب کنید.
تنظیمات میل سرور لینوکس
پس از نصب میل سرور Postfix، بایستی آن را کانفیگ کنید. می توانید بیشتر فایل های کانفیگ را در مسیر /etc/postfix/ پیدا کنید. همچنین می توانید تنظیمات اصلی مربوط به کانفیگ میل سرور Postfix را در فایل /etc/postfix/main.cf پیدا کنید. این فایل شامل گزینه های زیادی از جمله موارد زیر است:
myhostname
می توانید از این گزینه برای تعیین نام هاست mail server استفاده کنید. این نام هاست اینترنتی است که Postfix ایمیل ها را بر روی آن دریافت می کند. hostname می تواند به صورت mail.example.com یا smtp.example.com باشد.
myhostname = mail.example.com
mydomain
این گزینه دامنه متعلق به ایمیل است که برای سرویس دهی از آن استفاده خواهد شد، مانند example.com
و نحوه تنظیم و کد دستوری آن نیز بدین صورت است:
mydomain = example.com
myorigin
تمامی ایمیل های این mail server، با تنظیم این گزینه ارسال می شوند. می توانید تنظیمات آن را مانند مثال زیر به صورت mydomain$ انجام دهید.
myorigin = $mydomain
می توانید از هر مقدار دلخواه دیگری نیز برای این گزینه استفاده کنید، فقط باید از علامت $ قبل از عبارت mydomain$ استفاده کنید.
mydestination
این گزینه دامنه هایی را که سرور Postfix برای ایمیل های ورودی از آنها استفاده می کند، لیست می کند. که مقادیر قابل استفاده در آن به صورت زیر خواهند بود:
mydestination = $myhostname, localhost.$mydomain, $mydomain, mail.$mydomain, www.$mydomain
mail_spool_directory
دو مدل تحویل ، توسط میل سرور Postfix وجود دارد:
- مستقیماً به صندوق پستی کاربر
- به یک دایرکتوری spool مرکزی، که در این حالت ایمیل ها در مسیر /var/spool/mail و با یک فایل برای هر کاربر قرار می گیرد.
mail_spool_directory = /var/spool/mail
mynetworks
این گزینه به شما این امکان را می دهد که تعیین کنید کدام سرورها می توانند از طریق سرور Postfix ایمیل ارسال کنند. با تنظیم این گزینه باید آدرس های محلی همچون mail script های لوکال، تنها بر روی سرور شما دریافت شود. در غیر این صورت اسپمرها می توانند از mail server شما برای ارسال پیام های خود استفاده کرده و در نتیجه سبب قرار گرفتن سرور شما در لیست سیاه شوند و در نتیجه شما قادر نخواهید بود که بخش زیادی از ایمیل های خود را دریافت کنید.
این گزینه دارای کد دستوری زیر است:
mynetworks = ۱۲۷.۰.۰.۰/۸, ۱۹۲.۱۶۸.۱.۰/۲۴
smtpd_banner
در این متغیر می توانید پیامی را که سرور پس از اتصال موفق و ارسال موفقیت آمیز ایمیل به مشتری ، نمایش می دهد، تنظیم کنید. بهتر است ابن بنر را به صورتی تغییر دهید که هیچ سرنخی از سرور مورد استفاده شما نشان ندهد.
Intel_protocol
این گزینه نیز نسخه پروتکل IP مورد استفاده برای اتصال ها، به سرور را مشخص می کند.
inet_protocols = ipv4
اگر فایل های تنظیم میل سرور Postfix را تغییر دهید، باید سرویس آن را مجدداً راه اندازی کنید:
systemctl reload postfix $
در هنگام تایپ تنظیمات و کانفیگ، همواره احتمال اشتباه وجود دارد. در این خصوص می توانید با استفاده از دستور زیر خطاهای احتمالی را بررسی کنید:
postfix check $
این ابزار به شما کمک می کند محل دقیق کد خطا را پیدا کنید و آن را برطرف کنید.
بررسی mail queue
گاهی اوقات صف ایمیل، از کلی پیغام پر می شود. این امر به دلایل زیادی ممکن است رخ دهد، از جمله خرابی شبکه یا هر دلیلی که می تواند ارسال ایمیل ها را به تاخیر بیندازد. برای بررسی mail queue در میل سرور لینوکس خود از دستور زیر استفاده کنید:
mailq $
این دستور صف ایمیل ها در Postfix را نمایش می دهد. اگر صف شما پر شده و پردازش پیغام ها تا چندین ساعت طول بکشد، باید صف ایمیل را خالی کنید.
postfix flush $
حال بعد از اجرای این دستور اگر صف ایمیل های خود را بررسی کنید، باید خالی شده باشد.
تست میل سرور لینوکس
پس از تنظیم صحیح میل سرور Postfix، باید آن را تست کنید. اولین قدم استفاده از یک کاربر لوکال ایمیل مانند mailx یا mail است. که برای mailx یک symlink است. ابتدا سعی کنید ایمیلی را برای شخص دیگری در همان سرور ارسال کنید، در صورت موفقیت آن را به یک سایت ریموت نیز ارسال کنید.
echo "This is message body" | mailx -s "This is Subject" -r "likegeeks<[email protected]>" -a /path/to/attachment [email protected] $
سپس سعی کنید ایمیلی را از یک سایت ریموت دریافت کنید. در صورت بروز هرگونه مشکل، log ها را بررسی کنید. فایل های log در توزیع های مبتنی بر Redhat در مسیر /var/log/ maillog و در توزیع های مبتنی بر Debian در مسیر /var/log/mail.log یا در حالت کلی در مسیری که در تنظیمات rsyslogd تعریف شده است، قرار دارد.
توصیه می شود برای فهم دقیق تر درباره log ها و نحوه کانفیگ rsyslogd، مرجع Linux Syslog Server مطالعه کنید. اگر باز هم مشکل پابرجا بود، تنظیمات DNS و سوابق MX خود را با استفاده از دستورات شبکه Linux بررسی کنید.
ایمن سازی mailbox ها در برابر اسپم توسط SpamAssassin
یکی از راه های مبارزه با اسپم ها اسکن mail box توسط برخی از ابزارها و جستجوی الگوهای خاص مرتبط با اسپم است. یکی از بهترین راه حل ها برای این منظور نیز ابزار SpamAssassin است که یک ابزار متن باز است.
می توانید آن را به این صورت نصب کنید:
dnf -y install spamassassin $
سپس سرویس را اجرا کرده و آن را بعد از هر راه اندازی مجدد فعال کنید:
systemctl start spamassassin $ systemctl enable spamassassin $
پس از نصب، می توانید فایل تنظیمات و کانفیگ آن را به صورت زیر بررسی کنید:
/etc/mail/spamassassin/local.cf
کاربرد ابزار SpamAssassin
ابزار SpamAssassin بر اساس نتیجه امتیازات مختلف اسکریپت ها، اسپم بودن یا نبودن یک ایمیل را مشخص می کند. اگر یک پیام امتیاز بالاتری داشته باشد، بدین معناست که احتمال اسپم بودن آن بیشتر است. در فایل تنظیمات، پارامتر required_hits ۵ نشان می دهد که در SpamAssassin، اگر نمره یا امتیاز یک ایمیل پنج یا بالاتر باشد، آن ایمیل به عنوان اسپم تلقی می شود. گزینه report_safe نیز می تواند دارای یکی از مقادیر ۰، ۱ یا ۲ باشد. در صورت داشتن مقدار ۰ به این معنی است که ایمیل مشخص شده به عنوان اسپم، به همان صورت ارسال شده و تنها هدر آن برای نمایش به صورت اسپم، تغییر کرده است. در صورت داشتن مقادیر ۱ یا ۲، SpamAssassin یک پیام جدید ایجاد می کند و آن پیام را به گیرنده می فرستد. مقدار ۱ به این معنی است که پیام spam با محتوای /rfc822 کدگذاری می شود، و چنانچه مقدار ۲ باشد، بدان معناست که پیام به صورت text/plain کدگذاری شده است.
حالت text/plain مطمئن تر است، چرا که برخی از ابزار های مدیریت و ارسال و دریافت ایمیل، پیام RFC822 را اجرا می کنند که می تواند کامپیوتر سرویس گیرنده را آلوده کند. اکنون باید آن را در Postfix ادغام کنیم. ساده ترین راه برای انجام این کار احتمالاً استفاده از procmail است.
حال باید یک فایل با آن نام ایجاد کنید:
تنظیمات SpamAssassin در سرور Postfix
/etc/procmailrc
سپس محتوای زیر را بدان اضافه کنید:
:۰ hbfw | /usr/bin/spamc
سپس با کد زیر فایل کانفیگ Postfix را که در مسیر /etc/postfix/main.cf قرار دارد را ویرایش و تغییر دهید:
mailbox_command
بدین صورت:
mailbox_command = /usr/bin/procmail
و در پایان، سرویس های Postfix و SpamAssassin را مجدداً راه اندازی کنید:
systemctl restart postfix $ systemctl restart spamassassin $
البته SpamAssassin گاهی اوقات تشخص نمی دهد که پیام هایی که inbox را پر کرده است، همان اسپم ها هستند. خوشبختانه می توانید پیام ها را قبل از ورود به سرور Postfix با استفاده از Realtime Blackhole Lists (RBL) فیلتر کنید. این امر باعث کاهش بار mail server شما و تمیز ماندن آن خواهد شد.
فایل کانفیگ میل سرور Postfix را که در مسیر /etc/postfix/main.cf قرار دارد، باز کنید و گزینه smtpd_recipient_restriction را تغییر داده و گزینه های زیر را به این ترتیب بدان اضافه کنید:
strict_rfc821_envelopes = yes relay_domains_reject_code = ۵۵۴ unknown_address_reject_code = ۵۵۴ unknown_client_reject_code = ۵۵۴ unknown_hostname_reject_code = ۵۵۴ unknown_local_recipient_reject_code = ۵۵۴ unknown_relay_recipient_reject_code = ۵۵۴ unverified_recipient_reject_code = ۵۵۴ =smtpd_recipient_restrictions ,reject_invalid_hostname ,reject_unknown_recipient_domain ,reject_unauth_pipelining ,permit_mynetworks ,permit_sasl_authenticated ,reject_unauth_destination ,reject_rbl_client dsn.rfc-ignorant.org ,reject_rbl_client dul.dnsbl.sorbs.net ,reject_rbl_client list.dsbl.org ,reject_rbl_client sbl-xbl.spamhaus.org ,reject_rbl_client bl.spamcop.net ,reject_rbl_client dnsbl.sorbs.net permit
سپس سرور postfix را مجدداً راه اندازی کنید:
systemctl restart postfix $
آموزش راه اندازی میل سرور در لینوکس
RBL های فوق از انواع متداول هستند. می توانید لیست های بیشتری را در اینترنت پیدا کرده و آنها را نیز امتحان کنید.
تامین امنیت اتصال SMTP
بهتر است ترافیک SMTP خود را با کمک TLS منتقل کنید، تا از آنها در مقابل حملات Man In The Middle (MITM) محافظت کنید. ابتدا باید گواهی و کلید مربوطه را با استفاده از دستور openssl ایجاد کنید:
openssl genrsa -des3 -out mail.key $ openssl req -new -key mail.key -out mail.csr $ cp mail.key mail.key.original $ openssl rsa -in mail.key.original -out mail_secure.key $ openssl x509 -req -days 365 -in mail_secure.csr -signkey mail_secure.key -out mail_secure.crt $ /cp mail_secure.crt /etc/postfix $ /cp mail_secure.key /etc/postfix $
سپس گزینه زیر را به فایل کانفیگ Postfix در مسیر /etc/postfix/main.cf اضافه کنید:
smtpd_use_tls = yes smtpd_tls_cert_file = /etc/postfix/mail_secure.crt smtpd_tls_key_file = /etc/postfix/mail_secure.key smtp_tls_security_level = may
و در پایان، سرویس postfix را مجدداً راه اندازی کنید:
systemctl restart postfix $
آموزش راه اندازی میل سرور در لینوکس
اکنون باید به هنگام اتصال به سرور، TLS را بر روی کلاینت خود انتخاب کنید. به دلیل تایید نشدن گواهینامه، اولین بار پس از تغییر تنظیمات، یک ایمیل هشدار برای شما ارسال خواهد شد.
استفاده از گواهی های Let’s Encrypt
Let’s Encrypt یک ارائه دهنده گواهی SSL رایگان است که به شما امکان می دهد ترافیک خود را رمزگذاری کنید. به جای استفاده از گواهینامه های خود امضا شده (self-signed) که سبب عدم اعتماد کاربران می شود، می توانید از این راه حل خوب استفاده کنید. ابتدا letsencrypt را نصب کنید:
yum install letsencrypt $
در صورتی که از توزیع های مبتنی بر Debian استفاده می کنید، می توانید از دستور زیر استفاده کنید:
apt-get install letsencrypt $
سپس letsencrypt را به این صورت اجرا کنید:
letsencrypt certonly --standalone -d yourdomain.com $
شما باید دامنه واقعی خود را جایگزین yourdomain.com کنید. پس از تکمیل قسمت های مربوطه می بایست اطلاعات مربوط به نام ایمیل ، دامنه mail server و لایسنس را به درستی وارد کنید.
گواهینامه ها در مسیر زیر قرار خواهند گرفت:
/etc/letsencrypt/live/yourdomain.com/
آخرین کاری که باید انجام دهید، تنظیم postfix برای استفاده از آن گواهی ها است، که می توانید از دستورات زیر برای این منظور استفاده کنید:
sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/yourdomain.com/fullchain.pem' sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/yourdomain.com/privkey.pem'
جایگزینی yourdomain.com با دامنه واقعی خود را فراموش نکنید. و در نهایت، سرور postfix خود را مجدداً راه اندازی کنید:
systemctl restart postfix $
اصول پروتکل های POP3 و IMAP
تا کنون دریافتیم که سرور SMTP چگونه ارسال و دریافت ایمیل را بدون مشکل انجام می دهد، اما شرایط زیر را همیشه در نظر بگیرید:
- کاربران برای مشاهده آفلاین اطلاعات ، به یک نسخه کپی ایمیل به صورت لوکال احتیاج دارند.
- فرمت فایل mbox پشتیبانی نمی شود. فرمت MBOX فرمتی است که توسط بسیاری از ابزار ها مانند mailx و Mutt استفاده می شود.
- کاربران نمی توانند به یک شبکه سریع متصل باشند، تا یک کپی لوکال برای خواندن آفلاین را در اختیار بگیرند.
- برخی از mail server ها به دلایل امنیتی، اجازه دسترسی به مسیر های spool اشتراکی ایمیل را نمی دهند.
برای مدیریت این موارد، باید از پروتکل های دسترسی به ایمیل استفاده کنید. دو مورد از رایج ترین و محبوب ترین پروتکل های دسترسی به ایمیل، Post Office Protocol (POP) و Internet Message Access Protocol (IMAP) است.
ایده زیربنایی POP بسیار ساده است، یک میل سرور لینوکس همیشه آنلاین است و برای همه کاربران ایمیل ها را دریافت و ذخیره می کند. همه ایمیل های دریافت شده در سرور در نوبت قرار می گیرند تا زمانی که کاربر آنها را دریافت کند. هنگامی که یک کاربر می خواهد ایمیلی ارسال کند، سرویس ایمیل به طور معمول آن را از سرور مرکزی لینوکس توسط SMTP ارسال می کند.
توجه داشته باشید که سرور SMTP و سرور POP می توانند بدون هیچ مشکلی بر روی یک سیستم قرار داشته باشند. امروزه بیشتر سرورها به همین صورت عمل می کنند. در گذشته ویژگی هایی مانند نگه داشتن یک کپی از ایمیل کاربر در سرور وجود نداشت، که این موضوع منجر به توسعه IMAP شد.
با استفاده از IMAP، میل سرور لینوکس شما از سه حالت دسترسی، پشتیبانی خواهد کرد:
-
Online mode:
حالت آنلاین که شبیه به داشتن دسترسی مستقیم به فایل سیستم میل سرور لینوکس است.
-
Offline mode:
حالت آفلاین که شبیه به عملکرد POP است، با این تفاوت که در آن کاربر به جزء زمانی که قصد دریافت یک ایمیل را دارد، به شبکه متصل نیست. در این حالت، سرور به طور معمول هیچ نسخه ای از ایمیل را در خود نگه نمی دارد.
-
Disconnected mode:
حالت قطع که به کاربران اجازه می دهد نسخه cache شده از ایمیل های خود را داشته باشند، و سرور نیز یک کپی از ایمیل ها را حفظ می کند.
آموزش راه اندازی میل سرور در لینوکس
چندین حالت پیاده سازی مختلف برای IMAP و POP وجود دارد که محبوب ترین آنها سرور Dovecot است که هر دو پروتکل را ارائه می دهد. پروتکل های POP3، POP3S، IMAP و IMAPS به ترتیب روی پورت های ۱۱۰، ۹۹۵، ۱۴۳ و ۹۹۳ کار می کنند.
نصب Dovecot
بیشتر توزیع های لینوکس به صورت پیش فرض با نصب Dovecot ارائه می شوند. با این وجود می توانید Dovecot را در توزیع های مبتنی بر Redhat به صورت زیر نصب کنید:
dnf -y install dovecot $
در توزیع های مبتنی بر Debian نیز قابلیت های IMAP و POP3 در دو بسته جداگانه ارائه می شوند، که می توانید آنها را به صورت زیر نصب کنید:
apt-get -y install dovecot-imapd dovecot-pop3d $
از شما خواسته می شود برای استفاده از IMAP و POP3 از طریق SSL/TLS، گواهینامه های خود امضاء شده (self-signed certificates) ایجاد کنید. گزینه “بله” را انتخاب کنید و در صورت درخواست نام هاست را وارد کنید.
سپس می توانید سرویس را اجرا کرده و پس از هر راه اندازی آن را به صورت زیر فعال کنید:
systemctl start dovecot $ systemctl enable dovecot $
کانفیگ Dovecot
فایل اصلی کانفیگ Dovecot در مسیر زیر قرار دارد:
/etc/dovecot/dovecot.conf
در برخی از توزیع های لینوکس، فایل کانفیگ و مسیر آن به صورت زیر است:
/etc/dovecot/conf.d/
و از include directive برای قرار دادن دستورالعمل ها در فایل استفاده کنید. شما نیز از لیست پارامتر های زیر برای کانفیگ Dovecot استفاده کنید:
protocols: پروتکل هایی که قصد پشتیبانی آن را دارید.
protocols = imap pop3 lmtp
lmtp به معنی پروتکل انتقال ایمیل لوکال یا protocol local mail transfer است.
listen: آدرس های IPکه به آنها گوش می دهند.
listen = *, ::
علامت * به معنی همه رابط های IPv4 و علامت :: به معنی همه رابط های IPv6 است.
userdb: پایگاه داده کاربران برای احراز هویت آنها.
userdb {
driver = pam
}
passdb: پایگاه داده رمز عبور برای احراز هویت کاربران.
passdb {
driver = passwd
}
mail_location: این ورودی در فایل /etc/dovecot/conf.d/۱۰-mail.conf قرار دارد.
mail_location = mbox:~/mail:INBOX=/var/mail/%u
امنیت Dovecot
Dovecot همراه با گواهینامه های SSL عمومی و فایل های key مربوط به آن ارائه می شود. به این فایل نگاه کنید:
/etc/dovecot/conf.d/10-ssl.conf
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem ssl_key = </etc/pki/dovecot/private/dovecot.pem
وقتی کاربری می خواهد به سرور dovecot متصل شود، هشداری دریافت خواهد کرد که گواهی ها تایید نشده اند. در صورت تمایل می توانید از مراجع معتبر صدور گواهینامه، اقدام به خرید کنید.
یا اگر از گواهی های Let’s Encrypt استفاده می کنید، می توانید مسیر آنها را وارد کنید:
ssl_cert = </etc/letsencrypt/live/yourdomain.com/fullchain.pem ssl_key = </etc/letsencrypt/live/yourdomain.com/privkey.pem
فراموش نکنید که با ایجاد قوانین iptables برای پورت های ۱۱۰، ۹۹۵، ۱۴۳، ۹۹۳ و ۲۵، پورت های سرور dovecot را در فایروال iptables باز کنید. سپس این قوانین را ذخیره کنید .
یا اگر از firewall استفاده می کنید، می توانید به صورت زیر عمل کنید:
firewall-cmd --permanent --add-port=110/tcp --add-port=995/tcp $ firewall-cmd --permanent --add-port=143/tcp --add-port=993/tcp $ firewall-cmd --reload $
و مجدداً برای عیب یابی، فایل های log درمسیر های /var/log/messages، /var/log/maillog و /var/log/mail.log را بررسی کنید.
میل سرور لینوکس و میل سرور Postfix یکی از آسان ترین سرورها از لحاظ کاربرد هستند.
تبریک می گوییم آموزش راه اندازی میل سرور در لینوکس به پایان رسید با اموزش های بعدی ما را همراهی کنید.