Настройка почтового сервера для массовой рассылки сообщений

Настройка OpenDKIM и Postfix

OpenDKIM

Переносим старый конфигурационный файл opendkim и создаем новый.

FreeBSD:

mv /usr/local/etc/mail/opendkim.conf /usr/local/etc/mail/backup.opendkim.conf

ee /usr/local/etc/mail/opendkim.conf

Linux:

mv /etc/opendkim.conf /etc/backup.opendkim.conf

vi /etc/opendkim.conf

И приводим его к следующему виду:

AutoRestart             Yes
AutoRestartRate         10/1h
Umask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256
UserID                  opendkim:opendkim
Socket                  inet:12301@localhost

* все параметры можно оставить, как в данном примере, за исключением Socket — можно указать любой другой порт, вместо 12301.

Создаем файл доверенных узлов. В него пока войдут имя локального хоста (localhost) и его IP-адрес, которые будут приняты, как доверенные и подписаны:

vi /etc/opendkim/TrustedHosts

И вносим следующее:

127.0.0.1
localhost

* в данный файл мы заносим все IP-адреса и сети почтовых серверов, которые могут использовать наш сервер как почтовый релей. Таким образом, если в вашей системе используется подобная конфигурация, в файл TrustedHosts мы должны добавить адреса данных почтовых серверов.

Открываем файл /etc/default/opendkim:

vi /etc/default/opendkim

… его либо не должно быть, либо он должен быть пустой, либо проверяем строку с настройкой SOCKET и приводим ее к виду:

SOCKET=inet:12301@localhost

Запускаем службу opendkim.

На FreeBSD:

Сначала добавляем демона в rc.conf:

echo ‘milteropendkim_enable=»YES»‘ >> /etc/rc.conf

echo ‘milteropendkim_uid=»opendkim»‘ >> /etc/rc.conf

* первая команда разрешает запуск демона, вторая — принудительно заставляет его запускаться от пользователя opendkim.

И запускаем его:

service milter-opendkim start

На Linux:

systemctl enable opendkim

systemctl start opendkim

Postfix

Открываем конфигурационный файл.

FreeBSD:

ee /usr/local/etc/postfix/main.cf

Linux:

vi /etc/postfix/main.cf

Добавляем или редактируем:

milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

* если smtpd_milters и non_smtpd_milters присутствуют в конфигурационном файле, то приведенные в данном примере значения нужно дописать к имеющимся.
** 12301 — порт работы opendkim, который был задан в opendkim.conf.

Перезапускаем Postfix:

service postfix restart

или:

systemctl restart postfix

Шаг 2 — Настройка Postfix

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

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

Откройте его для редактирования в предпочитаемом текстовом редакторе:

Найдите следующие строки:

/etc/postfix/main.cf

Задайте для параметра значение :

/etc/postfix/main.cf

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

/etc/postfix/main.cf

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

/etc/postfix/main.cf

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

/etc/postfix/main.cf

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

После внесения изменений сохраните и закройте файл.

Примечание. В случае хостинга нескольких доменов на одном сервере другие домены также можно передать Postfix с помощью директивы .

Затем перезапустите Postfix, выполнив следующую команду:

Вы настроили Postfix только для отправки почты с вашего сервера. Теперь протестируем настройку, отправив тестовое сообщение на адрес электронной почты.

Настройка Dovecot

Открываем конфигурационный файл10-mail.conf:

vi /etc/dovecot/conf.d/10-mail.conf

Находим строку с mail_plugins и приводим ее к виду:


mail_plugins = $mail_plugins quota

* данная строка подключает к плагинам дополнительно плагин для управления квотами (quota). Если опция закомментирована, снимаем комментарий.

Открываем конфигурационный файл 20-imap.conf:

vi /etc/dovecot/conf.d/20-imap.conf

Находим опцию protocol imap и добавим в нее также возможность использования плагина с квотами:

protocol imap {
  mail_plugins = $mail_plugins imap_quota
}

* опция mail_plugins может быть закомментирована. Если это так, то коментарий снимаем.

Открываем конфигурационный файл 10-master.conf:

vi /etc/dovecot/conf.d/10-master.conf

Находим опцию service dict, в ней unix_listener dict и приводим ее к виду:

