Оригинал документа находится по адресу: http://ru.qmail.org/docs/lwq/lwq.html Dave Sill 30 ноября 2007 Перевод М. Альхименко при помощи OmegaT и StarDict 22 января 2007 года. версия для печати Содержание
1.2. Что такое qmail? 1.3. Зачем использовать qmail? 1.4. История 1.5. Возможности 1.6. Родственные пакеты 1.7. Устройство 1.8. Лицензия 1.9. Сравнение с другими MTA 1.10. Документация 1.11. Поддержка 2. Установка
2.2. Подготовка 2.3. Требования к системе 2.4. Получение исходного кода 2.5. Сборка из исходного кода 2.6. Установка ucspi-tcp 2.7. Установка daemontools 2.8. Запуск qmail 2.9. Тестирование установки 3. Настройка
3.2. Relaying 3.3. Множественные имена хоста 3.4. Виртуальные домены 3.5. Псевдонимы 3.6. qmail-users 3.7. Борьба со спамом 3.8. Сканирование на вирусы 4. Использование 5. Расширенные темы
5.2. POP и IMAP сервера 5.3. POP и IMAP клиенты 5.4. Мульти-RCPT против доставки с единственным получателем 5.5. VERP 5.6. Решение проблем 5.7. Большие сервера 5.8. Переход от Sendmail к qmail 5.9. Менеджеры рассылок (Mailing List Managers) 5.10. Патчи 5.11. QMTP 5.12. Отклонение недействительных получателей во время SMTP-сессии 5.13. TLS и STARTTLS A. Благодарности B. Родственные пакеты
B.2. fastforward B.3. ucspi-tcp B.4. daemontools B.5. qmailanalog B.6. rblsmtpd B.7. serialmail B.8. mess822 B.9. ezmlm B.10. safecat B.11. djbdns B.12. maildrop B.13. syncdir C. Как работает Интернет-почта D. Устройство E. Редко задаваемые вопросы
E.2. Почему я не могу послать почту большому сайту с большим количеством MX? E.3. Что такое QUEUE_EXTRA? F. Сообщения об ошибках G. Особенности
G.2. qmail не доставляет почту пользователям, у которых нет своих домашних каталогов. G.3. qmail не доставляет почту пользователям, чьи имена начинаются с большой буквы. G.4. qmail заменяет точки (.) в расширенных адресах на двоеточия (:). G.5. qmail в расширенных адресах преобразует символы верхнего регистра в нижний регистр. G.6. qmail не использует /etc/hosts. G.7. qmail не регистрирует SMTP-активность. G.8. qmail не генерирует уведомления о задержках доставки. G.9. qmail работает медленно, если /var/qmail/queue/lock/trigger отсутствует / имеет неправильные разрешения / является обычным файлом. G.10. DNS- или IDENT-поиск замедляет работу SMTP. G.11. CRLF(Carriage Return/Linefeed) окончания строк не работают. G.12. qmail-send или tcpserver прекращают работу если существуют проблемы с ведением лог-файлов. G.13. qmail-smtpd не проверяет локальную часть адреса. G.14. Firewall'ы могут блокировать удаленный доступ к вашему SMTP/POP3/IMAP серверу. G.15. qmail-inject устанавливает поле From в anonymous если USER и LOGNAME не установлены. G.16. qmail-send не всегда завершается сразу. G.17. Доставка в /dev/null не позволяет избавиться от сообщений. G.18. Изменение очереди, в то время как qmail-send запущен, опасно. H. Часто задаваемые вопросы о Life with qmail
H.2. Кто владелец Life with qmail? H.3. Какова лицензия на Life with qmail? H.4. Как я могу быть извещен о выходе новых версий LWQ? H.5. Где обитают разработчики LWQ и где можно с ними пообщаться? H.6. Имеется ли перевод Life with qmail на мой язык? H.7. Доступен ли Life with qmail в PostScript, PDF, plain text или любых других форматах, кроме HTML? H.8. Я использовал Life with qmail и он испортил мою систему / удалил все файлы с диска / разрушил мою личную жизнь / убил мою собаку / etc. H.9. Как я могу внести вклад в работу над LWQ? H.10. Что изменилось в этой версии LWQ? 1. Введение1.1. Для кого предназначен документLife with qmail нацелен на всех, кто интересуется запуском qmail, начиная с явных новичков (newbie), которые только установили Linux на свободный компьютер, и заканчивая опытными системными администраторами. Если вы обнаружили упущения или неточности, поставьте меня в известность. Присылайте комментарии на lwq@sill.org. О qmail доступно большое количество информации из разных источников. Некоторые их них рассчитаны на новичков, некоторые предполагают что читатель более опытен. Life with qmail -- попытка "склеить" эту информацию в один источник, заполняющий некоторые трещины и предполагающий, что читатель имеет базовые навыки, такие как:
1.2. Что такое qmail?qmail -- агент пересылки почты Интернет (Internet Mail Transfer Agent, MTA) для UNIX-like операционных систем. Это замена для Sendmail, который входит в состав большинства ОС UNIX. qmail использует SMTP (Simple Mail Transfer Protocol) для обмена сообщениями с MTA на других системах. Примечание: Название -- "qmail", не "Qmail". 1.3. Зачем использовать qmail?Ваша операционная система включает в себя MTA, скорее всего Postfix или Sendmail, так что если вы читаете этот документ, вы, вероятно, ищете что-то другое. Некоторые из преимуществ qmail над штатными MTA включают: 1.3.1. Безопасностьqmail был разработан для обеспечения наивысшей безопасности. Sendmail имеет долгую историю серьезных проблем с безопасностью. Когда был написан Sendmail Сеть была намного более дружественным местом. Все знали друг друга, и не существовало большой необходимости разрабатывать и писать код для обеспечения высокого уровня безопасности. Сегодня Интернет намного более враждебная среда для сетевых серверов. Автор Sendmail, Eric Allman, и текущий разработчик, Claus Assman, сделал хорошую работу по усилению программы, но небольшое изменение дизайна никогда не позволит достичь настоящей безопасности. 1.3.2. Производительностьqmail по умолчанию распараллеливает доставку почты, выполняя до 20 параллельных процессов доставки одновременно. 1.3.3. НадежностьКак только qmail принимает сообщение, он гарантирует, что оно не будет потеряно. qmail также поддерживает новый формат почтового ящика, которые надежно работает без блокировок даже поверх NFS. 1.3.4. Простотаqmail меньше, чем любой другой MTA с эквивалентными возможностями. Примечание: Официальная страница qmail, http://cr.yp.to/qmail.html, более широко охватывает преимущества qmail. 1.4. Историяqmail написал Dan Bernstein (DJB), http://en.wikipedia.org/wiki/Daniel_J._Bernstein, профессор математики, в данный момент работающий в University of Illinois в Чикаго. Dr. Bernstein также хорошо известен за свои работы в области криптографии, и за судебный процесс против правительства США, связанный с публикацией исходных кодов средств шифрования. Смотрите http://en.wikipedia.org/wiki/Bernstein_v._United_States или http://cr.yp.to/export.html для получения дополнительной информации о процессе. Первая общедоступная версия qmail, бета-версия 0.70, была обнародована 24 января 1996 года. Первая гамма-версия была обнародована 1 августа 1996 года. Первая genaral-версия, 1.0, была анонсирована 20 февраля 1997 года. Текущая версия, 1.03, была обнародована 15 июня 1998 года. Следующий выпуск, как ожидается, будет версией 2.0. Некоторые из возможностей, которые могли бы появиться в версии 2, описаны в http://cr.yp.to/qmail/future.html. 1.5. ВозможностиНа Web-странице qmail, http://cr.yp.to/qmail.html, имеется исчерпывающий список возможностей qmail. Этот раздел в основном основывается на этом списке. 1.5.1. Установка
1.5.2. Безопасность
1.5.3. Структура сообщения
1.5.4. SMTP-сервис
1.5.5. Управление очередью
1.5.6. Сообщения о недоставке (bounces)
1.5.7. Маршрутизация на уровне домена
1.5.8. SMTP-доставка
1.5.9. Пересылка и списки рассылки
1.5.10. Локальная доставка
1.5.11. POP3-сервис
1.6. Родственные пакетыqmail следует классической UNIX-философии, в которой каждый инструмент должен выполнять единственную, четко определенную функцию, и сложные функции должны строиться путем объединения простых инструментов в "канал ("pipeline"). Альтернативой является построение все более и более сложных средств, повторно реализуя значительную часть функционала простых средств. Поэтому не стоит удивляться, что qmail сам по себе не делает всего, что от него могут захотеть. Ниже перечислены некоторые из самых популярных расширений, написанных для qmail. Конечно, вместе с qmail может быть использовано множество стандартных Unix-утилит.
1.7. УстройствоПриложение D описывает функциональную и физическую структуру qmail. В двух словах, qmail состоит из ряда программ (модулей), которые выполняют различные задачи. 1.8. ЛицензияПо состоянию на 30 ноября 2007 qmail 1.03 является общественным достоянием (is in the public domain). См. http://cr.yp.to/qmail/dist.html. Это означает, что не существует юридических ограничений на то, что вы можете делать с ним: вы можете копировать его, распространять (give it away), продавать, модифицировать, переименовыватьили использовать его части в работах, защищенных от копирования безо всяких ограничений. Владельцем авторских прав на другие пакеты Dan'а Bernstein'а, такие как daemontools и ucspi-tcp, является автор (copyrighted by the author), и они распространяются без положений о правах пользователей . В http://cr.yp.to/softwarelaw.html описано как автор понимает ваши права в свете законов США об авторском праве. См. также http://en.wikipedia.org/wiki/License-free_software. 1.9. Сравнение с другими MTAНа эту тему можно написать целую книгу, но это будет довольно скучное чтиво. Здесь приводится краткое сравнение qmail с некоторым наиболее распространенными UNIX MTA.
Sendmail'ность означает что MTA до определенной степени ведет себя подобно Sendmail, что может сделать переход с Sendmail на альтернативный MTA более прозрачным для пользователей, как пример -- использование .forward-файлов, /etc/aliases, и доставки почты в /var/spool/mail. На http://homepages.tesco.net/~J.deBoynePollard/Reviews/UnixMTSes/ находится обзор некоторых Unix MTA, написанный Jonathan de Boyne Pollard. Другое детальное сравнение доступно на http://www.geocities.com/mailsoftware42/. 1.10. Документация1.10.1. man-страницыДистрибутив qmail содержит полный набор man-страниц. После установки они находятся в /var/qmail/man. Возможно, вам будет необходимо добавить этот каталог в переменную окружения MANPATH.
На данный момент, команды вида "man имя-man-страницы-qmai" должны отобразить соответствующую man-страницу. Man-страницы также доступны on-line в формате HTML: Примечание: man-страницы qmail весьма информативны, но они требуют внимательного чтения, т.к. они написаны в очень плотном, техническом стиле. Возможно, вам захочется распечатать их и просмотреть один раз, чтобы быть в курсе где про что написано. Повторяется на нескольких страницах только очень маленькое количество информации , так что если вы не в курсе где что описано, может быть трудно найти это. 1.10.2. ДокументыДистрибутив qmail включает в себя ряд документов, которые будут скопированы при установке в /var/qmail/doc. Они включают:
Эти документы также доступны on-line: 1.10.3. FAQsСуществует два официальных FAQ (Frequently Asked Questions, часто задаваемых вопросов):
Web FAQ более полный. 1.10.4. Книги1.10.4.1. The qmail HandbookDave Sill, автор Life with qmail, также написал книгу о qmail для Apress (http://www.apress.com/). Эта книга, The qmail Handbook, включает всё из этого руководства, но с бОльшим количеством деталей, а также описывает множество других тем. Дополнительную информацию можно получить по адресу http://www.apress.com/catalog/book/1893115402/. Чтобы купить эту книгу см. http://www.amazon.com/exec/obidos/ASIN/1893115402/davesill. 1.10.4.2. Qmail Quickstarter: Install, Set Up and Run your own Email ServerKyle Wheeler написал книгу о qmail для Packt (http://www.packtpub.com/). Как можно догадаться из названия эта книга предназначена для того, чтобы помочь новичкам в qmail установить почтовый сервер. Чтобы купить эту книгу см. http://www.amazon.com/exec/obidos/ASIN/1847191150/davesill. 1.10.4.3. qmailJohn Levine написал книгу о qmail для O'Reilly & Associates (http://www.oreilly.com/). См. http://qmail.gurus.com/ для получения дополнительной информации, включающей содержание книги и одну главу (для примера). Чтобы купить эту книгу см. http://www.amazon.com/exec/obidos/ASIN/1565926285/davesill. 1.10.4.4. Running qmailRichard Blum написал Running qmail, опубликованную Sams. Эта книга получила противоречивые оценки в qmail mailing list. Для получения дополнительной информации или покупки см. http://www.amazon.com/exec/obidos/ASIN/0672319454/davesill. 1.10.4.5. qmail: Yuksek Performansli E-Posta SunucuIsmail Yenigul и др. написали книгу о qmail на турецком языке. См. http://www.acikakademi.com/catalog/qmail/. 1.10.5. Архивы списков рассылки (List archives)Список рассылки (e-mail mailing list) qmail, поддерживаемый Dan Bernstein -- ценный источник информации. Web-архивы сообщений рассылки хранится по адресу:
На большинство вопросов о qmail можно найти ответы, если начать с поиска по архивам списков рассылки. 1.10.6. Другие web-сайты
1.11. Поддержка1.11.1. Списки рассылки (Mailing lists)Следующие списки живут на list.cr.yp.to. Для того чтобы предотвратить сбор e-mail адресов спамерами, я избегаю использования полных, правильных адресов и "mailto" URL'ов. Списки управляются с помощью ezmlm, который использует отдельные адреса для осуществления различных функций:
Чтобы специально указать адрес для подписки / отписки, скажем, joe@example.com, отошлите сообщение на:
1.11.1.1. qmailОсновной список рассылки по qmail. Для обсуждения и вопросов/ответов про большинство вещей, связанных с qmail, за исключением тех, у которых есть свой собственный список рассылки. Прочитайте "12 Steps to qmail List Bliss" Charles Cazabon на http://pyropus.ca/personal/writings/12-steps-to-qmail-list-bliss.html перед тем отправкой сообщений. Также, прочитайте FAQ и воспользуйтесь поиском по архивам перед отправкой вопроса. Когда вы задаете вопрос, пожалуйста, постарайтесь включить достаточное количество деталей, чтобы дать ответ на вопросы:
Примечание: список рассылки qmail использует утилиту qsecretary, чтобы убедиться, что сообщение, отправленное в список рассылки, не является спамом. Каждое сообщение, отправленное в список рассылки, рождает запрос на подтверждение от qsecretary. Прочитайте этот запрос и следуйте указаниям, чтобы подтвердить ваше сообщение -- обычно только тот, кто отвечает на сообщение qsecretary добьется цели. Регулярные участники рассылки часто автоматизируют этот процесс, используя автоответчики (autoresponders), подобные pymsgauth Charles Cazabon, доступный по адресу http://pyropus.ca/software/pymsgauth/. pymsgauth проверяет, что сообщение пришло в список рассылки qmail действительно от вас, следовательно, он не будет автоматически подтверждать поддельные сообщения, отосланные в рассылку от вашего имени. 1.11.1.2. qmailannounceРассылка, посвященная анонсам qmail. О новых версиях объявляется здесь. Адреса для отправки писем не существует: эта рассылка только для чтения. 1.11.1.3. serialmailДля обсуждения пакета serialmail. 1.11.1.4. ezmlmДля обсуждения менеджера рассылок ezmlm. 1.11.2. КонсультацииСм. http://www.qmail.org/top.html#paidsup для получения списка поставщиков коммерческой поддержки. 1.11.3. FAQTS KnowledgebaseБаза связанных с qmail вопросов и ответов доступна по адресу http://qmail.faqts.com/. Если на ваш вопрос нет ответа в FAQ, попытайтесь поискать в этой базе. Она обычно хорошо отвечает на "how to"-вопросы. 2. УстановкаЭтот раздел описывает установку qmail. Если вы являетесь опытным системным администратором, то можете установить qmail следуя инструкциям из файла INSTALL в дистрибутиве. Директивы файла INSTALL -- официальные директивы по установке. Они более сложные, чем директивы Life with qmail, и они подразумевают что читатель -- опытный системный администратор. Кроме того, они устарели и не отражают рекомендуемую в данный момент Bernstein'ом практику. Примечание: Если вы выбрали установку с использованием дальнейших директив, прочитайте весь раздел, чтобы составить общее представление о процессе. 2.1. Вопросы, связанные с установкой2.1.1. Откомпилированный код vs. исходного кодаДо 30 ноября 2007 года из-за ограничений лицензии qmail относительно распространения предварительно откомпилированных пакетов он обычно устанавливался из исходного кода. Эта практика в будущем может измениться, особенно если daemontools и ucspi-tcp также станут общественным достоянием (are placed in the public domain). Однако, на данный момент для qmail исходный код все еще является предпочтительным способом распространения. Если Вы не знакомы с различием между исходными кодами и двоичным кодом (binaries), представьте что заказываете пиццу с доставкой на дом. "Откомпилированная" версия пиццы прибывает готовой к употреблению. Пицца в "исходном коде" поставляется как набор, содержащий муку, дрожжи, сыр, соус, все что кладут сверху и инструкцию для самостоятельного приготовления пиццы. Установка из исходных кодов требует немного большей работы, но если внимательно следовать инструкциям, то результат будет такой же, или даже лучше. Самостоятельно приготовленная пицца будет более свежей, вы можете изменить то, что кладется сверху под свои предпочтения, и вы будете больше знать о вашей пицце и о том, как она "работает". Безопасно запустить доступный из Интернет сетевой сервис не так просто. Неправильно сконфигурированный сервис может поставить узел (host) под угрозу атаки, или может быть использован для атаки других сайтов и потенциально быть причиной судебного преследования администратора. Чем больше вы знаете как ваши сетевые сервисы работают, тем они более правильно и безопасно сконфигурированы. 2.1.2. Tar-архив vs. ОС-специфичных пакетовНекоторые операционные системы предоставляют механизм для автоматизации установки из исходного кода. Возвращаясь к аналогии с пиццей - они делают возможным упаковать ингредиенты и руководства таким способом, что вы можете только нажать на кнопку и получить пиццу, которая приготовила сама себя. Звучит заманчиво, не так ли? На практике это может быть не такой хорошей идеей. Сборка этих пакетов довольно трудна, и они могут не делать то что надо предполагаемым путем. Они являются программами, и как и любая программа, они могут содержать ошибки. Но даже если они не содержат ошибок, удобство, которое они обеспечивают, имеет свою цену. Вы потеряете большинство преимуществ пиццы, приготовленной самостоятельно: возможность положить сверху что-то другое, знание того, как пицца приготавливается и как она "работает". Если бы qmail был пиццей, подход с самостоятельным приготовлением мог бы не получить распространения. Но это не так: qmail довольно сложная система, которую установщик/куратор должен довольно хорошо понимать, чтобы быть в состоянии поддерживать безотказную работу системы. Самоустанавливающаяся версия qmail более легкая в установке, чем устанавливаемая пользователем, но устанавливаемая пользователем версия более проста в конфигурировании и поиске неисправностей. Вы устанавливаете qmail в систему один раз, но вы, вероятно, будете иметь несколько удобных случаев перенастроить его или попробовать вычислить, почему почта не следует по тому пути, который вы ожидали. По этой причине я рекомендую устанавливать qmail с нуля, используя архив с исходным кодом, а не RPM или другой самоустанавливающийся пакет. 2.2. ПодготовкаПеред инсталляцией qmail в систему, особенно если это ваша первая установка qmail, существует несколько вещей, о которых стоит подумать.
2.3. Требования к системеqmail устанавливается и работает на большинстве UNIX и UNIX-подобных систем, но существует несколько требований:
Примечание: Каталог qmail bin должен размещаться на файловой системе, которая позволяет использовать исполняемые и setuid()-файлы. Некоторые дистрибутивы автоматически монтируют /var с включенными параметрами nosuid или noexec. В этих системах или эти опции должны быть отключены, или каталог /var/qmail/bin должен быть размещен на файловой системе, которая смонитирована без этих опций. Секция Создание каталогов описывает как использовать символические ссылки при выборе второго варианта. Если /var смонтирован с nosuid, вы, скорее всего, увидите следующее сообщение в логах qmail-send: delivery : deferral: Sorry,_message_has_wrong_owner._(#4.3.5) Примечание: qmail не получится правильно установить в Apple OS X используя эти инструкции, или инструкции из файла INSTALL. Eben Pratt описал процесс установки под OS X, инструкции доступны по адресу http://netdevice.com/qmail/#osx. 2.4. Получение исходного кодаИтак, вы получили систему, удовлетворяющую требованиям для установки qmail. Первый шаг -- загрузить исходный код qmail и некоторых других дополнений. Конечно же, вам понадобится qmail, и, вероятно, ucspi-tcp и daemontools:
Загрузите эти файлы, используя свой web-браузер, web-клиент (например, wget), или FTP-клиент. Примечание: Если любая из этих ссылок не работает, возможно это происходит из-за того что пакет был обновлен. В этом случае вы должны зайти на http://cr.yp.to/software.html и, следуя за ссылками, загрузить текущую версию. Возможно новые версии не совместимы со следующими инструкциями, так что не забудьте прочесть примечания в разделе "Upgrading from previous versions....". Примечание: Это руководство описывает установку netqmail -- дистрибутива qmail, который состоит из официального архива с qmail 1.03 и патчей, которые исправляет несколько ошибок, недостатков и несовместимостей. См. http://www.qmail.org/netqmail/ и файл CHANGES из состава netqmail для получения дополнительной информации. 2.5. Сборка из исходного кода2.5.1. Проверка среды сборкиПервая вещь, которую необходимо сделать -- убедиться, что вы имеете необходимые инструменты для компиляции программы. Как вы это определите зависит от системы, которую вы используете. Самый легкий способ, хотя не и гарантированный, это попробовать. Примечание: Если любой из этой тестов будет пройден, вы можете остановиться и перейти к следующему разделу.
$ cc cc: No input files specified $
В этом разделе мы пройдем фактические шаги компиляции qmail. Способ "копировать и вставить" (cut-n-paste) будет удобен, но не обязателен. 2.5.2. Распаковка дистрибутиваЕсли вы дошли до этого места, значит у вас есть работающий Си-компилятор и копия архива с исходными текстами. Далее, скопируйте или переместите архив в каталог, в котором вы хотите производить сборку. /usr/local/src -- хороший выбор для qmail и ucspi-tcp. daemontools должен быть собран в каталоге /package. Сейчас вы, возможно, захотите стать root'ом, если этого уже не произошло. su umask 022 mkdir -p /usr/local/src mv netqmail-1.06.tar.gz ucspi-tcp-0.88.tar.gz /usr/local/src mkdir -p /package mv daemontools-0.76.tar.gz /package chmod 1755 /package Сейчас вы можете распаковать пакет. cd /usr/local/src gunzip netqmail-1.06.tar.gz tar xpf netqmail-1.06.tar gunzip ucspi-tcp-0.88.tar.gz tar xpf ucspi-tcp-0.88.tar rm *.tar # optional, unless space is very tight cd /package gunzip daemontools-0.76.tar.gz tar xpf daemontools-0.76.tar rm *.tar # optional, again В данный момент должны существовать каталоги /usr/local/src/netqmail-1.06, /usr/local/src/ucspi-tcp-0.88 и /package/admin/daemontools-0.76. 2.5.3. Создание каталоговПоскольку программа установки qmail создаст подкаталоги как ей нужно, вам необходимо только создать "домашний" каталог qmail: mkdir /var/qmail И идем к следующему разделу. Примечание: Если вы хотите чтобы некоторые или все файлы qmail были расположены не в /var, это может быть сделано созданием символических ссылок в /var/qmail, указывающих в другое местоположение. Как пример, конфигурационные файлы qmail могут быть размещены в /etc/qmail с помощью команд: mkdir /etc/qmail ln -s /etc/qmail /var/qmail/control 2.5.4. Создание пользователей и группСамый легкий путь создания необходимых пользователей и групп -- создать небольшой файл сценария, который сделает это за вас. В каталоге с исходными текстами вы найдете файл INSTALL.ids. Он содержит строки с командами для многих платформ, так что копируем его в файл с другим именем и редактируем, это будет и быстро, и легко. cd /usr/local/src/netqmail-1.06 cp INSTALL.ids IDS Затем, используя свой любимый редактор, удаляем в этом файле все, кроме строк, которые необходимы. Например, вот как файл IDS будет выглядеть для FreeBSD после редактирования: pw groupadd nofiles pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent pw groupadd qmail pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent pw useradd qmails -g qmail -d /var/qmail -s /nonexistent Далее, запустим его, или используя chmod, чтобы сделать его исполняемым, или с помощью sh: Первый метод: chmod 700 IDS ./IDS Второй метод: /bin/sh IDS Когда сценарий закончит работу, все необходимые пользователи и группы будут созданы и можно будет переходить к следующий раздел. Но что делать, если ваша система не указана в INSTALL.ids? Вы можете сделать все вручную. Начните, открыв в вашем любимом редакторе файл /etc/group. Вам необходимо добавить следующие две строки в конце файла: qmail:*:2107: nofiles:*:2108: Примечание: Убедитесь, что GID'ы 2107 и 2108 не используются. Если это не так, выберите два номера, которые еще не заняты. Далее, используя vipw (большинство систем содержат эту программу, если нет, то вам понадобится снова использовать ваш редактор, но на этот раз необходимо редактировать /etc/passwd) добавьте эти строки в конец файла: alias:*:7790:2108::/var/qmail/alias:/bin/true qmaild:*:7791:2108::/var/qmail:/bin/true qmaill:*:7792:2108::/var/qmail:/bin/true qmailp:*:7793:2108::/var/qmail:/bin/true qmailq:*:7794:2107::/var/qmail:/bin/true qmailr:*:7795:2107::/var/qmail:/bin/true qmails:*:7796:2107::/var/qmail:/bin/true Примечание: Убедитесь, что UID'ы 7790-7796 не используются и что 2107 и 2108 имеют те же GID'ы, которые были указаны выше. Если какой-либо из этих UID'ов уже используется, выберите другие номера, которые не заняты. Вам не нужно специально добавлять любую из этих строк в конец файла, просто это самый легкий способ объяснить. Теперь вы готовы к переходу в следующий раздел. 2.5.5. СборкаТеперь вы можете начать сборку qmail. Перейдите в каталог /usr/local/src/netqmail-1.06 и давайте начнем: cd /usr/local/src/netqmail-1.06 В разделе Проверка среды сборки вы определили расположение Си-компилятора. Если он называется не cc или каталог его содержащий не указан в переменной окружения PATH вам необходимо отредактировать файлы conf-cc и conf-ld. Скажем, ваш компилятор gcc и путь к нему находится в PATH. Просто отредактируйте conf-cc и conf-ld и замените "cc" на "gcc". Далее, введите следующее: make setup check После того как сборка будет закончена, вам необходимо выполнить постинсталляционную конфигурацию. Есть пара сценариев, которые могут сделать эту работу более простой. Если ваш DNS сконфигурирован правильно, этот сценарий сделает все что нужно: ./config Если, по разным причинам, config не может найти имя вашей машины в DNS, вам необходимо запустить сценарий config-fast: ./config-fast the.full.hostname Например, если ваш домен -- example.com и имя вашей машины -- dolphin, то строка с config-fast в вашем случае должна выглядеть так: ./config-fast dolphin.example.com Примечание: В маленькой локальной сети вы можете захотеть использовать псевдодомен, такой как ".local". Например, если имя вашей машины "mash", вы запустите ./config-fast mash.local. Если вы сделаете так, убедитесь, что qmail настроен на использование в обратных адресах корректных доменных имен (существующих в Интернет). (См раздел 3, Настройка.) В данный момент qmail установлен в вашей системе и готов к запуску! Следующий раздел проведет вас через стадии запуска и тестирования qmail. 2.6. Установка ucspi-tcpРанее вы распаковали архивы с qmail, ucspi-tcp и daemontools. Теперь перейдите в каталог ucspi-tcp: cd /usr/local/src/ucspi-tcp-0.88 Если вы изменили conf-cc и conf-ld, как описано в разделе Сборка, вам необходимо сделать те же самые изменения в этом каталоге. Затем выполните: patch < /usr/local/src/netqmail-1.06/other-patches/ucspi-tcp-0.88.errno.patch make make setup check Это все. ucspi-tcp установлен. 2.7. Установка daemontoolsПерейдите в каталог сборки daemontools: cd /package/admin/daemontools-0.76 Опять же, если вы изменили <conf-cc> и conf-ld во время сборки qmail и ucspi-tcp, вам необходимо сделать те же самые изменения в каталоге src. Затем выполните: cd src patch < /usr/local/src/netqmail-1.06/other-patches/daemontools-0.76.errno.patch cd .. package/install В BSD-системах (без /etc/inittab) в данный момент вам необходимо перезагрузить машину, чтобы стартовал svscan, главный демон, контролирующий сервисы. Используйте "ps -ef | grep svscan" или "ps waux | grep svscan" чтобы убедиться в том, что svscan запущен. Примечание: В Solaris вам необходимо изменить запись в /etc/inittab, которая запускает svscan с: SV:123456:respawn:/command/svscanboot на: SV:123456:respawn:/command/svscanboot </dev/null >/var/log/svscan 2>&1 или: SV:123456:respawn:/command/svscanboot </dev/null >/dev/msglog 2>&1 в зависимости от того, куда вы хотите, чтобы сообщения об ошибках после старта svscan были в итоге направлены -- в лог-файл или системную консоль. За разъяснениями зачем это необходимо, смотрите: http://marc.theaimsgroup.com/?l=log&m=100327801309834&w=2 Примечание: Пользователи Slackware сообщают, что запись SV /etc/inittab нужно переместить перед записью x1, иначе svscan не будет запущен при старте системы. 2.8. Запуск qmail2.8.1. /var/qmail/rcКаталог /var/qmail/boot содержит примеры стартового сценария qmail для различных конфигураций: /var/spool/mail vs. $HOME/Mailbox, использования procmail или dot-forward и их различных комбинаций. Не стесняйтесь исследовать их, но для нашей установки мы будем использовать следующий сценарий: #!/bin/sh # Using stdout for logging # Using control/defaultdelivery from qmail-local to deliver messages by default exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start "`cat /var/qmail/control/defaultdelivery`" имечание: Этот сценарий использует обратные кавычки (`), а не одинарные ('). Для Для достижения наилучших результатов скопируйте и вставьте сценарий из этого руководства вместо того, чтобы набирать его. Используйте ваш редактор для создания вышеупомянутого /var/qmail/rc, затем выполните эти команды: chmod 755 /var/qmail/rc mkdir /var/log/qmail На этом этапе нужно решить, какой режим доставки будет использоваться для сообщений, доставка которых не была определена в .qmail-файлах. Следующая таблица демонстрирует некоторые распространенные варианты.
См. INSTALL.mbox, INSTALL.maildir и INSTALL.vsm для получения дополнительной информации. Для того, чтобы выбрать тип почтового ящика по умолчанию, просто перенесите в файл /var/qmail/control/defaultdelivery значение defaultdelivery из таблицы. Например, чтобы выбрать стандартную qmail Mailbox-доставку, выполните: echo ./Mailbox >/var/qmail/control/defaultdelivery Примечание: defaultdelivery не является стандартным файлом управления (control file) для qmail. Он является особенностью вышеупомянутого файла /var/qmail/rc. Аргумент defaultdelivery для qmail-start является содержимым .qmail-файла, определяющего инструкции по доставке, которые будут использоваться когда настоящий файл .qmail не будет найден. Помещение этих инструкций в отдельный управляющие файл (control file) избавляет от необходимости заключать в кавычки метасимволы оболочки (shell metacharacters) в инструкциях по доставке и позволяет избежать неряшливых многострочных аргументов команды. 2.8.2. Системные файлы запуска (System start-up files)2.8.2.1. Сценарий qmailctlЕсли вы вручную запустите сценарий /var/qmail/rc, qmail будет запущен только частично. Однако, нам бы хотелось, чтобы qmail автоматически запускался при каждой загрузке системы и мы хотим чтобы он корректно завершался при при остановке системы. Этого можно достигнуть путем создания сценария запуска/остановки /var/qmail/bin/qmailctl, подобно приведенному ниже: #!/bin/sh # description: the qmail MTA PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin export PATH QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` case "$1" in start) echo "Starting qmail" if svok /service/qmail-send ; then svc -u /service/qmail-send /service/qmail-send/log else echo "qmail-send supervise not running" fi if svok /service/qmail-smtpd ; then svc -u /service/qmail-smtpd /service/qmail-smtpd/log else echo "qmail-smtpd supervise not running" fi if [ -d /var/lock/subsys ]; then touch /var/lock/subsys/qmail fi ;; stop) echo "Stopping qmail..." echo " qmail-smtpd" svc -d /service/qmail-smtpd /service/qmail-smtpd/log echo " qmail-send" svc -d /service/qmail-send /service/qmail-send/log if [ -f /var/lock/subsys/qmail ]; then rm /var/lock/subsys/qmail fi ;; stat) svstat /service/qmail-send svstat /service/qmail-send/log svstat /service/qmail-smtpd svstat /service/qmail-smtpd/log qmail-qstat ;; doqueue|alrm|flush) echo "Flushing timeout table and sending ALRM signal to qmail-send." /var/qmail/bin/qmail-tcpok svc -a /service/qmail-send ;; queue) qmail-qstat qmail-qread ;; reload|hup) echo "Sending HUP signal to qmail-send." svc -h /service/qmail-send ;; pause) echo "Pausing qmail-send" svc -p /service/qmail-send echo "Pausing qmail-smtpd" svc -p /service/qmail-smtpd ;; cont) echo "Continuing qmail-send" svc -c /service/qmail-send echo "Continuing qmail-smtpd" svc -c /service/qmail-smtpd ;; restart) echo "Restarting qmail:" echo "* Stopping qmail-smtpd." svc -d /service/qmail-smtpd /service/qmail-smtpd/log echo "* Sending qmail-send SIGTERM and restarting." svc -t /service/qmail-send /service/qmail-send/log echo "* Restarting qmail-smtpd." svc -u /service/qmail-smtpd /service/qmail-smtpd/log ;; cdb) tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp chmod 644 /etc/tcp.smtp.cdb echo "Reloaded /etc/tcp.smtp." ;; help) cat <<HELP stop -- stops mail service (smtp connections refused, nothing goes out) start -- starts mail service (smtp connection accepted, mail can go out) pause -- temporarily stops mail service (connections accepted, nothing leaves) cont -- continues paused mail service stat -- displays status of mail service cdb -- rebuild the tcpserver cdb file for smtp restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it doqueue -- schedules queued messages for immediate delivery reload -- sends qmail-send HUP, rereading locals and virtualdomains queue -- shows status of queue alrm -- same as doqueue flush -- same as doqueue hup -- same as reload HELP ;; *) echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}" exit 1 ;; esac exit 0 Этот сценарий доступен по адресу http://lifewithqmail.org/qmailctl-script-dt70. Создайте этот сценарий, используя свой любимый редактор, или загрузите, используя свой web-браузер (рекомендуется). Сделайте сценарий qmailctl исполнимым и создайте ссылку на него в каталоге, указанном в переменной окружения PATH: chmod 755 /var/qmail/bin/qmailctl ln -s /var/qmail/bin/qmailctl /usr/bin 2.8.2.2. Сценарии superviseТеперь создайте supervise-каталоги для сервисов qmail: mkdir -p /var/qmail/supervise/qmail-send/log mkdir -p /var/qmail/supervise/qmail-smtpd/log Создайте файл /var/qmail/supervise/qmail-send/run: #!/bin/sh exec /var/qmail/rc Создайте файл /var/qmail/supervise/qmail-send/log/run: #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail Создайте файл /var/qmail/supervise/qmail-smtpd/run: #!/bin/sh QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` MAXSMTPD=`cat /var/qmail/control/concurrencyincoming` LOCAL=`head -1 /var/qmail/control/me` if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in echo /var/qmail/supervise/qmail-smtpd/run exit 1 fi if [ ! -f /var/qmail/control/rcpthosts ]; then echo "No /var/qmail/control/rcpthosts!" echo "Refusing to start SMTP listener because it'll create an open relay" exit 1 fi exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \ -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 Примечание: concurrencyincoming не является стандартным файлом управления (control file) для qmail. Это особенность вышеупомянутого сценария. То же самое можно сказать о -1 (дефис один) в строке с LOCAL и -l (дефис эль) в параметрах tcpserver. Примечание: В Solaris обычная программа id не будет нормально работать в этом сценарии. Вместо id используйте /usr/xpg4/bin/id, например.: QMAILDUID=`/usr/xpg4/bin/id -u qmaild` NOFILESGID=`/usr/xpg4/bin/id -g qmaild` Примечание: Лимит памяти, указанный в команде softlimit, возможно придется увеличить, в зависимости от вашей операционной системы и аппаратной платформы. Если попытки подключиться на 25 порт потерпят неудачу или удаленные системы не смогут отослать вам сообщения или вы увидите сообщение вроде этого: /usr/local/bin/tcpserver: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory попробуйте увеличить его до 3000000 или 4000000. Создайте управляющий файл concurrencyincoming: echo 20 > /var/qmail/control/concurrencyincoming chmod 644 /var/qmail/control/concurrencyincoming Создайте файл /var/qmail/supervise/qmail-smtpd/log/run: #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd Сделайте run-файлы исполняемыми: chmod 755 /var/qmail/supervise/qmail-send/run chmod 755 /var/qmail/supervise/qmail-send/log/run chmod 755 /var/qmail/supervise/qmail-smtpd/run chmod 755 /var/qmail/supervise/qmail-smtpd/log/run Затем настройте каталог для журналов: mkdir -p /var/log/qmail/smtpd chown qmaill /var/log/qmail /var/log/qmail/smtpd Наконец, создайте в /service символические ссылки на supervise-каталоги: ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service Каталог /service был создан во время установки daemontools. Примечание: Сервисы qmail автоматически запустятся через несколько секунд после создания символических ссылок. Если вы не хотите, чтобы они запускались, выполните: qmailctl stop 2.8.2.3. Управление доступом к SMTPРазрешите локальному узлу отправлять почту через SMTP: echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp qmailctl cdb 2.8.3. Остановка и отключение установленного MTAНесмотря на возможность одновременно запустить и qmail, и уже существующий у вас MTA, (скорее всего это Sendmail), я не рекомендую это делать если вы не знаете что делаете. И, откровенно говоря, если вы читаете это, скорее всего вы не знаете что делаете. :-) Если ваш существующий MTA -- Sendmail, вы сможете остановить его, запустив init.d-сценарий с аргументом "stop". Один из этих вариантов должен сработать: /etc/init.d/sendmail stop /sbin/init.d/sendmail stop /etc/rc.d/init.d/sendmail stop Если вам не удалось найти сценарий init.d/sendmail, вы можете узнать PID sendmail, используя "ps -ef|grep sendmail" или "ps waux|grep sendmail", и остановить его с помощью команды: kill PID-of-sendmail Если ваш MTA не Sendmail, сверьтесь с его документацией, чтобы узнать корректную процедуру выключения. Вам следует также рассмотреть возможность полного удаления прежнего MTA из системы. По крайней мере, отключите сценарий запуска в init.d, чтобы он не пытался запуститься после перезагрузки системы. В Red Hat Linux удаление Sendmail может быть выполнено следующим образом: rpm -e --nodeps sendmail Примечание: Если вы используете RPM-based дистрибутив Linux, подобный Red Hat, в процессе удаления пакета с MTA могут возникнуть проблемы. Утилиты, обновляющие систему, могут попробовать переустановить Sendmail, или MUA-пакеты могут не установиться потому что они не увидят установленного MTA. Mate Wierdl предоставляет фиктивный пакет (stub package), названный "fake_mta", который может быть установлен чтобы предотвратить эти проблемы. Просто установите RPM-пакет, доступный по адресу ftp://ftp.csi.hu/mw/fake_mta-1-10memphis.noarch.rpm . Убедитесь в том, что никто не слушает (listening) SMTP-порт (25). Это может быть предыдущий MTA, inetd или xinetd. Следующая команды не должна ничего выводить (за исключением случая, когда запущен сервис qmail-smtpd): netstat -a | grep smtp Если что-то запущено, убедитесь что это не qmail с помощью команды: qmailctl stop Повторите проверку с помощью netstat: netstat -a | grep smtp Если эта команда все еще что-то выводит, вам необходимо найти виновника и отключить его перед тем как SMTP-сервис qmail будет запущен. Наконец, замените существующий файл /usr/lib/sendmail на версию из состава qmail: mv /usr/lib/sendmail /usr/lib/sendmail.old # ignore errors mv /usr/sbin/sendmail /usr/sbin/sendmail.old # ignore errors chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old # ignore errors ln -s /var/qmail/bin/sendmail /usr/lib ln -s /var/qmail/bin/sendmail /usr/sbin Примечание: Важно создать ссылки на sendmail, независимо от присутствия предыдущего MTA. Команда sendmail вызывается многими приложениями для отправки почты. Последний шаг - создание нескольких системных псевдонимов. 2.8.4. Создание системных псевдонимовСуществуют три системных псевдонима, которые должны быть созданы при всех установках qmail:
Чтобы создать эти псевдонимы, решите, куда вы хотите чтобы указывал каждый из них (локальный пользователь или удаленный адрес), создайте и заполните соответствующие .qmail-файлы. Например, пусть локальный пользователь dave является и системным администратором, и администратором почты: echo dave > /var/qmail/alias/.qmail-root echo dave > /var/qmail/alias/.qmail-postmaster ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon ln -s .qmail-postmaster /var/qmail/alias/.qmail-abuse chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster См. INSTALL.alias чтобы узнать больше деталей. 2.8.5. Запуск qmailЕсли вы остановили qmail после создания ссылок в /service, как было описано ранее, сейчас вам необходимо его запустить: qmailctl start 2.9. Тестирование установкиqmail должен быть запущен. Прежде всего запустите qmailctl stat для того, чтобы убедиться, что сервисы стартовали и работают: # qmailctl stat /service/qmail-send: up (pid 30303) 187 seconds /service/qmail-send/log: up (pid 30304) 187 seconds /service/qmail-smtpd: up (pid 30305) 187 seconds /service/qmail-smtpd/log: up (pid 30308) 187 seconds messages in queue: 0 messages in queue but not yet preprocessed: 0 Все четыре сервиса должны быть помечены как "up" и число секунд должно быть больше единицы. Если это не так, скорее всего присутствует опечатка в соответствующем стартовом сценарии или вы пропустили одну или более стадий при создании необходимых файлов, каталогов или ссылок. Еще раз пошагово пройдитесь по стадиям установки и дважды проверьте свои действия. Вы также можете загрузить и запустить сценарий inst_check, доступный по адресу http://lifewithqmail.org/inst_check. Например: # sh inst_check ! /var/log/qmail has wrong owner, should be qmaill ...try: chown qmaill /var/log/qmail # Если inst_check обнаружил проблемы, устраните их и запустите его еще раз. Когда все будет выглядеть нормально, inst_check сообщит: Congratulations, your LWQ installation looks good! Программа readproctitle хранит журнал сообщений об ошибках, порожденных сервисами, управляемых svscan. Чтобы увидеть эти сообщения, используйте ps или другие команды, выводящие список процессов. Например, вы можете увидеть что-то вроде этого: # ps -efl | grep "service errors" | grep -v grep 000 S root 1006 1001 0 76 0 - 334 pipe_w Mar31 ? 00:00:00 readproctitle service errors: ...unable to start qmail-smtpd/run: exec format error # В этом случае проблема заключается в том, что присутствует ошибка в первой строке сценария /service/qmail-smtpd/run -- скорее всего причина заключается в том, что файл создан в DOS-формате (строки заканчиваются CR-LF вместо обычного для Unix только LF). Иногда чтобы найти проблемы с конфигурацией помогает запуск службы вручную. Например, если ваш сервис qmail-smtpd/log не запускается, выполните: cd /service/qmail-smtpd/log svc -d . ./run if no errors, enter a line of text and press ENTER if still no errors, enter CTRL-D (end of file) В этот момент вы должны быть в состоянии выявить проблему и устранить ее. Когда это будет сделано, если есть необходимость, вернитесь в каталог сервиса, и выполните: svc -u . Когда все сервисы будет работать больше одной секунды, следуйте инструкциям в TEST.deliver и TEST.receive для проверки того, что они работают корректно. Обратите внимание, что при использовании этих инструкций ведение журналов будет осуществляться посредством multilog в /var/log/qmail, а не через splogger в нечто вроде /var/log/maillog. Примечание: Если вы выбрали формат ящика maildir в качестве метода доставки по умолчанию, вам необходимо создать каталог Maildir в вашем домашнем каталоге и домашний каталог пользователя alias перед тем как применять эти инструкции. См. раздел maildir чтобы узнать как правильно создать этот каталог. 3. НастройкаТеперь у вас есть установленный qmail, или рекомендованным способом из исходного кода, или из одного из самособирающихся пакетов (self-compiling packages), или это var-qmail пакет. Этот раздел содержит информацию, которая вам необходима для конфигурирования qmail, чтобы он работал так, как вы этого хотите. 3.1. Конфигурационные файлыВсе конфигурационные файлы qmail, за исключением .qmail-файлов в ~alias, находятся в /var/qmail/control. Man-страница qmail-control содержит таблицу, похожую на следующую:
Для получения дополнительной информации по отдельным файлам настроек смотрите man-страницу модуля, указанного в столбце "Используется". 3.2. Relaying (пересылка)3.2.1. ВведениеЧто такое relaying (пересылка)? Это когда MTA принимает сообщение по SMTP, которое не является ни отправленным на локальный адрес, ни от локального отправителя. В дни предшествующие спаму, большинство MTA были сконфигурированы как open relay: неразборчивые серверы, которые принимали почту от кого угодно кому угодно. Большинство MTA сейчас сконфигурированы либо с полностью отключенной пересылкой, либо так, чтобы только отдельные доверенные пользователи или системы могли использовать их как relay. Chris Johnson написал отличный документ на эту тему для пользователей qmail. Я рекомендую вам посетить страницу http://www.palomine.net/qmail/relaying.html (на сайте ru.qmail.org доступен перевод на русский язык -- прим. перев.). 3.2.2. Отключение пересылки (relaying)Если вы следовали официальным инструкциям по установке qmail, пересылка будет отключена по умолчанию. Это было сделано во время первоначального заполнения файла /var/qmail/control/rcpthosts полностью определенными доменными именами (FQDN), перечисленными в locals и virtualdomains (локальные имена). Имя файла настройки, rcpthosts, произошло от названия команды SMTP RCPT (recipient, получатель). Во время SMTP-сессии RCPT используется для определения адресов получателей письма. Таким образом, в rcpthosts перечислен список допустимых имен хостов, которые могут присутствовать в RCPT-адресах. 3.2.3. Выборочное разрешение пересылкиНа большинстве серверов для малых рабочих групп можно полностью отключить пересылку, но если вы поддерживаете распределенное сообщество пользователей, вам необходимо иметь способ разрешить вашим, и только вашим пользователям использовать вашу систему как relay. Этого можно достигнуть используя tcpserver чтобы установить переменную окружения RELAYCLIENT, которая указывает qmail-smtpd не принимать во внимание файл rcpthosts. Если вы следовали инструкциям по установке в этом документе, выборочная пересылка была включена по умолчанию. Чтобы дать клиенту доступ к пересылке, добавьте подобную запись в /etc/tcp.smtp: IP address of client:allow,RELAYCLIENT="" Затем перестройте базу данных прав доступа к SMTP: qmailctl cdb или: tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp chmod 644 /etc/tcp.smtp* Если вы следовали официальным инструкциям по установке, Chris Johnson написал другой замечательный документ о том, как сконфигурировать в qmail разрешение пересылки для отдельных узлов. См. http://www.palomine.net/qmail/selectiverelay.html (на сайте ru.qmail.org есть перевод на русский язык -- прим. перев.). 3.2.4. Пересылка через smart hostДля всякого, настраивающего почтовый сервер с обычным широкополосным подключением, существует неплохой шанс, что ваш IP-адрес находится в черных списках (blacklisted) организаций вроде SORBS (http://www.dnsbl.sorbs.net/lookup.shtml) в целях блокировки спама. Большинство провайдеров (ISP) предоставляют клиентам SMTP-сервер, который пересылает всю почту от их клиентов и такие сервера, как правило, не находятся в черных списках (not blacklisted). Например, провайдер Road Runner в Cincinnati, Ohio, имеет smtp-server.cinci.rr.com, доступный для клиентов. Вы можете сказать qmail направлять весь исходящий SMTP-трафик через такой сервер, выполнив: echo ":smtp-server.cinci.rr.com" > /var/qmail/control/smtproutes Файл smtproutes может осуществлять большее количество функций по маршрутизации, чем в этом примере; см. man-страницу qmail-remote для получения дополнительной информации. 3.3. Узлы с несколькими именами (Multiple host names)Если ваша система известна более чем под одним именем, например, все адреса вида user@host1.example.com могут быть также записаны как user@example.com или user@mail.example.com, вам необходимо сообщить об этом qmail, чтобы он знал какие адреса он должен доставлять локально и какие сообщения он должен принимать от удаленных систем. Чтобы сделать это, просто добавьте все имена в два конфигурационных файла:
Пошлите qmail-send сигнал HUP (hangup) чтобы он перечитал файл locals. Если у вас есть qmailctl, вы можете сделать: qmailctl reload 3.4. Виртуальные доменыВиртуальные домены похожи на вариант узла с несколькими именами, описанный в предыдущем разделе, но существует несколько важных отличий. Прежде всего, если example.net обслуживает виртуальный домен virtual.example.com, как правило сообщение, отправленное на joe@example.net, не должно прийти в тот же ящик, что и сообщение, отправленное на joe@virtual.example.com. Пространство имен для каждого виртуального домена существует отдельно. В qmail виртуальные домены конфигурируются в файле virtualdomains, который содержит одну или несколько записей в формате: user@domain:prepend qmail конвертирует user@domain в prepend-user@domain и трактует результаты так, как если бы domain был локальным. Часть user@ опциональна. Если она пропущена, запись будет соответствовать всем адресам из домена @domain. Возвращаясь к сценарию из примера выше, если администратор почты example.net захотел создать виртуальный домен virtual.example.com под административным контролем пользователя john, в virtualdomains должна быть добавлена следующая запись: virtual.example.com:john Адрес получателя входящего сообщение для joe@virtual.example.com будет заменен (rewritten) на john-joe@virtual.example.com и сообщение будет доставлено локально. См. раздел .qmail и подраздел Расширенные адреса для получения дополнительной информации том как john может управлять виртуальным доменом. Так же как и в случае узла с несколькими именами, все виртуальные домены должны быть перечислены в rcpthosts, чтобы qmail-smtpd знал о необходимости принимать письма, адресованные в эти домены. Тем не менее, в отличие от хостов с несколькими именами, виртуальные домены не должны быть добавленными в locals. После модификации virtualdomains пошлите qmail-send сигнал HUP (hangup) чтобы сообщить ему о необходимости перечитать файл. Если у вас есть qmailctl, вы можете сделать: qmailctl reload Также, не забудьте добавить виртуальные домены в rcpthosts. Примечание: MX(mail exchanger)-запись в DNS должна быть настроена на направление сообщений для виртуальных доменов соответствующему почтовому серверу. Это работа администратора сервера имен и её рассмотрение выходит за пределы настоящего руководства. 3.5. Псевдонимы (Aliases)Стандартный механизм псевдонимов qmail является естественным продолжением механизма локальной доставки qmail. qmail-local пытается доставить сообщение, адресованное localpart@host, локальному пользователю с именем localpart. Если соответствующий пользователь не был найден, сообщение доставляется пользователю alias -- псевдопользователю на всех qmail-системах, чей домашний каталог обычно находится в /var/qmail/alias. Например, пусть вы хотите создать псевдоним info@example.com, который перенаправляет сообщения пользователю tom. На почтовом сервере для example.com выполните как пользователь root: echo \&tom > /var/qmail/alias/.qmail-info Раздел .qmail и подраздел расширенные адреса описывают как создать .qmail-файлы, которые определяют какие псевдонимы существуют, и что делать с сообщениями, адресованными им. Приложение Особенности описывает пару сложных случаев использования псевдонимов -- псевдонимы, содержащие символы верхнего регистра и точки ('.') -- также, man dot-qmail содержит полную документацию по использованию .qmail-файлов. Обратите внимание: что обработка псевдонимов реализована в qmail таким образом, что псевдоним никогда не перенаправит (override) доставку сообщения, адресованного существующему пользователю. Например, если rachel -- обычный пользователь, псевдоним ~alias/.qmail-rachel не будет использован. Пакет fastforward предоставляет альтернативный механизм псевдонимов, который помещает множество псевдонимов в единственный файл, совместимый с базой данных псевдонимов Sendmail. Следующий раздел, qmail-users, описывает другой механизм, который может использоваться для внедрения псевдонимов. 3.6. qmail-usersqmail-users -- это система назначения адресов пользователям. Группа конфигурационных файлов находится в /var/qmail/users. Файл assign -- таблица назначений. Существуют два типа назначений: простой и с использованием шаблонов. Примечание: файл assign содержит ряд назначений, по одному на строку, и заканчивается строкой, содержащей одну точку(.). Если вы создаете файл assign вручную, не забудьте про строку с точкой. 3.6.1. Простое назначениеПростое назначение выглядит примерно так: =address:user:uid:gid:directory:dash:extension: Это означает, что доставка сообщения, полученного для address, будет производиться от под учетной записью user, с указанными uid и gid, и файл directory/.qmaildashextension будет определять как сообщение будет доставлено. 3.6.2. Назначение с использованием шаблоновНазначение с использованием шаблонов выглядит примерно так: +prefix:user:uid:gid:directory:dash:prepend: Это означает, что доставка сообщения, полученного для prefixrest, будет производиться под учетной записью user, с указанными uid и gid, и файл directory/.qmaildashprependrest будет определять, как сообщение будет доставлено. 3.6.3. Программы qmail-userqmail-user имеет две программы-помощника: qmail-newu и qmail-pw2u. qmail-newu обрабатывает файл assign и генерирует файл в формате "constant database" (CDB) с названием cdb в /var/qmail/users. CDB -- это двоичный формат, чтение из которого qmail-lspawn может производить быстро, даже когда он содержит тысячи назначений (assignments). qmail-pw2u конвертирует системную базу данных пользователей, /etc/passwd, в набор назначений, подходящих для assign. qmail-pw2u использует набор файлов для изменения правил трансляции.
Примечание: Если вы используете qmail-pw2u, не забывайте повторно запускать qmail-pw2u и qmail-newu всякий раз, когда вы добавляете, удаляете пользователей, или меняете их UID'ы или GID'ы. Типичная последовательность выглядит так: qmail-pw2u </etc/passwd >/var/qmail/users/assign qmail-newu 3.7. Борьба со спамомChris Hardie написал отличное qmail Anti-Spam HOWTO. Этот документ доступен по адресу http://www.summersault.com/chris/techno/qmail/qmail-antispam.html. 3.8. Сканирование на вирусыJason Haar написал Qmail-Scanner, средство для сканирования содержимого сообщений для qmail. См. http://qmail-scanner.sourceforge.net/ для получения дополнительной информации. Qmail-Scanner включает простой "policy-blocking" компонент (например, блокирует *.scr или блокирует "Subject: Yellow!"), также он напрямую поддерживает множество различных антивирусных модулей, включая ClamAV Antivirus scanner, доступный по адресу http://www.ClamAV.net. (на сайте ClamAV на странице "Third party tools" в разделе "Download" описаны другие средства антивирусной проверки для qmail -- прим. перев.) 4. ИспользованиеЭтот раздел описывает использование qmail обычными пользователями. Если вы читаете или отправляете почту в qmail-системе, то здесь вы найдете информацию о том, как это делать вместе с qmail. 4.1. Файлы .qmailДоставка почты пользователя обычно контролируется одним или более ".qmail"-файлами (произносится как dot kyoo mail) -- файлами в домашнем каталоге пользователя с именами, начинающимися с .qmail. Man-страница dot-qmail описывает использование .qmail-файлов. .qmail-файлы содержат список инструкций по доставке, по одной инструкции на строку. Первый символ строки определяет, какой тип доставки подразумевался:
4.1.1. доставка через программу (program delivery)Когда встречается инструкция о доставке программой, qmail запускает оболочку (/bin/sh) для выполнения команды и передает команде копию сообщения на стандартный ввод. Man-страница qmail-command описывает детали этого процесса. Доставка через программы очень мощна ( very powerful) и может быть использована для внедрения широкого диапазона возможностей, таких как фильтрация сообщений, автоматические ответы на сообщения и доставка через сторонние агенты доставки, такие как procmail. Пример: |preline /usr/ucb/vacation djb Это заставит qmail запустить preline, передать ему как аргументы /usr/ucb/vacation и djb и предоставить копию на сообщения на стандартный ввод. 4.1.2. mbox-доставкаMbox -- стандартный формат почтового ящика в UNIX, в котором несколько сообщений хранятся в одном файле и снабжаются заголовком (headed) со строкой "From ". Эта строка выглядит как поле заголовка почтового сообщения, но это не так: это только нечто, что агент доставки добавляет к каждому сообщению, чтобы можно было определить его начало при чтении. Пример: ./Mailbox Эта инструкция приведет к тому, что сообщения будут добавляться к $HOME/Mailbox со строкой "From " в начале. Простейший mbox-ящик с одним сообщением выглядит примерно так: From user1@example.net Thu May 13 18:34:50 1999 Received: (qmail 1287205 invoked from network); 13 May 1999 18:34:49 -0000 From: user1@example.net To: user2@example.com Subject: hey What's up? Первая строку добавил при доставке qmail. 4.1.3. maildir-доставкаMaildir -- это формат ящика, созданный Dan Bernstein для устранения недостатков mbox-формата. maildir-ящик -- это каталог, содержащий три подкаталога, new, cur и tmp. Каждое сообщение в maildir-ящике находится в отдельном файле в одном из подкаталогов, в зависимости от их статуса: new для непрочитанный сообщений, cur -- для сообщений, которые были просмотрены и tmp для сообщений, которые находятся в процессе доставки. Man-страница maildir детально описывает maildir-формат. Одно из преимуществ maildir-формата заключается в том, что хотя он и не использует блокировки (locking) для предотвращения одновременных обновлений (simultaneous updates) несколькими агентами доставки, надежность от этого не страдает. Это означает что maildir-ящики можно безопасно использовать на файловых системах, смонтированных через NFS. Пример: ./Maildir/ Эта инструкция приведет к тому, что сообщения будут сохранены в $HOME/Maildir, ящике в maildir-формате. Примечание: qmail-local может доставлять почту в maildir-ящики, но не может создавать их. Maildir-ящики можно создавать с помощью программы maildirmake, которая идет в составе qmail. Пример: "maildirmake ~/Maildir". Не забудьте, что maildirmake необходимо запускать как владелец maildir, а не как root. Ваша команда useradd или adduser может поддерживать "скелетный" ("skeleton") каталог, например, /etc/skel, где вы можете создать maildir, который будет скопирован в домашние каталоги всех новых пользователей. 4.1.4. forward-доставка (пересылка)Forward-доставка пересылает сообщение на указанный адрес. Адреса, указанные в .qmail-файлах не могут содержать комментарии или дополнительные пробелы. Так не правильно: &<user@example.com> & user@example.com &Joe User <user@example.com> Так правильно: &user@example.com user@example.com &user Первые две строки приведут к тому, что user@example.com получит копию сообщения. Последняя пошлет копию локальному пользователю user. 4.1.5. расширенные адреса (extension addresses)qmail поддерживает управляемые пользователем расширенные адреса (extension addresses). В дополнение к основному адресу, username@hostname.domain, пользователь может получать почту на адрес username-extension@hostname.domain. В оставшейся части этого раздела я не буду использовать часть "@hostname.domain", т.к. мы разбираем действия, которые происходят в локальной системе. Инструкции по доставке для username находятся в ~username/.qmail и инструкции по доставке для username-extension в ~username/.qmail-extension. Например, dave-lwq@sparge.example.com контролируется файлом ~dave/.qmail-lwq на узле sparge. Расширение может иметь несколько полей, например, dave-list-qmail, контролируется файлом ~dave/.qmail-list-qmail. В этом примере, dave-list-qmail подписан на список рассылки по qmail, и ~dave/.qmail-list-qmail складывает сообщения списка рассылки в отдельный почтовый ящик. .qmail-файлы могут быть (объединены) wildcarded с помощью -default. Так, dave-list-qmail может также обрабатываться файлом ~dave/.qmail-list-default. Это позволяет одним улавливающим (catch-all) .qmail-файлом обработать все адреса вида dave-list-что_угодно. Обратите внимание, что dave-list не будет обработан файлом ~dave/.qmail-list-default, поскольку он не содержит "-" после "list". qmail использует ближайшее совпадение, которое он находит. Например, когда сообщение приходит на адрес dave-list-qmail, он будет использовать первый найденный элемент из нижеприведенных: .qmail-list-qmail .qmail-list-default .qmail-default Если подходящего .qmail-файла не будет найдено, доставка терпит неудачу и сообщение отсылается отправителю обратно. 4.2. Отправка сообщенийПользователи почты обычно не используют MTA напрямую для отсылки сообщений. Как правило, сообщение составляется и отсылается используя Mail User Agent (MUA), такой как pine или mutt, который вызывает MTA для доставки сообщения. Процесс передачи (handing) сообщения MTA называется инъекция (injection). В большинстве MTA существуют два пути инъекции сообщения: через Simple Mail Transfer Protocol, SMTP, или с использованием программы, предоставляемой MTA для этих целей. 4.2.1. SMTPMUA могут установить TCP-соединение на 25 порт (стандартный порт SMTP) к локальному узлу или определенному почтовому серверу. Затем MUA и MTA участвуют в диалоге, в результате которого:
SMTP не имеет механизма для аутентификации, поэтому ни имя пользователя, ни пароль не требуется для того, чтобы отослать сообщение. Таем не менее, многие MTA отказываются принять сообщения, которые не являются сообщениями или от или для локального пользователя. Если правильно отформатированное сообщение отвергается, то наиболее вероятная причина -- ограничения на пересылку (relaying restrictions). См. раздел Relaying для получения дополнительной информации о настройке пересылки. 4.2.2. /var/qmail/bin/sendmailВ течении многих лет Sendmail был синонимом MTA в UNIX. Он был настолько вездесущ, что многие программисты просто предполагали, что только он является MTA. Как результат, механизм локальной инъекции Sendmail стал стандартным Application Programmer's Interface (API) для локальной инъекции почты. qmail и другие не-Sendmail MTA предусматривают программу sendmail, которая работает так же, как реальная программа sendmail из состава Sendmail. sendmail из состава qmail, которая обычно расположена по адресу /var/qmail/bin/sendmail, в большинстве случаев заменяет sendmail из состава Sendmail в qmail-системах. Обычно программа sendmail расположена в следующих местах:
В qmail-системах команда "ls -l путь-к-sendmail" должна показать, что sendmail -- это символическая ссылка на /var/qmail/bin/sendmail: $ ls -l /usr/lib/sendmail lrwxrwxrwx 1 root root 29 Feb 19 11:04 /usr/lib/sendmail -> /var/qmail/bin/sendmail 4.2.3. qmail-injectВ дополнение к эмуляции API sendmail, qmail также имеет свою программу для инъекций: qmail-inject. Фактически, sendmail -- просто обертка (wrapper) вокруг qmail-inject. Как API, sendmail вероятно лучше, потому что он более широко распространен. API qmail, обеспечиваемый qmail-inject, будет работать только на системах с qmail, а sendmail-интерфейс почти универсален. Например, чтобы отправить пустое сообщение на адрес joe@example.com: echo To: joe@example.com | /var/qmail/bin/qmail-inject 4.3. Переменные окруженияНекоторые qmail-программы устанавливают или используют переменные окружения. В следующей таблице перечислены эти переменные и описано их использование.
5. Расширенные темы5.1. procmailprocmail является популярным агентом доставки сообщений (Message Delivery Agent, MDA). Функция MDA заключается в получении сообщения от MTA для определенного пользователя или ящика и доставке сообщения в соответствии с пожеланиями пользователя. procmail может быть использован для "фильтрации" сообщений по содержимому различных полей заголовков или телу (body) сообщения. Например, сообщения от определенного человека могут быть направленны в ящик, созданный для получения писем только от него. Существует пара ухищрений для запуска procmail с qmail. Во-первых, procmail обычно собран для доставки в mbox-ящик, расположенный в /var/spool/mail. Вы можете пересобрать procmail чтобы доставка по умолчанию осуществлялась в $HOME, или вы можете проинструктировать пользователей не полагаться на procmail в плане определения расположения ящика по умолчанию. Если вы не пропатчите его для доставки в $HOME, procmail все еще будет использовать /var/spool/mail для временных файлов. Другая проблема заключается в том, что qmail-command и procmail не имеют общего мнения о том, какие коды выхода что означают. procmail использует стандартные коды выхода UNIX: ноль означает успешное завершение, ненулевой код означает неудачное завершение и причина сбоя обозначена в /usr/include/sys/errno.h. qmail-command использует некоторые ненулевые коды для обозначения постоянных ошибок и остальные рассматриваются как временные. Небольшая "обертка" (wrapper), написанная на языке командной оболочки, может быть использована для перевода кодов выхода для qmail-command. Такой сценарий был отправлен в список рассылки qmail и он доступен в архивах по адресу http://www.ornl.gov/lists/mailing-lists/qmail/1998/04/msg00487.html. Также, более старые версии procmail (до 3.14) не доставляют почту непосредственно в ящики в maildir-формате. Лучший выход -- обновить procmail до текущей версии. Другой подход -- использование safecat, программы, которая записывает сообщение из стандартного вывода в указанный maildir-ящик. Пользователи могут написать procmail-рецепты (инструкции по доставке), которые используют safecat для обработки сообщений. Также, вы можете полностью игнорировать procmail и использовать maildrop. В конце концов, procmail ожидает, что сообщения, полученные им, будут в mbox-формате. Обычная программа доставок в qmail включает только реальное сообщение, не включая строку "From ". Команда preline может быть использована для конвертации сообщения в формат, ожидаемый procmail. "Обертка" (wrapper), ссылка на которую была дана выше, включает preline. Например, пусть пользователь "dave" хочет, чтобы его почта была обработана procmail. Его системный администратор собрал procmail с доставкой в $HOME по умолчанию, и он предоставил "обертку"(wrapper), ссылка на которую была дана выше, для корректной обработки кодов выхода под названием /usr/local/bin/qmail-procmail. Его .qmail-файл должен выглядеть примерно так: |/usr/local/bin/qmail-procmail 5.2. POP и IMAP серверыqmail включает POP-сервер, qmail-pop3d, но он не не сконфигурирован и не установлен во время процесса установки qmail. Также, вы можете использовать один из других доступных POP или IMAP-серверов, несмотря на то что большинство из них были написаны для Sendmail и требуют некоторой дополнительной работы для использования с qmail. 5.2.1. qmail-pop3dqmail-pop3d -- это POP-сервер, включенный в состав qmail. Это превосходный POP-сервер, и многие qmail-сайты его используют. Он модульный и поддерживает множественные схемы аутентификации через альтернативные модули аутентификации. Примечание: qmail-pop3d поддерживает только ящики в maildir-формате, поэтому, если у вас есть пользователи, которые заходят на POP-сервер и запускают различные MUA локально, они (MUA) все должны поддерживать maildir-формат. Если все ваши пользователи читают почту через POP, формат ящиков на сервере не является проблемой. 5.2.1.1. Архитектура qmail-pop3dСервер qmail-pop3d состоит из трех модулей:
Обычно qmail-popup запускается с помощью inetd или tcpserver, прослушивающих 110 (POP3) порт. Когда соединение установлено, он запрашивает имя пользователя и пароль. Затем он вызывает checkpassword, который проверяет имя пользователя и пароль, и, если они совпадают, в свою очередь вызывает qmail-pop3d. 5.2.1.2. Установка qmail-pop3d1. Полностью установите и протестируйте qmail. Если вы хотите, чтобы все пользователи имели ящики, доступные через POP3, убедитесь, что параметр defaultdelivery настроен равным ./Maildir/. Если вы устанавливали сценарий /var/qmail/rc из раздела "Установка", этот параметр сконфигурирован в control/defaultdelivery. Если нет, скорее всего он находится в /var/qmail/rc, в строке запуска qmail-start. 2. Загрузите программу checkpassword с http://www.qmail.org/top.html#checkpassword. Стандартный checkpassword, http://cr.yp.to/checkpwd.html, будет хорошим выбором, если вам не нужно что-то необычное. 3. Скомпилируйте и установите checkpassword согласно инструкциям. Убедитесь, что устанавливаете его как /bin/checkpassword. Примечание: Если вы устанавливаете стандартный checkpassword, не забудьте применить errno-патч после распаковки исходного кода: patch < /usr/local/src/netqmail-1.06/other-patches/checkpassword-0.90.errno.patch 4. mkdir /var/qmail/supervise/qmail-pop3d 5. Создайте сценарий /var/qmail/supervise/qmail-pop3d/run, содержащий: #!/bin/sh exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup \ FQDN /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1 где FQDN -- полностью определенное доменное имя (fully qualified domain name) POP-сервера, который вы настраиваете, например, pop.example.net. Примечание: Лимит памяти, указанный в команде softlimit, возможно придется увеличить, в зависимости от вашей операционной системы и аппаратной платформы. Если попытки подключиться на 110 порт потерпят неудачу или POP3-соединения странным образом будут сбоить или вы увидите сообщение вроде этого: /usr/local/bin/tcpserver: error while loading shared libraries: libc.so.6: failed to map segment from shared object: Cannot allocate memory попробуйте увеличить его до 3000000 или 5000000. 6. mkdir /var/qmail/supervise/qmail-pop3d/log 7. Создайте сценарий /var/qmail/supervise/qmail-pop3d/log/run, содержащий: #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \ /var/log/qmail/pop3d 8. Настройте каталог для журналов и права на сценарий run, затем создайте ссылку на сервис в /service: chmod +t /var/qmail/supervise/qmail-pop3d # if daemontools < 0.75 mkdir /var/log/qmail/pop3d chown qmaill /var/log/qmail/pop3d chmod 755 /var/qmail/supervise/qmail-pop3d/run chmod 755 /var/qmail/supervise/qmail-pop3d/log/run ln -s /var/qmail/supervise/qmail-pop3d /service 9. Добавьте следующее в раздел "start" qmailctl : if svok /service/qmail-pop3d ; then svc -u /service/qmail-pop3d /service/qmail-pop3d/log else echo qmail-pop3d supervise not running fi 10. Добавьте следующее в раздел "stop" qmailctl: echo " qmail-pop3d" svc -d /service/qmail-pop3d /service/qmail-pop3d/log 11. Добавьте следующее в раздел "stat" qmailctl : svstat /service/qmail-pop3d svstat /service/qmail-pop3d/log 12. Добавьте следующее в раздел "pause" qmailctl : echo "Pausing qmail-pop3d" svc -p /service/qmail-pop3d 13. Добавьте следующее в раздел "cont" qmailctl : echo "Continuing qmail-pop3d" svc -c /service/qmail-pop3d 14. Добавьте следующее в раздел "restart" qmailctl : echo "* Restarting qmail-pop3d." svc -t /service/qmail-pop3d /service/qmail-pop3d/log 5.2.2. QpopperЕсли вам нужен POP-демон, который работает с ящиками в mbox-формате, вы можете использовать Qpopper от Qualcomm. Qpopper доступен по адресу http://www.eudora.com/products/unsupported/qpopper/. 5.2.3. Binc IMAPAndreas Hanssen написал сервер Binc IMAP. Binc IMAP разработан для использования того же механизма аутентификации (checkpassword), который использует qmail-pop3d, так что он хорошо подходит для qmail-серверов. Подобно qmail-pop3d, он поддерживает только Maildir-ящики. См.: http://www.bincimap.org/. 5.2.4. DovecotTimo Sirainen написал Dovecot, IMAP и POP-сервер, который поддерживает и mbox и maildir-ящики. Он был спроектирован чтобы быть безопасным. Проект доступен по адресу http://www.dovecot.org/. 5.2.5. imap-maildirDavid R. Harris доработал патч, который добавляет поддержку maildir к University of Washington IMAP серверу и задокументировал процесс установки. См. http://www.davideous.com/imap-maildir/. 5.2.6. Courier-IMAPSam Varshavchik написал IMAP-сервер, который поддерживает только maildir-ящики. Он доступен по адресу http://www.courier-mta.org/imap/. 5.2.7. CyrusCarnegie Mellon University's Project Cyrus включает IMAP-сервер. Он доступен по адресу http://asg.web.cmu.edu/cyrus/imapd/. Rick Updegrove написал оболочку (wrapper) qmail2cyrus для доставки сообщений в хранилище почты Cyrus. Эта оболочка доступна по адресу http://msgs.securepoint.com/cgi-bin/get/qmail0308/41/1/1.html. 5.3. POP и IMAP клиенты5.3.1. fetchmailfetchmail -- это программа, которая забирает почту с POP или IMAP-сервера и отдает её для доставки локальному MTA (re-injects it locally). fetchmail не имеет проблем с получением почты от qmail-серверов, но существует пара хитростей для того, чтобы сделать он работал хорошо на клиенте qmail. Ниже приведен пример .fetchmailrc для пользователя в qmail-системе: poll mail.example.net proto pop3 nodns user dsill with password flubgart is dave here fetchall forcecr Эти директивы сообщают fetchmail, что нужно установить соединение с mail.example.net по POP3, войти как пользователь dsill с паролем flubgart, получить все сообщения и доставить их на адрес dave@localhost. Директива forcecr сообщает fetchmail, что во время отдачи сообщения в локальную систему через SMTP необходимо заканчивать каждую строку переводом каретки (carriage return) . qmail требует этого. 5.3.2. getmailgetmail -- это программа, которая забирает почту с POP-сервера и доставляет её в maildir-ящик. Фактически, это сценарий, написанный на Python, поэтому вам нужно установить интерпретатор Python'а перед тем, как использовать getmail getmail написан Charles Cazabon, который сопровождает web-страницу для него по адресу http://pyropus.ca/software/getmail/. 5.4. Мульти-RCPT против доставки с единственным получателемПредставим, что вы -- MTA и один из ваших пользователей отсылает сообщение трем пользователям на hostx.example.com. Существует несколько путей как это можно сделать.
Первый метод явно худший из трех. Даже если сообщение очень маленькое, то как минимум, оно будет долго передаваться. И если сообщение большое, то передаваться оно будет намного дольше и использовать при этом бОльшую пропускную способность сети. Забудьте про этот способ. Второй и третий метод немного более интересны. Третий метод устанавливает только одно соединение с hostx, и отсылает только одну копию сообщения. Это делается для эффективного использования пропускной способности. Второй метод использует множественные соединения и отсылает несколько копий сообщения. Это "растрачивает" (wastes) пропускную способность, но в силу природы протокола SMTP требует меньших задержек подтверждения и быстрее чем третий метод. Он также проще чем третий метод, поэтому MTA может быть написан в более простом (straightforward) стиле. И наконец, поскольку каждый адресат получает свою копию сообщения, в MTA появляется возможность применять VERP (см. следующий раздел). qmail всегда использует второй метод (один RCPT). Не существует патчей для внедрения третьего метода (множественные RCPT) -- это требует большой работы. Несмотря на то что существуют патологические случаи, где этот подход может быть медленней чем подход со множественными RCPT, в целом преимущества VERP и простота перевешивают. Доставка с одним RCPT использует большую пропускную способность, чем доставка со множественными RCPT, но разница зачастую преувеличена. Большинство сообщений имеют самое большее пару получателей, и они находятся обычно на разных узлах, поэтому multi-RCPT доставка ничего не выигрывает. Даже на сервере списков рассылки, где multi-RCPT доставка может помочь, потенциальная выгода небольшая, потому что SMTP использует только часть полосы пропускания большинства подключений -- HTTP обычно получает львиную долю. Например, если 10% пропускной способности вашего канала занята SMTP и потребляемая ширина для SMTP могла бы быть уменьшена, скажем, на 25% использованием multi-RCPT доставки, в итоге это снизит пропускную способность, потребляемую SMTP, до 7.5%. 5.5. VERPКогда сообщение невозможно доставить, предполагается что MTA вернет сообщение о недоставке (bounce message) отправителю, указанному во время SMTP-сессии (envelope return path, ERP). Сообщение о недоставке должно включать адрес получателя, причину, по которой сообщение не может быть доставлено и информации о том, постоянная ли проблема или временная. Однако, некоторые MTA не делают все правильно. Они могут отослать сообщение о недоставке по адресу, указанному в заголовках в поле From, или в сообщении не будет указан получатель. Для большинства сообщений пользователь-пользователь эти проблемы не слишком критичны. Обычно можно разобраться на основании времени получения сообщения о недоставке или его содержимому. Для списков рассылки проблема плохих сообщений о недоставке более серьезна. Подписчики меняют адреса, перенаправляя почту на свой новый адрес. Если с доставкой на новый адрес начинаются проблемы, бывает невозможно определить, сообщения для какого подписчика были отвергнуты, если сообщение о недоставке включает только новый адрес. Dan Bernstein разработал решение этой проблемы под названием VERP (Variable Envelope Return Path). При использовании VERP любое сообщение, отсылаемое каждому подписчику листа рассылки, имеет уникальный обратный путь. Это позволяет механизму обработки сообщений о недоставке идентифицировать подписчика, с которым возникла проблема. Например, типичный список рассылки без поддержки VERP имеет обратный адрес в виде listname-owner@domain (имя_списка_рассылки-владелец@домен). В списках рассылки с поддержкой VERP обратный адрес будет выглядеть как listname-owner-subscriber=sdomain@ldomain (имя_списка_рассылки-владелец-подписчик=домен_подписчика@домен_списка_рассылки), где адрес подписчика, subscriber@sdomain, помещен между "owner" и "@". (Символ "@" в адресе подписчика заменен на "=".) Менеджер списков рассылки ezmlm использует VERP для автоматической обработки сообщений о недоставке. Он даже обеспечивает подписчиков с временными проблемами доставки списком неполученных ими сообщений, чтобы они могли получить их из архива. Russell Nelson написал менеджер сообщений о недоставке для Majordomo, работающего с qmail,но уже не поддерживает его. Он доступен по адресу http://www.qmail.org/bounceman-0.4.shar. 5.6. Решение проблем5.6.1. ПроцессыЗаконеченная, правильно запущенная, но минимальная установка qmail должна всегда иметь следующие четыре процесса:
В зависимости от разновидности вашего UNIX, одна из следующих двух команд должна показать эти процессы и, возможно, немного больше: ps -ef | grep qmail ps waux | grep qmail Например: [dave@sparge dave]$ ps waux|grep qmail dave 2222 0.0 0.8 836 348 p4 S 10:25 0:00 grep qmail qmaild 351 0.0 1.0 840 400 ? S N 12:43 0:00 /usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -u 49491 -g 31314 0 smtp /var/qmail/bin/qmail-smtpd- qmaild 2220 0.0 1.0 844 420 ? S N 10:25 0:00 /usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -u 49491 -g 31314 0 smtp /var/qmail/bin/qmail-smtpd- qmaill 365 0.0 0.8 748 344 ? S N 12:43 0:00 splogger qmail qmailq 368 0.0 0.7 736 292 ? S N 12:43 0:00 qmail-clean qmailr 367 0.0 0.6 732 272 ? S N 12:43 0:00 qmail-rspawn qmails 350 0.0 0.8 776 336 ? S N 12:43 0:00 qmail-send root 340 0.0 0.6 724 252 ? S N 12:43 0:00 /usr/local/sbin/supervise /var/supervise/qmail-send /var/qmail/rc root 341 0.0 0.6 724 252 ? S N 12:43 0:00 /usr/local/sbin/supervise /var/supervise/tcpserver-qmail /usr/local/bin/tcpserver -v -x /etc/tcp.smtp root 366 0.0 0.7 736 276 ? S N 12:43 0:00 qmail-lspawn ./Mailbox [dave@sparge dave]$ Если вы запускаете qmail или qmail-smtpd под supervise, как в примере выше, вы также должны должны увидеть эти процессы(supervise). И если вы запустили qmail-smtpd под tcpserver, вы должны увидеть родительский процесс tcpserver плюс дополнительный процесс tcpserver для каждого активного входящего SMTP-соединения. Если вы используете splogger (или multilog или cyclog) для журналирования, у вас должны быть один или два процесса splogger (или multilog или cyclog), работающего с правами пользователя qmaill. Также, если qmail занят локальной или удаленной доставкой сообщений, вы увидите до concurrencylocal процессов qmail-local и до concurrencyremote процессов qmail-remote. 5.6.2. Журналы (Logs)5.6.2.1. multilogmultilog, который является частью пакета daemontools, журналирует сообщения в набор файлов в определенном каталоге. Каталог для журналов определяется в строке запуска multilog, которую вы можете найти, просмотрев свои сценарии запуска qmail. Количество файлов в каталоге журналов и максимальный размер каждого файла определяются параметрами multilog. Имена лог-файлов представляют из себя временные метки в формате TAI (Temps Atomique International) момента времени, в который файл был создан (file was started). Команда tai64nlocal, также из состава daemontools, конвертирует метки времени в формате TAI в локальный, удобочитаемый вид. Типичная запись в журнале multilog выглядит примерно так: @4000000038c3eeb104a6ecf4 delivery 153: success: did_1+0+0/ "@4000000038c3eeb104a6ecf4" -- опциональная, но рекомендуемая метка времени в TAI-формате. "delivery 153: success: did_1+0+0/" -- само сообщение. 5.6.2.2. sploggersplogger использует систему журналирования syslog для расстановки меток времени в сообщениях и посылает из syslog-демону. Syslog конфигурируется в /etc/syslog.conf. Сообщения, посылаемые в syslog, имеют facility (тип программы) и priority (приоритет, уровень). Правила в /etc/syslog.conf отфильтровывают сообщения по facility и priority для направления их в требуемый лог-файл, удаленный узел для журналирования или консоль. splogger по умолчанию журналирует сообщения с facility mail, таким образом, применив команду grep для syslog.conf с параметром "mail", можно узнать расположение лог-файла qmail. Обычные места расположения включают:
Типичная запись в журнале syslog выглядит примерно так: Jun 3 11:35:23 sparge qmail: 928424123.963558 delivery 153: success: did_1+0+0/ "Jun 3 11:35:23" -- метка времени syslog. "sparge" -- имя системы, которая послала сообщение. "qmail:" -- метка, которую splogger помещает во все журнальные записи qmail. "928424123.963558" -- опциональная метка времени в формате TAI (см. следующий раздел). "delivery 153: success: did_1+0+0/" -- само сообщение. 5.6.2.3. Журнальные сообщения (Log messages)Вот типичная последовательность записей в журнале при отправке сообщения на удаленную систему с локальной системы: 1 @4000000038c3eeb027f41c7c new msg 93869 2 @4000000038c3eeb027f6b0a4 info msg 93869: bytes 2343 from <dave@sill.org> qp 18695 uid 49491 3 @4000000038c3eeb02877ee94 starting delivery 2392: msg 93869 to remote lwq@w3.to 4 @4000000038c3eeb0287b55ac status: local 0/10 remote 1/20 5 @4000000038c3eeb104a13804 delivery 2392: success: 209.85.127.177_accepted_message. /Remote_host_said:_250_CAA01516_Message_accepted_for_delivery/ 6 @4000000038c3eeb104a4492c status: local 0/10 remote 0/20 7 @4000000038c3eeb104a6ecf4 end msg 93869 Строка 1 указывает на то что qmail получил новое сообщение и его ID в очереди (идентификатор) равен 93869. Идентификатор в очереди (queue ID) -- это i-node номер файла в /var/qmail/queue/mess/NN/ -- файла в очереди, который содержит сообщение. Идентификатор гарантированно будет уникальным, пока сообщение остается в очереди. Строка 2 сообщает что сообщение от dave@sill.org и его размер 2343 байт. Строка 3 сообщает, что qmail-remote начал доставку сообщения для lwq@w3.to и этому сообщению назначен идентификатор отправки равный 2392. Строка 4 сообщает, что незакончены 0 локальных и 1 удаленная доставка. Строка 5 сообщает, что доставка 2392 завершена и завершена успешно, также эта строка содержит ответ удаленного сервера, который часто содержит информацию, полезную администратору удаленной системы для отслеживания доставки сообщения. В этом случае "CAA01516" является идентификатором доставки на удаленной системе. Строка 6 сообщает, что незакончены 0 локальных и о удаленных доставок, т.е. доставка закончена. Строка 7 сообщает что сообщение было полностью доставлено и удалено из очереди. На данный момент идентификатор в очереди (queue ID) равный 93869 может быть использован для другой доставки. 5.7. Большие сервераСм. также qmail-ldap. 5.7.1. Масштабируемый параллелизмИспользуйте быстрый NFS-сервер для хранения каталогов пользователей. Настройте несколько SMTP-серверов с одинаковым приоритетом для доставки почты в maildir-ящики на файловом сервере. 5.8. Миграция с Sendmail на qmailПосмотрите страницу Sendmail->qmail Dan Bernstein по адресу http://cr.yp.to/qmail/sendmail.html. 5.9. Менеджеры списков рассылокМенеджеры списков рассылки (Mailing list managers, MLM) -- системы, которые помогают владельцам списков рассылок управлять рассылкой. Их обязанности разделяются на две основные части: управлять списком подписчиков и контролировать повторную отсылку сообщений подписчикам. Большинство (все?) менеджеров списков рассылки под UNIX могут работать с qmail. 5.9.1. ezmlmezmlm был написан Dan Bernstein, автором qmail. Он был написан для использования с qmail и полагается на некоторые особенности qmail. В частности, он использует VERP чтобы надежно обрабатывать сообщения о недоставке. ezmlm отчасти уникален среди других MLM тем, что он не обрабатывает команды, отправленные на основной адрес рассылки: он добавляет команду в конец имени списка рассылки. Например, чтобы подписаться на список рассылки "foo@list.example.net" необходимо послать письмо на адрес "foo-subscribe@list.example.net". Для получения большей информации о ezmlm смотрите http://www.ezmlm.org/, неофициальный сайт для ezmlm и официальный сайт для ezmlm-idx, очень хорошего дополнения (add-on), которое включает много удобных возможностей. 5.9.2. MajordomoMajordomo -- один из самых популярных MLM для UNIX. Он хорошо работает с qmail после внесения нескольких простых изменений. Russ Allbery написал FAQ о qmail/Majordomo, доступный по адресу http://web.archive.org/web/20050308091420/http://www.eyrie.org/~eagle/faqs/mjqmail.html. 5.10. ПатчиДля исходного кода qmail доступны различные патчи. Для установки патча загрузите его, перейдите в дерево исходных кодов qmail и примените его, используя команду patch. cd /usr/local/src/qmail/qmail-1.03 patch -p0 </tmp/patchfile Примечание: Для получения большей информации смотрите man-страницу patch. Это просто пример. Также, вам возможно будет необходимо использовать текущую версию GNU patch для успешного применения некоторых патчей. См. http:// www.gnu.org/software/patch/patch.html. Остановите qmail убив процесс qmail-send или, если вы установили сценарий qmailctl из раздела Установка, выполните: qmailctl stop Затем пересоберите и установите новые исполняемый файлы: make setup check Затем перезапустите qmail: qmailctl start Наконец, протестируйте qmail -- особенно ту часть, на которую вы накладывали патч. Примечание: Несмотря на то, что на http://www.qmail.org/ перечислено множество патчей для qmail, ни один из них не был одобрен автором qmail. Они могут привнести проблемы с безопасностью, надежностью, эффективностью или функциональностью, которых не существует в оригинальном qmail. Большинство установок qmail требуют только некоторых рекомендованных патчей. Вы не должны устанавливать любые патчи, если в них нет необходимости. 5.10.1. Рекомендованные патчиНа qmail.org есть раздел "Recommended Patches (рекомендованные патчи)": http://qmail.org/top.html#patches. Эти патчи предназначены для исправления нескольких известных ошибок в qmail. Примечание: все рекомендованные патчи включены в дистрибутив netqmail. См. http://www.qmail.org/netqmail/. 5.10.1.1. errno.h-патчЭтот патч устраняет проблему с отсутствием errno.h. См http://article.gmane.org/gmane.mail.qmail.general/13960 для получения детального описания и самого патча. У Mate Wierdl есть errno.h-патчи для всех программ Dan Bernstein, включая qmail, daemontools и ucspi-tcp. Эти патчи доступны по адресу http://www.thedjbway.org/patches/djb_errno_patches.tgz. 5.10.1.2. qmail-local TAB патчЭтот патч исправляет небольшую ошибку в анализе .qmail-файлов, начинающихся с символа табуляции. http://www.ornl.gov/lists/mailing-lists/qmail/2000/10/msg00696.html 5.10.1.3. IP 0.0.0.0 патчЭтот патч позволяет распознавать IP-адрес 0.0.0.0 как локальный. http://www.suspectclass.com/~sgifford/qmail/qmail-0.0.0.0.patch 5.10.2. DNSИсторически, DNS-ответы ограничены размером в 512 байт. Некоторые большие сайты начали возвращать MX-ответы большего размера. qmail и много других программ имеют проблему с DNS-запросами, для которых возвращается очень большой результат. Существуют два пути решить эту проблему в qmail и один обходной путь, который может быть достаточным в некоторых случаях. 5.10.2.1. Патч Christopher K. Davis'а, http://www.ckdhr.com/ckd/qmail-103.patchЭто адаптация патча от Chuck Foster, которая должна работать с любой resolver-библиотекой независимо от её возраста, и которая использует защитный байт (guard byte) чтобы избежать ошибки библиотеки "количество байт, помещенных в буфер" ("number of bytes placed in the buffer"). Он перераспределяет (память -- прим. перев.) один раз, до 65536, а не только до необходимого размера, поэтому он может быть менее эффективным, чем патч Chuck'а (хотя, подобно его патчу он перераспределяет (память) только если ответ больше PACKETSZ, который по умолчанию равен 512 байт). После перераспределения, он принудительно инициирует TCP-запрос, вместо того чтобы требовать от библиотеки распознавателя так поступить (избегая дополнительных задержек в работе между qmail и сервером имен, хотя, если они находятся на одной машине или локальной сети, это не является большой проблемой). 5.10.2.2. Увеличение размера буфера до 65536Работает с последними версиями библиотеки распознавателя (resolver libraries) BIND, которые автоматически производят TCP-запрос средствами кода библиотеки, если размер вернулся обратно с установленным битом усечения (truncation bit). Это самое простое исправление, однако, оно также потенциально самое неэкономное в плане расхода памяти, в зависимости от того, как ваша система осуществляет распределение виртуальной памяти (paging). Чтобы сделать это, просто замените PACKETSZ на 65536 в dns.c и пересоберите qmail. 5.10.2.3. Запуск dnscache из djbdnsdnscache является, как понятно из имени, кэширующим DNS-сервером. Он знает как обрабатывать большие DNS-ответы и удалять ненужную информацию из них, поэтому ответ, который он возвращает, обычно намного меньше, чем исходный ответ. Также он обычно повышает производительность поиска имен для всех сервисов, которые используют DNS. Поскольку он не требует накладывания патчей на qmail, это может быть приемлемым решением. К сожалению, это не является Unfortunately, it's not a полным решением проблемы, потому что ответы все еще могут быть слишком велики для qmail. См. раздел djbdns в Родственные пакеты для получения дополнительной информации. 5.10.3. qmail-ldapЭтот патч от Andre Oppermann и др. снабжает qmail поддержкой Lightweight Directory Access Protocol (LDAP). LDAP подобен сетевой телефонной книге. Используя qmail-ldap POP-сервер становится способным обслуживать тысячи пользователей. См. http://www.nrg4u.com/. 5.11. QMTPQMTP -- это Quick Mail Transfer Protocol, замена SMTP-протоколу, разработанный Dan Bernstein. Этот протокол описан в http://cr.yp.to/proto/qmtp.txt. QMTP подобен SMTP, но проще, быстрее и несовместим с SMTP. qmail включает QMTP-сервер, qmail-qmtpd, который выполнен очень похожим на qmail-smtpd. QMTP обычно использует порт 209. qmail не включает клиента QMTP, но он есть в составе пакета serialmail. maildirqmtp доставляет сообщения из maildir-ящика определенному QMTP-серверу через QMTP. QMTP не является заменой для SMTP, и он еще не широко распространен в Интернете Russ Nelson написал патч для поддержки QMTP в qmail-remote. Он доступен по адресу http://www.qmail.org/qmail-1.03-qmtpc.patch. Там же можно найти архив, который может быть распакован в /service для запуска QMTP-сервиса. Он доступен по адресу http://www.qmail.org/qmtpd-service.tar.gz. 5.12. Отклонение недействительных получателей во время SMTP-сессииКогда удаленный сервер соединяется с qmail-smtpd и предлагает ему сообщение, qmail-smtpd проверяет адрес получателя в содержимом control/rcpthosts. Если узел или домен после символа @ перечислен в control/rcpthosts, qmail-smtpd принимает сообщение, которое помещается в очередь и qmail-send пробует его доставить. Если локальный получатель недействительный -- не существует пользователя или псевдонима с таким именем -- qmail-send генерирует сообщение о недоставке и отсылает его на обратный адрес, указанный во время SMTP-сессии. В дружелюбном мире, любая стратегия была бы подходящей. К сожалению, существует много злонамеренных спамеров. Некоторые пробуют отослать сообщение получателям, которые "могут" существовать на вашем сервере -- используя базы данных распространенных имен, словари или даже генерируя список всех возможных строк из букв и цифр. В qmail-системе такие спам-атаки могут быть причиной существенной загрузки системы, заполнять очередь мусором и задерживать доставку настоящих писем. Некоторые MTA проверяют локальных получателей во время сессии и отказываются принимать сообщение, если получатель недействителен. Это защищает сервер от большого объема ненужной работы, но также имеет свою отрицательную сторону. Используя эту проверка, спамеры могут быстро определить какие адреса существуют на самом деле. Существует несколько способов реализовать проверку пользователей во время SMTP-сессии в qmail. Eben Pratt составил их список по адресу http://netdevice.com/qmail/rcptck/. Большинство из них требуют поддержки базы данных действительных или недействительных получателей или шаблонов. One that doesn't is Paul Jarc's qmail-realrcptto, available from http://code.dogmap.org./qmail/. 5.13. TLS и STARTTLSScott Gifford написал очень полное и подробное руководство по использованию transport layer security (TLS) в qmail. Это руководство описывает применение STARTTLS для SMTP и STLS для POP3D в netqmail. Оно доступно по адресу http://www.suspectclass.com/~sgifford/ucspi-tls/ucspi-tls-qmail-howto.html. A. БлагодарностиВо-первых, спасибо Dan Bernstein за проектирование и написание такой мощной и элегантной системы. После примерно десяти лет использования qmail все еще впечатляет меня. Я также хотел бы поблагодарить участников списка рассылки qmail. Два участника заслуживают особого упоминания. Первый -- Russ Nelson, один из наиболее полезных, терпеливых, знающих и удивительных помощников. Его вклад в сообщество qmail уступает только DJB. Второй -- Charles Cazabon, который наступает Russ'у на пятки. Charles в данный момент главный участник списка рассылки, отвечающий на большинство вопросов более корректно, чем кто либо. Charles также написал пару очень удобных утилит, getmail и pymsgauth, и был техническим редактором для The qmail Handbook, где его вклад был решающим для успеха книги, и за который он получил слишком мало вознаграждения и признания. Также спасибо всем, кто рецензировал и распространял этот документ, включая:
Отдельное спасибо Henning Brauer за домен lifewithqmail.org и его хостинг! Также отдельное спасибо Michael M. Kadrie из ATLAS Design Group, http://www.atlasdesigngroup.com, за новый логотип qmail! Life with qmail был написан с использованием Simple Document Format (SDF), очень хорошего языка разметки текста, основанного на Perl, который генерирует HTML, plain text, PostScript, POD и другие форматы. Он сделал работу намного более легкой. См. http://search.cpan.org/author/IANC/sdf-2.001/ для получения дальнейшей информации. B. Родственные пакетыB.1. dot-forwardSendmail использует .forward-файлы (произносится как dot forward) чтобы разрешить пользователям контролировать доставку сообщений, которые они получают. qmail использует похожий механизм: .qmail-файлы. Пакет dot-forward дает возможность использовать .forward-файлы в qmail. Владельцы систем, на которых запущен Sendmail или любой другой MTA, и которые используют .forward-файлы могут захотеть обдумать возможность использования пакета dot-forward, чтобы избежать конвертирования существующих .forward-файлов в их .qmail эквиваленты -- или просто сделать переход на qmail менее заметным для своих пользователей. dot-forward -- небольшой пакет, простой в установке и конфигурировании. Исходный код доступен по адресу http://cr.yp.to/software/dot-forward-0.71.tar.gz. dot-forward написал Dan Bernstein, который поддерживает о нем web-страницу http://cr.yp.to/dot-forward.html. B.2. fastforwardfastforward -- другое дополнение для совместимости с Sendmail. Sendmail использует центральную базу данных псевдонимов, которая хранится в одном файле, обычно /etc/aliases. qmail использует набор dot-qmail-файлов в /var/qmail/alias, по одному файлу на псевдоним. Если вы мигрируете на qmail, и у вас имеется файл с псевдонимами в формате Sendmail, который вы не хотите конвертировать, fastforward даст qmail возможность использовать файл псевдонимов как есть. Исходный код доступен по адресу http://cr.yp.to/software/fastforward-0.51.tar.gz. fastforward был написан Dan Bernstein, который поддерживает о нем web-страницу http://cr.yp.to/fastforward.html. B.3. ucspi-tcpSMTP-сервер в qmail не запускается как самостоятельный демон. Вспомогательные программы, такие как inetd, xinetd или tcpserver запускаются как демоны. Затем они принимают TCP-соединение на 25 порт (SMTP) и запускают копию qmail-smtpd. Inetd -- стандартный сетевой сервер, "super-server". Он может быть сконфигурирован через /etc/inetd.conf для запуска qmail-smtpd, но рекомендованное средство -- tcpserver, который является частью пакета ucspi-tcp. ucspi-tcp -- это акроним для UNIX Client-Server Program Interface for TCP, и произносится как ooks-pie tee see pee. tcpserver предпочтительней inetd потому что:
Исходный код доступен по адресу http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz. Gerrit Pape распространяет документация для ucspi-tcp в виде man-страниц по адресу http://smarden.org/pape/djb/. ucspi-tcp написал Dan Bernstein, который поддерживает о нем web-страницу http://cr.yp.to/ucspi-tcp.html. B.4. daemontoolsПакет daemontools содержит набор инструментов для управления службами и слежения за ними. Он не обязателен, но очень рекомендуется, особенно для сильно загруженных систем. Он включает в себя:
Исходный код daemontools доступен по адресу: http://cr.yp.to/daemontools/daemontools-0.76.tar.gz. Gerrit Pape распространяет документацию для daemontools в виде man-страниц по адресу http://smarden.org/pape/djb/. daemontools написал Dan Bernstein, который поддерживает о нем web-страницу http://cr.yp.to/daemontools.html. B.5. qmailanalogqmailanalog обрабатывает лог-файлы qmail и создает ряд отчетов, которые сообщают что система сделала, и в каком объеме. Если вам необходима статистика о том, как много сообщений было отослано или получено, насколько они были большими и как быстро они были обработаны, qmailanalog это то, что вам нужно. В качестве бонуса программа matchup может комбинировать несколько строк из журнала qmail в одну -- мало чем отличающуюся от знакомых журналов Sendmail. Исходный код qmailanalog доступен по адресу http://cr.yp.to/software/qmailanalog-0.70.tar.gz. qmailanalog написал Dan Bernstein, который поддерживает о нем web-страницу http://cr.yp.to/qmailanalog.html. Примечание: qmailanalog полагается на метки времени в лог-файлах в дробном формате (fractional second format), используемый программой accustamp. Для того чтобы использовать его с журналами, сгенерированными multilog, в которых временные метки проставляются в формате TAI64N, вам необходимо перевести их в старый формат. Одна программа, которая может это сделать, доступна по адресу http://www.qmail.org/tai64nfrac. B.6. rblsmtpdЕсли вы никогда не получали спам, то вам сильно повезло. Большинство пользователей электронной почты слишком хорошо знакомы с Unsolicited Bulk E-mail (UBE, незапрошенной массовой почтой), также известной как "спам". Большинство таких сообщений представляют из себя рекламу порносайтов, финансовых пирамид и прочих мошенничеств. В недалеком прошлом, примерно до 1998 года, большинство MTA в Интернете были open relays, т.е. они принимали почту от кого угодно для кого угодно, даже если ни отправитель, ни получатель не были локальными. Спамеры использовали любой open relay, который могли найти, для доставки спама. Это позволяет им заметать следы, перенаправляя ответные действия на "невиновный" сайт, который занимался пересылкой, и сохраняет им большое количество процессорного времени и пропускной способности сети. В наши дни такие open relay считаются очень дурным тоном, и несколько групп по борьбе со спамом создали механизм для идентификации open relay и других распространенных источников спама, чтобы избежать приема от них SMTP-соединений. rblsmtpd -- RBL SMTP-демон. Он расположен между tcpserver и qmail-smtpd, и занимается тем, что отвергает соединения от систем, обозначенных в одном из этих списков. Например, чтобы запустить rblsmtpd под tcpserver, попробуйте нечто вроде этого: #!/bin/sh QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` MAXSMTPD=`cat /var/qmail/control/concurrencyincoming` exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -v -R -H -l 0 -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \ -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /usr/local/bin/rblsmtpd\ -r relays.ordb.org /var/qmail/bin/qmail-smtpd 2>&1 rblsmtpd раньше был доступен как отдельная утилита, но в данный момент включен в состав ucspi-tcp. rblsmtpd написан Dan Bernstein, который поддерживает о нем web-страницу http://cr.yp.to/ucspi-tcp/rblsmtpd.html. Charles Cazabon написал патч, который удаляет прописанный в коде rblsmtpd RBL по умолчанию, поскольку его использование больше не бесплатно. Этот патч доступен по адресу http://pyropus.ca/software/misc/rblsmtpd-nodefaultrbl.patch. B.7. serialmailqmail был разработан для систем с постоянной высокоскоростной связью. serialmail -- это набор инструментов, которые помогают qmail быть более подходящим для неустойчивой, низкоскоростной связи. С serialmail, установленным на такой системе, qmail может быть сконфигурирован для доставки всех сообщений от удаленных систем в один maildir-ящик. В serialmail команда maildirsmtp используется для отправки содержимого maildir-ящика на почтовый концентратор провайдера когда соединение будет установлено. Можно также использовать maildirqmtp, если провайдер поддерживает QMTP (см. подраздел QMTP в разделе Расширенные темы). serialmail также может быть использован на стороне провайдера для внедрения AutoTURN: SMTP-соединение от клиента приводит к тому, что сервер инициирует соединение обратно к клиенту для отсылки сообщений,предназначенных для клиента, из очереди на сервере. Это похоже на ETRN-функцию SMTP. Исходный код serialmail доступен по адресу http://cr.yp.to/software/serialmail-0.75.tar.gz. serialmail был написан Dan Bernstein, который поддерживает о нем web-страницу http://cr.yp.to/serialmail.html. B.8. mess822mess822 -- это библиотека и набор приложений для разбора (parsing) почтовых сообщений, совместимых с RFC 822. Эти приложения включают:
Исходный код mess822 доступен по адресу http://cr.yp.to/software/mess822-0.58.tar.gz. mess822 написал Dan Bernstein, он же сопровождает страницу по адресу http://cr.yp.to/mess822.html. B.9. ezmlmezmlm -- высокопроизводительный, легкий в использовании менеджер списков рассылки (mailing list manager, MLM) для qmail. Если вы знакомы с LISTSERV или Majordomo, то должны знать, что делает менеджер списков рассылки. Для получения дополнительной информации о списках рассылки под qmail смотрите подраздел Менеджеры рассылок в Расширенные темы. Исходный код ezmlm доступен по адресу http://cr.yp.to/software/ezmlm-0.53.tar.gz. ezmlm написал Dan Bernstein, который поддерживает о нем web-страницу http://cr.yp.to/ezmlm.html. Fred Lindberg и Fred B. Ringel разработали расширение для ezmlm под названием ezmlm-idx. Оно добавляет множество удобных возможностей и крайне рекомендуется. Его в данный момент развивает и поддерживает Bruce Guenter, домашняя страница -- http://www.ezmlm.org/. B.10. safecatsafecat надежно записывает файл в maildir-ящик. Он особенно полезен для сохранения писем в ящик при работе с procmail. Например, следующий управляющий файл сохраняет все сообщения в Maildir: :0w |safecat Maildir/tmp Maildir/new safecat написал Len Budney, который поддерживает о нем web-страницу http://jeenyus.net/~budney/linux/software/safecat.html. B.11. djbdnsdjbdns -- DNS-сервер, написанный автором qmail. Кроме всего прочего, он включает в себя tinydns -- полномочный DNS-сервер и dnscache -- кэширующий DNS-сервер. Официальная страница djbdns -- http://cr.yp.to/djbdns.html. B.12. maildropmaildrop -- фильтр почты, похожий на procmail. maildrop написал Sam Varshavchik, который поддерживает о нем web-страницу http://www.courier-mta.org/maildrop/. B.13. syncdirsyncdir небольшая библиотека, которая делает системный вызов link() синхронным. Это необходимо при использовании qmail с очередью, размещенной на файловой системе, которая не выполняет link() синхронно, такой как ext2fs, Reiserfs, XFS от SGI в Linux и FFS с softupdates в BSD. syncdir написал Bruce Guenter и эта библиотека доступна по адресу http://untroubled.org/syncdir/. Инструкции по установке доступны по адресу http://www.ornl.gov/lists/mailing-lists/qmail/2001/12/msg00949.html. C. Как работает Интернет-почтаC.1. Как сообщение доставляется из точки A в точку BКогда пользователь с одного узла отправляет сообщение пользователю на другом узле, за кулисами случается множество вещей, которых вы можете не знать. Пусть, скажем, Алиса, alice@alpha.example.com, хочет отослать сообщение Бобу, bob@beta.example.com. Вот что происходит: 1. Алиса составляет сообщение, используя свой почтовый клиент (mail user agent, MUA), что-то вроде mutt или pine. Она указывает получателя в поле To, тему письма в поле Subject, и сам текст сообщения. Это выглядит примерно так: To: bob@beta Subject: lunch How about pizza? 2. Когда она закончит сообщение, то скажет MUA отослать его. 3. В этот момент MUA может добавить дополнительные поля в заголовки, например Date или Message-Id, и модифицировать значения, введенные Алисой (например, заменить bob@beta на "Bob <bob@beta.example.com>". Далее MUA отдает (injects) сообщение почтовой системе. Существует два пути сделать это: он может запустить программу, предоставленную почтовой системой для инъекции сообщений (injecting messages), или он может открыть соединение с SMTP-портом или на локальной системе, или на удаленном почтовом сервере. В этом примере мы будем считать, что MUA использует локальную программу инъекции (local injection program) чтобы отдать сообщение MTA. Детали процесса инъекции меняются в зависимости от MTA, но в UNIX-системах метод с использованием sendmail является стандартом де-факто. При использовании этого метода, MUA может поместить заголовок и сообщение, отделенные пустой строкой, в файл, и передать его программе sendmail. 4. Если инъекция прошла успешно -- сообщение имело корректный синтаксис и программа sendmail была вызвана корректно -- ответственность за сообщение теперь лежит на MTA. Детали сильно зависят от MTA, но обычно MTA на первой системе исследует заголовки, чтобы определить куда слать сообщение, открывает SMTP-соединение со второй системой и передает сообщение MTA на второй системе. SMTP-диалог требует, чтобы сообщение было отослано двумя частями: envelope (конверт), который содержит адреса получателей (bob@beta.example.com) и обратный адрес (alice@alpha.example.com), и само сообщение, которое состоит из заголовка (header) и тела (body). 5. Если MTA на второй системе отвергает сообщение, возможно из-за того, что пользователь bob в системе не существует, MTA на первой системе отсылает сообщение о недоставке (bounce message) на обратный адрес, alice@alpha, чтобы уведомить Алису о проблеме. 6. Если MTA на второй системе принимает сообщение, он смотрит на адрес получателя и определяет, локальный ли это получатель для второй системы или удаленный. В нашем случае получатель локальный, поэтому MTA или доставляет сообщение самостоятельно, или передает его агенту локальной доставки (mail delivery agent, MDA), например, /bin/mail или procmail. 7. Если доставка терпит неудачу, возможно потому что Боб исчерпал свой лимит на размер ящика (mail quota), MTA на второй системе отсылает сообщение о недоставке (bounce message) на обратный адрес из конверта (envelope return address), alice@alpha. 8. Если доставка прошла успешно, сообщение в ящике Боба ждет, пока почтовый клиент (MUA) не прочитает его и не покажет Бобу. C.2. Дополнительная информацияДля получения дополнительной информации о том, как работает Интернет-почта, смотрите следующие документы:
C.2.1. Internet RFC'sInternet Requests for Comment (RFC, буквально -- Запросы Комментариев) -- официальная документация Интернета. Большинство из них ушли далеко от стадии комментариев и определяют Интернет-протоколы, такие как TCP, FTP, Telnet и различные стандарты и протоколы почты.
Полный список связанных с почтой RFC' доступен на сайте Internet Mail Consortium по адресу http://www.imc.org/mail-standards.html. D. УстройствоD.1. Модульная архитектура системыMTA выполняет различные задачи. Ранние проекты, подобные Sendmail и smail были монолитными. Другими словами, они представляли из себя одну большую, сложную программу, которая "меняет шляпы (switches hats)": она надевает одну шляпу, чтобы быть SMTP-сервером, другую -- чтобы быть SMTP-клиентом, еще одну -- чтобы принимать сообщения от системы локально (inject messages locally), и еще одну -- для управления очередью и т.д. qmail является модульной системой. Каждая из вышеперечисленных функций выполняется отдельной программой. Как результат, программы намного меньше, проще, и менее подвержены функциональным ошибкам или ошибкам в безопасности. Для дальнейшего увеличения безопасности модули qmail запускаются с различными правами и не "доверяют" друг другу: они не предполагают, что другие модули всегда делают только, что от них ожидают. Основные модули:
Также, существует обратная сторона модульного подхода. В отличие от монолитного MTA взаимодействие между модулями четко определено, модули обмениваются только минимально необходимой информацией друг с другом. В большинстве случаев это хорошо (A Good Thing), но иногда не позволяет сделать некоторые вещи. Например, флаг "-v" sendmail заставляет Sendmail печатать трассировку своих действий на стандартный вывод в целях отладки. Поскольку один исполняемый файл sendmail осуществляет инъекцию сообщения, помещение его в очередь, обработку псевдонимов, обработку .forward-файлов и удаленную доставку через SMTP, он в способен легко отследить весь процесс доставки сообщения до конечной цели. Эквивалентной возможности в qmail не существует, и внедрение передачи "отладочного (debug)" флага от модуля к модулю требует существенных изменений в коде и дополнительной сложности. D.2. Файловая структура/var/qmail является корневым для файловой структуры qmail. Это может быть изменено во время сборки qmail, но будет хорошей идеей оставить все как есть, чтобы другие администраторы знали что где искать. Если вы действительно хотите переместить частично или полностью дерево qmail, лучше будет использовать символические ссылки. См. подраздел Создание каталогов в разделе "Установка" для получения дополнительной информации. Подкаталоги верхнего уровня:
D.3. Структура очередиФайл INTERNALS в каталоге с исходными текстами описывает детали организации очереди более подробно. Здесь приводится более общее описание структуры очереди.
Примечание: Каталоги, помеченные "*" содержат набор расщепляющих (split) подкаталогов с именами "0", "1", ..., до (conf-split-1), где conf-split -- параметр, используемый при компиляции, который содержится в файле conf-split в каталоге с исходным кодом. Значение по умолчанию равно 23. Смысл разбиения (splitting) на подкаталоги заключается в снижении количества файлов в одном каталоге на очень загруженных серверах. conf-split должен быть простым числом. Файлы в подкаталоге mess именуются по номерам их i-node. Это означает, что вы не можете вручную переместить их используя стандартные утилиты UNIX, подобные mv, dump/restore и tar. На сайте http://www.qmail.org/ есть ссылки на несколько утилит, написанных пользователями qmail, которые корректно переименовывают файлы очереди. Примечание: Пока qmail запущен, изменять файлы очереди небезопасно. Если вы хотите изменить очередь, сперва остановите qmail, осторожно сделайте с очередью что вам необходимо, затем запустите qmail. D.4. ИзображенияСуществует группа файлов в /var/qmail/doc с именами, начинающимися с PIC. Они представляют из себя текстовые "изображения" различных ситуаций, которые обрабатывает qmail. Они демонстрируют алгоритм прохождения сообщения через различные модули и очень полезны для отладки и создания сложных конфигураций.
Эти файлы также доступны on-line: Если вы желаете настоящих рисунков о qmail, смотрите "big qmail picture" у Andre Oppermanat по адресу http://www.nrg4u.com/. E. Редко задаваемые вопросыЭто вопросы, которые нельзя классифицировать как часто задаваемые, но которые важны и не так просты для ответа. E.1. Как часто qmail пытается послать отложенные сообщения?Каждое сообщение имеет свое собственное расписание повторов. Чем дольше сообщение остается неотправленным, тем реже qmail пытается его отослать. Расписание повторов не конфигурируется. Следующая таблица демонстрирует расписание повторных попыток, осуществляемых до тех пор, пока сообщение, которое не удается доставить на удаленный узел, не будет возвращено обратно отправителю (until it bounces). Для локальных сообщений используется похожий, но более частый график.
E.2. Почему я не могу послать почту большому сайту с большим количеством MX?Если вы получаете: deferral: CNAME_lookup_failed_temporarily._(#4.4.3)/ Эта проблема может быть вызвана тем, что qmail не может обработать большой ответ на запрос к серверу имен. Решение заключается в установке патча или использовании обходных путей. См. подраздел Патчи в разделе "Расширенные темы". Также остается вопросом, почему некоторые не имеют проблем с доставкой почты в такие системы. В основном, в зависимости от таймингов и порядка запросов, посылаемых вашему локальному серверу имен, размер ответа на ЛЮБОЙ запрос для "aol.com" может быть больше чем предел в 512 байт для UDP-пакета, а может и не быть. "Может не быть" скорее всего случится если A- или MX-записи устареют, а NS-записи -- нет. NS-сервера для зоны .COM устанавливают TTL равным двум дням, но сервера AOL для своих записей используют TTL равный одному часу, это часто встречается на менее загруженных серверах имен. Более занятые серверы имен более вероятно будут иметь эти записи в своем кэше в любое время, срывая попытки непропатченного qmail проверить CNAME-записи. Лучший тест -- отослать почту на nosuchuser@large-mx.ckdhr.com; если ваша очередь окажется пустой и вы получите сообщение о недоставке от ckdhr.com, ваш MTA может отсылать почту на узлы со списком MX-записей больше 512 байт. (Если использовать одну DNS-запись с одним TTL, которая больше 512 байт, проблема может быть замечена независимо от таймингов и последовательности запросов.) E.3. Что такое QUEUE_EXTRA?QUEUE_EXTRA -- это конфигурационная переменная, которая задается при сборке и определяет дополнительного получателя, который будет добавлен при каждой доставке. Это используется, прежде всего, для журналирования. В качестве примера в FAQ описано использование QUEUE_EXTRA для хранения копий всех входящих и исходящих сообщений. Чтобы задействовать QUEUE_EXTRA, отредактируйте файл extra.h, указав дополнительного получателя в формате "Tполучатель\0", и длину строки QUEUE_EXTRA в QUEUE_EXTRALEN ("\0" считается за один символ). Например: #define QUEUE_EXTRA "Tlog\0" #define QUEUE_EXTRALEN 5 Остановите qmail, если он запущен. Если вы установили сценарий qmailctl из раздела "Установка", это можно осуществить выполнив команду: qmailctl stop Если у вас нет сценария qmailctl, вам необходимо использовать свои сценарии запуска/остановки или отослать qmail-send сигнал TERM. Затем пересоберите qmail: make setup check Заполните файл ~alias/.qmail-log в соответствии с тем, что вам нужно журналировать. Например, для журналирования полей Message-ID: | awk '/^$/ { exit } /^[mM][eE][sS][sS][aA][gG][eE]-/ { print }' И наконец, перезапустите qmail. F. Сообщения об ошибкахСообщения об ошибках qmail и что они означают. См. RFC 1893 для получения разъяснений кодов ошибок в круглых скобках. Это приложение не закончено. G. ОсобенностиЭти "особенности (gotchas)" часто вызывают проблемы у новичков qmail. G.1. qmail не доставляет почту суперпользователям.Для предотвращения возможного запуска программой qmail-local команд от имени привилегированного пользователя qmail игнорирует всех пользователей, чей UID равен 0. Это задокументировано в man-странице qmail-getpw. Это не означает, что qmail не осуществляет доставку для root, это просто означает, что такая доставка будет производиться от имени непривилегированного пользователя. Как правило, создается псевдоним для root с помощью заполнения файла ~alias/.qmail-root. G.2. qmail не доставляет почту пользователям, у которых нет своих домашних каталогов.Это другая особенность в плане безопасности и просто хорошая общепринятая практика. Это задокументировано в man-странице qmail-getpw. G.3. qmail не доставляет почту пользователям, чьи имена содержат буквы в верхнем регистре.qmail преобразует всю "локальную часть" -- все что в адресе находится слева от "@" -- в нижний регистр Man-страница ничего не говорит об этом, но сам код работает именно так. Тот факт, что он игнорирует пользователей с символами в верхнем регистре, задокументирован в man-странице qmail-getpw. G.4. qmail заменяет точки (.) в расширенных адресах на двоеточия (:).Еще одна особенность в плане безопасности. Целью является защита расширенных адресов от продвижения вверх по файловой системе, используя "..". Заменой точек на двоеточия qmail гарантирует, что все .qmail-файлы будут находиться в домашнем каталоге пользователя. Это задокументировано в man-странице dot-qmail. G.5. qmail в расширенных адресах преобразует символы верхнего регистра в нижний регистр.Это другой результат того, что qmail преобразует всю локальную часть адреса в нижний регистр. Это задокументировано в man-странице dot-qmail. G.6. qmail не использует /etc/hosts.qmail никогда не использует /etc/hosts для определения IP-адреса, связанного с именем узла. Если вы используете имена в файлах настроек, qmail должен иметь доступ к серверу имен. Однако, существует возможность запустить qmail в системах, у которых нет доступа к серверу имен. Узлы в файлах настроек должны быть обозначены IP-адресами путем заключения их в квадратные скобки ([]), например: [10.1.2.219] На самом деле, квадратные скобки не всегда необходимы, но использовать их постоянно -- хорошая идея. G.7. qmail не регистрирует SMTP-активность.По ряду причин qmail не регистрирует SMTP-соединения, отказы (rejections), недопустимые и правильные команды. tcpserver может быть использован для регистрации соединений, а recordio может быть использован для регистрации всего SMTP-диалога. recordio является частью пакета ucspi-tcp. О том как это сделать, написано в FAQ по адресу http://cr.yp.to/qmail/faq/servers.html#recordio. G.8. qmail не генерирует уведомления о задержках.Если Sendmail не может доставить сообщение на протяжении нескольких часов, обычно четырех, он шлет уведомление о задержке автору сообщения. Эти уведомления похожи на сообщения о недоставке, но не указывают на то, что доставка окончательно потерпела неудачу. qmail не отсылает такие предупреждения. Недоставленное сообщение будет возвращено отправителю только тогда, когда оно пробудет в очереди время, большее queuelifetime. G.9. qmail работает медленно, если /var/qmail/queue/lock/trigger отсутствует / имеет неправильные разрешения / является обычным файлом.qmail-queue и qmail-send общаются между собой через именованный канал (named pipe) /var/qmail/queue/lock/trigger. Если этот канал будет испорчен, qmail-send не будет извещен о новых сообщениях около получаса. Лучший способ убедиться что он правильно настроен -- запустить "make check" в каталоге с исходным кодом. Если это невозможно, убедитесь, что он выглядит так: # ls -l /var/qmail/queue/lock/trigger prw--w--w- 1 qmails qmail 0 Jul 5 21:25 /var/qmail/queue/lock/trigger Уделите особое внимание символу "p" в начале строки (он сообщает, что это именованный канал), правам доступа (особенно биту, соответствующему праву на запись всем) и владельцу / группе. G.10. DNS- или IDENT-поиск замедляют работу SMTPЕсли qmail-smtpd медленно отвечает на соединения, проблема может заключаться в поиске обратных DNS-записей (PTR) или IDENT-поиске. Если вы запускаете qmail-smtpd с tcpserver, удалите параметры "-h", "-p" и "-r" и добавьте параметры "-H", "-P", "-R" и "-l имя_узла". См. в документации tcpserver по адресу http://cr.yp.to/ucspi-tcp/tcpserver.html разъяснение этих параметров. G.11. CRLF(Carriage Return/Linefeed) окончания строк не работают.qmail-inject и другие локальные механизмы инъекции сообщений, подобные sendmail, не работают правильно когда сообщение содержит CRLF(carriage return/linefeed) окончания строк в DOS-стиле. В отличие от Sendmail, qmail требует, чтобы в локально создаваемых (locally-injected) сообщениях использовались Unix-окончания строк (только LF). Это распространенная проблема с PHP-сценариями. G.12. qmail-send или tcpserver прекращают работу если существуют проблемы с ведением лог-файлов.Если у вас журналы ведет сервис, управляемый supervise, как описано в разделе 2, и лог-сервис дает сбой по любой причине: заполнен диск, ошибка в стартовом сценарии, ошибка в конфигурировании каталога с журналами и пр., канал (pipeline) в конечном итоге заполнится, что приведет к блокированию или зависанию сервиса. Решите эту проблему (см. Решение проблем) и все вернется к нормальному состоянию. G.13. qmail-smtpd не проверяет локальную часть адреса.Если example.com перечислен в control/rcpthosts, почта для кто_угодно@example.com будет принята во время SMTP-сессии. Если кто_угодно не является существующим пользователем или псевдонимом, qmail отошлет сообщение о недоставке (bounce message) на адрес отправителя (envelope sender address). Некоторые туповатые тесты на пересылку (simpleminded relaying tests) считают, что если сообщение принято, оно будет доставлено. Это неправильно. Если кто-то утверждает, что ваша система -- open relay, запросите у него копию сообщения, которое переслал ваш сервер -- включая полные заголовки, особенно поля Received -- затем сравните их со своими журналами. См. раздел Отклонение недействительных получателей во время SMTP-сессии для получения информации о том, как добавить в qmail проверку получателей. G.14. Firewall'ы могут блокировать удаленный доступ к вашему SMTP/POP3/IMAP серверу.Если вы установили SMTP, POP3 или IMAP-сервер и вы можете установить с ним соединение с локального узла или с узла в локальной сети, но не можете с удаленного узла, проблема может заключаться в межсетевом экране (firewall). Первое, на что стоит обратить внимание -- это сам сервер. Red Hat Linux, например, блокирует SMTP в конфигурации по-умолчанию при использовании iptables. Другие механизмы фильтрации пакетов, такие как ipchains, также могут быть ответственны за это. Также возможно, что ваш провайдер блокирует некоторые порты для предотвращения отсылки спама или в соответствии со своими Правилами оказания услуг (Terms of Service, TOS). Свяжитесь с техподдержкой своего провайдера после того, как убедитесь что фильтр пакетов не при чем и что запущенный сервер не нарушает Условий оказания услуг (сильно помогает в поиске узла, где стоит запрет на соединение, утилита tcptraceroute -- прим. перев.). G.15. qmail-inject устанавливает поле From в anonymous если USER и LOGNAME не установлены.Если сообщение, отсылаемое через qmail-inject не содержит поля From, qmail-inject просматривает переменные окружения чтобы узнать, какой пользователь отсылает сообщение. Переменные, которые он просматривает (по порядку): QMAILUSER, MAILUSER, USER и LOGNAME. Во время сессии при обычном входе пользователя из USER и LOGNAME устанавливаются одна или обе переменные, но некоторые пакетные задания, например, запускаемые из cron, могут не иметь ни одной из них. Чтобы ваши cron-задания имели правильное поле From, установите одну из этих переменных перед отправкой любых почтовых сообщений. G.16. qmail-send не всегда завершается сразу.Отсылка qmail-send сигнала TERM не приводит к его немедленному завершению, если в данный момент осуществляется доставка сообщений. qmail-send будет ждать завершения всех процессов qmail-local и qmail-remote перед тем как завершиться, чтобы можно было записать результат этих доставок. По причине этого, "qmailctl restart" или "qmailctl stop" могут отчитаться что qmail-send был остановлен, даже если он все еще запущен. Всегда запускайте "qmailctl stat" чтобы убедиться в том, остановка или перезапуск на самом деле завершены. Также не забывайте, что qmail-send проходит по очереди перед завершением, поэтому на очень больших очередях это будет причиной заметной задержки. G.17. Доставка в /dev/null не позволяет избавиться от сообщений.Инструкция по доставке, подобная: /dev/null заставляет qmail считать, что /dev/null является mbox-ящиком, но поскольку /dev/null является специальным файлом, qmail не может успешно доставить в него почту. Лучшим способом избавиться от сообщения будет создание .qmail-файла, который не содержит действительных инструкций по доставке, но не пустого. (Пустые .qmail-файлы трактуются как содержащие инструкции доставки по-умолчанию, указанные в defaultdelivery или в строке запуска qmail-start.) Это достигается заполнением файла только комментариями. Например, .qmail-файл, содержащий только: # или: # throw messages away undelivered приведет к тому, что сообщение будет отброшено без доставки куда-либо. G.18. Изменение очереди, в то время как qmail-send запущен, опасно.Изменение каких-либо файлов или каталогов в /var/qmail/queue в то время как qmail-send запущен, без точного понимания того, что вы делаете, весьма вероятно приведет к повреждению очереди -- например, к сообщениям в неопределенном состоянии, странным ошибкам в журналах, дублировании доставок, фиктивным сообщениям о недоставке и пр. Если это случилось, найдите и запустите утилиту для проверки очереди (на пару из них даются ссылки на qmail.org) или создайте новую, пустую очередь. Если вы хотите изменить очередь, сперва остановите qmail, осторожно поиграйтесь с очередью, затем запустите qmail. Не забывайте, что вы можете повредить очередь даже если qmail-send остановлен, поэтому вы все так же должны знать, что вы делаете. H. Часто задаваемые вопросы о Life with qmailH.1. Какой версии Life with qmail?Это LWQ версии 2007-11-30. H.2. Кто владелец Life with qmail?Life with qmail is Copyright 1999-2007 David E. Sill http://Web.InfoAve.Net/~dsill/dave/ H.3. Какова лицензия на Life with qmail?Life with qmail лицензирован под OpenContent License, версия 1.0. См. полную версию лицензии по адресу http://www.opencontent.org/opl.shtml. По существу, вы можете копировать, распространять или модифицировать Life with qmail при условии, что измененная версия также будет распространяться под OpenContent License. H.4. Как я могу быть извещен о выходе новых версий LWQ?Подпишитесь на список рассылки lwq-announce, отправив сообщение на адрес lwq-announce-subscribe@sws1.ctd.ornl.gov. H.5. Где обитают разработчики LWQ и где можно с ними пообщаться?Подпишитесь на список рассылки lwq, отправив сообщение на адрес lwq-subscribe@sws1.ctd.ornl.gov. H.6. Имеется ли перевод Life with qmail на мой язык?Может быть. LWQ переведен на несколько языков. См. http://lifewithqmail.org/trans.html для получения большей информации о переводах LWQ. H.7. Доступен ли Life with qmail в PostScript, PDF, plain text или любых других форматах, кроме HTML?Да, текст в других форматах можно найти по адресу http://lifewithqmail.org/. H.8. Я использовал Life with qmail и он испортил мою систему / удалил все файлы с диска / разрушил мою личную жизнь / убил мою собаку / etc.Я сожалею. Действительно сожалею. Но Life with qmail не дает никаких гарантий. См. OpenContent License, упомянутую выше. Я не получал плату за его написание, я просто хотел создать что-то полезное для qmail-сообщества. На самом деле, это не FAQ. Фактически, я надеюсь, что это NAQ (Never Asked Question, никогда не задаваемый вопрос). H.9. Как я могу внести вклад в работу над LWQ?Пожалуйста, посылайте комментарии, предложения, жалобы etc. на lwq@sill.org. Если вы хотите внести более значительный вклад, например, новые подразделы или приложения, это здорово! Вы можете сначала связаться со мной, чтобы удостовериться в том, что я хочу чтобы эта тема была в LWQ и что никто уже не работает над ней. Другой способ поддержки LWQ -- сделать покупку в моем книжном магазине на Amazon.com, используя ссылку: http://www.amazon.com/exec/obidos/redirect-home/davesill. Спасибо за вашу поддержку! H.10. Что изменилось в этой версии LWQ?
H.10.1. Что изменилось в версии 2006-01-02 LWQ?
H.10.2. Что изменилось в версии 2004-06-30 LWQ?
H.10.3. Что изменилось в версии 2004-03-28 LWQ?
H.10.4. Что изменилось в версии 2004-03-01 LWQ?
H.10.5. Что изменилось в версии 2004-01-26 LWQ?
H.10.6. Что изменилось в версии 2003-11-10 LWQ?
H.10.7. Что изменилось в версии 2003-10-30 LWQ?
H.10.8. Что изменилось в версии 2003-08-16 LWQ?
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||