سرورها پیامهای مهمی تولید میکنند: خطای cron، خرابی دیسک، شکست بکاپ. بدون ارسال ایمیل، این پیامها در /var/spool/mail/root میمانند و کسی آنها را نمیخواند.
۱. نصب
sudo dnf install -y postfix cyrus-sasl-plain s-nail
sudo systemctl enable --now postfix۲. فقط ارسال، فقط محلی
sudo postconf -e 'inet_interfaces = loopback-only'
sudo postconf -e 'mydestination ='
sudo postconf -e 'myhostname = web01.corp.sahor.ir'
sudo postconf -e 'relayhost = [mail.sahor.ir]:587'
sudo postconf -e 'smtp_tls_security_level = encrypt'
sudo postconf -e 'smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt'
sudo postconf -e 'smtp_sasl_auth_enable = yes'
sudo postconf -e 'smtp_sasl_security_options = noanonymous'inet_interfaces = loopback-only یعنی سرور از شبکه ایمیل دریافت نمیکند و relay باز نمیشود.
۳. نام کاربری و رمز
نوع پایگاه دادهی جدولهای Postfix در نسخههای مختلف فرق دارد: hash در نسخهی ۹ و lmdb در نسخهی ۱۰، چون Berkeley DB حذف شده است. آن را از خود Postfix بپرسید:
DBT=$(postconf -h default_database_type); echo "$DBT"
echo '[mail.sahor.ir]:587 alerts@sahor.ir:Mail-Password' | sudo tee /etc/postfix/sasl_passwd >/dev/null
sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap "$DBT:/etc/postfix/sasl_passwd"
sudo postconf -e "smtp_sasl_password_maps = $DBT:/etc/postfix/sasl_passwd"۴. فرستنده و گیرندهی پیامهای root
بیشتر سرورهای ایمیل فقط اجازه میدهند با آدرس همان حساب ارسال کنید:
echo '/.+/ alerts@sahor.ir' | sudo tee /etc/postfix/sender_canonical >/dev/null
sudo postconf -e 'sender_canonical_maps = regexp:/etc/postfix/sender_canonical'
echo 'root: ops@sahor.ir' | sudo tee -a /etc/aliases && sudo newaliases
sudo postfix check && sudo systemctl restart postfix۵. آزمایش
echo "test from $(hostname)" | mail -s "Postfix relay test" root
sudo journalctl -u postfix -n 20 --no-pager
mailqخط status=sent (250 ...) در لاگ یعنی ارسال موفق بوده است. خطای SASL authentication failed یعنی نام کاربری یا رمز اشتباه است. خطای TLS is required یعنی سرور مقصد روی این پورت TLS ندارد.
۶. SELinux
ارسال به پورت 587 در سیاست پیشفرض مجاز است. اگر سرور ایمیل روی پورت غیر استاندارد است:
sudo semanage port -l | grep smtp_port_t
sudo semanage port -a -t smtp_port_t -p tcp 2525