Гид по технологиям

Как автоматически добавлять дисклеймер к исходящим письмам с помощью alterMIME (Postfix на Debian Etch)

• 4 min read • Почта • Обновлено 19 Nov 2025
Дисклеймер в почте Postfix с alterMIME
Дисклеймер в почте Postfix с alterMIME

Version 1.0
Author: Falko Timme

Предварительное замечание

Я предполагаю, что Postfix уже установлен и работает. В этом руководстве не рассматривается установка Postfix и настройка учетных записей электронной почты.

Установка alterMIME

alterMIME можно установить стандартным пакетом Debian:

apt-get install altermime

Далее создадим системного пользователя filter с домашним каталогом /var/spool/filter — от имени этого пользователя будет запускаться alterMIME:

useradd -r -c "Postfix Filters" -d /var/spool/filter filter
mkdir /var/spool/filter
chown filter:filter /var/spool/filter
chmod 750 /var/spool/filter

После этого создаём скрипт /etc/postfix/disclaimer, который будет запускать alterMIME. Пакет alterMIME в Debian содержит пример скрипта, который можно скопировать:

cp /usr/share/doc/altermime/examples/postfix_filter.sh /etc/postfix/disclaimer
chgrp filter /etc/postfix/disclaimer
chmod 750 /etc/postfix/disclaimer

По умолчанию этот скрипт добавляет дисклеймер ко всем письмам. Обычно нужно добавлять дисклеймер только к исходящей почте и не ко всем отправителям. Ниже показан изменённый вариант скрипта, который проверяет список адресов отправителей и добавляет дисклеймер только для них.

Откройте или создайте файл /etc/postfix/disclaimer_addresses и перечислите в нём по одному адресу отправителя на строку:

vi /etc/postfix/disclaimer_addresses
[email protected]
[email protected]
[email protected]

Теперь откройте /etc/postfix/disclaimer и замените содержимое или отредактируйте его так, как показано ниже (в скрипте отмечены изменённые фрагменты):

#!/bin/sh
# Localize these.
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail

####### Changed From Original Script #######
DISCLAIMER_ADDRESSES=/etc/postfix/disclaimer_addresses
####### Changed From Original Script END #######

# Exit codes from 
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15

# Start processing.
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }

cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }

####### Changed From Original Script #######
# obtain From address
from_address=`grep -m 1 "From:" in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`

if [ `grep -wi ^${from_address}$ ${DISCLAIMER_ADDRESSES}` ]; then
  /usr/bin/altermime --input=in.$$ \
                   --disclaimer=/etc/postfix/disclaimer.txt \
                   --disclaimer-html=/etc/postfix/disclaimer.txt \
                   --xheader="X-Copyrighted-Material: Please visit http://www.company.com/privacy.htm" || \
                    { echo Message content rejected; exit $EX_UNAVAILABLE; }
fi
####### Changed From Original Script END #######

$SENDMAIL "$@" 

Далее создайте текст дисклеймера /etc/postfix/disclaimer.txt. В пакете есть пример, который можно использовать и затем отредактировать под ваши требования:

cp /usr/share/doc/altermime/examples/disclaimer.txt /etc/postfix/disclaimer.txt

Наконец, нужно сообщить Postfix, что для smtp-сервиса нужно использовать фильтр. Откройте /etc/postfix/master.cf и добавьте к строке smtp опцию -o content_filter=dfilt:

vi /etc/postfix/master.cf

Пример фрагмента файла master.cf (с добавленной опцией):

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       -       -       -       smtpd
   -o content_filter=dfilt:
[...]

В конце того же файла добавьте описание фильтра dfilt:

[...]
dfilt     unix    -       n       n       -       -       pipe
    flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient}

Перезапустите Postfix:

/etc/init.d/postfix restart

Теперь дисклеймер должен добавляться только к исходящим письмам, отправленным с адресов, перечисленных в /etc/postfix/disclaimer_addresses.

Когда это может не сработать

  • Письма с S/MIME или PGP-подписаны или зашифрованы. Изменение тела письма нарушит подпись или сделать сообщение недоступным для расшифровки.
  • Многочастные или нестандартные MIME-структуры. alterMIME обычно работает, но в сложных письмах дисклеймер может вставляться некорректно.
  • Пересылка через почтовые рассылки или форвардеры: заголовок From: может отличаться от фактического отправителя, поэтому фильтр не всегда сработает.
  • Если Postfix и alterMIME работают под разными пользователями или контейнерами, проверьте права доступа к /var/spool/filter и файлам конфигурации.

Важно: тестируйте на копии почтового потока, прежде чем включать в продакшен.

Альтернативные подходы

  • milter-интерфейсы (например, milter-regex, opendkim/milter) дают более гибкий контроль и работают на уровне почтового демона.
  • Мимедефанг (mimedefang) — гибкий фильтр на основе Python/Perl для сложной обработки MIME.
  • Внешние шлюзы или облачные почтовые шлюзы (MTA-ас-а-сервис) добавляют дисклеймеры централизованно и часто поддерживают исключения и шаблоны.

Чеклист для внедрения (администратор)

  • Установить altermime.
  • Создать пользователя filter и каталог /var/spool/filter с правильными правами.
  • Создать /etc/postfix/disclaimer (скрипт) и /etc/postfix/disclaimer.txt (текст дисклеймера).
  • Заполнить /etc/postfix/disclaimer_addresses нужными адресами.
  • Обновить /etc/postfix/master.cf и перезапустить Postfix.
  • Отправить тестовые письма: простое текстовое, HTML, подписанное, зашифрованное, письмо с вложением.
  • Проверить заголовки и целостность сообщений, убедиться, что подписи не нарушились.

Критерии приёмки

  • Дисклеймер появляется в тексте и/или HTML у писем от указанных адресов.
  • Письма от других отправителей не изменяются.
  • S/MIME/PGP-подписанные письма не получают дисклеймер (либо обработка отклоняется по политике).
  • Нет ошибок в логах Postfix после перезапуска и при обработке тестовых писем.

Совместимость и примечания по Debian Etch

Debian Etch устарел. Пути к исполняемым файлам и примерные скрипты из пакетов могут отличаться в новых релизах Debian/Ubuntu. В современных системах рекомендуется использовать systemd unit-файлы для управления Postfix и проверять, совпадают ли пути к sendmail и altermime. Если вы используете контейнеры или chroot, проверьте доступность всех бинарников для пользователя filter.

Короткое руководство по отладке

  • Просматривайте логи Postfix: /var/log/mail.log или /var/log/mail.err.
  • Временно включите подробный лог (smtp или pipe) для диагностики.
  • Запускайте /etc/postfix/disclaimer вручную, под пользователем filter, подавая файл письма, чтобы увидеть ошибки.
  • Убедитесь, что /etc/postfix/disclaimer_addresses содержит точные адреса (без лишних пробелов).

Ссылки

Итог

Это практическое руководство показывает, как быстро настроить добавление дисклеймера с помощью alterMIME и Postfix на Debian Etch. Подойдёт для небольших организаций и простых политик. Для более сложных требований используйте milter-решения или внешние шлюзы.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро