Перейти к содержимому

Postfix где хранятся письма

  • автор:

Почтовая система среднего и малого оффиса.

Недавно один из знакомых администраторов попросил помочь ему в создании почтовой системы для фирмы в которой он работает. Подумав о сакраментальном слове RTFM и вспомнив, что недавних переселенцев из под Windows надо поощрять я все же решил поискать для него хорошую документтацию подробно описывающую то что ему предстоит выполнить. Побродив некоторое время в сети с удивлением обнаружил отсутствие того за чем пришел. Не то чтобы документации не было совсем . Скорее ее было даже слишком много. Очень часто мне на глаза попадались продвинутые статьи описывающие настройку магистральных систем способных работать в качестве почтовых серверов крупных интернет провайдеров. Встречались тексты объясняющие способы взаимодействия почтовой системы с SQL, RADIUS, LDAP серверами. Для нашего случая все эти ухищрения были чрезмерны. К сожалению подробной интрукции по настройке почтовой системы для малого и среднего офиса так и не было найдено. Свою систему мы будем строить на основе FreeBSD 4.5. В тоже время практически все описаное ниже после мелких исправлений будет работать во многих других Unix подобных системах. Главное что бы для целевой системы удалось найти версии программ postfix, popa3d, drweb, pflogsumm. Кратко обсудим зачем нужен каждый из этих компонентов. Postfix будет обеспечивать принятие входящих и отправку исходящих сообщений по протоколу smtp. Обычно программы такого типа называют MTA — Mail Transfer Agent. Popa3d позволит пользователям читать полученную почту. С помошью drweb мы будем проверять на вирусы все проходящие через нас письма. Для того чтобы знать насколько хорошо функционирует построеная нами система, нужно собирать статистику ее работы. К тому при случае начальству можно показать что не зря ещь свой хлеб с маслом. Выполнять это полезное действо мы будем с помошью pflogsumm. Стоит обратить внимание что машина на которой все это устанавливается имеет два сетевых интерфейса 192.168.10.252 и 80.80.120.163 . Первый направлен во внутреннюю подсеть. К сожалению авторизации на основе пароля и имени пользователя для протокола smtp у нас не будет. Отправка писем будет разрешены всем пользователям сети 192.168.10.0. С другой стороны для малыйх и средних сетей в большинстве случаев этого не потребуется. Соответствено через второй интерфейс мы будем общаться с внешним миром. Так же стоит помнить что для авторизации по pop3 мы будем использовать имена и пароли пользователей хранящиеся в файле /etc/paswd.

В качестве кандидатов на место smtp демона рассматривались exim, postfix, qmail, sendmail. Давайте кратко рассмотрим достоинстав и недостатки каждого из них. Стоит оговориться что все нижеизложеное является всего лищь моим личным мнением. Как говорится вольному воля поэтому читатель может на свой страх и риск использовать в качестве MTA все что ему заблагорассудится.

Sendmail — является самым старым MTA из нашего списка. Несмотря на впечатляющий и мощный функционал его пришлось отбраковать сразу же. В первую очередь произошло это из-за того что программа представляет из себя один монолитный блок. По этой же причине за ней тянется огромный шлейф уязвимостей и проблем с быстродействием. Вторым немаловажным недостатком является зубодробительная процедура конфигурирования. Перспективы программы для создании простейщей конфигурации которой необходимо некоторое время повозиться с компилятором m4 по моему мнению выглядят весьма грустно . Хотя старый монстр все еще не сдается, по причине многочисленности своих приверженцев. Заключительным гвоздем в гроб Sendmail послужило то что использование его для офиса среднего о размера похоже на погоню за мухой с молотом в руках.

В тоже время самый безопасный из претендентов qmail мне не понравился слишком жесткой иерархией запуска служебных программ. Для выполнения каждого класса своих задач он порождает дочерние процессы специальных программ. После выполнения задачи процесс дочерней программы уничтожается. С одной стороны это обеспечивает безопасность и запас прочности программы, но с другой создает некоторые накладные расходы на постоянное создание дочерних процессов и межпроцессорное взаимодействие. К тому же лично мне развитие проекта qmail кажется слишком медленным.

Приступив к осмотру Exim с огорчением замечаю, что процес установки на мой взгляд все же довольно нетривиален, и не особенно подходит новичкам мира Unix. Для включения тех или иных возможностей приходится редактировать Makеfile. Да и сам процес последующей настройки показался мне слегка странным. Если не обращать внимания на описанные только что недостатки , то мошный функциональный потенциал заложенный в эту программу Вас очень обрадует.

Postfix — являющийся ближайшим конкурентом qmail делает упор на быстродействие и безопасность. Принципы деления выполняемой задачи очень похожи на те что применяются в qmail, но дизайн системы совершенно другой. Основой идеологии postfix является наличие независимых резидентных модулей. Ни один из модулей не является дочерним процессом другого. В тоже время за счет постоянного присутствия модулей в памяти каждый из них может независимо пользоваться услугами других. Проект postfix на данный момент является самым динамично развивающимся из всех перечисленных.

Покончив с теорией приступим к осуществлению наших планов. Для работы с исходными текстами всего скачанного программного обеспечения я буду использовать директорию /tmp. Читатель может выбрать любую другую. Приступим к установке postfix.

Нужно создать группы postfix и postdrop. А затем в группу postfix добавить пользователя по имени postfix. Почтовая система будет работать с правами пользователя postfix, а группа postdrop будет владеть очередью сообщений. Наличие двух груп и одного пользователя увеличивает запас прочности и безопасности демона smtp. В зависимости от Вашей операционной системы действия по созданию пользователя можно будет выполнить с помощью команды adduser или useradd. После успешного создания пользователя и групп принимаемся за установку postfix. Во время установки всего програмного обеспечения мы будет создан еще один служебный пользователь. Нужно убедиться, что никто не сможет войти в систему пользуясь всеми вышупомянутыми аккаунтами. Для этого в качестве рабочей оболочки в файле /etc/passwd определяем для них /sbin/nologin.

Берем postfix-2.0.0.2.tar.gz с официального сайта проекта www.postfix.org и как обычно распаковываем и устанавливаем:

# tar zxvf postfix-2.0.0.2.tar.gz

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

# Корневой каталог файловой системы используемой для установки

# Сюда будут падать временные файлы создаваемые в процессе инсталляции

# Тут будут находиться файлы настроек postfix

# А здесь будет лежать выполняемый файл демона postfix

# Тут будут располагаться выполняемые файлы административных команд postfix

# Директория в которой будет находиться очередь писем обрабатываемых postfix

# Путь к команде используемой взамен стандартного sendmail

# Путь к исполняемому файлу используемому для перестройки почтовых псевдонимов

# Путь к команде отображающей состояние почтовой очереди

# Имя пользователя с правами которого работает почта

# Группа от имени которой будут работать команды обработки почтовой очереди

# В этой директории находится база документации на все устанавливаемые программы

# Директории куда нужно положить примеры конфигурационных файлов postfix.

# Смешивать примеры с реальными файлами конфигурации охоты нет.

# Поэтому вводим имя директории /etc/postfix/sample/

# Директория куда нужно положить файлы документаци

