Ограничение на прием почты для Postfix

Стоит задача полностью запретить прием сообщений для email рассылок [email protected], а также в целях безопасности ограничить примем входящей почты только от доверенных доменов.

# Полный запрет приёма на [email protected]
[email protected]   REJECT 550 5.1.1 [email protected] does not accept inbound mail. Use [email protected]

# Без ограничений
[email protected]    OK

# Только от доверенных доменов (см. restriction class ниже)
[email protected]  check_restriction_class trusted_senders
[email protected]  check_restriction_class trusted_senders
[email protected]  check_restriction_class trusted_senders

Создаем файл:

nano /etc/postfix/trusted_senders

Добавляем список доверенных отправителей (доменов/адресов):

# Разрешить любые адреса с домена (пример):
@trusted-partner.com   OK
@client1.com           OK

# Разрешить домен и все поддомены (точка в начале):
.trustedgroup.com      OK

# (опционально) конкретный адрес:
[email protected] OK

# Всё остальное будет отклонено правилом в restriction class

Откройте /etc/postfix/main.cf и добавьте:

# Класс ограничений для user*
smtpd_restriction_classes = trusted_senders
trusted_senders =
    permit_mynetworks,
    permit_sasl_authenticated,
    check_sender_access lmdb:/etc/postfix/trusted_senders,
    reject 550 5.7.1 Sender domain is not allowed for this recipient

# Применяем правила по получателю
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    check_recipient_access lmdb:/etc/postfix/recipient_access

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

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Иначе получите предупреждение о ошибке.

Компилируем карты и перезагружаем Postfix:

postmap /etc/postfix/recipient_access
postmap /etc/postfix/trusted_senders
postfix reload

Использовать только IPv4 для Dovecot

service imap-login {
  inet_listener imap {
    listen = *
  }
  inet_listener imaps {
    listen = *
  }
}

Блокировка писем с небезопасными вложениями

Откройте конфиг Postfix:

nano /etc/postfix/main.cf

Добавьте в конец файла:

mime_header_checks   = regexp:/etc/postfix/mime_header_checks

Создайте файл с правилами:

nano /etc/postfix/mime_header_checks

Добавьте правила:

# Блок “опасных” расширений по имени файла в MIME-заголовках:
# Content-Disposition: ... filename=...
# Content-Type: ... name=...
# а также RFC2231 варианты filename*= / name*=
#
# Postfix regexp по умолчанию case-insensitive, поэтому EXE/Exe тоже поймается.

# 1) По расширению в filename/name (включая кавычки и пробелы в имени)
#    Ловит и: filename=, filename*=, name=, name*=
/^Content-(Disposition|Type):.*(filename|name)\*?[[:space:]]*=[[:space:]]*"?[^";\r\n]*\.(exe|scr|com|bat|cmd|pif|cpl|hta|js|jse|vbs|vbe|wsf|wsh|ps1|psm1|psd1|msi|msp|mst|jar|jnlp|lnk|scf|reg|dll|sys|drv|iso|img|vhd|vhdx|dmg|apk)"?([[:space:]]|;|$)/
  REJECT Attachment type not allowed

# 2) На случай, если имени файла нет/спрятали, но тип явно “исполняемый”
/^Content-Type:[[:space:]]*application\/(x-msdownload|x-msdos-program|x-dosexec|x-executable|x-ms-installer|java-archive)/
  REJECT Executable attachment type not allowed

# 3) (опционально) Macro-enabled Office
#    Если хочешь блокировать макросные файлы — раскомментируй:
/^Content-(Disposition|Type):.*(filename|name)\*?[[:space:]]*=[[:space:]]*"?[^";\r\n]*\.(docm|xlsm|pptm)"?([[:space:]]|;|$)/
#  REJECT Macro-enabled Office attachments not allowed

Применяем настройки:

postfix reload