service dict {
    unix_listener dict {
    mode = 0660
    user = vmail
    group = vmail
  }
}

Открываем файл 90-quota.conf:

vi /etc/dovecot/conf.d/90-quota.conf

Добавляем:

plugin {
  quota = dict:User quota::proxy::quota
}

* или снимаем комментарий с соответствующей строки quota = dict:User quota::proxy::quota.

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

vi /etc/dovecot/dovecot.conf

Находим раздел dict и снимаем комментарий или добавляем:

dict {
  quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}

Теперь создаем файл для настройки выгрузки квот:

vi /etc/dovecot/dovecot-dict-sql.conf.ext

connect = host=localhost dbname=postfix user=postfix password=postfix123
map {
  pattern = priv/quota/storage
  table = quota2
  username_field = username
  value_field = bytes
}
map {
  pattern = priv/quota/messages
  table = quota2
  username_field = username
  value_field = messages
}

* где host — сервер mysql, к которому будем подключаться; dbname — имя базы данных, в которой находятся пользователи postfix; user — пользователь, под которым мы подключаемся к базе; password — пароль для подключения к базе. В данном примере мы подключимся к СУБД, которая находится на том же сервере (localhost) к базе postfix под пользователем postfix с паролем postfix123.

Откроем наш файл, в котором мы описываем настройки выборки данных по пользователям из базы данных:

vi /etc/dovecot/dovecot-sql.conf.ext

Находим запрос user_query и дописываем в SELECT CONCAT(‘*:bytes=’, quota) AS quota_rule — у меня в итоге получилось:

user_query = SELECT CONCAT(‘/home/mail/’,LCASE(`domain`),’/’,LCASE(`maildir`)), 1024 AS uid, 1024 AS gid, CONCAT(‘*:bytes=’, quota) AS quota_rule FROM mailbox WHERE username = ‘%u’

* если в нашем файле запросов есть несколько строк user_query, то необходимо дописать запрос для последней.

Проверяем конфигурационный файл dovecot:

doveconf

… и если команда не вернет ошибку, перезапускаем его:

systemctl restart dovecot

Настройка Spamassassin

В конфигурационном файле добавляем следующие строки:

vi /etc/mail/spamassassin/local.cf

include /usr/share/spamassassin/99_filter.cf

* в данном примере мы подгружаем файл 99_filter.cf, в котором будут наши ключевые фразы.

Создаем файл 99_filter.cf с ключевыми фразами:

vi /usr/share/spamassassin/99_filter.cf

body FILTER_CONTROL             /Bad Phrase|Sale/Бомба/i
describe FILTER_CONTROL         Bad Phrase description
score FILTER_CONTROL            0.001

* в данном примере мы задали настройку для двух фраз — Bad Phrase, Sale и бомба. Если в контенте письма попадутся данные фразы, им будет добавлен заголовок X-Spam-Status, в который попадет метка FILTER_CONTROL. Также мы задаем небольшой бал СПАМа, без него метка добавляться не будет (если необходимо, чтобы письмо попадало в СПАМ, задаем большой бал).

Перезапускаем spamassassin:

systemctl restart spamassassin

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

X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,FILTER_CONTROL
    autolearn=no autolearn_force=no version=3.4.0

* как видим, в тексте есть наша метка FILTER_CONTROL.

Предварительные требования

Для выполнения заданий этого обучающего модуля вам потребуется доступ к пользователю без прав root с привилегиями . Для создания такого пользователя следуйте указаниям руководства «Начальная настройка сервера Ubuntu 18.04».

Для правильной настройки Postfix вам потребуется полностью квалифицированное доменное имя, указывающее на сервер Ubuntu 18.04. Полезную информацию по настройке доменного имени с помощью DigitalOcean можно найти в этом руководстве. Если вы планируете принимать почту, вам также потребуется запись MX, указывающая на ваш почтовый сервер.

Для целей этого обучающего модуля мы предположим, что вы настраиваете хост с FQDN .

Шаг 7 — Инициализация Maildir и тестирование клиента

Теперь мы можем протестировать клиент.

Самый простой способ создания структуры Maildir в домашнем каталоге — отправить себе электронное письмо. Для этого мы можем использовать команду Поскольку файл будет доступен только после создания Maildir, нам нужно отключить запись в него для нашего первого письма. Опция поможет нам в этом.

Для отправки письма добавьте строку в команду . Измените команду, чтобы сделать получателем вашего пользователя Linux:

Вы можете получить следующий ответ:

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

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

Похоже наше письмо доставлено.

Управление почтой с помощью клиента

Используйте клиент для проверки почты:

Вы должны увидеть новое сообщение:

Просто нажмите для вывода этого сообщения:

Вы можете веернуться к списку сообщений, введя и нажав :

Поскольку это сообщение не очень полезно, мы можем удалить его, введя и нажав :

Для выхода и возврата в терминал введите и нажмите :

Отправка писем с помощью клиента

Вы можете протестировать функцию отправки писем, набрав сообщение в текстовом редакторе:

Введите текст, которы вы хотите отправить по почте:

~/test_message

Мы можем использовать команду , чтобы направить сообщение в процесс . По умолчанию сообщение будет отправлено от имени вашего пользователя Linux. При желании вы можете изменить поле «From» с помощью атрибута :

Приведенные выше опции:

  • : строка темы письма
  • : изменение поля «From» письма. По умолчанию в этом поле указан текущий пользователь Linux. Опция позволяет задать другого отправителя.
  • : учетная запись получателя письма. Измените этот адрес на адрес учетной записи, к которому у вас есть доступ .

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

После этого откройте список отправленных сообщений с помощью следующей команды:

Вы можете управлять отправленными письмами с помощью тех же команд, которые используются для входящих писем.

Установка и предварительная настройка[править]

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

# apt-get install postfix-dovecot postfix-ldap postfix-tls postfix dovecot

Проверим работу DNS:

# dig +short -t A dc.test.alt
10.10.105.1
# dig +short -t A mail.test.alt
10.10.105.2

Проверим доступ к LDAP-серверу:

# ldapsearch -h dc.test.alt -p 389 -W -D "ldapbind@test.alt" -b "cn=Users,dc=test,dc=alt"

Если подключения не произошло и появилась ошибка связанная с безопасностью подключения:

ldap_bind: Strong(er) authentication required (8) <br>                                             
        additional info: BindSimple: Transport encryption required. 

То необходимо добавить строчку в smb.conf:

 ldap server require strong auth = No 

Это команда должна выдать информацию о пользователях.
Все почтовые ящики пользователей будут хранится в директории /var/vmail и обрабатываться системным пользователем vmail c домашней директорией /var/vmail.
Создадим пользователя vmail и его домашнюю директорию:

# useradd -b /var -m -s /bin/false vmail

Настройка Postfix[править]

Настраиваем параметры postfix в файле /etc/postfix/main.cf:

# Использовать ipv4 и слушать на всех интерфейсах
inet_protocols = ipv4
inet_interfaces = all

# Следующие параметры оставляем без изменения
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix

# Задаем полное имя сервера, которым postfix будет представляться при отправке/получении почты
myhostname = mail.test.alt

# Задаем имя нашего домена
mydomain = test.alt

# Имя от которого будут посылаться письма с локальной машины
myorigin = mail.test.alt

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

# Указываем как доставляется локальная почта
local_transport = virtual

# Указываем как определять локальных пользователей
local_recipient_maps = $virtual_mailbox_maps

# Номер ошибки посылаемый оправителю при отказе
unknown_local_recipient_reject_code = 550

# Задаем список виртуальных доменов
virtual_mailbox_domains =  test.alt

virtual_mailbox_base = /var/mail/vhosts

# Список разрешенных пользователей
virtual_mailbox_maps = ldap:/etc/postfix/ldap/local_recipients.cf

# Указываем сокет для доставки писем в dovecot
virtual_transport = lmtp:unix:private/dovecot-lmtp

# Указываем сертификаты, ключи SSL и включаем безопасные соединения и аутентификацию 
smtpd_tls_cert_file = /etc/postfix/smtp.test.alt.crt
smtpd_tls_key_file = /etc/postfix/smtp.test.alt.key
smtpd_use_tls = yes
smtpd_tls_auth_only = yes

# Настраиваем правила фильтрации писем
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access

# Указываем опции SASL аутентификации через dovecot
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain =  $myorigin

Для работы smtps раскоментируем следующие строки в файле /etc/postfix/master.cf:

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

Далее создадим каталог ldap и добавим файлы с правилами, указанные выше:

# mkdir /etc/postfix/ldap

В этом каталоге создадим файл local_recipients.cf, который проверяет считать ли пользователя локальным:

debuglevel = 0
version = 3
server_host = dc.test.alt
bind_dn = ldapbind@test.alt
bind_pw = PaSSword
search_base = dc=test,dc=alt
search_scope = subtree
query_filter = (&(|(userPrincipalName=%u@%d)(mail=%u@%d)(otherMailbox=%u@%d))(sAMAccountType=805306368))
result_attribute = userPrincipalName
cache = no

Запускаем и добавляем в автозагрузку сервис postfix:

# systemctl enable postfix
# systemctl start postfix

Tips and tricks

Blacklist incoming emails

user@example.com REJECT

Then use the command to create a database:

# postmap hash:blacklist_incoming

Add the following code before the first permit rule in :

smtpd_recipient_restrictions = check_sender_access hash:/etc/postfix/blacklist_incoming

Finally restart .

Hide the sender’s IP and user agent in the Received header

Add the following line to :

smtp_header_checks = regexp:/etc/postfix/smtp_header_checks

Create with this content:

/^Received: .*/     IGNORE
/^User-Agent: .*/   IGNORE

Finally, restart .

Postfix in a chroot jail

First, go into the file in the directory and change all the chroot entries to ‘yes’ (y) except for the services , , , , and

Second, create two functions that will help us later with copying files over into the chroot jail (see last step)

CP="cp -p"
cond_copy() {
  # find files as per pattern in $1
  # if any, copy to directory $2
  dir=`dirname "$1"`
  pat=`basename "$1"`
  lr=`find "$dir" -maxdepth 1 -name "$pat"`
  if test ! -d "$2" ; then exit 1 ; fi
  if test "x$lr" != "x" ; then $CP $1 "$2" ; fi
}

Next, make the new directories for the jail:

set -e
umask 022
POSTFIX_DIR=${POSTFIX_DIR-/var/spool/postfix}
cd ${POSTFIX_DIR}
mkdir -p etc lib usr/lib/zoneinfo
test -d /lib64 && mkdir -p lib64

Find the localtime file

lt=/etc/localtime
if test ! -f $lt ; then lt=/usr/lib/zoneinfo/localtime ; fi
if test ! -f $lt ; then lt=/usr/share/zoneinfo/localtime ; fi
if test ! -f $lt ; then echo "cannot find localtime" ; exit 1 ; fi
rm -f etc/localtime

Copy localtime and some other system files into the chroot’s etc

$CP -f $lt /etc/services /etc/resolv.conf /etc/nsswitch.conf etc
$CP -f /etc/host.conf /etc/hosts /etc/passwd etc
ln -s -f /etc/localtime usr/lib/zoneinfo

Copy required libraries into the chroot using the previously created function

cond_copy '/usr/lib/libnss_*.so*' lib
cond_copy '/usr/lib/libresolv.so*' lib
cond_copy '/usr/lib/libdb.so*' lib

And don’t forget to reload Postfix.

Resource Record

DANE supports several types of records, however not all of them are suitable in Postfix.

Certificate usage 0 is unsupported, 1 is mapped to 3 and 2 is optional, thus it is recommendet to publish a «3» record.
More on .

Configuration

This article or section needs expansion.

Opportunistic DANE is configured this way:

/etc/postfix/main.cf
smtpd_use_tls = yes
smtp_dns_support_level = dnssec
smtp_tls_security_level = dane
/etc/postfix/master.cf
dane       unix  -       -       n       -       -       smtp
  -o smtp_dns_support_level=dnssec
  -o smtp_tls_security_level=dane

To use per-domain policies, e.g. opportunistic DANE for example.org and mandatory DANE for example.com,
use something like this:

/etc/postfix/main.cf
indexed = ${default_database_type}:${config_directory}/

# Per-destination TLS policy
#
smtp_tls_policy_maps = ${indexed}tls_policy

# default_transport = smtp, but some destinations are special:
#
transport_maps = ${indexed}transport
transport
example.com dane
example.org dane
tls_policy
example.com dane-only

Note: For global mandatory DANE, change to . Be aware that this makes Postfix tempfail (respond with a error code) on all deliveries that do not use DANE at all!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector