Как стать автором
Обновить
5
0
Pavel Leonov @ChizHJr

Системный администратор

Отправить сообщение
Хочу поделиться еще двумя "подводными камнями" с автоподписью и способами их решения.
Postfix + внешние фильтры = частично обрезанные входящие письма

Эта проблема подходит для любого типа фильтра, который используется в Postfix, например AntiSpamFilter, AntiVirusFilter и т.д.

Иногда на сервер приходят письма, которые с виду похожи на обычные письма, но обрезанные.
Вид писем может быть разный, и если прислать адресату письмо повторно, то письмо обрежется в том же месте, при этом, как правило, все вложения в письме тоже обрезаются.
Происходит это из-за того, что утилита 'sendmail' или 'dovecot-lda' (зависит от того, чем вы пользуетесь в фильтрах) по умолчанию проверяет письма на наличие строк, содержащих одну единственную точку.
Если такая строка есть, то это признак конца почтового сообщения в интерпретации 'sendmail' или 'dovecot-lda', после чего всё остальное содержимое ниже точки обрежется.
Для игнорирования таких строк с точкой, используйте следующую конструкцию в своих фильтрах:

  • /usr/sbin/sendmail -oi "$@" < in.$$ # ключ -oi игнорирует строки, содержащие одну единственную точку


Редкий баг с обрезкой писем должен пропасть.

А нужна ли картинка в автоподписи именно в 'этом' исходящем письме?

Бывают такие структуры писем, при которых письмо определяется как текстовое.
Соответственно в таких случаях нам НЕ нужно в письмо вставлять картинку.
'altermime' хорошо справляется с этой особенностью структур и умеет вставлять правильно нужный тип подписи, включая комбинированный (text, html и base64).
Но вставлять картинку приходится другой утилитой 'addAttachFilter', и нам нужно понимать, когда это нужно делать, а когда нет.
Нужно ознакомиться со структурой 'Content-Type: ', чтобы разобраться со структурой писем.
За счет этой структуры формируется отображение всего письма и определяется то, будет ли письмо в текстовом или HTML формате.

Ссылка для ознакомления: Почтовые сообщения с типом вложений

Рассмотрим варианты 'Content-Type: ', при которых письмо будет текстовым:
  • Отсутствует (пустое письмо в формате 'text/plain' без вложений);
  • Первое вхождение — 'text/plain' (например обычное текстовое письмо);
  • Первое вхождение — 'multipart/mixed', второе вхождение — 'text/plain' (например письмо с вложением);
  • Первое вхождение — 'multipart/mixed', второе вхождение — любое, отличное от 'text/html', 'multipart/related' и 'multipart/alternative' (например пустое письмо с вложением);

Во всех остальных случаях письмо будет в формате HTML.

Для выполнения такой проверки, измените скрипт следующим образом:

Удалите строки (смотри "Третий подводный камень"):


cat in.$$ | $INSPECT_DIR/addAttachFilter.pl > pic.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
cat pic.$$ > in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }


Добавьте вместо них следующий код:


ContentTypeFirst=`grep -m 1 '^Content-Type: ' in.$$ | cut -d " " -f 2 | cut -d ";" -f 1`
ContentTypeMixed=`grep -m 2 '^Content-Type: ' in.$$ | cut -d " " -f 2 | cut -d ";" -f 1 | tail -n 1`

isHTML=true
if [ "$ContentTypeFirst" = "" ] || [ "$ContentTypeFirst" = "text/plain" ]; then isHTML=false; fi
if [ "$ContentTypeFirst" = "multipart/mixed" ] && [ "$ContentTypeMixed" = "text/plain" ]; then isHTML=false; fi
if [ "$ContentTypeFirst" = "multipart/mixed" ] && [ "$ContentTypeMixed" != "text/html" ] && [ "$ContentTypeMixed" != "multipart/related" ] && [ "$ContentTypeMixed" != "multipart/alternative" ]; then isHTML=false; fi

if $isHTML ; then
	cat in.$$ | $INSPECT_DIR/addAttachFilter.pl > pic.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
	cat pic.$$ > in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
fi


Таким образом, картинка будет добавляться только в HTML письма.
Разве подпись при ответе должна цитироваться?

Должна цитироваться подпись или нет — это выбор каждого. Нравится — цитируйте, не нравится — не цитируйте. Жестких требований пока никто не выдвигал, да и статья то не об этом…

Графической логотип в подписи — зло.

Тут все просто:
  • Убедите в этом руководство — будете делать без addAttachFilter
  • Не убедите — будете делать комплексно
Когда понял, что подпись будет вставляться в каждое письмо, то исследовал и эту проблему тоже. Действительно, иногда в письмах заголовки "From:" могут повторяться несколько раз во время переписки, но, оказывается, что эта проблема решена в первичном скрипте "disclaimer". Дело в том, что там есть такая строчка:
  • from_address=`grep -m 1 «From:» in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`

В ней фильтр происходит по первому нахождению строки "From:". Получается, будет это ответ на письмо или его пересылка, первое вхождение строки "From:" будет с реальным значением адресата, кто отправил письмо, поэтому в любое входящее письмо не будет подставлена подпись. На практике, мне пока еще не попадались такие входящие письма, чтобы не был изменен адрес источника "From:" при первом его нахождении в письме.
Спасибо за разъяснения, буду иметь в виду на будущее. А то у меня были сомнения, по поводу использования Submission для таких целей. Правда пока не думаю, что буду переделывать текущий сервер в виду того, что данная проверка на «свой-чужой» уже прописана в самом скрипте "disclaimer".
Правильно понимаю, что 587 порт будет использоваться как дополнительный к 25у порту? И придется использовать 587 порт в настройках SMTP у сотрудников? Если так, то может возникнуть проблема, когда кто-то из сотрудников будет использовать 25 порт, вместо 587, например с личного телефона, либо кто-то сам установит или переустановит почтовый клиент на рабочем месте, где выставятся настройки по умолчанию на 25ый порт. Со временем можно запутаться в этих настройках, и корпоративная подпись в письмах не будет подставляться у части сотрудников. Все-таки submission-сервис лучше использовать для того, чтобы не перезагружать работой основной сервис, работающий на 25 порту.
Потоком считается набор пакетов, проходящих в одном направлении. Когда сенсор определяет, что поток закончился (по изменению параметров пакетов, либо по сбросу TCP — сессии), он отправляет информацию в коллектор. В зависимости от настроек он также может периодически отправлять в коллектор информацию о все еще идущих потоках [2].
Это очень важный момент — при настройке сенсора мы сами решаем, по каким параметрам отосланная на коллектор информация будет объединена в отчетах.


Это действительно очень важный момент, но в википедии не расшифровано, что это означает. Поясню следующее, что циска может отправлять 4 типа NetFlow данных: DENIED, CREATED, UPDATED, DELETED (Torn Down). Если вы будете считать данные по всем таким данным, то вы получите удвоенный трафик! Так вот, чтобы такого не было, нужно считать трафик либо CREATED + UPDATED, либо только DELETED (Torn Down). Не удивлюсь, что у большинства админов, в настройках циски указан тип ALL, после чего не понимают откуда у них идет удвоение трафика. Все эти моменты с учетом трафика по NetFlow я изложил в своей статье http://habrahabr.ru/post/220431/
Когда начинал реализацию данной затеи 3 месяца назад, то не нашел толковых статей про утилиту flow-tools и не нашел ни одной статьи о том, какие типы пакетов есть у NetFlow и как по ним вести учет трафика. Поэтому не смогу сейчас что-либо прокомментировать в работе утилиты flow-tools. О логике учета трафика, используя NetFlow, просто нигде не было ни слова. Везде написано только одно, что приходят пакеты с определенным направлением трафика и его количеством байт, а дальше разбирайтесь сами, либо используйте платный софт, например ManageEngine. Меня такая позиция не устроила в корне и я решил разобраться с учетом трафика, понять логику учета с использованием NetFlow, и по-возможности, и учесть весь "реальный" трафик до байта, тот который идет от всех ваших WAN хостов через шлюз провайдера, исключив при этом полностью локальный трафик, о котором говорил в своей статье.

Теперь о одах, если вы прекрасно понимаете как использовать flow-tools, то может напишете полную и исчерпывающую статью о том, как вести автоматизированный учет трафика, используя эту утилиту? В своей статье я показал, как использовать утилиту "nfdump" и показал как можно полностью автоматизировать учет трафика в компании, используя понимание логики пакетов NetFlow.

Что касается больших размеров таблиц в MySQL, используя полный дамп NetFlow. С вами полностью согласен, что это путь камикадзе, но это было всего лирическое отступление в статье, где дальше говорилось об оптимизации такого трафика средствами группировки данных.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность