Сначала капельку терминологии:
MTA - mail transfer agent. Это сервис, который передает почту между серверами, используя протокол SMTP. (эту задачу будет выполнять Exim4).
MSA - mail submission agent. Этот сервис используется для отправки почты пользователем с сервера наружу. Именно он получает запрос на обработку исходящего письма от нашего пользователя по протоколу SMTP на портах 25 или 587 и передает ее MTA для дальнейшей транспортировки. То есть это сервис для исходящей почты. (эту задачу будет выполнять Exim4).
MDA - mail delivery agent. Это сервис, который раскладывает почту по папкам, после того как MTA принял какую-то почту извне сервера для нашего пользователя. То есть это сервис для входящей почты. (эту задачу будет выполнять Exim4).
MRA - mail retrieval agent. Это сервис, который достает почту из папок для клиента, пришедшего по протоколам POP/IMAP. (эту задачу будет выполнять Dovecot).
MUA - mail user agent. Это программа, предоставляющая человеческий интерфейс для обращения к MRA по протоколу POP/IMAP. Она может быть исполнена как вэб-приложение на том же сервере (RoundCube, Squirrel, Horde, etc.) так и быть десктопным приложением (Outlook, Thunderbird, The Bat). В любом случае это приложение подключается к MRA на порт 110/143 и работает по протоколу POP/IMAP. (эту задачу будет выполнять десктопный клиент на стороне пользователя).
Цепочка отправки письма выглядит так:
MUA(Outlook, отсылка, ivanov@abc.com)-->MSA-->MTA(abc.com)-->
>-----интернет----->
-->MTA(xyz.com)-->MDA-->MRA-->MUA(Outlook, прием, petrov@xyz.com)
Любой из вышеперечисленных сервисов может работать не только по обычным протоколам, но и по шифрованным. Такие протоколы обозначаются буквами S в конце. Например IMAPS. Номера портов соответственно тоже меняются.
Итак приступим...
Все будет делаться на моем любимом Debian, поэтому Exim4 у нас уже стоит. Надо поставить еще Dovecot и два его модуля, по одному на каждый протокол:
apt-get install dovecot-common dovecot-imapd dovecot-pop3d
С настройки Dovecot и начнем.
Сохраняем конфигурационный файл и редактируем текущий:cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
chattr +i /etc/dovecot/dovecot.conf.origvi /etc/dovecot/dovecot.conf
В принципе лучше его пока не сильно трогать. Только перечислим протоколы да место, куда Exim4 будет складывать пришедшую почту для Dovcot'а:
protocols = imap imaps pop3 pop3s
mail_location = maildir:/var/mail/%u
Все остальное заведется из коробки. Можно будет принять и отправить почту. А остальное уже по желанию регулируется со временем. Намного проще
Так как у нас Dovecot будет искать пользователей через PAM (что очень по фэн-шую), то мы будем добавлять их в системе. В pam.d уже есть конфиг dovecot, в котором поиск ведется только по файлам unix.
В моем случае пользователи не должны ходить на сервер никак кроме почты, так что мы им сделаем несуществующий шелл. Создадим первого пользователя:
useradd -m -s /bin/false -p veph2Fei7u john.smithТеперь мы можем запустить на своем десктопе почтового клиента и попробовать настроить.
Логин будет john.smith, пароль veph2Fei7u
Внимание, у Вас получится подключиться и по POP и по IMAP только если Вы поставите SSL-шифрование. Потому что в dovecot по умолчанию запрещено аутентифицироваться через plain-пароль. И пока мы не меняли конфиг так оно и есть:
Итак по сути у нас уже есть рабочий Dovecot.
Но создать учетную запись в почтовой программе пока не получится из-за ошибки SMTP. Ведь мы его еще не настроили.
Теперь перейдем к настройке Exim4.
Поменяем устанавливаемую по умолчанию light версию на heavy:
apt-get install exim4-daemon-heavy
Затем переконфигурируем Exim4 заново:
dpkg-reconfigure exim4-configВ процессе диалога мы выберем:
General type of mail configuration: internet site;
System mail name (ну тут понятно, на свой надо поменять): example.com
IP-addresses to listen on for incoming SMTP connections: <стираем все и оставляем пустое>
Other destinations for which mail is accepted: example.com
Domains to relay mail for: <стираем все и оставляем пустое>
Machines to relay mail for: <стираем все и оставляем пустое>
Keep number of DNS-queries minimal: NO
Delivery method for local mail (это религиозный момент): Maildir format in home directory
Split configuration into small files: YES
Обязательно надо создать сертификаты. И тут милейший сюрприз. Пакет exim4-base содержит генератор сертификатов.... замаскированный под документацию. Прямо как пасхальное яйцо. Запустим его:
/usr/share/doc/exim4-base/examples/exim-gencertПосле нескольких несложных вопросов у нас появятся сертификаты в директории /etc/exim4:
# ls -l /etc/exim4 | egrep 'crt|key'Создадим дополнительный конфиг. Все его опции достаточно очевидны из названия, кроме последней. Она запрещает проверять пароль, отосланный в открытом виде (без TLS):
-rw-r----- 1 root Debian-exim 912 Sep 17 22:13 exim.crt
-rw-r----- 1 root Debian-exim 887 Sep 17 22:13 exim.key
tee > /etc/exim4/conf.d/main/00_exim4-config_local_options
CHECK_RCPT_REVERSE_DNS = no
CHECK_RCPT_IP_DNSBL = zen.spamhaus.org:dnsbl.sorbs.net:cbl.abuseat.org:bl.spamcop.net
CHECK_RCPT_VERIFY_SENDER = yes
CHECK_DATA_VERIFY_HEADER_SENDER = yes
MAILDIR_HOME_MAILDIR_LOCATION = /var/mail/$local_part
MAIN_TLS_ENABLE = yes
tls_on_connect_ports = 465:587
daemon_smtp_ports = 25:465:587
AUTH_SERVER_ALLOW_NOTLS_PASSWORDS = no
Порт 587 используется теми клиентами, которым провайдер Интернета запретил исхождение на 25-й. И если 25-й порт используется и MTA и MSA, то на 587-м MTA не будет, а значит там можно жестко навязать аутентификацию, а раз так, то и шифрование TLS. 465 - это порт изначально для тех, кто любит шифрование - SMTPS.Так как содержать почту в домашнем каталоге не совсем удобно, и мы уже указали выше, что она будет в /var/mail/имя_пользователя, то скажем Exim'у, что работать с директорией /var/mail надо от имени группы mail:
perl -i -pe 'print " group = mail\n" if $. == 30' /etc/exim4/conf.d/transport/30_exim4-config_maildir_homeРаз у нас пользователи будут аутентифицироваться, то надо как и для Dovecot иметь конфиг в PAM. Но у Dovecot он идет из коробки, а для Exim4 придется создать самостоятельно:
cat > /etc/pam.d/exim
#%PAM-1.0
@include common-auth
@include common-account
@include common-session
На последок в раскомментируем секции аутентификации:
vi /etc/exim4/conf.d/auth/30_exim4-config_examples
plain_server:
driver = plaintext
public_name = PLAIN
server_condition = "${if pam{$2:$3}{1}{0}}"
#server_condition = "${if crypteq{$auth3}{${extract{1}{:}{${lookup{$auth2}lsearch{CONFDIR/passwd}{$value}{*:*}}}}}{1}{0}}"
server_set_id = $auth2
server_prompts = :
.ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}
.endif
Теперь обязательно рестартануть Exim4:
и там же чуть ниже:
login_server:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
server_condition = "${if pam {$1:$2}{yes}{no}}"
#server_condition = "${if crypteq{$auth2}{${extract{1}{:}{${lookup{$auth1}lsearch{CONFDIR/passwd}{$value}{*:*}}}}}{1}{0}}"
server_set_id = $auth1
.ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS
server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}}
.endif
service exim4 restartГлавное проверить, что возможность аутентификации появилась:
# telnet localhost 25Значит сервер будет принимать аутентификацию.
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 example.com ESMTP Exim 4.80 Mon, 17 Sep 2012 22:26:31 +0000
ehlo test.com
250-example.com Hello localhost [127.0.0.1]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250-AUTH PLAIN LOGIN
250-STARTTLS
250 HELP
quit
Если вдруг что-то не завелось, то выключаем Exim4 и запускаем его вручную в отдельном окне в подробным выводом в консоль:
service exim4 stopА такой командой можно подробно понять как происходит процесс общения по SMTP:
exim -bd -d+all
swaks --tls --server example.com --to john.smith@example.com
Одна из статей, откуда брал инфу: Exim и все-все-все
Привет, нашел это статью делаю по ней настройку, вроде бы все нормально, почтовый клиент определяет тип соединения, но как только начинает проверку пароля и имени пользователя выдает ошибку.
ОтветитьУдалитьНе подскажешь в какую сторону смотреть, как понять в чем дело?
Извиняюсь, только сейчас заметил сообщение.
УдалитьБез подробностей ничего не могу сказать. Только лишь повторить последние слова из статьи:
Если вдруг что-то не завелось, то выключаем Exim4 и запускаем его вручную в отдельном окне в подробным выводом в консоль:
service exim4 stop
exim -bd -d+all
SMTP protocol synchronization error (next input sent too soon: pipelining was not advertised): rejected "EHLO we-guess.mozilla.org" H=[192.168.0.2] next input="QUIT\r\n"
ОтветитьУдалить2015-03-04 11:12:45 SMTP protocol synchronization error (next input sent too soon: pipelining was not advertised): rejected "EHLO we-guess.mozilla.org" H=[192.168.0.2] next input="QUIT\r\n"
2015-03-04 11:12:45 SMTP protocol synchronization error (next input sent too soon: pipelining was not advertised): rejected "EHLO we-guess.mozilla.org" H=[192.168.0.2] next input="QUIT\r\n"
Вам надо более детально описывать ошибку, а не только выкидывать стэк.
УдалитьНо вообще описание тут:
http://serverfault.com/questions/515149/exim-smtp-synchronization-error-when-pipelining