Установка Postfix и Dovecot на CentOS 6 VPS. Почтовый сервер на CentOS

В этой статье мы рассмотритм как установить почтовый сервер Postfix и IMAP\POP3 сервер Dovecot на CentOS 6 VPS. Это будет только первая статья из цикла. И в ней мы только установим базовые сервисы в системе. Вообще тема установки и настройки почтового сервера весьма популярна, и казалось бы по ней написаны тучи мануалов на всех языках. Еа деле все не так гладко. Большинство мануалов просто тупой копи паст, еще процентов двадцать это переводы буржуйских статей где автор перевода с трудом вообще понимает что пишет и только маленькая часть написана гиками самостоятельно, но проблема в том, что в статьях написанных гиками иногда не могу разобраться сами гики. А я хочу статью де все работает и не надно вникать в подробности. Хочу конкретные примеры и все это обкатать на боевом серваке. Желание сбылось. Поехали.

Установка Postfix

Начинаем у обновления системы:

yum update -y
yum update -y

Добавляем новую группу в систему для создания виртуальных почтовых ящиков:

groupadd vmail -g 2222
groupadd vmail -g 2222

Создаем пользователя для тех же целей:

useradd vmail -r -g 2222 -u 2222 -d /var/vmail -m -c "My Email user"
useradd vmail -r -g 2222 -u 2222 -d /var/vmail -m -c "My Email user"

И ставим пакет с сервером:

yum remove exim sendmail
yum install postfix cronie
yum remove exim sendmail
yum install postfix cronie

Настройка Postfix

Начинаем с редактирования файла main.cf:

cp /etc/postfix/main.cf{,.orig}
vim /etc/postfix/main.cf
cp /etc/postfix/main.cf{,.orig}
vim /etc/postfix/main.cf

Выпиливаем от туда все и записываем строки ниже:

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/postfix/aliases
alias_database = $alias_maps
 
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost
 
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
 
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.6.6/samples
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
 
relay_domains = *
virtual_alias_maps=hash:/etc/postfix/vmail_aliases
virtual_mailbox_domains=hash:/etc/postfix/vmail_domains
virtual_mailbox_maps=hash:/etc/postfix/vmail_mailbox
 
virtual_mailbox_base = /var/vmail
virtual_minimum_uid = 2222
virtual_transport = virtual
virtual_uid_maps = static:2222
virtual_gid_maps = static:2222
 
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
smtpd_sasl_local_domain = $mydomain
broken_sasl_auth_clients = yes
 
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/postfix/aliases
alias_database = $alias_maps

inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost

debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5

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.6.6/samples
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES

relay_domains = *
virtual_alias_maps=hash:/etc/postfix/vmail_aliases
virtual_mailbox_domains=hash:/etc/postfix/vmail_domains
virtual_mailbox_maps=hash:/etc/postfix/vmail_mailbox

virtual_mailbox_base = /var/vmail
virtual_minimum_uid = 2222
virtual_transport = virtual
virtual_uid_maps = static:2222
virtual_gid_maps = static:2222

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
smtpd_sasl_local_domain = $mydomain
broken_sasl_auth_clients = yes

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Теперь создаем файл vmail_domains. Тут будет ваши виртуальные почтовые домены:

vim /etc/postfix/vmail_domains
linuxspace.org            OK
marketxxx.com      OK
vim /etc/postfix/vmail_domains
linuxspace.org            OK
marketxxx.com      OK

Теперь создаем файл vmail_mailbox тут мы будем задавать сами почтовые ящики:

vim /etc/postfix/vmail_mailbox
admin@linuxspace.org           linuxspace.org/admin/
webmaster@marketxxx.com     webmaster.com/webmaster/
vim /etc/postfix/vmail_mailbox
[email protected]           linuxspace.org/admin/
[email protected]     webmaster.com/webmaster/

Теперь создаем файл vmail_aliases тут мы будем задавать алиасы:

vim /etc/postfix/vmail_aliases
admin@linuxspace.org           admin@linuxspace.org
webmaster@marketxxx.com     foo@bar.tld

Применяем сонфигурацию в Postfix:

postmap /etc/postfix/vmail_domains
postmap /etc/postfix/vmail_mailbox
postmap /etc/postfix/vmail_aliases
 
touch /etc/postfix/aliases
vim +/submission /etc/postfix/master.cf
 
submission inet n       -       n       -       -       smtpd
postmap /etc/postfix/vmail_domains
postmap /etc/postfix/vmail_mailbox
postmap /etc/postfix/vmail_aliases

