Postfix. Простая настройка
Описана простейшая настройка Postfix без шифрования, баз данных и т.д. Пользовательские аккаунты берутся из системы.
Содержание |
Конфигурация
файл mail.cf
soft_bounce = yes
command_directory = /usr/sbin
myhostname = mail.имя домена
mydomain = имя домена
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
unknown_local_recipient_reject_code = 550
mynetworks_style = host
mynetworks = 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = $HOME/Maildir/
mail_spool_directory = /var/spool/mail
debug_peer_level = 3 #существенно уменьшает логи. Для дебага лучше поставить 1, а дальше уже и поставить 2 или 3.
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.3.3/samples
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
check_helo_access hash:/etc/postfix/helo_checks,
check_helo_access pcre:/etc/postfix/helo_checks.pcre,
reject_rbl_client dnsbl.njabl.org,
reject_rbl_client bl.spamcop.net,
reject_unknown_sender_domain,
reject_unknown_recipient_domain
sender_bcc_maps = hash:/etc/postfix/mapping
recipient_bcc_maps = hash:/etc/postfix/re_mapping
Далее добавьте 2 файла с следующим содержанием:
Файл /etc/postfix/helo_checks
ВАШДОМЕН REJECT You are not in mydomain ВАШIP REJECT You are not me
Не забудьте поменять ВАШДОМЕН и ВАШIP
Файл /etc/postfix/helo_checks.pcre
/[^[] *[0-9]+((\.|-)[0-9]+){3}/ REJECT Invalid hostname (ipable)
/(modem|dia(l|lup)|dsl|p[cp]p|cable|catv|poo(l|les)|dhcp|client|customer|user|[0-9]{4,})(-|\.|[0-9])/ REJECT Invalid hostname (client)
/[0-9]+-[0-9]+/ REJECT Invalid hostname (D-D)
В начале строк пробелов быть не должно. Теперь выполним postmap:
postmap /etc/postfix/helo_checks.pcre postmap /etc/postfix/helo_checks
Строка smtpd_recipient_restrictions дополнена 2 внешними адресами: dnsbl.njabl.org и bl.spamcop.net. Это спам-сервисы и каждая почта будет там проверятся. Вам даже нет необходимости ставить антиспам.
Обратите внимание на наличие этих строк:
sender_bcc_maps = hash:/etc/postfix/mapping recipient_bcc_maps = hash:/etc/postfix/re_mapping
Эти файлы нужно создать. Или удалите их из конфига вообще, если в них нет необходимости. Если зададите
admin admin2
в первом файле, то вся почта с админа будет идти админу2. Это нужно, если человек ушел в отпуск или совсем, а на его почту приходит нужная корреспонденция. Вторая строка показывает как будет пересылать все отправленное админом и на почту админу2. Учтите, что адреса тут разделены не пробелом, а табом! Иначе будет ошибка вываливаться
- Чтобы избавится от изрядной доли спама, советую профильтровать некоторые моменты. Это позволит проверять отправителя и т.д. на достоверность существования домена. Просто добавьте в конце mail.cf следующие строки:
reject_non_fqdn_sender = yes reject_unknown_sender_domain = yes reject_unverified_sender = yes reject_unauth_destination = yes reject_unknown_helo_hostname = yes
Вы можете увеличить и размер отправляемый файлов. Для этого нужно добавить:
message_size_limit = 10240000 #это значение по умолчанию
файл master.cf
smtp inet n - n - - smtpd
pickup fifo n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr fifo n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
-o fallback_relay=
showq unix n - n - - showq
error unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
old-cyrus unix - n n - - pipe
flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
Просмотр, переотправка и очистка очереди
Иногда нужно посмотреть все, что есть в очереди и по какой причине. Для этого достаточно отдать команду
mailq
Если писем много, можно это все перенаправить в файл для последующего анализа
mailq > error_mails
Очистить очередь postfix просто:
postsuper -d ALL
Пытается доставить письма из очереди
postfix flush
Для отправки писем из очереди можно ещё воспользоваться
postqueue -f
Postfix и 587 порт
Россия - страна парадоксов. Если и решают проблемы, то слишком координально иногда. Простой пример: задолбали уголовные дела по автомобильным подставам - давайте введем обязательное страхование. Часто происходит ДТП - давайте наделаем бугорков (назвать ЭТО лежачими полицейскими просто язык не поворачивается.) Ну а если провайдер борется с рассылкой спама - запретить выход на почтовые сервера на 25 порт. И у пользователей остается на выбор: веб-почта или альтернативный порт.
У меня как раз такое и попалось. Ну что же, а почему бы нам не задействовать 587 порт? В наличии: Postfix, требование работать без шифрования и решить проблему минимальными перенастройками клиентов (в идеале - только смена порта).
Не проблема. Идем в конфигурационный файл Postfix /etc/postfix/master.cf и добавляем в конец сл. строки:
submission inet n - n - - smtpd -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o cleanup_service_name=sasl_cleanup sasl_cleanup unix n - n - 0 cleanup -o header_checks=regexp:/etc/postfix/sub_header
Теперь создаем файлик /etc/postfix/sub_header и добавляем в него сл. строку:
/^Received: / IGNORE
И перезапускаем postfix:
/etc/init.d/postfix restart
Проверяем открытые порты:
netstat -antpu | grep master
Мы должны получить что-то типа:
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 11107/master tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 11107/master
Вот в первой строке и видно, что 587 порт открыт. Теперь проверьте, открыт ли он в iptables. Если нет - откройте (это правило есть на странице про правила iptables):
/sbin/iptables -A INPUT -p tcp -m tcp --dport 587 -j ACCEPT
Что нужно поменять в настройках (на примере thunderbird):
- Зайти в "Правка" - "Параметры учетной записи"
- Далее нужно указать пункт меню "Сервер исходящей почты"
- Выставить вместо 25 порта 587.
Все заработало. Если есть вопросы - прошу в обсуждение!
Фильтрация системных аккаунтов
Есть ряд аккаунтов, которым почта не нужна. Но на эти адреса тоннами идет СПАМ. Например, такие записи как daemon, webmaster, adm и т.д. Для того, чтобы очередь не росла, зайдите в файл
/etc/aliases
и укажите вместо
daemon: root
запись
daemon: /dev/null
Весь ненужный спам будет улетать в никуда.
См. так же: