Некоторый удаленный SMTP-сервер, на который я пытаюсь доставить почту, отказывается принимать HELO с моего сервера:
504 5.5.2 <localhost>: Helo command rejected: need fully-qualified hostname
Судя по всему, мой сервер Exim4 отправляет localhost
как его полное доменное имя. Обыскивая сеть и кучу файлов конфигурации, я узнал, что значение, отправленное как FQDN во время HELO, берется из primary_hostname
переменная конфигурации.
Мой вопрос: что это за верный способ изменить эту переменную в системе Debian? Думаю, я могу просто жестко закодировать значение в конфигурационных файлах Exim4, но ИМХО, это будет иметь больше смысла, если значение автоматически соответствует /etc/mailname
или какой-то другой централизованный конфиг имени.
У меня такое ощущение, что ответ на мой вопрос можно найти в этом тексте от вики Debian:
Имя, используемое Exim в EHLO / HELO, берется из параметра конфигурации
primary_hostname
. Конфигурация Debian exim4 по умолчанию не установленаprimary_hostname
. Затем exim по умолчанию использует uname (), чтобы найти имя хоста. Если этот вызов возвращает только один компонент, для получения полного имени хоста используется gethostbyname () или getipnodebyname ().Если ваш Exim HELO имеет имя localhost.localdomain, то, скорее всего, вы неправильно сконфигурировали / etc / hosts, созданный некоторыми версиями установщика Debian. В этом случае исправьте / etc / hosts.
К сожалению, я недостаточно знаком с администрированием серверов Linux, чтобы точно понимать, что все это значит :(
В вашем файле / etc / hosts должно быть как минимум две записи. Первая запись должна иметь вид:
<IP_ADDRESS> <HOST_FQDN> <HOSTNAME>
второй должен иметь вид:
127.0.0.1 localhost
Вам также необходимо убедиться, что ваш файл / etc / hostname содержит полное доменное имя сервера и что запущенный hostname -f
возвращает полное доменное имя вашего сервера. Если вы убедитесь, что все это правильно, и перезапустите Exim, вы должны начать видеть его HELO должным образом.
Если вы используете один файл конфигурации, установите для переменной PRIMARY_HOST_NAME желаемое имя:
Например, в /etc/exim4/exim4.conf:
PRIMARY_HOST_NAME = mybox.mydomain.com
или установить MAIN_HARDCODE_PRIMARY_HOSTNAME
в update-exim4.conf.conf, если вы используете конфигурацию разделенного файла.
На всякий случай перезапустите exim.
Первичное имя хоста запрашивается во время установки exim4. Вы можете запустить команду
sudo dpkg-reconfigure exim4-config
, чтобы снова просмотреть подсказки.
Насколько мне известно, если вы уже используете «раздельную конфигурацию» (много маленьких файлов в /etc/exim4/conf.d) и предпочитаете придерживаться этого при появлении запроса, dpkg-reconfigure не должен перезаписывать ни один из изменения существующей конфигурации, кроме параметров, которые он запрашивает, но, как всегда, вы должны сначала сделать резервную копию, чтобы быть в безопасности.
В primary_hostname
переменная заполняется в соответствии с полным доменным именем (FQDN) системы. В Debian и связанных системах он обычно формируется с использованием содержимого /etc/hostname
и /etc/hosts
файлы. Файл имени хоста должен содержать короткое имя хоста (например, foo
), а файл hosts должен содержать запись, разрешающую foo
в foo.bar.baz
, то есть имя хоста с суффиксом домена (обычно соответствует записи DNS).
Вывод команды hostname
(без параметров) вернет первое, а hostname -f
output вернет последнее.
Файл имени хоста обычно заполняется при установке, и файл хостов можно отредактировать, чтобы в нем была еще одна запись, помимо записей локального хоста по умолчанию - она должна иметь форму:
<IP address> <hostname FQDN> <hostname>
Три столбца должны быть разделены пробелами или табуляцией, это не имеет значения. IP-адрес может быть 127.0.0.1, как и localhost, но часть имени хоста должна соответствовать имени хоста системы, а средняя часть должна быть полным доменным именем, то есть именем хоста с суффиксом домена.
Чтобы убедиться, что линия работает, просто запустите hostname -f
и убедитесь, что он возвращает полное доменное имя вашего сервера.
Наконец, перезапустите Exim, например с участием:
sudo service exim4 restart
После этого вы должны начать правильно видеть HELO. Его переменную можно проверить, запустив:
/usr/sbin/exim4 -bP primary_hostname
(NB: изначально я сделал это как редактирование ответа от 2009 года, но он был отклонен. Первоначально я исправлял следующие моменты: не было необходимости повторять запись localhost по умолчанию, просто объясните, что должно быть добавлено; объясните, какое Можно использовать IP-адрес; объясните, что такое полное доменное имя; объясните, как проверить сам exim.)
после добавления той же строки в / etc / hosts, имя хоста -f вернет ваше полное доменное имя
У меня та же проблема. Мне нужно изменить имя почтового хоста, потому что некоторые электронные письма не работают, когда они были отправлены. С этой ошибкой:
host receiver.server.com [200.200.200.200]: 550 <info@sender.server.com>: Sender address rejected: Domain not found
Поэтому я меняю его на /etc/exim.config
параметр primary_hostname
Некоторый код этого файла:
smtp_connect_backlog = 50
smtp_accept_max = 100
#primary_hostname = myhostname.com
deliver_queue_load_max = 3
в WHM goto Exim Configuration Manager -> Расширенный редактор
прокрутите вниз, пока не найдете «Добавить дополнительные параметры конфигурации» (большая синяя кнопка), и щелкните его.
в новой строке добавьте [primary_hostname] = [mydomain.com]
прокрутите вниз и нажмите Сохранить.