Knowledge Base

SMTP открыт публично — open relay и спам-риски (порт 25)

SMTP открыт публично — порт 25

Категория: Server Hardening · Риск: medium

SMTP открыт публично — порт 25

Два разных сценария

Сценарий 1: Намеренный почтовый сервер

Если у вас настроен Postfix/Exim/Sendmail — порт 25 **должен** быть открыт для приёма входящей почты. Но риск в неправильной конфигурации.

Сценарий 2: Случайный SMTP

Если вы не планировали почтовый сервер, но порт 25 открыт — возможно у вас запущен Postfix по умолчанию (во многих Linux-дистрибутивах он запускается автоматически при установке).

Главный риск: Open Relay

Open Relay — SMTP-сервер, который принимает и пересылает письма от кого угодно кому угодно. Спамеры активно ищут open relays для рассылки миллионов писем от вашего имени.

# Проверка open relay
# (только для своих серверов!)
telnet <YOUR_SERVER> 25
EHLO test.com
MAIL FROM: <test@external.com>
RCPT TO: <victim@another-external.com>
# Если сервер принял — это open relay

Исправление

Закрыть если SMTP не нужен

# Остановить Postfix
systemctl stop postfix
systemctl disable postfix

# Закрыть порт
ufw deny 25

Правильная конфигурация Postfix

# /etc/postfix/main.cf

# Принимать почту только для своих доменов
mydestination = $myhostname, example.com, localhost
mynetworks = 127.0.0.0/8   # пересылать только локальные письма

# Запрет open relay (обязательно):
smtpd_relay_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination    # ← главная строка

# TLS для входящих соединений
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem

Для отправки транзакционных писем без своего сервера

Используйте внешний SMTP-провайдер (Postmark, SendGrid, Amazon SES) через порты 587 или 465:

# /etc/postfix/main.cf — relay через SendGrid
relayhost = [smtp.sendgrid.net]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_security_level = encrypt

# /etc/postfix/sasl_passwd
[smtp.sendgrid.net]:587 apikey:<YOUR_SENDGRID_API_KEY>
postmap /etc/postfix/sasl_passwd

Проверка репутации SMTP

# Проверить IP в спам-листах
host <YOUR_IP>.zen.spamhaus.org

# Проверить PTR (reverse DNS)
host <YOUR_IP>
# Должен вернуть что-то осмысленное: mail.example.com
# А не: 123-45-67-89.dynamic.isp.com — это попадёт в спам

Связанные проверки