# Выбираем имя директории /etc/postfix/readme/

По завершению установки приступим к настройке. Конфигурационные файлы postfix находятся в директории /etc/postfix/. Все настройки, которые нам нужно поменять находятся в файле /etc/postfix/main.cf. Большинство опций можно оставить со значениями по умолчанию. Я опищу только те из них которые нужно изменять. Итак, приступим:

# Имя нашего хоста. Лучше всего устанавливать в соответствии с выводом

# получаемым после выполнения команды hostname.

#Имя нашего домена. Рекомендуется описать явно. Если переменная не

# определена то postfix будет использовать значение myhostname минус

inet_interfaces = 192.168.10.252, 80.80.120.163

# Адреса интерфейсов на которых нужно ждать smtp соединений.

# Для упрощения конфигурации можно использовать слово all для установки

# прослушивания всех интерфейсов. Также можно использовать переменные

# localhost и $myhostname. Тогда будут задействованы интерфейсы

# 127.0.0.1 и адрес соответствующий имени определенному в

mydestination = $myhostname, $mydomain

# Список доменов которыми себя считает эта машина. То есть почта

# приходящая для пользователей описанных доменов не отправляется

# куда либо, а разбирается локально.

mynetworks = 192.168.10.0/24, 127.0.0.0/8

# Определяем список доверенных сетей. Клиенты с адресами принадлежащими

# этим сетям смогут рассылать через нас почту. Если этот параметр не определен,

# то доверенной сетью считается IP подсеть к которой принадлежит машина с postfix.

# Путь к файлу почтовых псевдонимов.

Сохранив изменения считаем что настройка postfix закончена. Еще одним важным шагом является настройка почтового псевдонима пользователя root. Нам необходимо сделать так что бы все письма приходящие пользователю root перенаправлялись пользователю tigrisha. Открываем файл /etc/mail/aliases и ищем подобную строку.

Затем заменяем на вот такое:

Сохранив файл c помощью команды newaliases выполняем перестройку системный базы почтовых псевдонимов находящейся в файле /etc/mail/aliases.db

Покончив с настройками проверим нашу конфигурацию.

Если ошибок не появилось, значит все у нас хорошо. Самое время запустить демона smtp в лице postfix.

А на другой консоли смотрим какие сообщения попадают в файл протокола /var/log/maillog.

# tail -f /var/log/maillog

Должно получиться что то похожее на эти строчки:

Jan 16 14:35:33 postfix/postfix-script: starting the Postfix mail system

Jan 16 14:35:33 mail.test.ru postfix/master[7190]: daemon started — version 2.0.0.2

Пришло время проверить как работает отправка почты. С помощью telnet присодиняемся к локальной системе на 25-й порт.

# telnet localhost 25

Connected to localhost.test.ru.

Escape character is ‘^]’.

220 mail.test.ru ESMTP Postfix

# Затем с помощью команды mail from: указываем серверу от кого будет письмо.

# Командой rcpt to: задаем адрес получателя.

# И наконец с помощью data начинаем ввод текста письма.

354 End data with .

testing mail for tigrisha

# Закончить ввод текста можно нажав enter затем “.” и снова enter.

250 Ok: queued as 822A958

Последнее сообщение выданное системой означает, что письмо помещено в очередь на отправку. Все описанные действия можно выполнить любым почтовым клиентом. Хотя я считаю что администратор должен знать как выполнить большинство задач по настройке и управлению системой используя минимум инструментов. На другой консоли смотрим что система пищет в файл /var/log/maillog. Должны увидеть появление следующих строк:

Jan 16 17:45:56 mail.test.ru postfix/smtpd[235]: connect from [127.0.0.1]

Jan 16 17:47:16 mail.test.ru postfix/smtpd[235]: 822A958: client=localhost.test.ru[127.0.0.1]

Jan 16 17:47:55 mail.test.ru postfix/cleanup[246]: 822A958: message-id=

Jan 16 17:47:55 mail.test.ru postfix/qmgr[192]: 822A958: from=, size=416, nrcpt=1 (queue active)

Jan 16 17:47:55 mail.test.ru postfix/local[247]: 822A958: to=, relay=local, delay=39, status=sent (mailbox)

Jan 16 17:52:56 mail.test.ru postfix/smtpd[235]: disconnect from localhost.test.ru[127.0.0.1]

Если все так и произошло значит smtp работает как положено. По умолчанию для хранения полученых писем postfix использует формат mailbox. Это означает что у каждого пользователя есть файл в котором хранятся все его письма. Обычно он должен находится в директории /var/mail/. Соответственно для адреса tigrisha@test.ru файл будет называться /var/mail/tigrisha. Посмотрим как себя чувствует этот файл.

-rw——- 1 postfix postfix 0 Jan 15 17:58 postfix

-rw——- 1 tigrisha tigrisha 1173 Jan 16 17:47 tigrisha

Итак судя по всему письмо благополучно попало в нужный файл. Теперь необходимо настроить pop3 для того чтобы пользователи могли забирать почту с сервера. В качестве демона pop3 мы будем использовать popa3d. За этой программой закрепилась слава одного из самых быстрых, надежных и безопасных демонов pop3. К сожалению процедура установки этой программы из исходного кода очень неудобна. Перед там как приступить к компиляции приходится вносить в исходный код множество исправлений, что бы включить требуемую функциональность. Лично мне не понятно почему автор не может написать нормальный скрипт configure. Большинству других администраторов такой подход тоже не нравится. Поэтому оберегая собственные нервы воспользуемся системой портов.

После успешной инсталяции проверяем что бы в файле /etc/services были подобные фрагменты.

pop3 110/tcp pop-3 # POP version 3 pop3 110/udp pop-3

В отличии от postfix демон popa3d не находится постоянно в памяти машины. Вместо этого при каждом входящем соединении он будет запускаться супердемоном. В качестве супердемона чаще всего используются либо inetd либо xinetd. В моем случае это был именно inetd. А раз так то нам нужно внести в файл etc/inetd.conf следующий фрагмент:

pop3 stream tcp nowait root /usr/local/libexec/popa3d popa3d

Для того что бы измениения вступили в силу нужно перезапустить демон inetd. Ищем номер его процесса.

# ps -ax | grep inetd | grep -v “grep”

86 ?? Ss 0:01.03 /usr/sbin/inetd -wW

Получается что интересующий нас процесс имеет номер идентификатора 86. Вооружившись этими знаниями перезапускаем inetd.

После перезагрузки наступает самое время протестировать работу демона pop3. Делаем это как обычно с помощью telnet.

# telnet localhost 110

Connected to localhost.test.ru.

Escape character is ‘^]’.

# Командой user указываем серверу почту какого пользователя мы желаем читать.

# Передаем наш сложнейший пароль.

# После того как нас авторизовали посмотрим с помощью команды stat

# состояние нашего почтового ящика. Судя по ответу сервера в ящике одно

# письмо размером 597 байт. Просмотреть содержимое письма можно с

# помощью команды top 1 20.

# Приказываем показать верхние 20 строк первого письма.

Received: (from tigrisha@test.ru)

for tigrisha@test.ru; Tue, 11 Feb 2003 18:18:39 +0300 (MSK)

