Почтовый сервер Postfix, Dovecot

SMTP-сервер Linux

SMTP определяет, как отправлять почту с одного узла на другой; он также не зависит от системы, то есть отправитель и получатель могут иметь разные операционные системы.

SMTP требует только, чтобы сервер мог отправлять прямой ASCII-текст на другой сервер, что можно сделать, подключившись к серверу по порту 25, который является стандартным портом SMTP.

Большинство дистрибутивов Linux сегодня поставляются с двумя наиболее распространенными реализациями SMTP - sendmail и Postfix.

Sendmail - известный и бесплатный почтовый сервер, однако он имеет несколько сложную конструкцию и менее безопасен.

Postfix сделал еще один шаг вперед в реализации почтовых серверов, разработав их с учетом требований безопасности.

Компоненты почтовой службы

Почтовая служба на любом почтовом сервере состоит из трех компонентов:

Агент пользователя почты (MUA): этот компонент, который видит пользователь и с которым он взаимодействует, например Thunderbird и Microsoft Outlook, эти агенты пользователя отвечают за чтение почты и позволяют составлять письма.

Агент транспортировки почты (MTA): этот компонент отвечает за доставку почты с одного сайта на другой, например Sendmail и Postfix.

Агент доставки почты (MDA): этот компонент отвечает за распределение полученных на локальной машине сообщений по соответствующим пользовательским почтовым ящикам, например postfix-maildrop и Procmail.

Установка почтового сервера

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

Postfix является почтовым сервером по умолчанию в большинстве современных дистрибутивов Linux.

Сначала проверьте, установлен ли он в вашей системе:

$ rpm -qa | grep postfix

Если он не установлен, то установить почтовый сервер Postfix в дистрибутивах на базе Red Hat можно следующим образом:

$ dnf -y install postfix

Затем запустите службу postfix и включите ее при запуске системы:

$ systemctl start postfix
$ systemctl enable postfix

В дистрибутивах на базе Debian, таких как Ubuntu, вы можете установить его следующим образом:

$ apt-get -y install postfix

В процессе установки будет предложено выбрать тип конфигурации почтового сервера Postfix.

Из четырех вариантов выбора No configuration, Internet site, Internet with smarthost, Satellite system и Local only, мы выберем вариант No configuration.

Настройка почтового сервера Linux

После установки почтового сервера Postfix необходимо произвести его настройку; большинство конфигурационных файлов находится в каталоге /etc/postfix/.

Основную конфигурацию почтового сервера Postfix можно найти в файле /etc/postfix/main.cf.

Этот файл содержит множество опций, таких как:

  • myhostname

Эту опцию можно использовать для указания имени хоста почтового сервера. Это имя хоста Интернета, на который Postfix будет получать электронную почту.

Имена хостов могут быть такими, как mail.example.com, smtp.example.com.

myhostname = mail.example.com
  • mydomain

Эта опция представляет собой почтовый домен, который вы будете обслуживать, например example.com.

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

mydomain = example.com
  • myorigin

Все письма, отправленные с этого почтового сервера, будут выглядеть так, как будто они пришли с этой опции. Вы можете установить значение $mydomain.

myorigin = $mydomain

Вы можете использовать любое значение опции, просто поставьте перед ним знак $, например $mydomain.

  • mydestination

В этой опции перечислены домены, которые сервер Postfix использует для входящей электронной почты.

Она может принимать следующие значения:

mydestination = $myhostname, localhost.$mydomain, $mydomain, mail.$mydomain, www.$mydomain
  • mail_spool_directory

Почтовый сервер Postfix может использовать два способа доставки:

  • Непосредственно в почтовый ящик пользователя.

  • В центральный каталог spool, при этом почта будет находиться в каталоге /var/spool/mail с файлом для каждого пользователя.

mail_spool_directory = /var/spool/mail
  • mynetworks

Эта опция позволяет настроить, какие серверы могут ретранслировать почту через ваш сервер Postfix.

Эта опция должна принимать только локальные адреса, например, локальные почтовые скрипты на вашем сервере.

В противном случае спамеры могут использовать ваш почтовый сервер для ретрансляции своих сообщений и ваш почтовый сервер будет занесен в черный список, в результате чего вы не сможете получать много писем.

Эта опция имеет следующий синтаксис:

mynetworks = 127.0.0.0/8, 192.168.1.0/24
  • smtpd_banner

Эта переменная задает сообщение, которое сервер будет посылать клиенту после успешного соединения.

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

  • inet_protocols

Эта опция задает версию IP-протокола, используемую для соединений с сервером.

inet_protocols = ipv4

При изменении конфигурационных файлов почтового сервера Postfix необходимо перезагрузить службу:

$ systemctl reload postfix

При вводе любой конфигурации можно допустить ошибку, проверить наличие ошибок можно с помощью следующей команды:

$ postfix check

Этот инструмент поможет вам точно найти строку и ошибку, чтобы вы могли ее исправить.

Проверка очереди почты

Иногда очередь почты переполняются сообщениями. Это происходит по разным причинам, например, из-за сбоя в сети или по любой другой причине, которая может задержать доставку почты.

Чтобы проверить очередь почты на почтовом сервере Linux, используйте следующую команду:

$ mailq

Эта команда показывает очередь почты Postfix.

Если очередь переполнена и обработка сообщения занимает несколько часов, то следует очистить очередь почты.

$ postfix flush

Теперь, проверив очередь писем, вы должны обнаружить, что она пуста.

Тестирование почтового сервера Linux

После правильной настройки почтового сервера Postfix необходимо протестировать почтовый сервер.

Первым шагом является использование локального почтового агента пользователя, например mailx или mail, который является симлинком на mailx.

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

$ echo "This is message body" | mailx -s "This is Subject" -r "likegeeks<likegeeks@example.com>" -a /path/to/attachment someone@example.com

Затем попробуйте получить почту с удаленного сайта.

Если возникнут проблемы, проверьте журналы. Файл журнала в дистрибутивах на базе Red Hat находится в файле /var/log/maillog, а в дистрибутивах на базе Debian - в файле /var/log/mail.log или определяется в конфигурации rsyslogd.

Если проблемы сохраняются, попробуйте проверить настройки DNS и проверить MX-записи с помощью сетевых команд Linux.

Защита почтовых ящиков от спама с помощью SpamAssassin

Одним из способов борьбы со спамом является сканирование почтовых ящиков каким-либо инструментом в поисках определенных шаблонов, ассоциирующихся со спамом.

Одним из лучших решений является SpamAssassin с открытым исходным кодом.

Установить его можно следующим образом:

$ dnf -y install spamassassin

Затем запустите службу и включите ее при запуске:

$ systemctl start spamassassin

$ systemctl enable spamassassin

После установки можно проверить конфигурацию в файле:

/etc/mail/spamassassin/local.cf

SpamAssassin определяет, является ли письмо спамом или нет, на основании результатов оценки различных скриптов.

Если сообщение имеет более высокий балл, это означает большую вероятность того, что письмо является спамом.

В конфигурационном файле параметр required_hits 5 указывает на то, что SpamAssassin будет помечать письмо как спам, если его оценка равна пяти или выше.

Параметр report_safe принимает значения 0, 1 или 2. Если значение 0, то письмо, помеченное как спам, отправляется как есть, изменяются только заголовки, чтобы показать, что это спам.

Если значение 1 или 2, то SpamAssassin генерирует новое сообщение отчета и отправляет его получателю.

Значение 1 означает, что спамерское сообщение закодировано как content message/rfc822, а если значение равно 2, то сообщение закодировано как text/plain content.

text/plain более безопасен, так как некоторые почтовые клиенты выполняют message/rfc822 и могут заразить компьютер клиента.

Теперь нам необходимо интегрировать его в Postfix. Проще всего это сделать с помощью procmail.

Нам необходимо создать файл с именем

/etc/procmailrc

и добавить в него следующее содержимое:

:0 hbfw
| /usr/bin/spamc

Затем редактируем конфигурационный файл Postfix /etc/postfix/main.cf и изменяем его следующим образом:

mailbox_command = /usr/bin/procmail

Наконец, перезапустите службы Postfix и SpamAssassin:

$ systemctl restart postfix
$ systemctl restart spamassassin

Однако иногда SpamAssassin не распознает спам-сообщения, что приводит к заполнению почтовых ящиков спамом.

К счастью, вы можете фильтровать сообщения до того, как они попадут на сервер Postfix, используя списки черных дыр реального времени (RBL). Это позволит снизить нагрузку на почтовый сервер и сохранить чистоту почтового сервера.

Откройте конфигурационный файл сервера Postfix /etc/postfix/main.cf и измените опцию smtpd_recipient_restrictions и добавьте следующие опции следующим образом:

strict_rfc821_envelopes = yes
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
unverified_recipient_reject_code = 554
smtpd_recipient_restrictions =
reject_invalid_hostname,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
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,
permit

Затем перезапустите свой сервер postfix:

$ systemctl restart postfix

Приведенные выше RBL являются общепринятыми; вы можете найти в Интернете другие списки и попробовать их.

Защита SMTP-соединения

Для защиты от атак типа "человек посередине" (MITM) лучше передавать SMTP-трафик по протоколу TLS.

Сначала необходимо сгенерировать сертификат и ключ с помощью команды openssl:

$ openssl genrsa -des3 -out mail.key
$ openssl req -new -key mail.key -out mail.csr
$ cp mail.key mail.key.original
$ openssl rsa -in mail.key.original -out mail_secure.key
$ openssl x509 -req -days 365 -in mail_secure.csr -signkey mail_secure.key -out mail_secure.crt
$ cp mail_secure.crt /etc/postfix/
$ cp mail_secure.key /etc/postfix/

Затем добавьте в конфигурационный файл Postfix /etc/postfix/main.cf следующую опцию:

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/mail_secure.crt
smtpd_tls_key_file = /etc/postfix/mail_secure.key
smtp_tls_security_level = may

Затем перезапустите свой сервер postfix:

$ systemctl restart postfix

Теперь необходимо выбрать TLS на клиенте при подключении к серверу.

При первой отправке почты после изменения настроек вы получите предупреждение о том, что сертификат не подписан.

Применение сертификатов Let's Encrypt

Let's Encrypt - это бесплатный поставщик SSL-сертификатов, позволяющий шифровать трафик.

Вместо того чтобы использовать самоподписанные сертификаты, которые раздражают пользователей, не доверяющих им, вы можете воспользоваться этим хорошим решением.

Сначала установите программу letsencrypt:

$ yum install letsencrypt

Если же вы используете дистрибутив на базе Debian, вы можете воспользоваться следующей командой:

$ apt-get install letsencrypt

Затем запустите программу let'sencrypt следующим образом:

$ letsencrypt certonly --standalone -d yourdomain.com

Вместо yourdomain.com следует указать ваш реальный домен.

После ответов на вопросы о контактной электронной почте, домене почтового сервера и лицензии все должно быть в порядке.

Сертификаты будут получены:

/etc/letsencrypt/live/yourdomain.com/

И последнее, что необходимо сделать, - заставить postfix использовать эти сертификаты, для чего можно воспользоваться следующими командами:

sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/yourdomain.com/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/yourdomain.com/privkey.pem'

Не забудьте заменить yourdomain.com на ваш реальный домен.

Наконец, перезапустите свой сервер postfix:

$ systemctl restart postfix

Основы протоколов POP3 и IMAP

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

  • Пользователям необходимы локальные копии электронной почты для просмотра в автономном режиме.

  • Формат файлов mbox не поддерживается. Формат mbox используется многими почтовыми агентами, такими как mailx и mutt.

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

  • Некоторые почтовые серверы по соображениям безопасности не предоставляют доступ к общим каталогам спула почты.

Для решения этих задач необходимо использовать протоколы доступа к почте.

Наиболее распространены два популярных протокола доступа к почте - Post Office Protocol (POP) и Internet Message Access Protocol (IMAP).

Идея POP очень проста:

Центральный почтовый сервер Linux постоянно находится в режиме онлайн и принимает и хранит электронную почту всех пользователей. Все полученные письма ставятся в очередь на сервере до тех пор, пока пользователь не заберет их.

Когда пользователь хочет отправить письмо, почтовый клиент передает его через центральный почтовый сервер Linux по обычному протоколу SMTP.

Обратите внимание, что SMTP-сервер и POP-сервер могут находиться в одной системе без каких-либо проблем. Большинство серверов сегодня так и делают.

Такие возможности, как сохранение основной копии электронной почты пользователя на сервере, отсутствовали, что привело к разработке IMAP.

При использовании IMAP ваш почтовый сервер Linux будет поддерживать три режима доступа:

  • Онлайн-режим аналогичен прямому доступу к файловой системе почтового сервера Linux.

  • Оффлайновый режим похож на работу POP, когда клиент отключен от сети, за исключением случаев, когда он получает письмо. В этом режиме сервер обычно не сохраняет копию письма.

  • В режиме отключения пользователи могут сохранять кэшированные копии своих писем, а сервер сохраняет копию письма.

Существует несколько реализаций IMAP и POP, наиболее популярной из них является сервер Dovecot, который обеспечивает работу обоих протоколов.

POP3, POP3S, IMAP и IMAPS прослушивают порты 110, 995, 143 и 993 соответственно.

Установка Dovecot

Большинство дистрибутивов Linux поставляются с предустановленным Dovecot. Однако вы можете установить Dovecot в дистрибутивах на базе Red Hat следующим образом:

$ dnf -y install dovecot

Дистрибутивы на базе Debian предоставляют функции IMAP и POP3 в виде двух отдельных пакетов, которые можно установить следующим образом:

$ apt-get -y install dovecot-imapd dovecot-pop3d

Появится запрос на создание самоподписанных сертификатов для использования IMAP и POP3 по протоколу SSL/TLS. Выберите "Да" и введите имя хоста вашей системы, когда появится запрос.

Затем можно запустить службу и включить ее при запуске следующим образом:

$ systemctl start dovecot
$ systemctl enable dovecot

Настройка Dovecot

Основным конфигурационным файлом для Dovecot является файл:

/etc/dovecot/dovecot.conf

В некоторых дистрибутивах Linux конфигурация размещается в папке и используют директиву include для включения настроек в файлы.

/etc/dovecot/conf.d/

Для настройки Dovecot можно использовать следующий список параметров:

  • protocols: протоколы, которые необходимо поддерживать.

protocols = imap pop3 lmtp

*lmtp означает локальный протокол передачи почты.

  • listen: IP-адреса для прослушивания.

listen = *, ::

*Звездочка означает все интерфейсы ipv4, а :: - все интерфейсы ipv6.

  • userdb: база данных для аутентификации пользователей.

userdb {
driver = pam
}
  • passdb: база данных паролей для аутентификации пользователей.

passdb {
driver = passwd
}
  • mail_location: эта запись в файле /etc/dovecot/conf.d/10-mail.conf:

mail_location = mbox:~/mail:INBOX=/var/mail/%u

Безопасность Dovecot

Dovecot поставляется с типовыми SSL-сертификатами и файлами ключей. Посмотрите на этот файл:

/etc/dovecot/conf.d/10-ssl.conf

ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

Когда пользователь попытается подключиться к серверу dovecot, он выдаст предупреждение о том, что сертификаты не подписаны, при желании можно приобрести сертификат в центре сертификации.

Или, если вы используете сертификаты Let's Encrypt, вы можете указать на них:

ssl_cert = </etc/letsencrypt/live/yourdomain.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/yourdomain.com/privkey.pem

Не забудьте открыть порты сервера dovecot в iptables, добавив правила iptables для портов 110, 995, 143, 993, 25.

Затем сохраните правила.

Или, если вы используете firewalld, вы можете сделать следующее:

$ firewall-cmd --permanent --add-port=110/tcp --add-port=995/tcp
$ firewall-cmd --permanent --add-port=143/tcp --add-port=993/tcp
$ firewall-cmd --reload

И опять же, для устранения неполадок проверяются файлы журналов /var/log/messages, /var/log/maillog и /var/log/mail.log.

Почтовый сервер Linux является одним из самых простых в работе серверов, особенно почтовый сервер Postfix.

Last updated