touch /etc/postfix/aliases
vim +/submission /etc/postfix/master.cf

submission inet n       -       n       -       -       smtpd

Готово. Перезагрузите Postfix.

Установка и настройка Dovecot

yum install dovecot
yum install dovecot

Сразу-же открываем файл dovecot.conf и меняем там все:

cp /etc/dovecot/dovecot.conf{,.orig}
vim /etc/dovecot/dovecot.conf
 
listen = *
ssl = no
protocols = imap lmtp
disable_plaintext_auth = no
auth_mechanisms = plain login
mail_access_groups = vmail
default_login_user = vmail
first_valid_uid = 2222
first_valid_gid = 2222
#mail_location = maildir:~/Maildir
mail_location = maildir:/var/vmail/%d/%n
 
passdb {
    driver = passwd-file
    args = scheme=SHA1 /etc/dovecot/passwd
}
userdb {
    driver = static
    args = uid=2222 gid=2222 home=/var/vmail/%d/%n allow_all_users=yes
}
service auth {
    unix_listener auth-client {
        group = postfix
        mode = 0660
        user = postfix
    }
    user = root
}
service imap-login {
  process_min_avail = 1
  user = vmail
}
cp /etc/dovecot/dovecot.conf{,.orig}
vim /etc/dovecot/dovecot.conf

listen = *
ssl = no
protocols = imap lmtp
disable_plaintext_auth = no
auth_mechanisms = plain login
mail_access_groups = vmail
default_login_user = vmail
first_valid_uid = 2222
first_valid_gid = 2222
#mail_location = maildir:~/Maildir
mail_location = maildir:/var/vmail/%d/%n

passdb {
    driver = passwd-file
    args = scheme=SHA1 /etc/dovecot/passwd
}
userdb {
    driver = static
    args = uid=2222 gid=2222 home=/var/vmail/%d/%n allow_all_users=yes
}
service auth {
    unix_listener auth-client {
        group = postfix
        mode = 0660
        user = postfix
    }
    user = root
}
service imap-login {
  process_min_avail = 1
  user = vmail
}

Создадим файл для хранения юзерских паролей:

touch /etc/dovecot/passwd
touch /etc/dovecot/passwd

Получаем хэш сумму из пароля:

doveadm pw -s sha1 | cut -d '}' -f2
doveadm pw -s sha1 | cut -d '}' -f2

Записываем в файл:

vim /etc/dovecot/passwd
admin@linuxspace.org:DOzcsKI8HY0bg8LAuz0DPKwS3WA=
vim /etc/dovecot/passwd
[email protected]:DOzcsKI8HY0bg8LAuz0DPKwS3WA=

Меняем файлу права:

chown root: /etc/dovecot/passwd
chmod 600 /etc/dovecot/passwd
chown root: /etc/dovecot/passwd
chmod 600 /etc/dovecot/passwd

Стартуем все сервисы и добавляем в автозагрузку:

chkconfig postfix on
chkconfig dovecot on
service postfix restart
service dovecot restart
chkconfig postfix on
chkconfig dovecot on
service postfix restart
service dovecot restart

Это абсолютно точный мануал. После того как вы выполните последнюю строчку кода в консоли все должно заработать.

Проверка сетапа

Мониторинг логов:

tail -f /var/log/maillog
tail -f /var/log/maillog

На худой очень конец telnet (по старинке):

[root@inferno conf.d]# telnet localhost pop3
Trying localhost ...
Connected to localhost .
Escape character is '^]'.
+OK Dovecot ready.
USER admin
+OK
PASS mypassword
USER webmaster
+OK
[[email protected] conf.d]# telnet localhost pop3
Trying localhost ...
Connected to localhost .
Escape character is '^]'.
+OK Dovecot ready.
USER admin
+OK
PASS mypassword
USER webmaster
+OK

Можно использовать swaks:

yum install swaks  -y
swaks --to aberber@allot.com --from admin@linuxspace.com
yum install swaks  -y
swaks --to [email protected] --from [email protected]

И вы получите отправленное из консоли тестовое письмо:
TEST_MAIL

Не забываем, что это простая настройка сервера с аутентификацией PLAIN TEXT и использовать такое в незащищенной сети строго настрого не советуется. Так-как всю вашу почту будет читать все школьники в радиусе Интернета. Это первая статья из цикла “Создание и настройка полноценного почтового сервера на Centos VPS” В следующей статье мы рассмотрим как на все это добро прикрутить симпотичну вебморду Roundcube Webmail

Весь сетап проверен лично мной на боевом Centos сервере с реальными доменами и адресами. Все должно работать безукаризненно.