Date: Tue, 11 Feb 2003 18:18:39 +0300 (MSK)

From: Beshkov Andrew

testing mail for tigrisha

# Налюбовавшись на дело рук своих уходим

Connection closed by foreign host.

Процесс получение почты прошел гладко словно по маслу. На этом можно было бы завершить наши занятия но все же стоит подумать о безопасности наших пользователей. Давайте приступим к созданию антивирусной защиты для нашего сервера. Как я уже говорил в качестве антивируса мы будем использовать drweb. Грустный опыт работы с KAV для FreeBSD подтолкнул меня к правильному выбору. Так же стоит обратить внимание на отличное качество русской документации поставляющейся вместе с дисрибутивом drweb. Возможностей заложенных в пробной версии которую мы будем использовать достаточно для надежной защиты от вирусов. Также для получения обновлений антивирусных баз нам понадобится программа wget. Кроме всего прочего она поможет нам скачивать все необходимое программное обеспечение. Устанавливаем wget используя механизм портов.

Пользователи других операционных систем могут взять исходный код этой утилиты тут http://www.gnu.org/software/wget/wget.html

С помощью только что установленного wget скачиваем последнюю версию drweb

Если выполнить это действие, по каким либо причинам не удалось, то для скачивания можно воспользоваться любыми другими инструментами. Но все же стоит разобраться почему произощел такой казус. Иначе в дальнейшем мы не сможем автоматически обновлять антивирусные базы.

После окончания закачки, распаковываем полученный дистрибутив.

Создаем пользователя drweb принадлежащего группе drweb.

Внимательно читаем инструкции в файле

А затем запускаем скрипт инсталляции.

К сожалению, установить антивирус с помощью стандартного скрипта да еще и с первого раза мне не удалось. Он все время жаловался, что не может создать директорию /opt/drweb/ поэтому пришлось создать ее вручную.

После этого пошли жалобы на невозможность использования уже созданной директории по причине того, что она уже существует. Ну что же придется обработать скрипт инсталляции напильником. Открываем install.sh любимым текстовым редактором ищем такой фрагмент текста.

if [ -d «$INPUT» ] ; then

echo «Directory $INPUT already exists!»

if [ ! -d «$INPUT» ] ; then

echo «Can not create $INPUT!»

Удаляем или переводим этот фрагмент в комментарии. А вместо него вставляем строку:

Сохраняемся, выходим из редактора и запускаем install.sh снова. Теперь нужно по порядку отвечать на вопросы задаваемые скриптом.

Enter destination directory (/opt/drweb is default):

Select interface language: 0) english 1) russian

# Язык интерфейса. Мне больше нравится английский поэтому я выбрал «0»

После завершения установки начинаем редактировать /etc/drweb.ini

Удаляем из нее символ «;» и идем дальше. Таким образом мы указываем демону drweb что он должен работать с правами одноименного пользователя. Итак, антивирус установлен. Запускаем его с помошью файла /opt/drweb/drwebd. Полюбовавшись на сообщения в /var/log/messages понимаем что антивирус запустился и работает как надо. Но к сожалению, проку нам от этого пока мало. Для того чтобы подключить его к проверке почты нужно настроить интерфейс от postfix к drweb. Давайте разберемся, как взаимодействуют друг с другом вышеуказанные программы проследив весь жизненый цикл письма. На приведенной ниже схеме интересующий нас маршрут прохождения письма помечен синим цветом.

Письмо может войти в postfix двумя способами. C помошью входящего соединения по smtp через демона smtpd. Если же письмо отправлено с локальной машины, то через программу заменяющую собой sendmail. После этого письмо попадает в модуль cleanup который занимается проверкой и зачисткой заголовков письма. Затем письмо переходит в модуль queue который передает его через pipe фильтру postfix-drweb. Фильтр в свою очередь сохраняет письмо во временном файле и передает путь к нему клиенту антивируса. Усилиями клиента письмо попадает к демону drweb. В свою очередь он с помощью набора антивирусных баз проверяет письмо.

Если вирусов не найдено, то с используя программу заменяющую sendmail письмо передается модулю pickup. Затем вторично пройдя через cleanup и queue в зависимости от того где находится получатель письмо попадает либо в local и доставляется локально, либо в smtp и отсылается на другой сервер. В случае если drweb считает письмо зараженным оно переносится в карантин. С помощью программы sendmail письма с уведомлениями о данном неприятном факте направляются всем кто указан в секции [VirusNotify] файла drweb_postfix.conf. Обычно это админисратор, отправитель и получатель. Разобравшись с теорией приступим к настройке.

Берем фильтр drweb для postfix

В обязательном порядке читаем документацию поставляемую вместе с фильтром.

После распаковки получаем две директории etc и opt. Содержимое директории etc копируем в /etc/drweb/ а файлы из opt соответственно кладем в /opt/drweb/.

Создаем директорию в которую фильтр будет складывать письма приготовленные для проверки.

Настраиваем права доступа так чтобы работать с этой директорией мог только единственный пользователь группы drweb. Аналогичным способом расставляем нужные права на остальные интересные для нас директории.

# chmod 770 /var/spool/drweb

# chown drweb:drweb /var/spool/drweb

# chown -R drweb:drweb /opt

# chown -R drweb:drweb /var/drweb/

# chown -R drweb:drweb /etc/drweb/

Теперь нужно указать postfix что каждое входящее письмо должно проходить через антивирусный фильтр. В файле /etc/postfix/master.cf ищем строку:

smtp inet n — n — — smtpd

И заменяем ее на вот это:

smtp inet n — n — — smtpd -o content_filter=filter:dummy

Затем в конец этого же файла добавляем описание нашего фильтра:

filter unix — n n — — pipe

flags=R user=drweb argv=/opt/drweb/drweb-postfix -f $ — $

В файле /etc/drweb/drweb_postfix.conf найти такие строки и вписать в них следующие значения.

# почтовый адрес администратора

# почтовый адрес демона drweb

Перезапускаем postfix c помощью команды restart. Если ошибок на консоли и в файле /var/log/maillog не появилось значит все идет как надо. Итак почтовая система запустилась, но нам нужно проверить как работает антивирус. Специально для таких целей вместе с drweb поставляется тестовый файл опознаваемый многими антивирусными программи как вирус. В нем описан так называемый EICAR вирус. Подробнее об этом иммитаторе вируса читайте в документации поставляемой вместе с drweb. А точнее в файле /opt/drweb/doc/readme.eicar. Теперь с помошью любого текстового редактора создаем файл test.com содержащий EICAR вирус и записываем в него вот такую строку.

Сохраняем полученый файл. С помощью любой почтовой программы пишем себе письмо прикрепив к нему только что созданный файл test.com. Отправив письмо, получим ответ с уведомлением о том что мы пытались отправить себе вирус. В письме должны быть строки подобные нижеследующим:

======================
DrWeb scanning report:
======================
127.0.0.1 [19926] /var/spool/drweb//drweb.tmp_X19925 — archive MAIL
127.0.0.1 [19926] >/var/spool/drweb//drweb.tmp_X19925/eicar.com infected with EICAR Test File (NOT a Virus!)
========
Summary:
========
known virus is found : 1

