Как автоматически добавлять дисклеймер к исходящим письмам с помощью alterMIME (Postfix на Debian Etch)
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: http://pldaniels.com/altermime
- Postfix: http://www.postfix.org
- Debian: http://www.debian.org
Итог
Это практическое руководство показывает, как быстро настроить добавление дисклеймера с помощью alterMIME и Postfix на Debian Etch. Подойдёт для небольших организаций и простых политик. Для более сложных требований используйте milter-решения или внешние шлюзы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента