Как я могу изменить имя_хоста Exim4 на коробке Debian?

24

Какой-то удаленный 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 HELOs называется localhost.localdomain, то, скорее всего, у вас неправильно настроен / etc / hosts, созданный некоторыми версиями установщика Debian. В этом случае, пожалуйста, исправьте ваш / etc / hosts.

К сожалению, я недостаточно знаком с администрацией Linux-сервера, чтобы точно знать, что все это значит :(

Йорн Шоу-Роде
источник

Ответы:

21

Ваш файл / etc / hosts должен содержать как минимум две записи. Первая запись должна иметь вид:

<IP_ADDRESS> <HOST_FQDN> <HOSTNAME>

второй должен иметь вид:

127.0.0.1 localhost

Вы также должны убедиться, что ваш файл / etc / hostname содержит полное доменное имя сервера и что при запуске hostname -fвозвращается полное доменное имя сервера. Если вы убедитесь, что все это правильно, и перезапустите exim, вы должны начать видеть его HELO должным образом.

Пол Латроп
источник
Я изменил / etc / hostname с локального имени компьютера на полное доменное имя. hostname -fвсе еще сообщает "localhost". Часть о / etc / hosts в вашем ответе выглядит ошибочной - как должна выглядеть первая запись?
Йорн Шоу-Роде
1
Хотя по- hostname -fпрежнему выдается сообщение «localhost», похоже, что смена / etc / hostname сделала свое дело - теперь я могу доставить свою почту. Я все еще хотел бы видеть недостающую часть вашего поста, хотя :)
Jørn Schou-Rode
К сожалению! Форматирование флеб. Исправлено :-)
Пол Латроп
1
/etc/hostnameобычно не содержит полного доменного имени в системах Debian, только краткое имя хоста.
Иосип Роден
Ну, первая строка /etc/hostsможет быть 127.0.0.2 mydomain.com myhostname( 127.0.0.2работает так же, как 127.0.0.1, поскольку loopback является сетью класса A). Возможно, вы можете объединить две строки в одну 127.0.0.1 mydomain.com myhostname localhost, но localhostэто каноническое имя хоста 127.0.0.1, не так ли? Это все, учитывая, что у вас есть имя хоста, а не FQDN в качестве вашего имени хоста. Кроме того, изменение /etc/hostnameне вступает в силу немедленно, вы должны hostname myhostname. Или перезапустите сервер.
х-юрий
8

Если вы используете один файл конфигурации, задайте для переменной PRIMARY_HOST_NAME желаемое имя:

Например, в /etc/exim4/exim4.conf:

PRIMARY_HOST_NAME = mybox.mydomain.com

или установите MAIN_HARDCODE_PRIMARY_HOSTNAMEв update-exim4.conf.conf, если вы используете разделенную конфигурацию файла.

Чтобы быть в безопасности, перезапустите exim.


источник
Просто обратите внимание, что указанный хост не может быть в кавычках, иначе exim отправляет, HELO 'mybox.mydomain.com'что прерывает отправку почты в Google, возможно, другим.
Мкомарински
1
Я не могу найти упоминания об этом имени переменной "PRIMARY_HOST_NAME" в документации. Где ты нашел это?
Иосип Роден
В Debian вы должны запустить update-exim4.confпосле изменения конфигурации. И перезагрузка вообще не нужна после этого.
x-yuri
... ну в eximобщем похоже замечают изменения в конфиге без перезагрузки. Но, возможно, перезагрузить безопаснее, так как я полагаю, что сам демон не перечитывает конфигурацию до перезагрузки. Затем вы заставляете его звучать так, как будто он /etc/exim4/exim4.confможет содержать только строку выше , но в тот момент, когда вы создаете файл, он /var/lib/exim4/config.autogeneratedигнорируется ...
x-yuri
... «Разветвленные процессы, которые exim запускает для получения SMTP или запуска очереди, будут использовать новый файл конфигурации, в то время как исходный главный exim-daemon будет по-прежнему использовать старый файл конфигурации». Таким образом, для отдельного файла конфигурации лучше всего использовать /etc/exim4/exim4.conf.localmacrosдля разделения /etc/exim4/conf.d/main/000_localmacros(файлы в maindir обрабатываются в первую очередь). И запустить update-exim4.conf+ systemctl reload exim4после внесения изменений.
х-юрий
4

Первичное имя хоста запрашивается во время установки exim4. Вы можете запустить команду

sudo dpkg-reconfigure exim4-config

пройти через подсказки снова.

Насколько я знаю, если вы уже используете «разделенную конфигурацию» (много маленьких файлов в /etc/exim4/conf.d) и решили придерживаться этого при появлении запроса, dpkg -configure не должен перезаписывать ни один из ваши существующие изменения конфигурации, отличные от настроек, которые он запрашивает, но, как всегда, вы должны сначала сделать резервную копию, чтобы быть в безопасности.

Дэвид Норт
источник
2
Похоже, он только запрашивает «почтовое имя [которое] должно быть единственным полным доменным именем (FQDN)». Тем не менее, эта настройка уже верна, и HELO по-прежнему говорит "localhost".
Йорн Шоу-Роде
То, о чем вы говорите, - это почтовое имя, к которому приходит сюрприз, сюрприз /etc/mailname. По умолчанию он используется для определения неквалифицированных адресов . Те, которые состоят только из имени пользователя. Добавляя доменное имя из /etc/mailname. Полученный адрес используется в Fromзаголовке.
x-yuri
2

primary_hostnameПеременная заполняется в соответствии с полным доменным именем (FQDN) системы. В Debian и связанных с ними систем это , как правило , формируется с использованием содержимого из /etc/hostnameи /etc/hostsфайлов. Файл имени хоста должен содержать краткое имя хоста (например foo), а файл хостов должен содержать запись, разрешающую fooв foo.bar.baz, то есть имя хоста с суффиксом домена (обычно совпадающее с записью DNS).

Вывод команды hostname(без каких-либо параметров) вернет первое, а hostname -fвывод вернет второе.

Файл имени хоста, как правило, заполняется после установки, и файл хостов может быть отредактирован так, чтобы в нем была еще одна запись, кроме записей localhost по умолчанию, - она ​​должна иметь форму:

<IP address> <hostname FQDN> <hostname>

Три столбца должны быть разделены пробелами или табуляцией, это не имеет значения. IP-адрес может быть 127.0.0.1, как и localhost, но часть имени хоста совпадает с именем хоста системы, а средняя часть должна быть FQDN, то есть именем хоста с суффиксом домена.

Чтобы убедиться, что линия работает, просто запустите hostname -fи убедитесь, что она возвращает полное доменное имя вашего сервера.

Наконец, перезапустите exim, например, с помощью:

sudo service exim4 restart

После этого вы должны начать видеть это привет. Его переменную можно проверить, запустив:

/usr/sbin/exim4 -bP primary_hostname

(Примечание: изначально я делал это как редактирование ответа от 2009 года, но он был отклонен. Первоначально я исправлял то, что не нужно было повторять запись по умолчанию на локальном хосте, просто объясните, каким должно быть добавление; объясните, какой Можно использовать IP-адрес; объяснить, что такое полное доменное имя; объяснить, как проверить сам exim.)

Иосип Роден
источник
/usr/sbin/exim4 -bP primary_hostnameне работает Вы можете проверить имя хоста HELO, отправив тестовое электронное письмо либо на проверку подлинности port25 , либо на любой другой почтовый ящик, где вы можете увидеть оригинал. Подробнее об этом здесь . Рассмотрите возможность обновления вашего ответа.
x-yuri
Он отлично работает на моей стабильной машине Debian (растяжка). Можете ли вы объяснить, точно, это не работает для вас? Обратите внимание, что в документации по exim.org/exim-html-current/doc/html/spec_html/… четко сказано, что по умолчанию helo_dataэто $primary_hostname. В системах Debian вы можете переопределить его, используя REMOTE_SMTP_HELO_DATAпеременную, но если вы просто правильно указали свое основное имя хоста, это не обязательно.
Иосип Роден
Я полагаю, что пытался, и он жаловался на то, что не принял аргумент. Но не могу воспроизвести это сейчас, так что не бери в голову, мой плохой. Что касается «если вы просто правильно задали основное имя хоста», то обычно не принято, что имя хоста должно разрешаться во что-либо. Итак, давайте скажем «если вы зададите имя хоста так, как вас ожидает exim ...» и оставите это на этом :)
x-yuri
Извините, но я не думаю, что было бы разумно делать какие-либо специальные выводы из долгой дискуссии на уровне Debian более десяти лет назад за чистую монету. Было бы более полезно, если бы вы указали на какой-то программный документ относительно такой вещи.
Иосип Роден
Это лучшее, что я мог найти. Если вы можете найти что-нибудь лучше или доказательство ваших слов, я был бы рад, если вы скажете мне. Пока все, что я могу сказать, это то, что даже в эти дни есть люди, которые не ставят имя хоста /etc/hosts. И все, что я прошу, это не называть должным то, что не принято.
x-yuri
1

после добавления той же строки в / etc / hosts, hostname -f вернет ваше полное доменное имя

myrocode
источник
Другими словами, myhostnameидет /etc/hostname(сопровождается hostname myhostname). И 127.0.0.1 mydomain.com myhostname.com localhostидет в /etc/hosts. Плюс перезагрузите на eximвсякий случай.
x-yuri
0

У меня та же проблема. Мне нужно изменить имя хоста почты, потому что некоторые письма не работают, когда они были отправлены. С этой ошибкой:

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
Диего Галлардо
источник
Ха, этот пост помогает мне с "primary_hostname", и теперь мой exim работает лучше, чем когда-либо :)
0

в WHM перейдите в Exim Configuration Manager -> Расширенный редактор

прокрутите вниз, пока не найдете «Добавить дополнительные параметры конфигурации» (большая синяя кнопка) и щелкните по нему.

в новой строке добавьте [primary_hostname] = [mydomain.com]

прокрутите вниз и нажмите Сохранить.

Satalink
источник