Как настроить динамическое значение HELO в Exim4 на Ubuntu 20.04?

Я использую почтовую связку из exim4-dovecot-roundcube, созданную через fastpanel. У меня настроено несколько доменов, каждый из которых имеет свой IP и корректные DNS и rDNS записи. Однако, одна проблема не дает пройти верификацию мейл чекеров — это несоответствие записи HELO и доменов. По умолчанию используется имя хоста, соответствующее первому домену, из-за чего проверки проходят успешно только для него, а у других доменов наблюдается расхождение. <br/> <br/> Можете подсказать, как определить, какой IP или домен используется при отправке письма, записать эту информацию в переменную и передать ее для команды HELO? Как можно реализовать такую логику в конфигурационных файлах?
  • 7 октября 2024 г. 0:04
Ответы на вопрос 2
Чтобы настроить динамическое значение HELO в Exim4, вам нужно добавить в конфигурацию дополнительные настройки, позволяющие передавать соответствующее имя хоста (домен) в зависимости от отправляемого адреса. Для этого необходимо использовать переменные и условные конструкции в конфигурационном файле Exim.

Вот шаги, которые вы можете выполнить:

1. **Откройте конфигурационный файл Exim**. Обычно это файл `/etc/exim4/exim4.conf.template` или `/etc/exim4/exim4.conf.localmacros`. Если у вас используется `update-exim44.conf`, редактируйте файл `/etc/exim4/exim4.conf.template`.

   ```bash
   sudo nano /etc/exim4/exim4.conf.template
   ```

2. **Добавьте правила для установки HELO**. В разделе, где определяются параметры транспорта (обычно `transport` или `acl`), добавьте условие, которое будет определять значение HELO. Например, можно использовать переменную, которая будет назначаться в зависимости от домена отправителя:

   ```exim
   # Определяем переменную для HELO
   warn
       domains = +local_domains
       set acl_m0 = "${if match{\$sender_address}{@(example.com|example.org|example.net)}{example.com}{other.example.com}}"
       # Если отправитель с example.com используем его в HELO
       set header_value = "${acl_m0}"
       send_mail = ${header_value}
   ```

3. **Измените параметр HELO/EHLO**. Найдите блок, который отправляет сообщения, и добавьте туда значение HELO/EHLO:

   ```exim
   # внутри transport или mail
   headers_add = "X-Helo: ${header_value}"
   ```

4. **Сохраните изменения и закройте файл**.

5. **Проверьте конфигурацию** с помощью команды:

   ```bash
   sudo exim -bP
   ```

6. **Перезагрузите службу Exim**, чтобы применить изменения:

   ```bash
   sudo systemctl reload exim4
   ```

### Дополнительные советы:

- **Дебаггинг**: Чтобы проверить правильность настройки, вы можете увеличить уровень логирования и посмотреть детальные логи:

   ```bash
   sudo nano /etc/exim4/exim4.conf.localmacros
   ```
  
   Добавьте/измените следующую строку:

   ```bash
   LOG_LEVEL = 10
   ```

- **Проверка всех доменов**: Убедитесь, что в условии `match` корректно указаны все домены, которые вы используете.

- **Тестирование**: Проверьте отправку писем с разных доменов и убедитесь, что HELO действительно передается корректно, используя такие инструменты, как `https://mxtoolbox.com/` для диагностики.

Эти шаги помогут вам установить динамическое значение HELO для каждой почты, отправляемой с вашего сервера, в зависимости от домена отправителя.
Оказывается домен отправителя сам сохраняется в переменную $sender_address_domain, осталось лишь передавать ее в HELO команду. Открываем конфиг exim4.conf.template и под секцию remote_smtp добавляем строчку: 

helo_data = $sender_address_domain

Перезапускаем службу exim4 и готово.
Похожие вопросы