# Сокрытие внутренних имен в заголовках писем PMG (версия 9.0.6)

### <span class="">🔍 Проблема</span>

<span class="">При отправке писем через </span>**<span class="">Proxmox Mail Gateway (PMG)</span>**<span class=""> версии 9.0.6 в заголовках появляется строка, раскрывающая внутреннюю инфраструктуру:</span>

<div class="md-code-block md-code-block-dark" id="bkmrk-text"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">text</span></div></div></div></div></div>```
Received: from pmg.domain.local (localhost.localdomain [127.0.0.1])
```

<div class="md-code-block md-code-block-dark" id="bkmrk-"><svg class="_9bc997d _33882ae" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg class="_9bc997d _28d7e84" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div><span class="">Необходимо скрыть локальное имя хоста (</span>`pmg.domain.local`<span class="">) и оставить только публичную информацию.</span>

---

### <span class="">🧩 Причина</span>

- <span class="">Фильтр </span>**`pmg-smtp-filter`**<span class=""> (встроенный антивирус/спам-фильтр) добавляет заголовок </span>`Received`<span class=""> при передаче письма от фильтра к локальному Postfix.</span>
- <span class="">Заголовок формируется на основе короткого имени сервера (результат </span>`hostname -s`<span class="">) и </span>**<span class="">Search Domain</span>**<span class="">, заданного в настройках PMG (или в системе).</span>  
    <span class="">Пример: короткое имя </span>`pmg`<span class="">, Search Domain </span>`domain.local`<span class=""> → заголовок </span>`pmg.domain.local`<span class="">.</span>
- <span class="">Изменение параметров Postfix (</span>`myhostname`<span class="">, </span>`smtp_helo_name`<span class="">) или </span>`mailname`<span class=""> в PMG </span>**<span class="">не влияет</span>**<span class=""> на этот заголовок, так как он генерируется фильтром до передачи письма в очередь Postfix.</span>
- <span class="">Параметр </span>`hide_received`<span class=""> скрывает только заголовки с внутренними IP (например, </span>`192.168.x.x`<span class="">), но </span>**<span class="">не удаляет</span>**<span class=""> запись о локальной передаче через </span>`127.0.0.1`<span class="">.</span>

---

### <span class="">✅ Решение (без изменения системного hostname)</span>

<span class="">PMG 9.0.6 сохраняет стандартную систему шаблонов. Решение включает настройку </span>**<span class="">Search Domain</span>**<span class=""> в PMG и использование </span>**<span class="">header\_checks</span>**<span class=""> в Postfix для удаления нежелательного заголовка.</span>

#### <span class="">1. Включение параметра Hide Internal Hosts</span>

- <span class="">В веб-интерфейсе PMG перейдите в </span>**<span class="">Конфигурация → Почтовый прокси → Параметры</span>**<span class="">.</span>
- <span class="">Найдите опцию </span>**<span class="">Hide Internal Hosts</span>**<span class=""> и установите значение </span>**<span class="">Да</span>**<span class="">.</span>
- <span class="">Это удалит заголовки </span>`Received`<span class="">, содержащие внутренние IP-адреса (например, </span>`192.168.30.3`<span class="">) и локальные имена хостов.</span>

#### <span class="">2. Настройка Search Domain в PMG</span>

- <span class="">В веб-интерфейсе PMG перейдите в </span>**<span class="">Конфигурация → Почтовый прокси → Параметры</span>**<span class="">.</span>
- <span class="">Установите </span>**<span class="">Search Domain</span>**<span class=""> в значение вашего публичного домена (например, </span>`domain.com`<span class="">).</span>
- <span class="">Это заставит фильтр добавлять к короткому имени сервера указанный домен (например, </span>`pmg.domain.com`<span class=""> вместо </span>`pmg.domain.local`<span class="">).</span>

#### <span class="">3. Создание правил header\_checks в Postfix</span>

<span class="">Создайте файл </span>`/etc/postfix/header_checks`<span class="">:</span>

<div class="md-code-block md-code-block-dark" id="bkmrk-text-1"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">text</span></div></div></div></div></div>```
/Received: from pmg\.domain\.com/ IGNORE
```

<div class="md-code-block md-code-block-dark" id="bkmrk--3"><svg class="_9bc997d _33882ae" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg class="_9bc997d _28d7e84" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div>> **<span class="">Важно:</span>**<span class=""> не используйте </span>`^`<span class=""> в начале выражения, так как заголовок может содержать начальные пробелы или табуляцию. Достаточно простого совпадения с именем.</span>

<span class="">Если требуется заменить на другое имя (например, на </span>`mail.domain.com`<span class="">), используйте:</span>

<div class="md-code-block md-code-block-dark" id="bkmrk-text-2"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">text</span></div></div></div></div></div>```
/Received: from pmg\.domain\.com/ REPLACE Received: from mail.domain.com
```

<div class="md-code-block md-code-block-dark" id="bkmrk--4"><svg class="_9bc997d _33882ae" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg class="_9bc997d _28d7e84" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div>#### <span class="">4. Подключение header\_checks через шаблон PMG</span>

- <span class="">Скопируйте оригинальный шаблон Postfix в пользовательскую директорию (если не сделано ранее):</span>

<div class="md-code-block md-code-block-dark" id="bkmrk-bash"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">bash</span></div></div></div></div></div>```
cp /var/lib/pmg/templates/main.cf.in /etc/pmg/templates/main.cf.in
```

<div class="md-code-block md-code-block-dark" id="bkmrk--5"><svg class="_9bc997d _33882ae" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg class="_9bc997d _28d7e84" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div>- <span class="">Отредактируйте </span>`/etc/pmg/templates/main.cf.in`<span class="">, добавив в конец строки:</span>

<div class="md-code-block md-code-block-dark" id="bkmrk-text-3"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">text</span></div></div></div></div></div>```
header_checks = regexp:/etc/postfix/header_checks
smtp_header_checks = regexp:/etc/postfix/header_checks
```

<div class="md-code-block md-code-block-dark" id="bkmrk--6"><svg class="_9bc997d _33882ae" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg class="_9bc997d _28d7e84" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div>- <span class="">Сохраните файл.</span>

#### <span class="">5. Применение изменений</span>

<div class="md-code-block md-code-block-dark" id="bkmrk-bash-1"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">bash</span></div></div></div></div></div>```
pmgconfig sync --restart 1
```

<div class="md-code-block md-code-block-dark" id="bkmrk--7"><svg class="_9bc997d _33882ae" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg class="_9bc997d _28d7e84" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div><span class="">Проверьте, что директивы применились:</span>

<div class="md-code-block md-code-block-dark" id="bkmrk-bash-2"><div class="md-code-block-banner-wrap"><div class="md-code-block-banner md-code-block-banner-lite"><div class="_121d384"><div class="d2a24f03"><span class="d813de27">bash</span></div></div></div></div></div>```
postconf header_checks
postconf smtp_header_checks
```

<div class="md-code-block md-code-block-dark" id="bkmrk--8"><svg class="_9bc997d _33882ae" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg><svg class="_9bc997d _28d7e84" fill="none" height="12" viewbox="0 0 12 12" width="12" xmlns="http://www.w3.org/2000/svg"><path d="M-5.24537e-07 0C-2.34843e-07 6.62742 5.37258 12 12 12L0 12L-5.24537e-07 0Z" fill="currentColor"></path></svg></div>#### <span class="">6. Проверка</span>

<span class="">Отправьте тестовое письмо на внешний адрес и проанализируйте заголовки. Строка с </span>`pmg.domain.com`<span class=""> должна исчезнуть (или замениться, если использовали </span>`REPLACE`<span class="">). </span>**<span class="">DKIM-подпись остаётся валидной</span>**<span class="">, так как удаление служебного заголовка не нарушает подпись.</span>

---

### <span class="">📌 Важные замечания</span>

- <span class="">Файл </span>`/etc/hosts`<span class=""> можно не менять — он остаётся с исходными записями (например, </span>`192.168.30.77 pmg.domain.local pmg`<span class="">). Это не влияет на результат, так как Search Domain переопределяет домен, добавляемый фильтром.</span>
- <span class="">Правило </span>**<span class="">без </span>`^`**<span class=""> необходимо, чтобы учесть возможные пробелы/табуляцию в начале строки заголовка.</span>
- <span class="">Шаблоны в </span>`/etc/pmg/templates/`<span class=""> сохраняются при обновлении PMG, но после мажорных обновлений рекомендуется сверить их с новыми версиями в </span>`/var/lib/pmg/templates/`<span class=""> на предмет необходимых изменений.</span>
- **<span class="">Влияние на DKIM:</span>**<span class=""> удаление заголовка </span>`Received`<span class=""> не нарушает DKIM-подпись, так как подписываются только основные заголовки (</span>`From`<span class="">, </span>`To`<span class="">, </span>`Subject`<span class=""> и др.), а </span>`Received`<span class=""> обычно не входит в подпись.</span>

---

### <span class="">🔄 Альтернативный подход</span>

<span class="">Если после изменения Search Domain фильтр генерирует иное имя (например, </span>`mail.domain.com`<span class="">), скорректируйте правило </span>`header_checks`<span class=""> соответствующим образом. В случае, если вы хотите полностью убрать любые внутренние имена, можно использовать более общее регулярное выражение, например </span>`IGNORE`<span class=""> для всех заголовков, содержащих </span>`domain.com`<span class="">.</span>

---

### <span class="">🏁 Итог</span>

<span class="">Комбинация настройки </span>**<span class="">Search Domain</span>**<span class=""> в PMG 9.0.6 и использования </span>**<span class="">header\_checks</span>**<span class=""> в Postfix позволяет полностью скрыть внутренние имена из заголовков писем, не затрагивая системный hostname и сохраняя стабильность работы веб-интерфейса PMG. Это решение проверено и гарантированно работает.</span>