Postfix установка и настройка

Postfix установка и настройка Хостинг

Борьба со спамом средствами postfix

Я буду использовать штатные возможности postfix, позволяющие отсеять спам по тем или иным параметрам еще до получения письма. Это очень эффективный способ с точки зрения производительности. Благодаря этому, правильно настроенный на отсев спама postfix часто ставят перед exchange, чтобы снизить на него нагрузку. Сразу дам ссылки на официальную документацию с описанием параметров, которые я буду использовать:

Есть еще парочка — smtpd_etrn_restrictions и smtpd_end_of_data_restrictions, но я ими не пользуюсь.

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

 #Описание списков исключений
smtpd_restriction_classes = white_client_ip, black_client_ip, block_dsl, white_client, white_helo, black_client, mx_access
# IP адреса, которые нужно пропускать всегда
white_client_ip	= check_client_access hash:/etc/postfix/lists/white_client_ip
# IP адреса, которые нужно блокировать всегда
black_client_ip	= check_client_access hash:/etc/postfix/lists/black_client_ip
# E-mail, которые нужно пропускать всегда
white_client	= check_sender_access hash:/etc/postfix/lists/white_client
# E-mail, которые нужно блокировать всегда
black_client	= check_sender_access hash:/etc/postfix/lists/black_client
# Неправильные значения HELO, которые мы тем не менее принимаем
white_helo = check_sender_access hash:/etc/postfix/lists/white_helo
# Правила для блокировки различных динамических ip.
block_dsl	= check_client_access regexp:/etc/postfix/lists/block_dsl
# Список приватных сетей, которые не могут быть использованы в качестве IP для MX записей
mx_access	= check_sender_mx_access cidr:/etc/postfix/lists/mx_access
# Проверки на основе данных, переданных в HELO/EHLO hostname
smtpd_helo_restrictions =	permit_mynetworks,	permit_sasl_authenticated,	white_client_ip, white_helo,	black_client_ip,	block_dsl,	# Отказываем серверам, у которых в HELO несуществующий или не FQDN адрес	reject_invalid_helo_hostname,	reject_non_fqdn_helo_hostname,	# Запрещаем приём писем от серверов, представляющихся адресом, для которого не существует A или MX записи.	reject_unknown_helo_hostname
# Проверки клиентского компьютера или другого почтового сервера, который соединяется с сервером postfix для отправки письма
smtpd_client_restrictions =	permit_mynetworks,	permit_sasl_authenticated,	# Отвергает запрос, когда клиент отправляет команды SMTP раньше времени, еще не зная, поддерживает ли Postfix конвейерную обработку команд ESMTP	reject_unauth_pipelining,	# Блокируем клиентов с адресами from, домены которых не имеют A/MX записей	reject_unknown_address,	reject_unknown_client_hostname
# Проверки исходящей или пересылаемой через нас почты на основе данных MAIL FROM
smtpd_sender_restrictions =	permit_mynetworks,	permit_sasl_authenticated,	white_client,	black_client,	# Запрет отправки писем, когда адрес MAIL FROM не совпадает с логином пользователя	reject_authenticated_sender_login_mismatch,	# Отклоняем письма от несуществующих доменов	reject_unknown_sender_domain,	# Отклоняем письма от доменов в не FQDN формате	reject_non_fqdn_sender,	# Отклонение писем с несуществующим адресом отправителя	reject_unlisted_sender,	reject_unauth_destination,	# Отклонять сообщения от отправителей, ящики которых не существуют, использовать аккуратно	#reject_unverified_sender,	mx_access
# Правила приема почты нашим сервером на основе данных RCPT TO
smtpd_recipient_restrictions = permit_mynetworks,	permit_sasl_authenticated,	# Отклоняет всю почту, что адресована не для наших доменов	reject_unauth_destination,	# Отклонение писем с несуществующим адресом получателя	reject_unlisted_recipient,	# Отклоняет сообщения на несуществующие домены	reject_unknown_recipient_domain,	# Отклоняет сообщения если получатель не в формате FQDN	reject_non_fqdn_recipient,	# Отклоняем прием от отправителя с пустым адресом письма, предназначенным нескольким получателям.	reject_multi_recipient_bounce 

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

  • reject_invalid_helo_hostname и reject_unknown_helo_hostname — под эти правила иногда попадают почтовые серверы клиентов, которые не очень хорошо настроены. У них бывают неправильные адреса, кривые записи dns, отсутствие обратных зон и т.д. Их не много, но попадаются. Это не страшно, если вы регулярно следите за сервером. Отправитель получит сразу сообщение о том, что его письмо не дошло до вас. Если он как-то сообщит вам о проблеме, вы легко добавите его в белый список и все будет нормально. Если вам не хочется следить за сервером, лучше не указывайте эти ограничения. Но спам они отсекают не плохо. Сюда попадают все завирусованные компьютеры и сервера без нормальных настроек dns (а их чаще всего и нет).
  • reject_unverified_sender — специально его закомментировал. Я тестировал этот параметр. В принципе, работает нормально, но есть, как обычно, нюансы. Поясню, что делает этот параметр. Когда вам кто-то шлет письмо, ваш сервер обращается к серверу отправителю и спрашивает его стандатрной командой, есть ли на сервере такой отправитель. Если удаленный сервер отвечает, что есть, то никаких проблем — письмо принимается. Если удаленный сервер не отвечает или говорит, что такого адресата нет — письмо отклоняем. Очевидно, что такие проверки создают дополнительную постоянную нагрузку. Это нужно учитывать. К тому же, у вас почтовый лог постоянно будет забит этими проверками, особенно, если вам приходит много спама. На каждое спамовое письмо будет идти проверка, а сервера отправителя скорее всего либо нет, либо он неправильный, либо не отвечает и т.д. Все это будет постоянно проверяться и фиксироваться. В общем, я не использую.

