Конфигурация Postfix 3.6: Отключение проверок тела и заголовков для внутренних пользователей вызывает сообщение об ошибке.

Вопрос или проблема

Я запускаю сервер Postfix (3.6) на сервере Ubuntu 24.04. Почтовый сервер работает хорошо. DKIM, SPF и DMARC активны, и нет проблем с Spamassassin и Amavis/Clamav. Я запускаю проверки заголовков и тела для писем и не хочу выполнять их для локальных пользователей.

После некоторых исследований я наткнулся на статью на сайте, где это объясняется. Нажмите здесь для перехода на сайт. Согласно этому, должен быть создан второй (в моем случае локальный) IP в качестве алиаса для сетевого интерфейса, а затем что-то должно быть добавлено в файл /etc/postfix/master.cf, чтобы решить проблему. Я это сделал, и это работает так, что проверки заголовков/тел не проводятся для внутренних писем.

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

postfix/master[xxxx]: warning: master_wakeup_timer_event: service pickup(public/pickup): Connection refused

Я добавил новую строку в файл /etc/hosts для создания локального IP алиаса: 127.0.1.2 substitute.mydomain.de substitute

Это мой файл /etc/postfix/main.cf:

# Специфично для Debian: указание имени файла приведет к тому, что первая
# строка этого файла будет использована в качестве имени. По умолчанию для Debian
# используется /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name
biff = no

# добавление .domain является задачей MUA.
append_dot_mydomain = no

# Раскомментируйте следующую строку, чтобы генерировать предупреждения о "задержанной почте"
#delay_warning_time = 4h

readme_directory = no

# См. http://www.postfix.org/COMPATIBILITY_README.html -- по умолчанию 3.6 для
# свежих установок.
compatibility_level = 3.6



# Параметры TLS
#smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#smtpd_tls_security_level=may

# Включить шифрование TLS, когда Postfix получает входящие письма
smtpd_tls_cert_file=/etc/letsencrypt/live/my.domain.de/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/my.domain.de/privkey.pem
smtpd_tls_security_level = may
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_auth_only = yes
smtpd_tls_received_header = yes
smtpd_tls_mandatory_ciphers = high
smtpd_tls_exclude_ciphers = ECDHE-RSA-RC4-SHA
smtpd_tls_mandatory_exclude_ciphers = ECDHE-RSA-RC4-SHA
# smtp_tls_CApath=/etc/ssl/certs
# smtp_tls_security_level=may
# smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# Включить шифрование TLS, когда Postfix отправляет исходящие письма
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# Принудить использовать TLSv1.3 или TLSv1.2
smtpd_tls_mandatory_protocols = >=0x0303
smtpd_tls_protocols = >=0x0303
smtp_tls_mandatory_protocols = >=0x0303
smtp_tls_protocols = >=0x0303

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = my.domain.de
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, localhost.$mydomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
message_size_limit = 52428800

mailbox_transport = lmtp:unix:private/dovecot-lmtp
smtputf8_enable = no

virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_mailbox_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_alias_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_base = /var/vmail
virtual_minimum_uid = 2000
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000
authorized_submit_users = root,www-data,vmail
policyd-spf_time_limit = 3600
smtpd_recipient_restrictions =
   permit_mynetworks,
   permit_sasl_authenticated,
   reject_unauth_destination,
   reject_rhsbl_sender         xxxxxxxxxxxxxxxxxxx.dbl.dq.spamhaus.net=127.0.1.[2..99],
   reject_rhsbl_helo           xxxxxxxxxxxxxxxxxxx.dbl.dq.spamhaus.net=127.0.1.[2..99],
   reject_rhsbl_reverse_client xxxxxxxxxxxxxxxxxxx.dbl.dq.spamhaus.net=127.0.1.[2..99],
   reject_rhsbl_sender         xxxxxxxxxxxxxxxxxxx.zrd.dq.spamhaus.net=127.0.2.[2..24],
   reject_rhsbl_helo           xxxxxxxxxxxxxxxxxxx.zrd.dq.spamhaus.net=127.0.2.[2..24],
   reject_rhsbl_reverse_client xxxxxxxxxxxxxxxxxxx.zrd.dq.spamhaus.net=127.0.2.[2..24],
#   reject_rbl_client           xxxxxxxxxxxxxxxxxxx.zen.dq.spamhaus.net=127.0.0.[2..255]
   check_policy_service unix:private/policyd-spf
#   check_policy_service inet:127.0.0.1:10023

smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_invalid_helo_hostname
    reject_non_fqdn_helo_hostname
    reject_unknown_helo_hostname