Итак антивирусная система работает как положено. К сожалению вирусописатели не сидят сложа руки. Каждый месяц появляется несколько десятков новых вирусов. Для того чтобы наша система могла ловить новейщие вирусы, нужно настроить автоматическое обновление антивирусных баз. Выполнение этой важной задачи возложим на /opt/drweb/update.pl который будет самостоятельно скачивать новые базы.

После получения всех баз этот же скрипт будет перезапускать демона drweb. Это делается для того что бы демон мог загрузить полученны только что базы. Настраиваем crontab пользователя drweb так что бы с помощью вышеописанного скрипта обновление антивирусных баз происходило через каждые 10 часов.

# crontab -e -u drweb

00 0-24/10 * * * /opt/drweb/update/update.pl

Приближаясь в финишу необходимо исправить еще несколько ошибок программистов создававших скрипты для drweb.

После перезагрузки FreeBSD запускает на выполнение все скрипты находящиеся в

Во время инсталляции drweb автоматически создал скрипт, который будет выполнять запуск демона drweb после перезагрузки системы. Так же у нас появится возможность управлять работой демона с помощью команд stop, reload, start, restart. Рассмотрим каждую из этих команд подробнее.

start — запускает процесс drwebd.

stop — останавливает текущий процесс drwebd.

restart — останавливает выполняющийся процесс drwebd и запускает новый

reload — отправляет процессу drwebd сигнал HUP, заставляя его перечитать конфигурационные файлы, а затем продолжить работу

Вся проблема в том что создался этот файл не с тем именем которое нам необходимо. Для FreeBSD он должен называться drweb.sh а не drweb.

# mv /usr/local/etc/rc.d/drweb /usr/local/etc/rc.d/drweb.sh

Во вторых в операционной системе FreeBSD до версии 4.6 после перезагрузки файл drweb.sh будет выполнен без единого параметра командной строки. Для правильного выполнения последовательсти запуска демона drweb этот файл нужно выполнить с параметром start. Сейчас мы это исправим. Открываем файл для редактирования и ищем строку:

После нее добавляем вот такую строку:

Таким образом мы своего добились. Скрипт drweb.sh не получив параметров из командной строки рекурсивно выполнит сам себя с параметром start.

В качестве теста перезагружаем систему с помошью команды reboot для того чтобы убедиться что демоны postfix и drweb будут запущены автоматически.

Теперь займемся настройкой скритпа pflogsumm. Давайте посмотрим какие данные сможет предложить нам pflogsumm:

  • Количество принятых , доставленных, перенаправленых, отложеных, вовзращенных отправителю или отброщеных сообщений.
  • Общий размер принятых и отправленых сообщений.
  • Список хостов и доменов занимавшихся отправкой и получением почты.
  • Список адресов пользователей учавствовавших в обмене сообщениями.
  • Статистика по количчеству входящих и исходящих smtp соединений.
  • Минимальная, средняя, наибольшая продолжительность smtp соединений с каждым хосто или доменом.
  • Характеристики ежедневного или почасового траффика создаваем ого почтой.
  • Данные о количестве сообщений с разбивкой по доменам и хостам.
  • Сведения о предупреждениях, фатальных ошибках или панических состояниях почтовой системы.
  • Данные о прочих информационных сообщения записаных в протокол демоном smtp.
  • Состояние почтовой очереди.

Англоязычную версию pflogsumm-1.0.4.pl можно взять на сайте автора . Но все же мне кажется что гораздо приятнее читать отчеты на родном языке. Поэтому я предпочитаю использовать версию переведенную мною лично на русский язык. Скачать модифицированную версию скрипта можно http://www.onix.opennet.ru/files/pflogsumm_rus_1.0.4.tar.gz Создаем директорию для размещения скрипта и прочих файлов.

Теперь кладем туда pflogsumm-1.0.4.pl. Переименовываем его для краткости в pflogsumm.pl. Устанавливаем файлу владельца, группу и право на выполнение.

# chmod 100 /usr/local/pflogsumm/pflogsumm.pl

# chown root:wheel /usr/local/pflogsumm/ pflogsumm.pl

Для выполнения pflogsumm желательно иметь Perl версии не ниже 5.004. Стабильная работа с более ранними версиями интерпретатора Perl не гарантируется. Узнать версию Perl установленного в системе можно с помощью комманды perl -v.

Запустив модуль pflogsumm на выполнение, Вы скорее всего получите ошибки подобные этим:

Can’t locate Date/Calc.pm in @INC (@INC contains: /usr/libdata/perl/5.00503/mach

/usr/libdata/perl/5.00503 /usr/local/lib/perl5/site_perl/5.005/i386-freebsd /us

r/local/lib/perl5/site_perl/5.005 .) at ./pflogsumm.pl line 213.

BEGIN failed—compilation aborted at ./pflogsumm.pl line 213.

Это означает, что у Вас отсутствует модуль Perl по имени Date-Calc написанный Steffen Beyer. Он состоит из библиотеки языка С и модуля perl, который использует эту библиотеку. Нам этот модуль необходим для работы с датами Грегорианского календаря. Стандарт календаря описывается документами ISO/R 2015-1971, DIN 1355 и ISO 8601. На данный момент календарь такого типа используется во всех Европейских странах. В свою очередь для работы модуля Date-Calc нам потребуется модуль Bit-Vector. Берем самую последнюю версию, вышеописанных пакетов на сайте автора http://www.engelschall.com/~sb/download/ В случае если это сделать не удастся скачайте те же пакеты из центрального хранилища CPAN (Comprehensive Perl Archive Network). На момент написания статьи были актуальны версии Date-Calc-5.3 и Bit-Vector-6.3. Кладем оба пакета во временную директорию, например в /tmp. А затем начинаем распаковывать и устанавливать:

# tar zxvf Bit-Vector-6.3.tar.gz

Если с Bit-Vector все прошло удачно, выполяем аналогичные действия для пакета Date-Calc. По окончанию установки снова запускаем pflogsumm.pl. Если на экране не появилось ни одной ошибки значит все требуемые модули находятся на месте и готовы к использованию.

Технология работы pflogsumm довольно проста. Пользователь передает на стандартный ввод скрипта файлы протокола почтовой системы. А результаты получает из стандартного вывода. Мне кажется что статистика должна собираться за прошедшую неделю, предыдущий и текущий день. Для выполнения этих задач мы напишем три вспомогательных скрипта. После их выполнения сформированные файлы должны записываться в директорию /usr/local/apache/htdocs/traffic/. С помощью web сервера apache работающего на этой же машине файлы из этой директории будут доступны начальству для просмотра с помошью любого web браузера. В дополнение к этому хотелось что бы недельная и ежедневная статистика приходила по почте администратору.

