Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

Практикум Python: обрабатываем входящую электронную почту


Сергей Супрунов

«Хороший сисадмин – ленивый сисадмин». Если что-то можно сделать вручную, то почти наверняка это же можно и автоматизировать. Вопрос лишь в соотношении цена/качество, которым определяется целесообразность разработки очередного скрипта.

Если говорить об автоматизации процессов администрирования, то более точно будет говорить о соотношении «время на разработку/экономия времени в дальнейшем». Лично для меня наилучшее значение достигается при использовании языка Python.

В данной статье мы рассмотрим решение одной достаточно узконаправленной задачи. Тем не менее методы и приёмы, которые будут здесь продемонстрированы, я надеюсь, помогут вам решать проблемы гораздо более широкого спектра.

Постановка задачи

Итак, есть почтовый сервер: FreeBSD + Sendmail + ClamAV, остальное в данном случае не важно.

ClamAV выполняет проверку всей входящей корреспонденции на вирусы и, помимо всего прочего, отсылает уведомления об обнаруженных вирусах на адрес postmaster. Проблема заключается в том, что администратору (для определённости будем считать, что он получает почту на адрес admin, что достигается соответствующей настройкой в /etc/mail/aliases) приходится обрабатывать достаточно большое число таких уведомлений. В то же время, они позволяют следить за вирусной активностью на вверенном узле, так что отказываться от такой информации нежелательно.

Таким образом, требуется снизить нагрузку на администратора без потери накапливаемой в процессе работы статистики.

Анализ проблемы

Попробуем решить данную задачу путём формирования ежедневных «дайджестов», отражающих вирусную активность за прошедшие сутки. Интересовать нас будет количество обнаруженных вирусов с разбивкой по их названиям.

Очевидно, что наиболее простым и в принципе более правильным решением было бы отключить уведомления на postmaster и просто обрабатывать log-файлы, формируемые в процессе работы.

Однако мы пойдём другим путём, чтобы рассмотреть на практике один из достаточно полезных приёмов: попробуем обрабатывать всю поступающую на postmaster почту, что называется, «на лету». Поскольку на данный адрес идёт почта не только от ClamAV, нам нужно перехватывать только интересующие нас уведомления, а всё остальное без изменений пересылать администратору (в нашем примере, на адрес admin).

Идеи по реализации

Наиболее удобным выглядит перенаправление почты на вход скрипта-обработчика путём создания канала (pipe), что можно реализовать с помощью псевдонимов (aliases). Например, если в файле /etc/mail/aliases добавить такую строку:

postmaster: “| /usr/local/scripts/maildigest/maildigest.py”

то вся почта, поступающая на указанный адрес, будет передаваться на стандартный вход (STDIN) сценария maildigest.py. На время тестирования можно будет не переправлять, а дублировать почту на скрипт, оставив в качестве получателя и прежнего пользователя (чтобы избежать потери почты):

postmaster: admin, “| /usr/local/scripts/maildigest/maildigest.py”

Получая очередное сообщение на обработку, сценарий должен будет проверить, не является ли оно уведомлением от ClamAV (будем контролировать два параметра: тему сообщения и тег заголовка «Auto-Submitted»). Если является, то обрабатываем его и записываем результат в некоторый файл (о формате пока не думаем). Если же это какое-то другое письмо, то положим его сразу в почтовый ящик пользователя admin. При необходимости изменить имя получателя его можно будет подправить непосредственно в коде сценария (не совсем «академическое» решение, но оно позволяет упростить код, не разбрасываясь на обработку параметров).

Небольшое исследование

Сначала давайте посмотрим, в каком виде сообщения поступают на вход сценария, а заодно проверим, с какими правами наш сценарий исполняется (эта информация нам понадобится в дальнейшем для решения проблемы передачи «прочей» почты пользователю admin).

Для этого напишем небольшой сценарий (как определено в aliases, сохраним его под именем maildigest.py, не забыв установить права на исполнение):

Листинг 1. Первый эксперимент

 


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100