/etc/postfix/main.cf
.
mail.falcot.com
. هذا هو السؤال الوحيد الذي يطرح افتراضياً، لكن الإعداد الناتج ليس كاملاً كفاية بالنسبة لحاجات فلكوت، لذلك استدعى مديرو النظم الأمر dpkg-reconfigure postfix
حتى يتمكنوا من تخصيص المزيد من المتغيرات.
localhost
. لكن يجب إضافة النطاق الرئيسي falcot.com
يدوياً. بصورة عامة، يجب إجابة هذا السؤال بإعطاءه جميع أسماء النطاقات التي سيعمل هذا المخدم معها كمخدم MX؛ بكلمات أخرى، جميع أسماء النطاقات التي يبين مخدم DNS أنها تستطيع استقبال البريد الإلكتروني. ينتهي المطاف بهذه المعلومات في المتغير mydestination
في الملف /etc/postfix/main.cf
(ملف الإعداد الرئيسي لمخدم Postfix).
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
file describes a mapping with a rather straightforward syntax: each line contains two fields separated by whitespace; the first field is the alias name, the second field is a list of email addresses where it redirects. The special @domain.com
syntax covers all remaining aliases in a domain.
مثال 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
التي تسند قيمة UID/GID ثابتة (القيمة 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
file is quite straightforward: two fields separated with whitespace. The first field is an email address within one of the virtual domains, and the second field is the location of the associated mailbox (relative to the directory specified in virtual_mailbox_base). If the mailbox name ends with a slash (/
), the emails will be stored in the maildir format; otherwise, the traditional mbox format will be used. The maildir format uses a whole directory to store a mailbox, each individual message being stored in a separate file. In the mbox format, on the other hand, the whole mailbox is stored in one file, and each line starting with “From
” (From
followed by a space) signals the start of a new message.
مثال 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).
reject_unknown_client
بالخيار warn_if_reject
: يؤدي هذا الخيار لاستبدال عملية الرفض بتحذير بسيط يُسجَّل في السجلات. يستطيع بعدها مديرو النظم متابعة عدد الرسائل التي كانت سترفض لو كانت القاعدة نشطة فعلاً، واتخاذ قرار لاحق بعد حسن اطلاع لتفعيل هذا القيد أو عدم تفعيله.
/etc/postfix/access_clientip
file. Servers in the whitelist are considered as trusted, and the emails coming from there therefore do not go through the following filtering rules.
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
الرسائل عندما لا يكون اسم المضيف المذكور اسم نطاق كامل التوصيف (fully-qualified، أي يتضمن اسم النطاق بالإضافة لاسم المضيف). ترفض القاعدة reject_unknown_hostname
الرسائل إذا لم يكن الاسم المعلن مذكوراً في DNS. بما أن هذه القاعدة الأخيرة تؤدي لعمليات رفض كثيرة جداً لسوء الحظ، فقد حوّل مديرو النظم تأثيرها إلى مجرد تحذير باستخدام الخيار warn_if_reject
كخطوة أولى؛ وقد يقررون إزالة هذا الخيار في مرحلة لاحقة، بعد فحص نتائج هذه القاعدة.
permit_mynetworks
as the first rule has an interesting side effect: the following rules only apply to hosts outside the local network. This allows blacklisting all hosts that announce themselves as part of the falcot.com
, for instance by adding a falcot.com REJECT You are not in our network!
line to the /etc/postfix/access_helo
file.
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
is the basic rule that requires outside messages to be addressed to us; messages sent to an address not served by this server are rejected. Without this rule, a server becomes an open relay that allows spammers to send unsolicited emails; this rule is therefore mandatory, and it will be best included near the beginning of the list, so that no other rules may authorize the message before its destination has been checked.
reject_unlisted_recipient
الرسائل المرسلة إلى مستخدمين محليين لا وجود لهم، وهذا منطقي. أخيراً، ترفض القاعدة reject_non_fqdn_recipient
العناوين ذات التوصيف غير الكامل؛ هذا يمنع إرسال رسالة إلى jean
أو jean@machine
، بل يجب استخدام العنوان الكامل بدلاً من ذلك، مثل jean@machine.falcot.com
أو jean@falcot.com
.
DATA
التابع لبروتوكول SMTP قبل إرسال محتويات الرسالة. لا يقدّم هذا الأمر أي معلومات بحد ذاته، فيما عدا الإعلان عما سيرد تالياً. لكن لا يزال إخضاعه للفحوصات ممكناً.
reject_unauth_pipelining
رفض الرسائل إذا أرسلت الجهة المرسلة أمراً قبل إرسال الرد على الأمر السابق. هذا يحمي من عمليات التسريع الشائعة التي تستخدمها روبوتات الرسائل الدعائية، إذا أنها عادة لا تهتم أبداً بالردود وتركز فقط على إرسال أكبر عدد ممكن من الرسائل بأقصر زمن ممكن.
RCPT TO
.
EHLO
خاطئ، سيعلم Postfix من هو المرسل ومن المستقبل عند إعلان الرفض. ويستطيع عندها تسجيل رسالة أوضح في السجلات وهذا غير ممكن إذا قوطعت عملية التبادل منذ البداية. بالإضافة لذلك، لا يتوقع بعض عملاء SMTP إخفاق عملية التبادل عند أوامر SMTP الأولية، وسيقل تشوش هذه العملاء عند استلام الرفض في وقت متأخر.
مثال 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
كقيد إضافي:
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) هو برنامج ترشيح مصمم خصيصاً للتواصل مع مخدمات البريد الإلكتروني. يستخدم الملتر واجهة برمجية تطبيقات (API أو application programming interface) تعطي أداءً أفضل بكثير من المرشحات الخارجية. قدم 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
should be run so that this change is taken into account.
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
أيضاً رابطاً رمزياً يشير إلى قاعدة البيانات التي يستخدمها Postfix، باستخدام الأمر ln -sf /var/spool/postfix/etc/sasldb2 /etc/sasldb2
.
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, [...]