Для систем FreeBSD характерно хранение протокола почтовой системы длиной в одну неделю. В некоторых диалектах Linux принято хранить протоколы длиной в один месяц. Как и во многих других Unix подобных системах с помощью демона cron каждую ночь запускается задача ротации файлов протоколов. В результате работы этой задачи файл /var/log/maillog упаковывается с помощью программы gunzip и записывается вместо файла /var/log/maillog.0.gz. В других системах вместо gunzip используется bzip, но основной принцип это не меняет. Старое содержимое файла /var/log/maillog.0.gz записывается в файл /var/log/maillog.1.gz. Таким образом все файлы по цепочке смещаются вниз на один день. И только содержимое файла /var/log/maillog.6.gz никуда не копируется, а просто перезаписывается файлом /var/log/maillog.5.gz. Обдумав все вышесказанное приходим к выводу что недельный и ежедневный скрипты подсчета статистики должны запускаться после того как задача ротации логов успешно завершится. Во избежание всяких казусов уточните время запуска и завершения задачи ротации протоколов для вашей системы.

Ниже приводится содержимое файла /usr/local/pflogsumm/weekly.sh создающего недельную статистику.

zcat /var/log/maillog.0.gz > /usr/local/pflogsumm/weekly.maillog

zcat /var/log/maillog.1.gz >> /usr/local/pflogsumm/weekly.maillog

zcat /var/log/maillog.2.gz >> /usr/local/pflogsumm/weekly.maillog

zcat /var/log/maillog.3.gz >> /usr/local/pflogsumm/weekly.maillog

zcat /var/log/maillog.4.gz >> /usr/local/pflogsumm/weekly.maillog

zcat /var/log/maillog.5.gz >> /usr/local/pflogsumm/weekly.maillog

zcat /var/log/maillog.6.gz >> /usr/local/pflogsumm/weekly.maillog

# Собираем полный недельный протокол в файл weekly.maillog

# такой подход облегчает обработку файла. Но в тоже время

# стоит убедиться что в системе хватит места для этого файла.

echo «/usr/local/apache/htdocs/traffic/» > /usr/local/pflogsumm/weekly.name

date -v-7d «+%d%b%Y-» >> /usr/local/pflogsumm/weekly.name

date -v-1d «+%d%b%Y» >> /usr/local/pflogsumm/weekly.name

# Записываем в файл weekly.name полный путь к результирующему файлу

/usr/local/pflogsumm/pflogsumm.pl /usr/local/pflogsumm/weekly.maillog —smtpd_stats —mailq —problems_first —rej_add_from —verbose_msg_detail —iso_date_time > `tr -d «\n» < /usr/local/pflogsumm/weekly.name`

# Запускаем расчеты и перенаправляем стандартный вывод

# в результирующий файл

# Отправляем копию файла почтой администратору

# Убираем за собой мусор

Закончив с еженедельным скриптом перейдем к ежедневному собирающему данные за вчерашний день /usr/local/pflogsumm/daily.sh. Комментировать в нем нечего потому что это всего лишь упрощенная версия еженедельного расчета.

zcat /var/log/maillog.0.gz > /usr/local/pflogsumm/daily.maillog

echo «/usr/local/apache/htdocs/traffic/» > /usr/local/pflogsumm/daily.name

date -v-1d «+%d%b%Y» >> /usr/local/pflogsumm/daily.name

/usr/local/pflogsumm/pflogsumm.pl -d yesterday /usr/local/pflogsumm/daily.maillog —mailq —problems_first —rej_add_from —verbose_msg_detail —iso_date_time > `tr -d «\n» < /usr/local/pflogsumm/daily.name`

date -v-1d «+%d%b%Y» > /usr/local/pflogsumm/tmp.date

Последней и самой простой версией скрипта является задача запускающаяся ежечасно для сбора данных об активности на текуший день /usr/local/pflogsumm/hourly.sh

echo «/usr/local/apache/htdocs/traffic/» > /usr/local/pflogsumm/tmp.name

date «+%d%b%Y» >> /usr/local/pflogsumm/tmp.name

/usr/local/pflogsumm/pflogsumm.pl -d today /var/log/maillog —mailq —problems_first —rej_add_from —verbose_msg_detail —iso_date_time > `tr -d «\n» < /usr/local/pflogsumm/tmp.name`

Для моей системы оптимально было установить время выполнения всех трех скриптов таким образом.

# crontab -e -u root

0 1 * * 1 /usr/local/pflogsum/weekly.sh

0 2 * * * /usr/local/pflogsum/daily.sh

К сожалению пользователи других систем скорее всего столкнутся с проблемами при использовании первых двух скриптов. Это может произойти из-за того что внутри наших скриптов мы используем команду date c ключем -v. Не все операционные системы поддерживают такую опцию и возможно Вам прийдется править скрипты.

Выполнив все вышеописаное вы должны стать счастливым обладателем собственного почтового сервера.

linux samba mail postfix FreeBSD Unix doc linux howto ALTLinux PHP faq bind sendmail apache iptables firewall kernel rpm apt-get Slackware openssh Cisco debian vmware GNU oracle sun awk /etc/ passwd linux установка учебник книга скачать

Как посмотреть письма пользователя в postfix

Настроил почтового клиента у пользователя по IMAP, но он говорит, что письма не все, их было больше, какой командой можно посмотреть письма пользователя в ящике… в каталоге cur лежат файлы с расширением .mail:2,S, но если каждый файл это письмо, то их очень мало, где ещё могут находиться письма?

tmpnikl
02.03.21 07:44:47 MSK

Postfix к IMAP отношения не имеет, ты воюешь не в ту сторону. Почитай лучше куда ты коннектишь клиента и кто за эту службу отвечает.

Письма «которых было больше» до переключения на IMAP очевидно где-то в локальном хранилище старого POP3-клиента.

На imap-сервере они все должны быть в Maildir/cur или Maildir/new или Maildir/INBOX.. Опять же это верно только при условии, что до этого с ящиком не поработали по POP3 и не утянули всё с удалением писем с сервера.

BOOBLIK ★★★
( 02.03.21 09:31:22 MSK )
Последнее исправление: BOOBLIK 02.03.21 09:32:29 MSK (всего исправлений: 1)

Ответ на: комментарий от BOOBLIK 02.03.21 09:31:22 MSK

Спасибо за ответ, а не подскажите ещё вот такое чудо, я смотрю каталог mail\пользователь, там три подкаталога cur, new, tmp, копирую на локальную машину ящик этого пользователя, а там появляются ещё каталоги .Sent,.Archives и т.д. с такими же подкаталогами и с этими недостающими письмами, как теперь их перекинуть в каталог mail\пользователь\cur? там же какие-то индексы у каждого письма, надо сделать как-то правильно… Клиент на локальной машине громптица, pop3 не использовали.

tmpnikl
( 02.03.21 10:21:16 MSK ) автор топика
Ответ на: комментарий от tmpnikl 02.03.21 10:21:16 MSK

я смотрю каталог mail\пользователь

Как смотришь? Какой командой?

там появляются ещё каталоги .Sent,.Archives

в Linux файлы и каталоги, начинающиеся с точки являются скрытыми включи отображение скрытых каталогов и увидишь их

как теперь их перекинуть в каталог mail\пользователь\cur

В директории .Sent хранятся отправленные. В cur лежат входящие. Ты уверен, что тебе нужно перекинуть одно в другое?

Почитай теорию. То как работает твой IMAP-сервер, где и как хранит, какая схема организации каталогов включена в его настройках. Я бы начал с этого. Пока что похоже, что ты всё делаешь наугад и ни к чему хорошему это не приведёт.

Пока что очень похоже, что у тебя не включена подписка на нужные тебе почтовые папки в самом клиенте. Попробуй кликнуть правой кнопкой по названию ящика в левой колонке Thunderbird и выбрать там Subscribe (или что-то типа «Подписки»/«Почтовые папки» и т.п., не знаю как это точно в русской локали) и отметить там все что можно галочками.

BOOBLIK ★★★
( 02.03.21 10:39:17 MSK )
Последнее исправление: BOOBLIK 02.03.21 10:39:46 MSK (всего исправлений: 1)

Как настроить Postfix для использования виртуальных почтовых ящиков на Ubuntu 20.04

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

Настройка системы

В первую очередь требуется подготовка системы для работы виртуальных почтовых ящиков. Для этого создадим папку virtualmailboxes (для вашего доменного имени) — ее имя может быть произвольным. Если вы его измените, не забудьте использовать соответствующее имя папки при дальнейшей настройке. В эту папку Postfix будет добавлять файлы, соответствующие каждому виртуальному пользователю, после получения этим пользователем первого письма.

sudo mkdir -p /home/virtualmailboxes/domain-name.com

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

sudo groupadd -g 2000 virtualmail
sudo useradd -g virtualmail -u 2000 virtualmail -d /home/virtualmailboxes -m
chown -R virtualmail:virtualmail /home/virtualmailboxes

Настройка Postfix

Откроем файл настройки Postfix:

sudo nano /etc/postfix/main.cf

При обработке почты для одного домена, Postfix может работать в одном из двух режимов:

  • доставлять почту пользователям системы, как было настроено ранее;
  • работать с виртуальными почтовыми ящиками и доставлять почту виртуальным пользователям – что нам и требуется.

Так как для настройки первого варианта целевой домен добавляется в переменную mydestination, то мы удалим его оттуда и приведем к следующему виду:

mydestination = localhost.com, localhost

Далее добавим следующие настройки в файл конфигурации:

virtual_mailbox_domains = domain-name.com
virtual_mailbox_base = /home/virtualmailboxes
virtual_mailbox_maps = hash:/etc/postfix/virtualmaps
virtual_minimum_uid = 500
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000

Добавленные строки в файле настроек

Описание добавленных настроек:

  • virtual_mailbox_domains указывает на то, что Postfix работает в режиме виртуального почтового ящика, а также содержит в себе домен, для которого обрабатывается почта;
  • virtual_mailbox_base указывает путь для хранения почты;
  • virtual_mailbox_maps указывает файл со списком виртуальных пользователей;
  • virtual_minimum_uid, virtual_uid_maps, virtual_gid_maps – настройки системного пользователя, который будет управлять почтовой папкой.

Теперь создадим файл со списком виртуальных почтовых ящиков, путь к которому был указан в virtual_mailbox_maps.

sudo nano /etc/postfix/virtualmaps

Каждая строка этого файла должна содержать адрес электронной почты в формате user@domain и путь к файлу для хранения почты в формате Домен/папка (адрес и пусть разделены пробелом). Путь к файлу указывается относительно значения опции virtual_mailbox_base файла настроек, в нашем случае – /home/virtualmailboxes.

user1@domain-name.com domain-name.com/user1
user2@domain-name.com domain-name.com/user2
support@domain-name.com domain-name.com/support

Добавленные строки в /etc/postfix/virtualmaps

Сохраним файл. Для применения настроек нужно выполнить две команды:

postmap /etc/postfix/virtualmaps
postfix reload

Теперь протестируем

Чтобы проверить корректность настройки, отправим электронное письмо виртуальному пользователю от имени другого пользователя, созданного нами, и укажем его почту в качестве обратного адреса (параметры -u и -r):

sudo echo «Postfix virtual mailboxes test» | mail -r user2@domain-name.com -u user2@domain-name.com -s «Subject» user1@domain-name.com

Чтобы просмотреть сообщения, полученные пользователем user1, используйте команду:

sudo cat /home/virtualmailboxes/domain-name.com/user1

Результат тестирования

При возникновении ошибки письмо может быть возвращено отправителю, именно поэтому мы отправляли его от имени уже созданного виртуального пользователя.

Для того, чтобы просмотреть почтовый ящик отправителя (user2), используйте команду:

sudo cat /home/virtualmailboxes/domain-name.com/user2

Логи работы Postfix хранятся в /var/log/mail.log, сообщения об ошибках в /var/log/mail.err.

Особенности работы Postfix

image

Добрый день, сообщество. В этой статье хочу поговорить о Postfix – о том, каковы принципы его работы, и о возможностях диагностики проблем. В силу специфики работы приходится с ним сталкиваться — либо для решения своих задач, либо для понимания того, как работает чужая инфраструктура. В интернете о Postfix много информации, однако в основной массе это готовые конфиги для развертывания почтового сервера с нуля. Здесь же я постараюсь охватить основные аспекты администрирования Postfix.

Известно, что Postfix разработан как альтернатива Sendmail. ПО повышало производительность, обеспечивало устойчивость, гибкость и безопасность решения. Все основные Linux-дистрибутивы включают Postfix, в Mac OS X, начиная с версии 10.3, программа также используется вместо Sendmail.

Главные особенности

  • Фокус Postfix в том, что можно начинать работу без приготовлений (базовые конфигурационные файлы включают в себя пару строк).
  • Для эффективной фильтрации писем применяются регулярные выражения PCRE (Perl compatible regular expression).
  • Программа Postfix совместима с Sendmail: файлы aliases и .forward имеют схожий формат и семантику.
  • Postfix общается по протоколу ESMTP, поддерживает виртуальные домены и фильтрацию спама.
  • Не используется язык подстановки адресов как в Sendmail. Вместо этого производится поиск в плоских файлах таблиц или базе данных MySQL.

Архитектура

Postfix состоит из нескольких небольших, совместно работающих программ, которые посылают сетевые сообщения, принимают сообщения, осуществляют локальную доставку почты и другие действия. Связь между программами обеспечивается с помощью сокетов Unix или алгоритмов FIFO. Архитектура отличается от Sendmail, где всю работу нужно выполнять одной большой программе.

Запуск и контроль всех процессов выполняет программа master. В ее конфиге — master.cf -перечислены вспомогательные программы и информация о том, как и когда их нужно запустить.

Самые важные программы показаны в блок-схеме:

image

За прием почты на порту SMTP отвечает smtpd. Он же проверяет, авторизован ли клиент для отправки почты. Если письмо отправляется локально, через совместимость с /usr/lib/sendmail, файл будет записан в каталог /var/spool/postfix/maildrop. Этот каталог сканируется программой pickup, которая обрабатывает найденные файлы. Входящая почта обрабатывается программой cleanup. Она добавляет отсутствующие заголовки и переписывает адреса в соответствии с картами canonical и virtual. Прежде чем поместить письмо в очередь, incoming программа cleanup передает письмо программе trivial-rewrite, которая также выполняет незначительные исправления в адресах, добавляя домен и частично заполненный адрес.

