Простая почтовая конфигурация, часть 1 cамый простой интерфейс к netfilter
Создано: 02-06-2009 16:04:25  Метки: mail postfix sysadmin
Настройка postfix. Объясню почему используется виртуальная почта: Сервер стоит на удаленной машине с доменным именем не совпадающим с именем почтового домена.

/etc/postfix/main.cf

# Приветствие
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
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
# сертификаты для безопасного соединения http://sanych.nnov.ru/?q=node/265
smtpd_tls_cert_file=/etc/postfix/smtpd.cert
smtpd_tls_key_file=/etc/postfix/smtpd.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.

# настройки для внутренней почты
myhostname = web4
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = web4.mydomain.ru, web4, localhost.localdomain, localhost
relayhost = 
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

# настройки для виртуальной почты
# домены
virtual_mailbox_domains = domain.ru
# карта виртуальных почтовых ящиков
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
# ну это для безопасности, а т.к. у нас все владельцы ящиков с одним uid - необязательная опция
virtual_minimum_uid = 1000
# uid и gid владельца почты
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
# карта алиасов
virtual_alias_maps = hash:/etc/postfix/virtual
# ограничение размера ящиков (200 Мб)
virtual_mailbox_limit = 200000000
# транспорт (MDA) доставки почты
virtual_transport = maildrop
# это для того чтобы сообщения с несколькими адресатами доставлялись
maildrop_destination_recipient_limit = 1

relay_domains = $mydestination

# sasl авторизация 
smtpd_sasl_auth_enable = yes
# для кривых виндовых клиентов
broken_sasl_auth_clients = yes

# от спамеров
smtpd_helo_required = yes
disable_vrfy_command = yes
strict_rfc821_envelopes = yes
invalid_hostname_reject_code = 554
multi_recipient_bounce_reject_code = 554
non_fqdn_reject_code = 554
strict_rfc821_envelopes = yes
invalid_hostname_reject_code = 554
multi_recipient_bounce_reject_code = 554
non_fqdn_reject_code = 554
relay_domains_reject_code = 554
unknown_address_reject_code = 554
unknown_client_reject_code = 554
unknown_hostname_reject_code = 554
unknown_local_recipient_reject_code = 554
unknown_relay_recipient_reject_code = 554
unknown_sender_reject_code = 554
unknown_virtual_alias_reject_code = 554
unknown_virtual_mailbox_reject_code = 554
unverified_recipient_reject_code = 554
unverified_sender_reject_code = 554

home_mailbox = Maildir/
mailbox_command = 


# цепочка для проверки кому можно ;)
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_invalid_hostname,
    reject_unknown_recipient_domain,
    reject_unauth_pipelining,
    reject_unauth_destination,
    reject_rbl_client multi.uribl.com,
    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,
    reject_rbl_client cbl.abuseat.org,
    reject_rbl_client ix.dnsbl.manitu.net,
    reject_rbl_client combined.rbl.msrbl.net,
    reject_rbl_client rabl.nuclearelephant.com,
    permit

Возможно некоторые вещи в данном конфиге избыточны - остались от старого конфига, лень вспоминать что там к чему.
Транспорт maildrop введен вместо virtual для того чтоб приходящая почта сразу раскладывалась в майлдиры в соответствии с /etc/courier/userdb.
Хорошо б еще авторизация проходила через эту же базу, однако я такой возможности не нашел. Поэтому авторизовать будем через sasldb.
Теперь подправим /etc/postfix/master.cf

maildrop  unix  -       n       n       -       -       pipe                                                                   
  flags=DRhu user=virtual argv=/usr/bin/maildrop -w 90 -d ${recipient}

Здесь мы поменяли пользователя и ввели напоминание при заполнении ящика на 90%.
Добавляем карты (maps):
в /etc/postfix/vmailbox кладем список ящиков виртуального домена:

test@domain.ru
test1@domain.ru

в /etc/postfix/virtual кладем список алиасов виртуального домена:

postmaster@domain.ru postmaster

затем создаем бинарный мапы (после всякого редактирования надо делать!!!):

postmap /etc/postfix/vmailbox
postmap /etc/postfix/virtual

Теперь настроим sasldb. В /etc/default/saslauthd меняем строки:

# чтоб автоматом стартовало
START=yes
# чтоб пользовало базу данных sasldb
MECHANISMS="sasldb"
# чтоб работало в чруте постфикса
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

Ну и великое колдунство чтоб авторизация проходила:

# это из /usr/share/doc/sasl2-bin/README.Debian.gz
dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd
adduser postfix sasl
# добавляем пользователя (лучше без собаки и домена - незнамо почему :( )
saslpasswd2 -c test
# рестартим
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

После всех этих манипуляций должно работать...

Полезняшки...
mailq - Просмотр очереди сообщений.
postsuper -d ALL - Очистка ВСЕЙ очереди.
postsuper -d 252D413870A - Удаление только сообщения с id 252D413870A
pflogsumm -d today /var/log/mail.log|less - Анализ лога с показом статистики
1129 просмотров комментировать

Простая почтовая конфигурация, часть 1 cамый простой интерфейс к netfilter