Я хочу получать системные сообщения электронной почты с моего домашнего сервера. Итак, я пытаюсь настроить 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
вместо.