Электронные письма, ожидающие доставки, находятся под управлением qmgr – администратора очередей:

Incoming – входящая почта;

Active – доставляемая почта;

Deferred – письма, доставка которых не осуществилась ранее;

Hold – письма, заблокированные в очереди администратором;

Corrupt – письма, которые невозможно прочитать.

Анализатор очередей обычно выбирает сообщение для обработки на основе алгоритма FIFO.

Также он поддерживает и более сложный алгоритм — например, отбирает события только с определенных адресов.

Чтобы не перегружать хост приемки, после доставки писем Postfix использует алгоритм медленного запуска, который позволяет контролировать скорость доставки. Отсроченные письма получают метку с обозначением времени повторной отправки. Время увеличивается экспоненциально, благодаря этому вы можете избежать траты ресурсов на сообщения, которые не удается доставить. Состояние недосягаемых мест кешируется — во избежание новых попыток.

Отправка почты идет при поддержке trivial-rewrite, утилита qmgr принимает решение, куда должно быть отправлено сообщение. Решение о маршруте может быть аннулировано transport картой.

Доставка с помощью SMTP осуществляется, конечно, smtp-программой. Lmtp осуществляет локальную пересылку почты по протоколу LMTP, использующим семантику ESMTP (https://tools.ietf.org/html/rfc2033). LMTP изменен так, что для управления локальной очередью почтовый сервер не нужен.

Задача local – локальная доставка почты. Программа распознает в таблице aliases и выполняет инструкции из файла .forward получателя. Сообщения могут быть направлены по другому адресу, переданы внешней программе на обработку или сохраниться в почтовых папках пользователей.

Программа virtual доставляет письма в виртуальные почтовые ящики – ящики, представляющие собой адреса назначения. Наконец, программа pipe реализует доставку через внешние программы.

Взаимодействие между пользователем и системой обработки регулируется утилитами:

sendmail, mailq, newaliases — интерфейс совместимости postfix и sendmail.

[root@iwtm611 ~]# sendmail user@example.com
from test@test.com
user@example.com
HI.
.

Поставьте «.» И нажмите Enter — sendmail попытается отправить письмо.

postfix – запускает и прекращает работу системы обработки почты;

[root@iwtm611 ~]# postfix status
postfix/postfix-script: the Postfix mail system is running: PID: 16765

postalias — создает и модифицирует таблицы псевдонимов;

postmap – создает, модифицирует, запрашивает таблицы преобразований;

cat /etc/postfix/transport

onedomain.ru smtp:10.1.2.10
twodomain.ru smtp:10.1.3.10

Утилиты фактически создают индексированные карты файлов. Повторить запуск при изменениях в файлах aliases и transport;

Postcat –напечатает содержимое файла из очереди;

[root@iwtm611 ~]# postcat -qv 96987C3CFB40
postcat: name_mask: all
postcat: inet_addr_local: configured 2 IPv4 addresses
postcat: inet_addr_local: configured 2 IPv6 addresses
*** ENVELOPE RECORDS deferred/9/96987C3CFB40 ***
…

Postsuper и postqueue – управляют почтовыми очередями. Первая используется для высокопривилегированных операций. Например, удаление очереди:

[root@iwtm611 ~]# postqueue -p
-Queue ID- —Size— —-Arrival Time—- -Sender/Recipient——-
956FAC3CFB46 2311 Mon Jul 27 19:50:05 MAILER-DAEMON
(connect to 10.70.85.12[10.70.85.12]:25: No route to host)
user@domain.ru

Postconf – инструментальное средство, позволяющее конфигурировать postfix- конфиг main.cf. Без аргументов выводит все параметры в текущей конфигурации. Если передать значение параметра – выведет значение этого параметра. С ключом –d напечатает default-настройки, а не сконфигурированные.

[root@iwtm611 ~]# postconf virtual_mailbox_limit
virtual_mailbox_limit = 51200000

С ключом –n напечатает только значения, отличные от типовых.

Главным файлом Postfix является main.cf. Он конфигурирует серверные программы и определяет таблицы преобразований, на которые содержит ссылки. Содержит более 300 параметров. Для запуска почтового сервера в средней организации достаточно лишь несколько из них. В документацию рекомендуется включать лишь параметры, содержащие нестандартные значения.

Базовая возможная настройка

Супер-простая конфигурация – пустой файл. Как ни странно, вполне приемлемая и приводит к тому, что создается почтовый сервер, осуществляющий локальную доставку почты в пределах домена локального хоста. Любые нелокальные сообщения посылаются дистанционным серверам.

Второй вариант – null клиент. Система не выполняет локальную доставку, а направляет исходящую почту на указанный почтовый сервер. При этом конфиге указывается несколько параметров: mydomain – определяющий домен компьютера; myorigin — определяющий почтовый домен, добавляемый к почтовым адресам. Третьим параметром будет mydestination, определяющий локальные почтовые домены (они же canonical домены). Если домен получателя соответствует mydestination, письмо доставит программа local (при условии что файла .forward не найдено). Если в mydestination несколько записей, они рассматриваются как псевдонимы одного домена. Null клиенту локальная доставка не нужна, поэтому параметр mydestination — пустой. Также программа local проведет поиск псевдонима адреса в таблицах alias_maps. Наконец, параметр relayhost оповещает Postfix о том, что нелокальные сообщения нужно посылать на указанный компьютер, а не адресатам. Квадратные скобки говорят о том, что указанная строка обрабатывается как имя компьютера, то есть A не MX запись DNS. Null клиент не должен получать почту с других систем – комментируем строчку smtpd в файле master.cf – программа smtpd не запустится.

Преобразования и виртуальные домены

Аспекты поведения Postfix определяются использованием таблиц поиска, отражающих ключи как значения тип: путь или просто как списки. Например, таблица alias_maps:dbm:/etc/mail/aliases.

Обратите внимание, синтаксис ключ: значение обеспечивает совместимость с Sendmail.

Помимо традиционного файла базы данных бинарного формата dbm, источником данных для таблицы преобразований может быть ldap, regexp выражения, postgres, Mysql и многое другое.

Если вам нужно обслуживать почтовый домен, то можно сделать это тремя путями:

— Указать домен в mydestination – доставка пойдет по схеме, описанной выше;

— Указать домен в параметре virtual_alias_domains. Домен получит собственное адресное пространство. Потребуется обеспечить возможность преобразования адресов в реальные (карта virtual_alias_maps);

— Указать домен в virtual_mailbox _domains. Здесь также будет собственное именное пространство. Но управление списком пользователей будет независимым от системных учеток. Потребуется указать параметр virtual_mailbox _maps c таблицей действительных пользователей в домене.

Защита и доступ

Postfix защищает себя на нескольких уровнях. Большинство серверных Postfix-программ могут выполняться в среде с измененным корневым каталогом (chroot). Они являются отдельными программами без связи Родитель-дочерний. Ни одна из них не имеет бита setuid. Каталог, в который направлена почта, открыт для записи группе postdrop, для нее — программа postdrop setgid.

Что касается доступа, почтовые домены ретранслируют почту на сторонние адреса только для надежных агентов. Открытая ретрансляция с неизвестных адресов, как известно, не сулит ничего хорошего. Postfix по умолчанию закрыт как ретранслятор. Стандартные настройки сильно ограничены, возможно вам придется ослаблять ограничения. Доступы конфигурируются списками ограничения доступа access restriction list. Важнейшим параметром будет smtpd_recipient_restrictions, так как адресом получателя куда проще управлять. По крайней мере, можно установить локальный ли он.

Вот список ограничений для проверки ретрансляции:

Check_client_address – проверяет адрес ПК клиента;

Check_recipient_access – проверяет почтовый адрес получателя;

Permit_mynetworks – предоставляет доступ к адресам в параметре mynetworks;

Reject_anauth_destination – отклоняет почту для нелокальных получателей – ретрансляция отсутствует.

Одна из мер защиты – строгая реализация протокола ESMTP. Легитимные почтовые сервера протокол принимают, а рассылки спама могут не принять и дискредитировать себя. Однако сейчас технология уже не столь надежна. Есть злоумышленники, способные обработать легитимную почту.

Черные списки основаны на информации из DNS – разрешаются директивой reject_rhsbl_sender – после указывается DNS-сервер, также reject_rbl_client , только проверяет имя PC, а не доменное имя.

Фильтрация – для проверки самого Body письма Postfix использует regexp выражения в реальном времени. А также может передавать сообщения другим программам. Postfix поддерживает SpamAssasin и фильтры подобного рода.

До сих пор в версиях Posfix удавались лишь DDOS атаки.

Отладка

Если возникла проблема с почтой, первым делом можно заглянуть в журнальные файлы Posfix. Каждая Postfix-программа регистрирует запись в журнале для обработанного сообщения.

Идентификатор письма 96987C3CFB40 — общий для каждой строки. Postfix присвоит его, как только сообщение попадает в систему и никогда не изменяет. Таким образом, при поиске в журнале можно сосредоточиться на поиске ID, затем с помощью grep отследить маршрут.

[root@iwtm611 ~]# tailf /var/log/maillog

Jul 27 20:00:08 iwtm611 postfix/smtp[8576]: 96987C3CFB40: to=, relay=none, delay=603, delays=600/0.06/3/0, dsn=4.4.1, status=deferred (connect to 10.70.85.12[10.70.85.12]:25: No route to host)

Jul 27 20:00:08 iwtm611 postfix/error[8585]: 98640C3CFB4D: to=, relay=none, delay=603, delays=600/3.1/0/0, dsn=4.4.1, status=deferred (delivery temporarily suspended: connect to 10.70.85.12[10.70.85.12]:25: No route to host)

Jul 27 20:00:08 iwtm611 postfix/error[8585]: 98E5CC3CFB77: to=, relay=none, delay=603, delays=600/3.1/0/0.01, dsn=4.4.1, status=deferred (delivery temporarily suspended: connect to 10.70.85.12[10.70.85.12]:25: No route to host)

Jul 27 20:00:08 iwtm611 postfix/error[8585]: 99C8DC3CFB62: to=, relay=none, delay=603, delays=600/3.1/0/0, dsn=4.4.1, status=deferred (delivery temporarily suspended: connect to 10.70.85.12[10.70.85.12]:25: No route to host)

Другим местом поиска является сама очередь. Утилита postqueue –p (или аналогичный вывод mailq) печатает содержимое очереди.

[root@iwtm611 ~]# mailq

-Queue ID- —Size— —-Arrival Time—- -Sender/Recipient——-

90190C3B9B9F 2242 Mon Jul 27 19:50:05 MAILER-DAEMON

(connect to 10.70.85.12[10.70.85.12]:25: No route to host)

95E96C3CFB5A 2307 Mon Jul 27 19:50:05 MAILER-DAEMON

(delivery temporarily suspended: connect to 10.70.85.12[10.70.85.12]:25: No route to host)

956FAC3CFB46 2311 Mon Jul 27 19:50:05 MAILER-DAEMON

(delivery temporarily suspended: connect to 10.70.85.12[10.70.85.12]:25: No route to host)

96987C3CFB40 2311 Mon Jul 27 19:50:05 MAILER-DAEMON

(delivery temporarily suspended: connect to 10.70.85.12[10.70.85.12]:25: No route to host)

97944C3CFB5E 2311 Mon Jul 27 19:50:05 MAILER-DAEMON

(delivery temporarily suspended: connect to 10.70.85.12[10.70.85.12]:25: No route to host)

postcat –qv 96987C3CFB40 Найдет письмо по ID, покажет заголовок и дополнительную информацию:
[root@iwtm611 ~]# postcat -qv 96987C3CFB40

postcat: name_mask: all

postcat: inet_addr_local: configured 2 IPv4 addresses

postcat: inet_addr_local: configured 2 IPv6 addresses

*** ENVELOPE RECORDS deferred/9/96987C3CFB40 ***

message_size: 2311 201 1 0 2311

message_arrival_time: Mon Jul 27 19:50:05 2020

create_time: Mon Jul 27 19:50:05 2020

regular_text: Received: from Vvpc (unknown [10.254.1.250])

regular_text: by iwtm611.local (Postfix) with ESMTP id BCB42C3CFB62

regular_text: for ; Thu, 2 Jul 2020 12:48:45 +0300 (MSK)

regular_text: MIME-Version: 1.0

regular_text: From: user@domain.ru

regular_text: To: usr111@test.com

regular_text: Date: 2 Jul 2020 12:48:40 +0300

regular_text: Subject: test

regular_text: Content-Type: text/plain; charset=utf-8

regular_text: Content-Transfer-Encoding: base64

*** HEADER EXTRACTED deferred/9/96987C3CFB40 ***

*** MESSAGE FILE END deferred/9/96987C3CFB40 ***

image

qshape – новый инструмент свежих версий – показывает сводную статистику содержимого и подводит итог – количество минут, в течение которых сообщение отправляется. Например, для итога по домену отправителя запустите qshape –s, а отклоненные письма можно посмотреть через параметр qshape deferred.

В примере таблицы можно увидеть, что 4 сообщения на gmail висят в очереди более 120 минут.

Рикошет – вызывается параметром soft_bounce. Это конфигурационный параметр. Postfix будет отправлять временные сообщения при отправке сообщений об ошибках типа: user_unknown или relay_denied. Это эффективное средство, позволяющее отслеживать местонахождение сообщения после изменений конфигурации и не терять их. Все, что вы отклоните, в конечном итоге вернется отправителю. Не забудьте это отключить после завершения проверки.

Для проверки доступа в Postfix есть расширение xclient, имитирующее отправку сообщений из другого места. Включается в main.cf параметром smtpd_autorized_xclient_hosts.

Postfix можно легко установить и запустить. Но быстро разобраться и решить проблему его внедрения в незнакомой структуре, удастся лишь при понимании тонкостей его работы. Надеюсь, кому-то эта статья поможет сэкономить время и силы на выявление причин проблем. И понять, почему почтовая система работает таким образом, а не иначе.

Автор: Галиулин Тимур GTRch

  • postfix
  • настройка постфикс
  • запуск
  • администрирование
  • Блог компании InfoWatch
  • Информационная безопасность

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *