Главная | Контакты



Главная > Программы > Postfix

Строим почтовый сервер. Postfix+Dovecot+Mysql. Часть Вторая: SMTP сервер

С pop3/imap сервером мы уже разобрались в прошлой статье, теперь беремся за Posfix.
Установим его, и удалим sendmail

sudo yum install postfix
sudo yum erase sendmail

Соглашаемся на установку всех зависимостей и ждем некоторое время, пока все установится. Далеей идем в /etc/postfix и редактируем файлик main.cf

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix

mail_owner = postfix
myhostname = mail.example.com #Здесь надо написать FQDN вашего сервера
inet_interfaces = all #слушаем на всех интерфейсах

#Домены для которых почта доставляется локально:
mydestination = $myhostname, localhost.$mydomain, localhost
#тут не надо указывать свой домен, он у нас виртуальный

unknown_local_recipient_reject_code = 550

#Список своих сетей:
mynetworks_style = subnet
mynetworks = 192.168.0.254/32, 127.0.0.0/8

#Немного поправим пути к базе алиасов:
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases

#Уровень дебага:
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop

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
address_verify_map = btree:/var/spool/postfix/address_verify

# Отключает SMTP команду VRFY. В результате чего, невозможно определить
# существование определенного ящика. Данная техника (применение команды
# VRFY) используется спамерами для сбора имен почтовых ящиков.
disable_vrfy_command = yes
smtpd_error_sleep_time = 0
#Сделаем некоторые ограничения на комманды
default_process_limit = 2000
smtpd_client_connection_count_limit = 500
bounce_size_limit = 2000
#нтервал времени, в течение которого SMTP клиент должен послать
# SMTP команду HELO или EHLO и получить ответ сервера.
smtp_helo_timeout = 60s
#Тот же принцип что и выше
smtpd_timeout = 60s
smtp_mail_timeout = 60s
smtp_rcpt_timeout = 60s
smtpd_client_recipient_rate_limit = 5
#Список виртуальных доменов:
virtual_mailbox_domains = proxy:mysql:$config_directory/mysql_virtual_domains_maps.cf
virtual_mailbox_base = /var/spool/mail/virtual/
virtual_mailbox_maps = proxy:mysql:$config_directory/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = proxy:mysql:$config_directory/mysql_virtual_alias_maps.cf
virtual_minimum_uid = 203
virtual_uid_maps = static:203
virtual_gid_maps = static:203
#прикручиваем LDA от Dovecot:
virtual_transport = dovecot
#Указываем максимальный размер письма.
message_size_limit = 31457280
dovecot_destination_recipient_limit = 1

В конец master.cf:

# Dovecot LDA
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

Формируем системные алиасы для этого правим файл /etc/postfix/aliases:

# Basic system aliases -- these MUST be present.
MAILER-DAEMON: postmaster
postmaster: root
webmaster: root
abuse: root

# trap decode to catch security attacks
decode: root
root: postmaster@example.com

Сохраняем, после этого:

sudo postalias /etc/postfix/aliases

Создадим конфигурационные файлы mysql_virtual_domains_maps.cf, mysql_virtual_mailbox_maps.cf, mysql_virtual_alias_maps.cf

[den@centos ~]$ sudo vi /etc/postfix/mysql_virtual_domains_maps.cf
user = postfix
password = yourpass
hosts = localhost
dbname = postfix
#query = SELECT domain FROM domain WHERE domain='%s'
#optional query to use when relaying for backup MX
query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'

 

[den@centos ~]$ sudo vi /etc/postfix/mysql_virtual_mailbox_maps.cf
user = postfix
password = yourpass
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'

 

[den@centos ~]$ sudo vi /etc/postfix/mysql_virtual_mailbox_maps.cf
user = postfix
password = yourpass
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

Теперь запускаем postfix и проверяем:

[den@centos ~]$ sudo service postfix start
[den@centos ~]$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 mail.example.com ESMTP Postfix

Если у вас что-то пошло не так, то читаем логи, там все написано, очень подробно

Прикручиваем SASL. В main.cf добавляем:

smtpd_sasl_type = dovecot
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_path = private/auth

# --------------------------------------

Создаем файл /usr/lib/sasl2/smtpd.conf и наполняем его таким содержимым:

pwcheck_method: saslauthd #Вытаскивать пароли используя демон saslauthd

Но останавливаться на этом не стоит, гонять пароли в открытом виде очень небезопасно, поэтому почтовую сессию надо зашифровать, хотя бы для тех кто пересылает почту из интернет. Поэтому прикручиваем к нашему SMTP серверу TLS.
Для начала сформируем сертификат. Для этого находясь в директории /etc/postfix выполним такую команду:

sudo openssl req -new -nodes -x509 -out smtpd.pem -keyout smtpd.pem -days 3650

На задаваемые вопросы надо ответить также как отвечали выше. Будьте внимательны на вопрос о Common Name надо ввести FQDN нашего сервера. Дальше в main.cf указываем:

# --------------TLS --------------------
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = no
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/postfix/smtpd.pem
smtpd_tls_cert_file = /etc/postfix/smtpd.pem
smtpd_tls_CAfile = /etc/postfix/smtpd.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

При таком раскладе почтовый клиент будет ругаться на сертификат, так что лучше его купить.

Для того чтобы Postfix принимал TLS соединения на отдельный порт 465/SMTPS в master.cf раскомментируем:

smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

И перезапустим Postfix.

Дальше решаем проблему борьбы со спамом.

Copyright © ABC-BIT 2010
info@abc-bit.ru

Автор: Basmach & Den
19.04.2010

Материал взят с сайта: http://abc-bit.ru/help/articles/articles_16.html

Главная > Программы > Postfix