На время отладки ограничений, рекомендую пользоваться параметром:

 soft_bounce = yes 

Когда он включен, все ответы сервера с кодами ошибок 5XX, заменяются на 4ХХ. То есть постоянная ошибка, которая сразу отклоняет письмо, заменяется на временную, которая предлагает повторить отправку позже. Таким образом, вы увидите работу всех ограничений, но письма не будут отклонены навсегда. Сервер отправителя через некоторое время снова придет к вам с новой попыткой доставки почты. Письмо безвозвратно не отклоняется. Вы можете проанализировать работу фильтра и решить, ставить его на постоянную работу или с ним что-то не так.

Создадим теперь файлы с белыми и черными списками.

 cd /etc/postfix/lists && touch white_client_ip black_client_ip white_client black_client white_helo block_dsl mx_access 

Ниже пример содержания этих файлов. Вы можете менять по своему усмотрению.

 # cat white_client_ip
195.28.34.162 OK
141.197.4.160 OK 
 # cat black_client_ip
205.201.130.163 REJECT You IP are blacklisted!
198.2.129.162 REJECT You IP are blacklisted! 
 # cat white_client
# Принимать всю почту с домена яндекс
yandex.ru OK
# Разрешить конкретный ящик
spammer@mail.ru OK 
 # cat black_client
# Блокировать всю почту с домена mail.ru
mail.ru REJECT You domain are blacklisted!
# Блокировать конкретный ящик
spam@rambler.ru REJECT You e-mail are blacklisted! 
 # cat white_helo
# Могут попадаться вот такие адреса, которые не пройдут наши проверки
ka-s-ex01.itk.local     OK
exchange.elcom.local    OK 
 # cat block_dsl
/^dsl.*\.*\.*/i 553 AUTO_DSL spam
/dsl.*\.*\.*/i 553 AUTO_DSL1 spam
/[ax]dsl.*\.*\.*/i 553 AUTO_XDSL spam
/client.*\.*\.*/i 553 AUTO_CLIENT spam
/cable.*\.*\.*/i 553 AUTO_CABLE spam
/pool.*\.*\.*/i 553 AUTO_POOL spam
/dial.*\.*\.*/i 553 AUTO_DIAL spam
/ppp.*\.*\.*/i 553 AUTO_PPP spam
/dslam.*\.*\.*/i 553 AUTO_DSLAM spam
/node.*\.*\.*/i 553 AUTO_NODE spam
/([0-9]*-){3}[0-9]*(\.*){2,}/i 553 SPAM_ip-add-rr-ess_networks
/([0-9]*\.){4}(.*\.){3,}.*/i 553 SPAM_ip-add-rr-ess_networks
/.*\.pppool\.*/i 553 SPAM_POOL
/[0-9]*-[0-9]*-[0-9]*-[0-9]*-tami\.tami\.pl/i 553 SPAM_POOL
/pool-[0-9]*-[0-9]*-[0-9]*-[0-9]*\.*/i 553 SPAM_POOL
/.*-[0-9]*-[0-9]*-[0-9]*-[0-9]*\.gtel.net.mx/i 553 SPAM_POOL
/dhcp.*\.*\.*/i 553 SPAM_DHCP 
 # cat mx_access
127.0.0.1 DUNNO
127.0.0.2 550 Domains not registered properly
0.0.0.0/8 REJECT Domain MX in broadcast network
10.0.0.0/8 REJECT Domain MX in RFC 1918 private network
127.0.0.0/8 REJECT Domain MX in loopback network
169.254.0.0/16 REJECT Domain MX in link local network
172.16.0.0/12 REJECT Domain MX in RFC 1918 private network
192.0.2.0/24 REJECT Domain MX in TEST-NET network
192.168.0.0/16 REJECT Domain MX in RFC 1918 private network
224.0.0.0/4 REJECT Domain MX in class D multicast network
240.0.0.0/5 REJECT Domain MX in class E reserved network
248.0.0.0/5 REJECT Domain MX in reserved network 

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

Читайте также:  Перейти на официальный сайт Majordomos: оптимальные решения и услуги

После редактирования файлов обязательно выполняем команду на перестроение базы данных. Я перестрою сразу все файлы:

 cd /etc/postfix/lists && postmap white_client_ip black_client_ip white_client black_client white_helo block_dsl mx_access 

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

 zeroxzed.ru 554 Stop spam from my name 

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

Приведу в завершении описания методов борьбы со спамом простой пример. Добавим в black_client почтовый адрес и отправим с него письмо.

 # cat black_client
zeroxzed@gmail.com REJECT Your e-mail was banned! 
 # postmap black_client 

Отправляем сообщение и проверяем почтовый лог.

 # cat /var/log/maillog 
 Mar 20 02:21:34 mail postfix/smtpd[10816]: connect from mail-yw0-f177.google.com[209.85.161.177]
Mar 20 02:21:35 mail postfix/smtpd[10816]: Anonymous TLS connection established from mail-yw0-f177.google.com[209.85.161.177]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Mar 20 02:21:35 mail postfix/smtpd[10816]: NOQUEUE: reject: RCPT from mail-yw0-f177.google.com[209.85.161.177]: 554 5.7.1 <zeroxzed@gmail.com>:  Sender address rejected: Your e-mail was banned! 
; from=<zeroxzed@gmail.com> to=<root@zeroxzed.ru> proto=ESMTP helo=
Mar 20 02:21:35 mail postfix/smtpd[10816]: disconnect from mail-yw0-f177.google.com[209.85.161.177] 

Вот и результат. На этом по борьбе со спамом все.

Настройка фильтра почты sieve

Sieve очень удобная штука, но вот хорошего интерфейса для управления через почтовый клиент я не знаю. Существует плагин для thunderbird, который так и называется sieve. Но лично мне он не понравился вообще, так как предлагает писать правила определенным кодом. Для этого надо знать синтаксис, тратить время. Можете сами на него посмотреть —  https://github.com/thsmi/sieve
.

К счастью, есть удобный способ писать правила фильтрации для sieve через roundcube. Там это реализовано отдельным плагином  managesieve
, который мы активировали во время установки. Его конфиг находится в директории /var/www/html/webmail/plugins/managesieve
. Скопируйте дефолтный конфиг и проследите, чтобы там были следующие настройки.

 # cp config.inc.php.dist config.inc.php 
 $config['managesieve_port'] = 4190;
$config['managesieve_host'] = 'localhost';
$config['managesieve_usetls'] = false; 

Для создания правила фильтрации, зайдите в свой почтовый ящик через roundcube. Переходите в раздел  Настройки -> Фильтры

 и создавайте новое правило.

Создание фильтра sieve в roundcube

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

Устанавливаем и настраиваем postfix

Устанавливаем postfix
на сервер:

Для Centos (обычно в Centos 7 он уже установлен):

 yum install postfix -y 
 apt install postfix postfix-mysql -y 

Далее отобразится окно, где нужно выбрать Internet Site:

Postfix установка и настройка

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

Postfix установка и настройка

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

 systemctl start postfix
systemctl enable postfix 

Вносим изменения в настройку postfix
, в консоли вводим следующие команды:

 postconf -e 'inet_interfaces=all'
postconf -e 'mydestination='
postconf -e 'myhostname=mailtest.fvds.ru'
postconf -e 'virtual_transport=lmtp:unix:private/dovecot-lmtp'
postconf -e 'relay_domains = mysql:/etc/postfix/mysql/relay_domains.cf'
postconf -e 'virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf,mysql:/etc/postfix/mysql/virtual_alias_domain_maps.cf'
postconf -e 'virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf'
postconf -e 'virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf'
postconf -e 'virtual_mailbox_base=/var/mail/vmail/'
postconf -e 'local_recipient_maps=$virtual_mailbox_maps'
postconf -e 'smtpd_sasl_auth_enable=yes'
postconf -e 'smtpd_sasl_type=dovecot'
postconf -e 'smtpd_sasl_path=private/auth'
postconf -e 'broken_sasl_auth_clients=yes'
postconf -e 'smtpd_sasl_security_options=noanonymous'
postconf -e 'smtpd_use_tls=yes'
postconf -e 'smtpd_tls_cert_file=/etc/postfix/certs/cert.pem'
postconf -e 'smtpd_tls_key_file=/etc/postfix/certs/key.pem'
postconf -e 'smtpd_sasl_tls_security_options=noanonymous'
postconf -e 'smtpd_tls_auth_only=yes'
postconf -e 'smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination'
postconf -e 'smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_helo_hostname,reject_non_fqdn_sender,reject_unknown_sender_domain,reject_non_fqdn_recipient,reject_unknown_recipient_domain'
postconf -e 'smtpd_banner=$myhostname ESMTP'
postconf -e 'biff=no'
postconf -e 'strict_rfc821_envelopes=yes'
postconf -e 'disable_vrfy_command=yes'
postconf -e 'smtpd_helo_required=yes' 

Конфигурация будет добавлена в файл /etc/postfix/main.cf
.

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

 submission inet n - n - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o syslog_name=postfix/submission -o smtpd_tls_wrappermode=no -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination -o milter_macro_daemon_name=ORIGINATING
smtps inet n - n - - smtpd -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination -o milter_macro_daemon_name=ORIGINATING 

Для Centos
в конец этого же файла нужно добавить:

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

Для Debian/Ubuntu
в конец этого же файла нужно добавить:

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

Создадим директорию для хранения файлов подключения к mysql
:

 mkdir /etc/postfix/mysql 

Создадим файлы конфигурации mysql:

 touch /etc/postfix/mysql/relay_domains.cf 

В созданный файл добавляем:

 hosts = 127.0.0.1
user = postfix
password = ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БД
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1' 
 touch /etc/postfix/mysql/virtual_alias_domain_maps.cf 

В созданный файл добавляем:

 hosts = 127.0.0.1
user = postfix
password = ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БД
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 
 touch /etc/postfix/mysql/virtual_alias_maps.cf 

В созданный файл добавляем:

 hosts = 127.0.0.1
user = postfix
password = ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БД
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1' 
 touch /etc/postfix/mysql/virtual_mailbox_domains.cf 

В созданный файл добавляем:

 hosts = 127.0.0.1
user = postfix
password = ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БД
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1' 
 touch /etc/postfix/mysql/virtual_mailbox_maps.cf 

В созданный файл добавляем:

 hosts = 127.0.0.1
user = postfix
password = ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БД
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1' 

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

 mkdir /etc/postfix/certs
openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/certs/cert.pem -keyout /etc/postfix/certs/key.pem 

Вот пример выполнения команды:

Postfix установка и настройка

Если у вас есть платный сертификат на домен с не истекшим сроком действия, используйте его. Файлы сертификата нужно разместить в директории /etc/postfix/certs/
и заменить имена файлов на свои в конфигурационном файле postfix /etc/postfix/main.cf
в следующих строках: 

 smtpd_tls_cert_file
smtpd_tls_key_file 

Проверить корректность настроек postfix
можно через команду:

 postfix check 

Перезапустим службу, чтобы применились настройки:

 systemctl restart postfix 

Настройка postfix

Сердце нашего почтового сервера на linux — postfix. В дистрибутиве centos он уже установлен, можно сразу переходить к настройке. Рисуем следующий конфиг.

 # mcedit /etc/postfix/main.cf 
 soft_bounce = нет
