Назад | Перейти на главную страницу

Команда Helo отклонена: хост не найден - установите postfix для приема отправки почты с моего домашнего сервера через мой общедоступный сервер.

Я хочу получать системные сообщения электронной почты с моего домашнего сервера. Итак, я пытаюсь настроить postfix для этого через свой общедоступный сервер. Мой общедоступный сервер имеет фиксированный IP-адрес, а мой домашний сервер находится в частной сети с испорченным именем хоста из-за того, что имя хоста моего маршрутизатора включено в имя хоста, что приводит к полному имени хоста «homeserver.blablabla_crappyrouter».

Мой домашний сервер подключается к моему общедоступному серверу через туннель OpenVPN с фиксированным IP, где мой домашний сервер является клиентом. От моего домашнего сервера до моего публичного сервера (и наоборот) есть фиксированный IP-адрес, поэтому они могут без проблем связываться друг с другом через фиксированный адрес. Это туннель, по которому я могу добраться до моего домашнего сервера из любого места без каких-либо проблем с безопасностью.

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

smtpd_recipient_restrictions = reject_invalid_hostname,
        reject_unknown_recipient_domain,
        reject_unauth_destination,
        reject_rbl_client sbl.spamhaus.org,
        permit

smtpd_helo_restrictions = reject_invalid_helo_hostname,
        reject_non_fqdn_helo_hostname,
        reject_unknown_helo_hostname

smtpd_client_restrictions = reject_rbl_client dnsbl.sorbs.net

И на своем домашнем сервере я добавил IP-адрес общедоступного сервера OpenVPN, используя

relayhost = [<public server IP through OpenVPN>]

Теперь эта конфигурация не отправляет электронные письма и выдает ошибку:

Команда Helo отклонена: хост не найден

Я исследовал это и обнаружил, что postfix ищет имя хоста, но, по-видимому, не находит его из-за испорченного имени хоста.

Мой вопрос: Как я могу указать постфиксу моего общедоступного сервера вслепую разрешить все с моего домашнего сервера?

Спасибо.

ОБНОВИТЬ:

Я установил опцию в main.cf

smtpd_helo_required = no

но это не помогло. Ниже приведены записи /var/log/mail.log сразу после того, как я отправил тестовое электронное письмо:

Sep  2 15:53:53 HomeServer sm-mta[6677]: t82Drr6w006677: from=sys@mydomain.com, size=69, class=0, nrcpts=1, msgid=<201509021353.t82Drr6w006677@HomeServer.blablabla_crappyRouter>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Sep  2 15:53:53 HomeServer sm-mta[6679]: STARTTLS=client, relay=mydomain.com., field=cn_subject, status=failed to extract CN
Sep  2 15:53:53 HomeServer sm-mta[6679]: STARTTLS=client, relay=mydomain.com., field=cn_issuer, status=failed to extract CN
Sep  2 15:53:53 HomeServer sm-mta[6679]: STARTTLS=client, relay=mydomain.com., version=TLSv1/SSLv3, verify=FAIL, cipher=ECDHE-RSA-AES256-GCM-SHA384, bits=256/256
Sep  2 15:53:53 HomeServer sm-mta[6679]: t82Drr6w006677: to=info@mydomain.com, delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=120069, relay=mydomain.com. [93.186.192.197], dsn=4.7.1, stat=Deferred: 450 4.7.1 <HomeServer.blablabla_crappyRouter>: Helo command rejected: Host not found

Письмо, которое я пытаюсь отправить:

ehlo localhost
mail from: sys@mydomain.com
rcpt to: info@mydomain.com
data
Subject: My first mail on Postfix

Hi,
Are you there?
regards,
Admin
.
quit

и отправляю с помощью команды:

cat mail.txt | nc localhost 25

Вы можете изменить свою политику HELO на:

smtpd_helo_restrictions = 
    permit_mynetworks,
    reject_invalid_helo_hostname,
    reject_non_fqdn_helo_hostname,
    reject_unknown_helo_hostname

... и добавьте адрес вашего домашнего почтового сервера в mynetworks = ... линия.

Хотя ответ @JennyD действителен и должен решить вашу проблему, может быть лучше сохранить текущую политику HELO для внешних хостов. Это имеет преимущество: неправильно настроенные MTA не смогут отправлять сообщения на ваш сервер, что избавит вас от некоторого количества спама (хотя и немного). В любом случае следует подозревать хосты с неправильной конфигурацией HELO.

Пойдя немного дальше, убедитесь, что у вас есть хотя бы reject_unknown_client_hostname среди списка под т.е. smtpd_client_restrictions = .... Это предотвратит сообщения от хостов MTA без надлежащей обратной записи DNS и, следовательно, многих ретрансляторов ботнета. Другой важной мерой защиты от спама может быть демон политики SPF (т.е. milter-greylist) и, очевидно, SpamAssassin.

Вот в чем проблема:

smtpd_helo_restrictions = reject_invalid_helo_hostname,
    reject_non_fqdn_helo_hostname,
    reject_unknown_helo_hostname

Последний из них, reject_unknown_helo_hostname, сообщает Postfix отклонять почту, если имя хоста, указанное в команде HELO, не может быть разрешено. Если вы удалите это, ваша проблема исчезнет.

Вам следует отменить внесенное вами изменение (установка smtpd_helo_required к no). Это изменение сделало так, что клиент может подключаться и начинать отправку писем, вообще не выполняя HELO, но если клиент действительно выполняет HELO, ограничения в smtpd_helo_restrictions все равно будет применяться, как вы обнаружили.

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

smtpd_delay_reject = yes

smtp_helo_restrictions =
    permit_sasl_authenticated,
    reject_unknown_helo_hostname

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

Обратите внимание, что в некоторых конфигурациях master.cf устанавливает smtp_helo_restrictions для обоих submission и smtps к $mua_helo_restrictions, поэтому в этом случае установите mua_helo_restrictions вместо.