В этой главе рассказывается о том, как работает Postfix, чем занимается каждый элемент системы и как все компоненты связаны друг с другом. После знакомства с этим материалом у вас должна сложиться целостная картина Postfix, и далее вы сможете заняться решением своих собственных задач.
Postfix включает в себя несколько программ, взаимодействующих с пользовательскими процессами (sendmail, postqueue, postsuper и т. д.), и большое количество программ, работающих в фоновом режиме. Программы, работающие в фоновом режиме, управляются демоном master.
Демон master – управляющая программа Postfix; он осуществляет контроль над всеми остальными демонами Postfix. Демон master ожидает поступления входящих заданий для передачи их подчиненным демонам. Если работы много, то master может вызвать несколько экземпляров демона. Вы можете задать количество одновременно работающих экземпляров демона, частоту их повторного использования и величину периода простоя, после которого произойдет остановка экземпляра.
Если вы работали с сервером inetd на компьютере с UNIX, то обнаружите много общего между ним и демоном master.
bounce и defer
Агент передачи сообщений должен уведомить отправителя о невозможности доставить сообщения. В Postfix эту задачу решают демоны bounce и defer, а инициируется она диспетчером очередей (qmgr).
Существует два вида событий, которые могут вызвать отправку уведомлений – неисправимые ошибки и адресат, которого невозможно достичь в течение долгого периода времени. В последнем случае отправляется предупреждение о задержке.
Postfix обрабатывает все очереди в каталоге, который определен в параметре queue_directory файла main.cf. Обычно очереди хранятся в каталоге /var/spool/postfix. Каждая очередь имеет свой собственный подкаталог, имя которого идентифицирует очередь. Все обрабатываемые Postfix сообщения находятся в этих каталогах до тех пор, пока Postfix не доставит их. Очередь определяет статус сообщения: incoming, mail drop, deferred, active, hold или corrupt.
Карты – это файлы и базы данных, которые Postfix использует для поиска информации. Карты могут иметь разное назначение, но у них есть общий признак: левая сторона (left hand side, LHS), называемая ключом, и правая сторона (right hand side, RHS), называемая значением.
Приведем несколько примеров ключей и значений: Ключ Значение postmaster: John postmaster@example.com John 192.168.254.12 REJECT spammer@example.com REJECT /^Subject: your account {25}[a z]{8}/ REJECT Mimail Virus Detected
Postfix воспринимает базу данных так же, как индексированную карту. Результатом запроса базы данных является Match (вместе со значением, возвращаемым запросом) или No match. Основное отличие между картой–базой данных и индексированной картой состоит в том, что при изменении в базе данных вам не нужно перезапускать демон. Postfix не считает, что единственным, кто может изменять базу данных, является администратор почтовой системы.
Недостаток такого подхода в том, что база данных может не справиться с поступающими запросами, т. к. Postfix должен выполнить как минимум три запроса для каждого поиска в карте (см. пост ниже «Как Postfix обращается к картам»). При высокой нагрузке компьютер базы данных может замедлиться или зависнуть, и ваш почтовый сервер окажется уязвимым для атак типа «отказ в обслуживании» и «саморазрушение» (self induced meltdown). Этот факт не должен препятствовать использованию баз данных, но не забывайте о возможном риске.