каталог_очередей = /var/spool/postfix
каталог_команд = /usr/sbin
daemon_directory=/usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = постфикс
myhostname =  mail.zeroxzed.rumydomain =  zeroxzed.ruмое происхождение = $ имя_хоста
inet_interfaces = все
net_protocols = ipv4
мой пункт назначения = локальный хост .$ мой домен , локальный хост
unknown_local_recipient_reject_code = 550
мои сети = 127.0.0.0/8
alias_maps = хэш: /etc/псевдонимы
alias_database = хэш: /etc/псевдонимы
smtpd_banner = $myhostname ESMTP $mail_name
debug_peer_level = 2
# Спасибо за PATH и ddd, и вы сможете получить наилучшие результаты с этой страницы
команда_отладчика = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id и спящий режим 5
sendmail_path = /usr/sbin/sendmail.postfix
newwaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = постдроп
html_directory = нет
manpage_directory=/usr/share/man
sample_directory = /usr/share/doc/postfix-2.10.1/samples
readme_directory=/usr/share/doc/postfix - 2.10.1/README_FILES
relay_domains = mysql: /etc/postfix/mysql/relay_domains.cf
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf, . mysql : / etc / postfix / mysql / virtual_alias_domain_maps .cf
virtual_mailbox_domains = mysql :/etc/postfix/mysql/virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
smtpd_discard_ehlo_keywords = etrn , молчать — отбросить
smtpd_forbidden_commands = ПОДКЛЮЧИТЬСЯ ПОЛУЧИТЬ ПУБЛИКАЦИЯ
сломанный_sasl_auth_clients = да
smtpd_delay_reject = да
smtpd_helo_required = да
smtp_always_send_eye = да
disable_vrfy_command = да
smtpd_helo_restrictions = разрешение_моих сетей, разрешение_sasl_аутентифицированный, reject_non_fqdn_no_hostname, reject_invalid_no_hostname
smtpd_data_restrictions = разрешение_моих сетей, разрешение_sasl_аутентифицированный, reject_brother_pipelining, reject_multi_recipient_bounce,
smtpd_sender_restrictions = разрешение_моих сетей, разрешение_sasl_аутентифицированный, reject_non_fqdn_sender, reject_unknown_sender_domain
smtpd_recipient_restrictions = reject_non_fqdn_recipient, . reject_unknown_recipient_domain, reject_multi_recipient_bounce, разрешение_mynetworks, разрешение_sasl_аутентифицированный, reject_brother_destination,
smtp_tls_security_level = может
smtpd_tls_security_level = может
smtpd_tls_loglevel = 1
smtpd_tls_received_header = да
smtpd_tls_session_cache_timeout = 3600 с
smtp_tls_session_cache_database = btree : $data_directory / smtp_tls_session_cache
smtpd_tls_key_file = /etc/postfix/certs/key.pem
smtpd_tls_cert_file = /etc/postfix/certs/cert.pem
tls_random_source=dev:/dev/случайный
# Убираем остатки снежинки со снега
message_size_limit = 20000000
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 15
smtpd_error_sleep_time = 20
anvil_rate_time_unit = 60 с
smtpd_client_connection_count_limit = 20
smtpd_client_connection_rate_limit = 30
smtpd_client_message_rate_limit = 30
smtpd_client_event_limit_exceptions = 127.0.0.0/8
smtpd_client_connection_limit_exceptions = 127.0.0.0/8
maximal_queue_lifetime = 1д
bounce_queue_lifetime = 1д
smtpd_sasl_auth_enable = да
smtpd_sasl_security_options = анонимный
smtpd_sasl_type = голубятня
smtpd_sasl_path = частный / голубятня - авторизация
# Справочник для хранения почты
виртуальная_почтовая_база =  /месяц/почтавиртуальный_минимум_uid =
virtual_uid_maps = статический: 1000
virtual_gid_maps = статический: 1000
виртуальный_транспорт = голубятня
dovecot_destination_recipient_limit = 1
sender_bcc_maps = хеш:/etc/postfix/sender_bcc_maps
получатель_bcc_maps = хэш: /etc/postfix/recipient_bcc_maps

;

Чуть чуть чуть чуть менее стабильный ми. Не немного меньше, чем ожидалось. Спасибо, что прочитали и получили цитату. И чуть менее дружелюбный на этой странице. Если вы хотите сделать это, вы сможете сделать это. Вы можете загрузить пользовательский интерфейс mysql из mysql и загрузить его приключения.

 # mkdir /etc/postfix/mysql && cd /etc/postfix/mysql 
 # mcedit relay_domains.cf
хосты = локальный хост
пользователь = постфикс
пароль = 12345678
имя_базы = постфикс
запрос = ВЫБЕРИТЕ домен ИЗ домена, ГДЕ домен = '%s' и backupmx = '1' 
 # mcedit  virtual_alias_domain_maps.cf
хосты = локальный хост
пользователь = постфикс
пароль = 12345678
имя_базы = постфикс
запрос = ВЫБЕРИТЕ перейти к ИЗ псевдонима,псевдоним_домен ГДЕ алиас_домен.псевдоним_домен = '%d' и алиас.адрес = CONCAT('%u', '@', алиас_домен.целевой_домен) И алиас.актив = 1 
 # mcedit virtual_alias_maps.cf
хосты = локальный хост
пользователь = постфикс
пароль = 12345678
имя_базы = постфикс
query = SELECT goto FROM alias WHERE address='%s' AND active = '1' 
 # mcedit virtual_mailbox_domains.cf 
 хосты = локальный хост
пользователь = постфикс
пароль = 12345678
имя_базы = постфикс
запрос = ВЫБЕРИТЕ домен ИЗ домена, ГДЕ домен = '%s' И backupmx = '0' И активен = '1' 
 # mcedit virtual_mailbox_maps.cf
хосты = локальный хост
пользователь = постфикс
пароль = 12345678
имя_базы = постфикс
запрос = ВЫБЕРИТЕ почтовый каталог ИЗ почтового ящика, ГДЕ имя пользователя = '%s' И активно = '1' 

Редактируем файл  /etc/postfix/master.cf
. Нам нужно добавить строки, требующие подачи для того, чтобы грузить сервер, работающий на 587 порту. Смартфоны очень часто используют этот порт по-умолчанию, где-то даже без возможности изменить эту среду. Приводим секцию, отвечающую за эту работу к следующему обнаружению.

 представление inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_wrappermode=нет -o smtpd_tls_security_level=шифровать -o smtpd_sasl_auth_enable=да -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,отклонить -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination -o milter_macro_daemon_name=ПРОИСХОЖДЕНИЕ 

Обратите внимание на пробел в начале строки, обстановка со второй. Его надо обязательно оставить. Добавим еще настройки для того, чтобы наш сервер поддерживал протокол SSL/TLS и проверял порт 465

 smtps inet n - n - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=да -o smtpd_sasl_auth_enable=да -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,отклонить -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination -o milter_macro_daemon_name=ПРОИСХОЖДЕНИЕ 

. Добавляем в master.cf в самый конец.

 голубятня unix - n n - - труба flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${отправитель} -d ${получатель} 

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

Читайте также:  How to Configure sources.list on Debian 11

Создаем каталог и сами сертификаты:

 # mkdir /etc/postfix/certs
# openssl req -new -x509 -days 3650 -nodes -out /etc/postfix/certs/cert.pem -keyout /etc/postfix/certs/key.pem 

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

Создание ssl сертификата для postfix

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

 # mcedit /etc/postfix/recipient_bcc_maps 
 @zeroxzed.ru all_in@zeroxzed.ru 
 # mcedit /etc/postfix/sender_bcc_maps 
 @zeroxzed.ru all_out@zeroxzed.ru 

Создаем индексированные базы данных из этих файлов. Это нужно делать каждый раз после изменения.

 # postmap /etc/postfix/recipient_bcc_maps /etc/postfix/sender_bcc_maps 

Немного поясню по этим ящикам — для чего они нужны. Я использовал протокол pop3 без записи писем на почту. Это переносно обратного хода всей переписки. Эти ящики очень быстро занимают большой объем, поэтому их обязательно надо чистить. Я просто записываю всю почту в архивы с именами в виде дат. Если нужно было какое-то письмо найти, то просто распаковывал нужный архив.

В случае с imap бэкапа отпадает, так как вся почта обнаруживается на сервере. Но ящик этии все одинаково полезны, когда пользователь, к примеру, удалил какое-то важное письмо и потом вид записок, что его и не было. Если это письмо пришло только сегодня и еще не успело улететь в бэкап, то кроме записи в логах об этом письме, вы не увидите само содержимое. А с такими ящиками все сразу будет понятно, и вопросы отпадут. Последнее применение — служба безопасности. Если у вас есть кто-то, кому положено читать всю переписку, то реализовать этот функционал можно таким простым способом.

Все основные настройки для postfix мы сделали. Некоторые из них завязаны на работу с dovecot, который мы еще не настроили. Поэтому больше postfix не трогаем, не перезапускаем. Идем настраивать dovecot — imap сервер нашей почтовой системы.

Устанавливаем и настраиваем postfixadmin

Подключаемся к консоли mysql
, используя пароль пользователя root
в mysql
:

 mysql -uroot -p 

В консоли mysql
вводим следующие команды:

 create database postfix;
create user postfix@localhost identified by 'ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ';
grant all privileges on *.* to postfix@localhost;
flush privileges;
exit; 
Postfix установка и настройка
 wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz
tar -zxf postfixadmin.tar.gz
mv postfixadmin-* /usr/share/postfixadmin
mkdir /usr/share/postfixadmin/templates_c 
 chown -R apache:apache /usr/share/postfixadmin/ 
 chown -R www-data:www-data /usr/share/postfixadmin/ 

Символическая ссылка должна вести в директорию сайта (укажите путь до своего сайта), если на сервере нет сайтов, то нужно оставить текущую команду:

 ln -s /usr/share/postfixadmin/public/ /var/www/html/postfixadmin 

Создаем локальный файл конфигурации:

 touch /usr/share/postfixadmin/config.local.php 

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

 <?php
$CONF['configured'] = true;
$CONF['setup_password'] = 'changeme';
$CONF['default_language'] = 'ru';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БД';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = 'root@ВАШ_ПОЧТОВЫЙ_ДОМЕН';
$CONF['encrypt'] = 'md5crypt';
$CONF['default_aliases'] = array ( 'abuse' => 'root', 'hostmaster' => 'root', 'postmaster' => 'root', 'webmaster' => 'root'
);
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'YES';
?> 

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

Postfix установка и настройка

Если по итогам проверки есть замечания, их нужно устранить. Если замечаний нет, придумайте и введите пароль установки в форме внизу страницы (пароль должен содержать обязательно 2 цифры и быть длиннее 5 символов), нажмите кнопку — « Generate password hash
». Страница обновится и появится хеш, который выделен красным:

Читайте также:  Какой хостинг выбрать для сайта: инструкция 2022 | ИХЦ
Postfix установка и настройка
 $CONF['setup_password'] = 'changeme' 
 $CONF['setup_password'] = 'ВАШ_ХЕШ' 

Перезагружаем страницу и теперь можем создать учётную запись администратора:

Postfix установка и настройка
Postfix установка и настройка
Postfix установка и настройка

Создаём почтовый ящик: Обзор
Создать ящик

:

Postfix установка и настройка

Создаём почтовый ящик

 doveadm pw -s ssha512 

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

Postfix установка и настройка

Обязательно скопируйте её, это пароль от ящика в зашифрованном виде.

 admin@mailtest.fvds.ru:{SSHA512}v8cRBy17QPdVE91MRQ1MsuMtCUENXZuWGuX5o51we/V1YG3MgJnC+9qHRw488U4W5ZR6eAlxuQiKco41U5swvXVMDRg=:5000:5000 

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

 touch /etc/postfix/virtual_recipients 

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

 touch /etc/postfix/virtual_alias_recipients 

В нашем примере формат файла псевдонимов следующий:

 admin@mailtest.fvds.ru admin.mailtest@ya.ru 

Далее в файле /etc/postfix/virtual_recipients
укажем созданный почтовый ящик в таком виде:

 admin@mailtest.fvds.ru admin/ 

Проиндексируем базу пользователей postfix
:

 postmap /etc/postfix/virtual_recipients
postmap /etc/postfix/virtual_alias_recipients 

После каждого изменения файлов /etc/postfix/virtual_recipients
и /etc/postfix /virtual_alias_recipients
выполняйте их переиндексацию, чтобы данные обновились:

 postmap /etc/postfix/virtual_recipients  postmap /etc/postfix/virtual_alias_recipients  

Перезапускаем почтовые службы:

 systemctl restart dovecot
systemctl restart postfix 

На этом базовая настройка почтового сервера завершена: можно отправлять и получать письма. Если не планируете переписываться с огромным количеством людей, у которых в почте настроены жёсткие проверки на спам, то можете на этом остановиться — протестировать отправку и пользоваться. Но, помните, что для полноценной работы почтового сервера только базовой настройки недостаточно. Такие сервисы, как gmail.com
, mail.ru
или yandex.ru
, могут расценивать ваши письма, как спам, из-за того, что они не прошли проверку, и отклонять их. Чтобы этого не случилось и письма доходили до адресата, советуем выполнить ещё пару настроек, о которых расскажем далее. 

Онлайн курс по Kubernetes

Онлайн-курс по Kubernetes – для разработчиков, администраторов, технических лидеров, которые хотят изучить современную платформу для микросервисов Kubernetes. Самый полный русскоязычный курс по очень востребованным и хорошо оплачиваемым навыкам. Курс не для новичков – нужно пройти вступительный тест.