# Конфигурация Milter
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:opendkim/opendkim.sock, local:opendmarc/opendmarc.sock, local:spamass/spamass.sock
non_smtpd_milters = $smtpd_milters
smtpd_sender_restrictions =
   check_sender_access hash:/etc/postfix/sender_access
   permit_mynetworks
   permit_sasl_authenticated
   reject_unknown_sender_domain
   reject_unknown_reverse_client_hostname
   reject_unknown_client_hostname

header_checks = pcre:/etc/postfix/header_checks
rbl_reply_maps = hash:/etc/postfix/dnsbl-reply-map
postscreen_access_list = permit_mynetworks cidr:/etc/postfix/postscreen_access.cidr
postscreen_blacklist_action = drop
postscreen_greet_action = enforce

postscreen_dnsbl_threshold = 3
postscreen_dnsbl_action = enforce
postscreen_dnsbl_sites = xxxxxxxxxxxxxxxxxxx.zen.dq.spamhaus.net=127.0.0.[2..255]
postscreen_dnsbl_reply_map = texthash:/etc/postfix/dnsbl_reply

А это мой файл /etc/postfix/master.cf:

#
# Конфигурационный файл основного процесса Postfix.  Для подробностей о формате
# файла смотрите справочную страницу master(5) (команда: "man 5 master" или
# в интернете: http://www.postfix.org/master.5.html).
#
# Не забудьте выполнить "postfix reload" после редактирования этого файла.
#
# ==========================================================================
# тип сервиса  частный  без привилегий  ч_root  пробуждение  макс. процессов команда + аргументы
#               (да)     (да)        (нет)   (никогда) (100)
# ==========================================================================
#smtp      inet  n       -       y       -       -       smtpd
submission     inet     n    -    y    -    -    smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_tls_wrappermode=no
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o content_filter=smtp-amavis:[127.0.0.1]:10026
smtp      inet  n       -       y       -       1       postscreen
smtpd     pass  -       -       y       -       -       smtpd
dnsblog   unix  -       -       y       -       0       dnsblog
tlsproxy  unix  -       -       y       -       0       tlsproxy
# Выберите один вариант: включить отправку только для клиентов обратной связи или для любых клиентов.
#127.0.0.1:submission inet n -   y       -       -       smtpd
#submission inet n       -       y       -       -       smtpd
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_tls_auth_only=yes
#  -o local_header_rewrite_clients=static:all
#  -o smtpd_reject_unlisted_recipient=no
# Вместо указания сложных smtpd_<xxx>_restrictions здесь,
# укажите "smtpd_<xxx>_restrictions=$mua_<xxx>_restrictions"
# здесь и укажите mua_<xxx>_restrictions в main.cf (где
# "<xxx>" является "client", "helo", "sender", "relay" или "recipient").
#  -o smtpd_client_restrictions=
#  -o smtpd_helo_restrictions=
#  -o smtpd_sender_restrictions=
#  -o smtpd_relay_restrictions=
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o content_filter=smtp-amavis:[127.0.0.1]:10026
# Выберите один вариант: включить отправку только для клиентов обратной связи или для любых клиентов.
#127.0.0.1:submissions inet n  -       y       -       -       smtpd
#submissions     inet  n       -       y       -       -       smtpd
#  -o syslog_name=postfix/submissions
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o local_header_rewrite_clients=static:all
#  -o smtpd_reject_unlisted_recipient=no
# Вместо указания сложных smtpd_<xxx>_restrictions здесь,
# укажите "smtpd_<xxx>_restrictions=$mua_<xxx>_restrictions"
# здесь и укажите mua_<xxx>_restrictions в main.cf (где
# "<xxx>" является "client", "helo", "sender", "relay" или "recipient").
#  -o smtpd_client_restrictions=
#  -o smtpd_helo_restrictions=
#  -o smtpd_sender_restrictions=
#  -o smtpd_relay_restrictions=
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#628       inet  n       -       y       -       -       qmqpd
pickup    unix  n       -       y       60      1       pickup
cleanup   unix  n       -       y       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
#qmgr     unix  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       y       1000?   1       tlsmgr
rewrite   unix  -       -       y       -       -       trivial-rewrite
bounce    unix  -       -       y       -       0       bounce
defer     unix  -       -       y       -       0       bounce
trace     unix  -       -       y       -       0       bounce
verify    unix  -       -       y       -       1       verify
flush     unix  n       -       y       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       y       -       -       smtp
relay     unix  -       -       y       -       -       smtp
        -o syslog_name=postfix/$service_name
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       y       -       -       showq
error     unix  -       -       y       -       -       error
retry     unix  -       -       y       -       -       error
discard   unix  -       -       y       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       y       -       -       lmtp
anvil     unix  -       -       y       -       1       anvil
scache    unix  -       -       y       -       1       scache
postlog   unix-dgram n  -       n       -       1       postlogd

uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)

policyd-spf  unix  -       n       n       -       0       spawn
    user=policyd-spf argv=/usr/bin/policyd-spf
smtp-amavis unix -    -    n    -    4 smtp
    -o syslog_name=postfix/amavis
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20
    -o smtp_tls_security_level=none

127.0.0.1:10025   inet   n    -     n     -     -    smtpd
    -o syslog_name=postfix/10025
    -o content_filter=
    -o mynetworks_style=host
    -o mynetworks=127.0.0.0/8
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o strict_rfc821_envelopes=yes
    -o smtp_tls_security_level=none
    -o smtpd_tls_security_level=none
    -o smtpd_restriction_classes=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=

retry     unix  -       -       y       -       -       error
discard   unix  -       -       y       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       y       -       -       lmtp
anvil     unix  -       -       y       -       1       anvil
scache    unix  -       -       y       -       1       scache
postlog   unix-dgram n  -       n       -       1       postlogd

retry     unix  -       -       y       -       -       error
discard   unix  -       -       y       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       y       -       -       lmtp
anvil     unix  -       -       y       -       1       anvil
scache    unix  -       -       y       -       1       scache
postlog   unix-dgram n  -       n       -       1       postlogd

uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)

policyd-spf  unix  -       n       n       -       0       spawn
    user=policyd-spf argv=/usr/bin/policyd-spf
smtp-amavis unix -    -    n    -    4 smtp
    -o syslog_name=postfix/amavis
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20
    -o smtp_tls_security_level=none

127.0.0.1:10025   inet   n    -     n     -     -    smtpd
    -o syslog_name=postfix/10025
    -o content_filter=
    -o mynetworks_style=host
    -o mynetworks=127.0.0.0/8
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o strict_rfc821_envelopes=yes
    -o smtp_tls_security_level=none
    -o smtpd_tls_security_level=none
    -o smtpd_restriction_classes=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_end_of_data_restrictions=
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
    -o smtpd_client_connection_count_limit=0
    -o smtpd_client_connection_rate_limit=0
    -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_address_mappings

127.0.1.2:smtp inet  n     -     n     -     -   smtpd
   -o receive_override_options=no_header_body_checks
127.0.0.1:smtp      inet  n     -     n     -     -   smtpd
   -o receive_override_options=no_header_body_checks
pickup              fifo  n     -     n    60     1   pickup
   -o receive_override_options=no_header_body_checks

Я добавил последние шесть строк для отключения проверок заголовков/тел для локальных пользователей.

Должна быть ошибка, но, к сожалению, я не знаю, в чем дело. У кого-нибудь есть идеи?

Редактировать: Однако сайт postfix.org утверждает, что что-то должно быть добавлено и в main.cf. См. картинку!

Как запутано!

Скриншот postfix.org

Ответ или решение

Постфикс 3.6: Отключение проверки заголовков и тела для внутренних пользователей

Введение

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

Проблема

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

postfix/master[xxxx]: warning: master_wakeup_timer_event: service pickup(public/pickup): Connection refused

Это предупреждение указывает на то, что служба pickup не может подключиться, вероятно, из-за неправильной конфигурации в файлах main.cf и master.cf.

Изменения в конфигурации

Для отключения проверок заголовков и тела для локальных пользователей, вы уже добавили следующие строки в файл master.cf:

127.0.1.2:smtp inet  n     -     n     -     -   smtpd
   -o receive_override_options=no_header_body_checks
127.0.0.1:smtp      inet  n     -     n     -     -   smtpd
   -o receive_override_options=no_header_body_checks
pickup              fifo  n     -     n    60     1   pickup
   -o receive_override_options=no_header_body_checks

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

Рекомендации по исправлению конфигурации

  1. Проверка файлов конфигурации:

    • Убедитесь, что в main.cf не пропущены какие-либо необходимые параметры для управления проверками.
    • Ознакомьтесь с документацией Postfix по receive_override_options.
  2. Добавление нужных параметров в main.cf:
    В main.cf добавьте следующее:

    smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

    Эти параметры позволят локальным пользователям проходить проверки без дополнительных ограничений.

  3. Проверка локального IP-адреса:
    Убедитесь, что IP-адрес 127.0.1.2 корректно настроен в файле /etc/hosts и доступен с сервера.

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

    sudo systemctl restart postfix
  5. Мониторинг логов:
    Проверьте логи Postfix для быстрого обнаружения и диагностики любых проблем:

    sudo tail -f /var/log/mail.log

Заключение

После внесения всех предложенных изменений, предупреждение о Connection refused должно исчезнуть, и ваша конфигурация Postfix будет правильно обрабатывать почту для локальных пользователей, не производя проверки заголовков и тела сообщений. Более того, отладка и мониторинг работы сервера позволяют обеспечить его стабильность и надежность.

Надеюсь, эта информация поможет вам в настройке вашего Postfix-сервера. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их!

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

Капча загружается...