/etc/postfix/main.cf
بکار میروند.
mail.falcot.com
. این تنها پرسشی است که به صورت پیشفرض مطرح میشود، اما پیکربندی که در پی دارد نیازهای شرکت فالکوت را تامین نمیکند، به همین دلیل مدیرسیستمهای آن اقدام به اجرای dpkg-reconfigure postfix
میکنند تا بتوانند گزینههای بیشتری را پیکربندی نمایند.
localhost
است، اما دامنه اصلی falcot.com
باید به صورت دستی اضافه شود. به صورت کلی، این پرسش باید با تمام نامهای دامنه که برای آنها این رایانه به عنوان یک سروی MX عمل میکند پاسخ داده شود؛ به عبارت دیگر، تمام دامنههایی که DNS میگوید برای این رایانه ایمیل دریافت میکنند. این اطلاعات در متغیر mydestination
واقع در فایل پیکربندی اصلی Postfix - /etc/postfix/main.cf
- قرار میگیرند.
192.168.0.0/16
را به پاسخ پیشفرض اضافه کردهاند. اگر این پرسش مطرح نشود، متغیر مربوطه در فایل پیکربندی عبارت است از mynetworks
، که در نمونه زیر نیز مشاهده میشود.
procmail
تحویل داده شود. این ابزار به کاربران امکان میدهد که ایمیل دریافتی خود را با توجه به قوانین ذخیره شده در فایل ~/.procmailrc
مرتبسازی کنند.
مثال 11.1. فایل اولیه /etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for # information on enabling SSL in the smtp client. smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination myhostname = mail.falcot.com alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = mail.falcot.com, falcot.com, localhost.localdomain, localhost relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/16 mailbox_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = all
virtual_alias_domains
و ارجاع دادن به یک فایل نگاشت نشانی در متغیر virtual_alias_maps
، فعال میشود.
مثال 11.2. دستوراتی برای افزودن به فایل /etc/postfix/main.cf
virtual_alias_domains = falcotsbrand.com virtual_alias_maps = hash:/etc/postfix/virtual
/etc/postfix/virtual
یک نگاشت با شیوهای ساده را توضیح میدهد: هر خط شامل دو فیلد است که با فاصله از یکدیگر جدا شدهاند؛ فیلد اول نام مستعار و فیلد دوم فهرستی از نشانیهای ایمیل است که به آن ارسال میشود. شیوه نگارشی بخصوص @domain.com
تمام نامهای مستعار در یک دامنه را پوشش میدهد.
مثال 11.3. نمونه فایل /etc/postfix/virtual
webmaster@falcotsbrand.com jean@falcot.com contact@falcotsbrand.com laure@falcot.com, sophie@falcot.com # The alias below is generic and covers all addresses within # the falcotsbrand.com domain not otherwise covered by this file. # These addresses forward email to the same user name in the # falcot.com domain. @falcotsbrand.com @falcot.com
virtual_mailbox_domains
و ارجاع به یک فایل نگاشت صندوقپستی در virtual_mailbox_maps
است. پارامتر virtual_mailbox_base
شامل دایرکتوری است که در آن صندوقهای پستی ذخیره میشوند.
virtual_uid_maps
(به همین ترتیب پارامتر virtual_gid_maps
) به فایلی ارجاع میدهد که شامل نگاشت بین نشانی ایمیل و کاربر سیستم است که "مالک" صندوقپستی مربوطه میباشد (به همین ترتیب برای گروه). برای دریافت تمام صندوقپستیهایی که توسط مالک/گروه یکسانی اداره میشوند، عبارت static:5000
یک شناسهکاربر/شناسهگروه ثابت را به آن اختصاص میدهد (در اینجا مقدار ۵۰۰۰).
مثال 11.4. دستوراتی برای افزودن به فایل /etc/postfix/main.cf
virtual_mailbox_domains = falcot.org virtual_mailbox_maps = hash:/etc/postfix/vmailbox virtual_mailbox_base = /var/mail/vhosts
/etc/postfix/vmailbox
کاملا واضح است: دو فیلد که با فاصله از یکدیگر جدا شدهاند. فیلد اول نشانی ایمیل یکی از دامنههای مجازی است و فیلد دوم مکان صندوقپستی مورد نظر است (نسبت به دایرکتوری مشخص شده در virtual_mailbox_base). اگر نام صندوقپستی با یک اسلش (/
) تمام شود، ایمیلها در قالب maildir ذخیرهسازی میشوند؛ در غیر اینصورت از قالب سنتی mbox استفاده میگردد. قالب maildir از یک دایکتوری کامل برای ذخیرهسازی یک صندوقپستی استفاده میکند، که هر پیام آن در یک فایل جداگانه قرار میگیرد. از طرف دیگر، در قالب mbox تمام صندوقپستی در یک فایل بزرگ ذخیره میشود و هر خطی که با From
(به همراه یک فاصله) آغاز گردد، نشانگر ابتدای یک پیام است.
مثال 11.5. فایل /etc/postfix/vmailbox
# Jean's email is stored as maildir, with # one file per email in a dedicated directory jean@falcot.org falcot.org/jean/ # Sophie's email is stored in a traditional "mbox" file, # with all mails concatenated into one single file sophie@falcot.org falcot.org/sophie
smtpd_client_restrictions
کنترل میکند که چه رایانههایی مجاز به برقراری ارتباط با سرور ایمیل هستند.
مثال 11.6. محدودیتهای مبتنی بر نشانی میزبان
smtpd_client_restrictions = permit_mynetworks, warn_if_reject reject_unknown_client, check_client_access hash:/etc/postfix/access_clientip, reject_rbl_client sbl-xbl.spamhaus.org, reject_rbl_client list.dsbl.org
permit_mynetworks
، که به عنوان قانون اول استفاده شد، تمام ایمیلهای ارسالی از یک رایانه شبکه محلی را قبول میکند (به ترتیبی که در متغیر پیکربندی mynetworks بیان شده است).
warn_if_reject
قبل از عبارت reject_unknown_client
استفاده میکنند: این عملگر منجر به تبدیل عملیات به یک پیام ساده اخطار در فایلهای گزارش میگردد. سپس مدیرسیستمها میتوانند نگاهی به تعداد پیامهای احتمالی برای نادیده گرفتن شدن بیندازند اگر این قانون در عمل اجرایی میشد، و در آینده تصمیم بگیرند که به چنین قابلیتی نیاز دارند یا خیر.
/etc/postfix/access_clientip
ذخیره میشوند، ایجاد کند. سرورهای موجود در فهرست سفید قابل اعتماد در نظر گرفته میشوند و ایمیلهای ارسالی از آنها از قوانین فیلترینگ گفته شده عبور داده نمیشوند.
HELO
(یا EHLO
) آغاز میشود، به همراه نام سرور ایمیل فرستنده؛ بررسی اعتبار این نام میتواند کار جالبی باشد.
مثال 11.7. محدودیتهای نام اعلام شده در EHLO
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, check_helo_access hash:/etc/postfix/access_helo, reject_non_fqdn_hostname, warn_if_reject reject_unknown_hostname
permit_mynetworks
به تمام رایانههای شبکه محلی اجازه میدهد که خود را آزادانه معرفی کنند. این مهم است چرا که برخی برنامههای ایمیل برای این بخش از پروتکل SMTP به اندازه کافی احترام قائل نیستند و آنها میتوانند خود را با نامهای مهمل معرفی کنند.
reject_invalid_hostname
ایمیلهایی را که شامل غلط نگارشی در EHLO
باشند رد میکند. قانون reject_non_fqdn_hostname
پیامهایی را رد میکند که نام میزبان آنها یک نام دامنه تمام-عیار نباشد (شامل نام دامنه به همراه نام میزبان). قانون reject_unknown_hostname
پیامهایی را رد میکند که نام میزبان آنها درون DNS موجود نباشد. از آنجا که این قانون آخر منجر به رد بسیاری پیامها میشود مدیرسیستمها تصمیم گرفتهاند که آن را با یک عملگر warn_if_reject
به صورت پیام اخطار سادهای تبدیل کنند؛ آنها میتوانند در مرحله دیگری این عملگر را حذف کنند، پس از اینکه از نتایج آن باخبر شوند.
permit_mynetworks
به عنوان قانون اول یک تاثیر جانبی جالب دارد: قوانین پیش رو تنها برای میزبانهای خارج از شبکه محلی اعمال میشوند. اینکار امکان افزودن تمام میزبانهایی که قصد معرفی خود بجای falcot.com
را دارند، به فهرست سیاه فراهم میآورد، برای نمونه، با افزودن یک خط گمشو بیرون، تو که تو شبکه ما نیستی!
به فایل /etc/postfix/access_helo
.
MAIL FROM
از پروتکل SMTP اعلام میشود؛ مجدد، این اطلاعات میتوانند به چندین روش ارزیابی گردند.
مثال 11.8. بررسیهای فرستنده
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/access_sender, reject_unknown_sender_domain, reject_unlisted_sender, reject_non_fqdn_sender
/etc/postfix/access_sender
با برخی فرستندگان به شیوهای خاص برخورد میکند. این معمولا به معنی قراردادن برخی فرستندگان در فهرست سیاه و سفید است.
reject_unknown_sender_domain
نیازمند یک دامنه معتبر فرستنده است، چرا که برای یک نشانی معتبر لازم است. قانون reject_unlisted_sender
کاربران محلی که نشانی آنها موجود نباشد را رد میکند؛ اینکار از ارسال پیامهایی که از نشانیهای نامعتبر وابسته به دامنه falcot.com
میآیند، جلوگیری میکند. پیامهایی که به شکل joe.bloggs@falcot.com
باشند تنها در شرایط وجود چنین نشانی پذیرفته میشوند.
reject_non_fqdn_sender
پیامهایی که از یک نشانی بدون نام دامنه تمام-عیار ارسال شوند را رد میکند. در عمل، یعنی پیامهایی که به صورت user@machine
باشند: نشانی باید به صورت user@machine.example.com
یا user@example.com
اعلام گردد.
RCPT TO
از پروتکل SMTP معرفی میشود. این نشانیها همچنین عملیات اعتبارسنجی را تضمین میکنند، حتی اگر از بررسیهای انجام شده روی نشانی فرستنده مشخص نباشد.
مثال 11.9. بررسیهای گیرنده
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, reject_unlisted_recipient, reject_non_fqdn_recipient
reject_unauth_destination
قانون پایهای است که پیامهای خارجی را ملزم میسازد نشانی ما را داشته باشند؛ پیامهایی که به نشانی خارج از محدوده پوشش این سرور فرستاده شوند رد میشوند. بدون این قانون، یک سرور به سیستم بازی تبدیل میشود که به اسپمرها اجازه میدهد پیامهای ناخواسته خود را ارسال کنند؛ بنابراین این قانون الزامی است و بهتر است که در قسمت ابتدایی فهرست قرار گیرد، تا قبل از مشخص نشدن گیرنده یک پیام، هیچ قانون دیگری نتواند آن را بررسی کند.
reject_unlisted_recipient
پیامهای ارسالی به کاربران غیرواقعی را رد میکند، که با عقل جور در میآید. در نهایت، قانون reject_non_fqdn_recipient
نشانیهایی که تمام-عیار نباشند را رد میکند؛ این قانون منجر میشود که پیام به jean
یا jean@machine
ارسال نشود و نیازمند نشانی کامل میباشد از جمله jean@machine.falcot.com
یا jean@falcot.com
.
DATA
از پروتکل SMTP قبل از محتوای پیام قرار میگیرد. با اینکه هیچ اطلاعات خاصی را فراهم نمیکند، بجز معرفی قسمت بعدی، میتواند مورد بررسی قرار گیرد.
reject_unauth_pipelining
زمانی منجر به رد پیام میشود که فرستنده آن دستوری را قبل از پاسخ به دستور قبلی فرستاده باشد. این عملکرد در مقابل شیوه کار رباتهای اسپمر قرار میگیرد، چرا که آنها اغلب اهمیتی به پاسخها نمیدهند و تمرکز خود را روی ارسال بیشترین پیام در کمترین زمان معطوف میسازند.
RCPT TO
ارسال میکند.
مثال 11.11. فعالسازی فیلترهای محتوا-محور
header_checks = regexp:/etc/postfix/header_checks body_checks = regexp:/etc/postfix/body_checks
مثال 11.12. نمونه فایل /etc/postfix/header_checks
/^X-Mailer: GOTO Sarbacane/ REJECT I fight spam (GOTO Sarbacane) /^Subject: *Your email contains VIRUSES/ DISCARD virus notification
GOTO Sarbacane
(یک نرمافزار ایمیل انبوه) پیدا شد، پیام رد میشود. عبارت دوم نیز به بررسی محتوای پیام میپردازد؛ اگر شامل یک اطلاعیه ویروس باشد، میتوان تصمیم گرفت بجای رد ایمیل، آن را نادیده بگیریم.
check_policy_service
در Postfix، آن را به این منظور پیکربندی کرد:
smtpd_recipient_restrictions = permit_mynetworks, [...] check_policy_service inet:127.0.0.1:10023
postgrey
متصل شده و اطلاعات مرتبط با پیام را به آن ارسال میکند. Postgrey در سمت خود، سهگانه نشانی IP/فرستنده/گیرنده را برای وجود در پایگاهداده خود مورد بررسی قرار میدهد. اگر وجود داشت، Postgrey اطلاع میدهد که پیام باید پذیرفته شود؛ در غیر اینصورت، پاسخی که نشاندهنده رد موقتی پیام است به همراه سهگانه مذکور در پایگاهداده خود ذخیرهسازی میکند.
smtpd_restriction_classes
قرار گرفته و به شیوه مشابه smtpd_recipient_restrictions
تعریف شدهاند. عبارت check_recipient_access
نگاشتی بین یک گیرنده و مجموعهای از محدودیتهای آن برقرار میکند.
مثال 11.13. تعریف کلاسهای محدودیت در main.cf
smtpd_restriction_classes = greylisting, aggressive, permissive greylisting = check_policy_service inet:127.0.0.1:10023 aggressive = reject_rbl_client sbl-xbl.spamhaus.org, check_policy_service inet:127.0.0.1:10023 permissive = permit smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, check_recipient_access hash:/etc/postfix/recipient_access
مثال 11.14. فایل /etc/postfix/recipient_access
# Unfiltered addresses postmaster@falcot.com permissive support@falcot.com permissive sales-asia@falcot.com permissive # Aggressive filtering for some privileged users joe@falcot.com aggressive # Special rule for the mailing-list manager sympa@falcot.com reject_unverified_sender # Greylisting by default falcot.com greylisting
clamav
را به عنوان آنتیویروس آزاد خود انتخاب کردهاند. بسته اصلی clamav نام دارد، اما آنها اقدام به نصب بستههای اضافی از جمله arj، unzoo، unrar و lha نیز کردهاند چرا که استفاده از این بستهها به منظور بررسی محتوای فایلهای ضمیمه با قالبهای مختلف مورد نیاز است.
clamav-milter
است. یک milter (که مخفف mail filter است) یک برنامه فیلترکردن بخصوص است که برای تعامل با سرورهای ایمیل طراحی شده است. یک milter از یک رابط استاندارد برنامهنویسی یا API استفاده میکند که عملکرد بهتری در مقایسه با فیلترهای خارجی برای سرورهای ایمیل فراهم میکند. milterها در ابتدا توسط Sendmail معرفی شدند اما Postfix به زودی از آنها پشتیبانی کرد.
dpkg-reconfigure clamav-milter
صورت میگیرد. زمانی که پرسش “Communication interface with Sendmail” مطرح میشود، “inet:10002@127.0.0.1
” را پاسخ دهید.
dpkg-reconfigure clamav-base
سفارشی گردند.
/etc/postfix/main.cf
است:
# Virus check with clamav-milter smtpd_milters = inet:[127.0.0.1]:10002
service postfix reload
تغییرات اعمال شده را تنظیم کرد.
saslpasswd2
انجام میشود که چندین پارامتر را دریافت میکند. گزینه -u
دامنه احرازهویت را تعریف میکند که باید با پارامتر smtpd_sasl_local_domain
در پیکربندی Postfix یکسان باشد. گزینه -c
اجازه تعریف یک کاربر جدید و -f
اجازه تعریف فایل پیکربندی آن را میدهد در صورتی که نیاز باشد پایگاهداده SASL در مسیر دیگری بجز /etc/sasldb2
قرار بگیرد.
#
saslpasswd2 -u `postconf -h myhostname` -f /var/spool/postfix/etc/sasldb2 -c jean
[... type jean's password twice ...]
/etc/sasldb2
را با دستور ln -sf /var/spool/postfix/etc/sasldb2 /etc/sasldb2
به یک پیوند نمادین پایگاهداده مورد استفاده Postfix تبدیل کردهایم.
postfix
باید به گروه sasl
اضافه گردد تا بتواند به پایگاهداده SASL دسترسی داشته باشد. برای فعالسازی SASL به چندین پارامتر دیگر نیاز است و پارامتر smtpd_recipient_restrictions
نیز به منظور اجازه به برنامههای احرازهویت شده با SASL برای ارسال ایمیل، مورد نیاز است.
مثال 11.15. فعالسازی SASL در /etc/postfix/main.cf
# Enable SASL authentication smtpd_sasl_auth_enable = yes # Define the SASL authentication domain to use smtpd_sasl_local_domain = $myhostname [...] # Adding permit_sasl_authenticated before reject_unauth_destination # allows relaying mail sent by SASL-authenticated users smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, [...]