Если вы ответите «да» хотя бы на один вопрос, то это ваш курс:

  • устали тратить время на автоматизацию?
  • хотите единообразные окружения?;
  • хотите развиваться и использовать современные инструменты?
  • небезразлична надежность инфраструктуры?
  • приходится масштабировать инфраструктуру под растущие потребности бизнеса?
  • хотите освободить продуктовые команды от части задач администрирования и автоматизации и сфокусировать их на развитии продукта?

Сдавайте вступительный тест по ссылке
и присоединяйтесь к новому набору!

Помогла статья? Подписывайся на telegram канал
автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Проверка DNS записей

Проверим наши настройки dns. Для этого зайдем на любой сервер по ssh, где установлен пакет bind-utils
. Если у вас его нет, то ставьте командой ниже.

 # dnf install bind-utils 

Убедимся в правильности записей следующим набором проверок.

 # dig kirushin-vladimir.ru mx | grep IN
# dig mail.kirushin-vladimir.ru | grep IN
# host 5.180.137.106 
Проверка DNS записей

Сначала проверили MX
запись. Посмотрели, на какую А
запись она ссылается. Потом проверили эту А
запись. В завершении убедились, что ip адрес этой А
записи имеет PTR
запись с таким же именем домена.

Это идеальный вариант настроек, к которому нужно стремиться. В спецификации протокола smtp нет таких требований, но по факту, чтобы снизить риск попадания в спам, нужно настраивать все именно так. Если у вас нет возможности изменить PTR запись IP адреса, это не сильно страшно. Почта работать будет и без нее. Это проверено на практике. Но если есть возможность все настроить правильно, сделайте это.

С проверками закончили. Плавно переходим к настройке почтового сервера.

Устанавливаем и настраиваем dovecot

 yum install dovecot -y 
 apt install dovecot-imapd dovecot-pop3d dovecot-lmtpd -y 

Активируем службу и добавляем в автозапуск:

 systemctl start dovecot
systemctl enable dovecot 

Создаём локальный файл настроек:

 touch /etc/dovecot/local.conf 

Открываем его текстовым редактором и указываем в нём следующие настройки:

 protocols = pop3 imap lmtp
auth_mechanisms = plain login
mail_gid = vmail
mail_uid = vmail
first_valid_uid = 5000
last_valid_uid = 5000
mail_location = maildir:/var/mail/vmail/%d/%n/
mbox_write_locks = fcntl
disable_plaintext_auth = yes
passdb { args = scheme=ssha512 username_format=%u /etc/dovecot/users driver = passwd-file
}
userdb { args = username_format=%u /etc/dovecot/users driver = passwd-file
}
service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0660 user = postfix } unix_listener auth-userdb { mode = 0600 user = vmail }
}
service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0600 user = postfix } user = vmail
}
protocol lmtp { postmaster_address = postmaster@mailtest.fvds.ru
}
ssl = required
ssl_cert = </etc/postfix/certs/cert.pem
ssl_key = </etc/postfix/certs/key.pem
ssl_cipher_list = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
ssl_dh_parameters_length = 2048
ssl_prefer_server_ciphers = yes 

Сертификат используется тот, что генерировали при настройке postfix
, если используете свой сертификат, то нужно указать путь до него в следующих строках конфигурационного файла dovecot
/etc/dovecot/local.conf
:

 ssl_cert
ssl_key 

Дополнительный функционал почтового сервера postfix

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

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

  1. Защиту от подбора паролей с помощью fail2ban.
  2. Мониторинг почтового сервера postfix с помощью zabbix
    .
  3. Сбор статистики с помощью pflogsumm или чего-то подобного.
  4. Просмотр и анализ логов с помощью webmin
    .
  5. Использование бесплатных сертификатов let’s encrypt.
  6. Регулярную очистку служебных почтовых ящиков
    .
  7. Бэкап всей почтовой базы.

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

  1. Clamav — известный антивирус. Считаю, что сейчас он не актуален, так как вирусов, от которых он способен защитить, я уже давно не видел. Сейчас вирусная эпидемия шифровальщиков. От них он не защищает.
  2. Spamassasin — популярный бесплатный антиспам фильтр. Скажу честно, работал с ним очень мало и могу быть не объективен. Насколько я видел его настройку и работу — он требует к себе некоторого внимания, калибровки, особенно на начальном этапе. Мне обычно не хочется этим заниматься.
  3. Graylist — эффективное средство борьбы со спамом. Я уже подробно его рассматривал, когда писал про iredmail
    , так что не буду повторяться. Скажу лишь, что режет спам очень эффективно и бесплатно, но есть существенные неудобства, которые по моему мнению не перекрывают плюсы. Поэтому я не использую.
Оцените статью
Хостинги