FAQ
| Faq от автора системы | Faq от автора сайта
FAQ от автора системы
1. Управление видом исходящих сообщений 1.1. Как организовать маскировку хоста? 1.2. Как организовать маскировку пользователя? 1.3. Как автоматически установить поле Mail-Followup-To? 2. Маршрутизация исходящих сообщений 2.1. Как пересылать локальные сообщения на другой хост? 2.2. Как установить ноль-клиента? 2.3. Как организовать посылку исходящей почты через UUCP? 2.4. Как организовать отдельную очередь сообщений для SLIP/PPP канала? 2.5. Что делать с сообщениями "CNAME lookup failed temporarily"? 3. Маршрутизация входящих сообщений на уровне почтовой системы 3.1. Как получать почту для хоста с другим именем? 3.2. Как организовать виртуальный почтовый домен? 3.3. Как организовать несколько виртуальных доменов для одного пользователя? 4. Маршрутизация входящих сообщений на уровне пользователей 4.1. Как переправлять сообщения для неопознанных пользователей на другой хост? 4.2. Как организовать список рассылки? 4.3. Как использовать majordomo вместе с qmail? 4.4. Как использовать procmail вместе с qmail? 4.5. Как использовать фильтры пакета elm вместе с qmail? 4.6. Как создать алиасы с точками? 4.7. Как использовать c qmail файлы .forward от sendmail? 4.8. Как использовать c qmail /etc/aliases от sendmail? 4.9. Как установить, кто будет обрабатывать почту, пришедшую на некоторый адрес? 5. Установка серверов 5.1. Как запустить qmail-smtpd под управлением tcpserver'а? 5.2. Как установить qmail-qmtpd? 5.3. Как установить qmail-pop3d? 5.4. Как разрешить указанным клиентам использовать этот хост как relay для исходящих сообщений? 5.5. Как исправить сообщения от неверных SMTP-клиентов? 5.6. Как установить qmail-qmqpd? 6. Конфигурирование пользовательских почтовых программ (MUA) для работы с qmail 6.1. Как заставить BSD mail генерировать дату по местному времени? 6.2. Как заставить pine работать с qmail? 6.3. Как заставить MH работать c qmail? 6.4. Как прекратить зависания Sun dtcm? 7. Управление почтовой системой 7.1. Как безопасно остановить qmail-send? 7.2. Как вручную управлять очередью сообщений? 7.3. Как "обновить" сообщение? 7.4. Как организовать большую сеть? 7.5. Как сделать резервную копию и затем восстановить диск с очередью сообщений? 7.6. Как запустить qmail под управлением supervise? 7.7. Как отказаться от использования syslog? 8. Разное 8.1. Как увеличить количество одновременно отправляемых сообщений? 8.2. Как сохранять копии всех входящих и исходящих почтовых сообщений? 8.3. Как постепенно переключиться с sendmail на qmail? 1. Управление видом исходящих сообщений 1.1. Как организовать маскировку хоста? Все пользователи данного хоста, zippy.af.mil, являются также пользователями af.mil. Когда joe посылает сообщение fred, сообщение должно гласить: "От кого: joe@af.mil" и "Кому: fred@af.mil",- без упоминания zippy. Ответ: команды: echo af.mil >/var/qmail/control/defaulthost chmod 0644 /var/qmail/control/defaulthost 1.2. Как организовать маскировку пользователя? Я бы хотел, чтобы в поле From в моих сообщениях было boss@af.mil, а не god@heaven.af.mil Ответ: Добавьте MAILHOST=af.mil и MAILUSER=boss в переменные окружения. Для изменения поля From, указанного Вашей почтовой программой, добавьте QMAILINJECT=f в переменные окружения. 1.3. Как автоматически устанавливать поле Mail-Followup-To? Когда я посылаю сообщения в список рассылки sos@heaven.af.mil, мне бы хотелось включать поле "Mail-Followup-To: sos@heaven.af.mil". Ответ: Добавьте QMAILMFTFILE=$HOME/.lists в переменные окружения и поместите sos@heaven.af.mil в ~/.lists 2. Маршрутизация исходящих сообщений 2.1. Как пересылать локальные сообщения на другой хост? Всю почту для af.mil следует доставлять на наш файловый сервер pokey.af.mil. Я уже установил в DNS, что pokey.af.mil - MX (почтовый сервер) для af.mil, но когда пользователь хоста af.mil посылает сообщение для boss@af.mil, af.mil пытается доставить его локально, а не на pokey.af.mil. Как прекратить это? Ответ: Удалите af.mil из /var/qmail/control/locals. Если запущен qmail-send, пошлите ему сигнал HUP (или выполните `svc -h /var/run/qmail`, если qmail под контролем supervise), убедившись предварительно, что MX установлен верно. И удостоверьтесь, что pokey.af.mil сконфигурирован для получения почты для af.mil (См. вопрос 3.1) 2.2. Как установить ноль-клиента (null client)? Я бы хотел, чтобы zippy.af.mil посылал всю почту на bigband.af.mil Ответ: команды: echo :bigband.af.mil >/var/qmail/control/smtproutes; chmod 0644 /var/qmail/control/smtproutes Запретите локальную доставку как в вопросе 2.1. Отключите qmail-smtpd в inetd.conf. 2.3. Как посылать исходящую почту через UUCP? Мне нужно, чтобы qmail посылал всю исходящую почту через UUCP моему головному хосту, gonzo. Ответ: поместите :alias-uucp в /var/qmail/control/virtualdomains и |preline -df /usr/bin/uux - -r -gC -a"${SENDER:-MAILER-DAEMON}" gonzo!rmail "($DEFAULT@$HOST)" (все на одной строчке) в ~alias/.qmail-uucp-default. (Для некоторых пакетов UUCP Вам потребуется использовать -d вместо -df.) Если запущен qmail-send, оповестите его сигналом HUP (или выполните `svc -h /var/run/qmail`, если qmail под контролем supervise). 2.4. Как установить отдельную очередь сообщений для SLIP/PPP канала? Ответ: используйте serialmail (http://pobox.com/~djb/serialmail.html) 2.5. Что делать с сообщениями "CNAME lookup failed temporarily"? Лог-файл показывет, что доставка почтового сообщения была отложена по этой причине. И вообще, почему qmail делает поиск канонического имени? Ответ: Стандарт SMTP не разрешает использовать алиасы в именах хостов, поэтому qmail производит поиск канонического имени для каждого принимающего почту хоста в DNS. Если соответствующий DNS сервер выключен, то qmail откладывает доставку. Он вскоре попытается снова. 3. Маршрутизация входящей почты на уровне почтовой системы 3.1. Как получать почту для хоста с другим именем? Мне необходимо, чтобы наш файл-сервер pokey.af.mil получал почту, адресованную af.mil. Я уже установил в DNS, что pokey.af.mil - MX (почтовый сервер) для af.mil, но как настроить pokey на прием сообщений для af.mil? Ответ: Добавьте af.mil в /var/qmail/control/locals и в /var/qmail/control/rcpthosts. Если qmail-send запущен, пошлите ему сигнал HUP (или выполните `svc -h /var/run/qmail`, если qmail под контролем supervise). 3.2. Как организовать виртуальный домен? Мне необходимо, чтобы почта для nowhere.mil, включая почту для root@nowhere.mil и postmaster@nowhere.mil, доставлялась Bob'у. Я уже установил MX. Ответ: Поместите nowhere.mil:bob в control/virtualdomains. Добавьте nowhere.mil в control/rcpthosts. Если qmail-send запущен, пошлите ему сигнал HUP (или выполните `svc -h /var/qmail/control`, если qmail под конролем supervise) Теперь почта для whatever@nowhere.mil ("что-угодно@nowhere.mil") будет доставляться локально на адрес bob-whatever. bob может установить ~bob/.qmail-default для обработки всех возможных адресов с nowhere.mil, ~bob/.qmail-info для обработки info@nowhere.mil и т.д. 3.3. Как установить несколько виртуальных доменов для одного пользователя? bob желает еще один виртуальный домен, everywhere.org, но он желает обрабатывать почту для пользователей nowhere.mil и everywhere.org раздельно. Как это может быть сделано без создания второго эккаунта? Ответ: поместите две строчки в control/virtualdomains: nowhere.mil:bob-nowhere everywhere.org:bob-everywhere Добавьте nowhere.mil и everywhere.org в control/rcpthosts. Если qmail-send запущен, пошлите ему сигнал HUP (или выполните `svc -h /var/run/qmail`, если qmail под контролем supervise) Теперь bob может установить различные .qmail-nowhere-* и .qmail-everywhere-*. Более того, он может установить .qmail-nowhere-default и .qmail-everywhere-default. 4. Маршрутизация входящих сообщений на уровне пользователей 4.1. Как перенаправлять сообщения для неопознанных пользователей на другой хост? Мне бы хотелось установить LUSER_RELAY, указывающих на bigband.af.mil. Ответ: поместите | forward "$LOCAL"@bigband.af.mil в ~alias/.qmail-default. 4.2. Как создать список рассылки? Мне бы хотелось, чтобы письмо на me-sos@my.host.name отправлялось группе людей. Ответ: Поместите список адресов в ~me/.qmail-sos, по одному на строке. Далее вся входящая почта для me-sos будет направляться каждому из этого адреса. Вам также следует выполнить `touch ~me/.qmail-sos-owner`, так, чтобы возвраты (bounces) приходили к вам, а не изначальному отправителю. Если Вы хотите, чтобы подписка на список рассылки могла осуществляться автоматически, поместите | qlist2 sos my.host.name в ~me/.qmail-sos-request. Теперь любой может подписаться на Ваш список рассылки просто отправив письмо по адресу me-sos-request@my.host.name. Альтернативное решение: esmlm (http://pobox.com/~djb/ezmlm.html) - современный менеджер списков рассылок, поддерживающий автоматическую подписку, подтверждения, архивы, полностью автоматическую обработку возвратов (включая предупреждения подписчикам, какие сообщения они пропустили) и др. 4.3. Как использовать majordomo с qmail? Ответ: Смотрите ftp://ftp.eyrie.org/pub/software/majordomo/mjqmail и http://www.qmail.org, где описываются различные решения. Ожидается, что majordomo 2.0 будет самостоятельно поддерживать qmail. Знайте, что списки рассылки majordomo не устойчивы к сбоям. 4.4. Как использовать procmail с qmail? Ответ: поместите | preline procmail в ~/.qmail. Вы должны указать полный путь для procmail, если procmail нет в стартовом пути (PATH) системы. Знайте, что по умолчанию procmail попытается доставить Вашу почту в /var/spool/mail/$USER, для изменения этого поведения см. INSTALL.mbox в документации по qmail. 4.5. Как использовать с qmail фильтр elm? Ответ: поместите | preline filter в ~/.qmail. Вы должны указать полный путь для procmail, если procmail нет в стартовом пути (PATH) системы. 4.6. Как создать алиасы с точками? Я попытался установить ~alias/.qmail-P.D.Q.Bach, но не достиг цели. Ответ: используйте .qmail-p:d:q:bach. Точки преобразуются в двоеточия, а верхний регистр - в нижний. 4.7. Как использовать с qmail файлы .forward от sendmail? Ответ: установите пакет dot-forward (http://pobox.com/~djb/dot-forward.html). 4.8. Как использовать с qmail файл /etc/aliases от sendmail? Ответ: установите пакет fastforward (http://pobox.com/~djb/fastforward.html). 4.9. Как установить, кто будет обрабатывать почту, пришедшую на некоторый адрес. Я установил ~alias/.qmail-www, но qmail по-прежнему обращается к файлу ~www/.qmail. Ответ: если Вы выполните # chown root ~www qmail более не будет рассматривать www, как пользователя; man qmail-getpw. Для более аккуратного контроля за выделением адресов, выполните man qmail-users. 5. Установка серверов 5.1. Как запустить qmail-smtpd под управлением tcpserver? inetd ненадежен при высоких нагрузках, отключает службы на 10 минут. Также мне хотелось бы иметь лучшее, чем сейчас, ведение логов соединений. Ответ: во-первых, установите программу tcpserver, являющуюся частью пакета ucspi-tcp (http://pobox.com/~djb/ucspi-tcp.html). Во-вторых, удалите строчку с smtp из /etc/inetd.conf и поместите строку tcpserver -u 7770 -g 2108 0 smtp /var/qmail/bin/qmail-smtpd & в стартовые файлы Вашей системы. Замените 7770 на пользовательский идентификатор (UID) qmaild в Вашей системе и 2108 - на идентификатор группы (GID) nofiles. Не забудьте про '&' в конце. Изменения вступят в силу с момента Вашей следующей загрузки. По умолчанию, tcpserver позволяет до 40 одновременных процессов qmail-smtpd. Для увеличения этого предела до, скажем, 400 используйте tcpserver -c 400. Для записи, кто соединялся и на какой период запустите (на двух строчках) tcpserver -v -u 7770 -g 2108 0 smtp /var/qmail/bin/qmail-smtpd 2>&1 | \ /var/qmail/bin/splogger smtpd 3 & 5.2. Как установить qmail-qmtpd? Ответ: в два этапа. Во-первых, добавьте строку qmtp 209/tcp в /etc/services. Второй этап - поместите (на одной строке) qmtp stream tcp nowait qmaild /var/qmail/bin/tcp-env /var/qmail/bin/qmtpd в /etc/inetd.conf, пошлите inetd сигнал HUP Если у Вас инсталлирован tcpserver, вместо конфигурирования inetd внесите строчку tcpserver -u 7770 -g 2108 0 qmtp /var/qmail/bin/qmail-qmtpd & в стартовые скрипты Вашей системы, заменяя 7770 и 2108 на UID qmaild и GID nofiles. См. вопрос 5.1 для получения дополнительной информации о tcpserver. 5.3. Как установить qmail-pop3d? Мой прежний POP3 сервер работает с почтой в формате mbox; мне хотелось бы переключиться на Maildir. Ответ: четыре этапа. Во-первых, инсталлируйте программу checkpassword (http://pobox.com/~djb/checkpwd.html). Затем убедитесь, что в /etc/services присутствует строка pop3 110/tcp После этого добавьте (все на одной строке, включая два qmail-popup) pop3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup YOURHOST /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir в /etc/inetd.conf, заменив YOURHOST на полное имя Вашей машины; пошлите inetd сигнал HUP. Наконец, установите доставку в Maildir для всех пользователей, желающих получать почту через POP3. Если у Вас инсталлирован tcpserver, пропустите конфигурирование inetd и внесите (в две строки, заменяя YOURHOST как для inetd и /bin/checkpassword на тот, что реально используется в Вашей системе) tcpserver 0 pop3 /var/qmail/bin/qmail-popup YOURHOST \ /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir & См. вопрос 5.1 для получения доп. информации о tcpserver. Замечание по безопасности: протокол pop3 должен использоваться только в безопасной сети, в противном случае злоумышленник может "подслушать" пароли. 5.4. Как разрешить указанным клиентам использовать мой сервер в качестве пересыльщика почты (mail relay)? Я вижу, что qmail-smtpd отбрасывает сообщения для любых хостов, не перечисленных в control/rcpthosts. Ответ: в три этапа. а первом инсталлируйте пакет tcp-wrappers (вместе с hosts_options), распространяющийся отдельно. Во-вторых, измените в /etc/inetd.conf строчку с qmail-smtpd на smtpd stream tcp nowait qmaild /usr/local/bin/tcpd /var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd (все на одной строке) и пошлите inetd HUP. Наконец, в файл hosts.allow для tcpd добавьте строку, делающую для указанных клиентов пустую строку значением переменной среды RELAYCLIENT: tcp-env: 1.2.3.4, 1.2.3.5: setenv = RELAYCLIENT где 1.2.3.4 и 1.2.3.5 - IP-адреса клиентов. qmail-smtpd игнорирует control/rcpthosts, если установлена эта переменная (Он также добавляет RELAYCLIENT к каждому служебному адресу получателя (envelope recipient address). В вопросе 5.5. приведены примеры использования такого поведения) Если Вы используете tcpserver версии 0.80 или выше, то вместо этого Вам следует создать файл /etc/tcp.smtp, содержащий 1.2.3.6:allow,RELAYCLIENT="" 127.:allow,RELAYCLIENT="" Эти строчки разрешат соединение клиентам с IP адресами 1.2.3.6 и 127.*. Выполните tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp И наконец внесите -x /etc/tcp.smtp.cdb сразу после tcpserver в файле запуска qmail-smtpd 5.5. Как исправлять сообщения от неверных клиентов SMTP? Ответ: три этапа. Во-первых, впишите в ~alias/.qmail-fixup-default строчки | bouncesaying 'Permission denied' [ "@$HOST" != "@fixme" ] | qmail-inject -f "$SENDER" -- "$DEFAULT" Во-вторых, добавьте fixme: fixup в /var/qmail/control/virtualdomains и пошлите qmail-send сигнал HUP. В-третьих, следуйте процедуре, описанной в вопросе 5.4, но установите RELAYCLIENT равной "@fixme": tcp-env: 1.2.3.6, 1.2.3.7: setenv = RELAYCLIENT @fixme где 1.2.3.6 и 1.2.3.7 - IP адреса клиентов. Если Вы используете tcpserver вместо inetd и tcpd, добавьте в /etc/tcp.smtp 1.2.3.6:allow,RELAYCLIENT="@fixme" 1.2.3.7:allow,RELAYCLINET="@fixme" и запустите tcprules как в вопросе 5.4. 5.6. Как установить qmail-qmqpd? Мне хотелось бы разрешить быструю постановку в очередь исходящей почты от авторизованных клиентов. Ответ: убедитесь, что у Вас инсталлирован tcpserver 0.80 или выше. Создайте /etc/qmqp.tcp в формате tcprules для разрешения соединений с авторизованных хостов. Например, если постановка в очередь разрешена с 1.2.3.*, то в /etc/qmqp.tcp внесите 1.2.3.:allow :deny Преобразуйте /etc/qmqp.tcp в /etc/qmqp.cdb: tcprules /etc/qmqp.cdb /etc/qmqp.tmp < /etc/qmqp.tcp аконец, установите tcpserver -x /etc/qmqp.cdb -u 7770 -g 2108 0 628 /var/qmail/bin/qmail-qmqpd & заменив 7770 и 2108 на UID qmaild и GID nofiles. В вопросе 5.1. описаны детали исталляции tcpserver. 6. Конфигурирование пользовательских почтовых программ (MUA) для работы с qmail 6.1. Как заставить BSD mail генерировать дату, используя местное время? Когда я посылаю почту, я бы хотел использовать местное время, а не GMT, т.к. некоторые MUA не знают как показывать время в часовом поясе получателя. Ответ: поместите set sendmail=/var/qmail/bin/datemail в ваш .mailrc или системный Mail.rc. Помните, однако, что BSD mail небесопасна и ненадежна. 6.2. Как заставить pine работать с qmail? Ответ: поместите sendmail-path=/usr/lib/sendmail -oem -oi -t в /usr/local/lib/pine.conf. (Это будет работать и для sendmail) Помните, однако, что pine небезопасен и ненадежен. 6.3. Как заставить MH работать с qmail? Ответ: поместите строчку postproc: /usr/mh/lib/spost в .mh_profile каждого пользователя. (Это будет работать и для sendmail) Помните, однако, что MH небезопасен и ненадежен. 6.4. Как прекратить зависания Sun dtcm? Ответ: в dtcm появилась новая программистская ошибка, известная как failure to close the output side of the pipe in the child". На момент написания Sun еще не исправил эту ошибку. 7. Управление почтовой системой. 7.1. Как остановить qmail-send? Раньше, когда мы имели sendmail, было очень нетривиально остановить sendmail без риска потерять почту, находящуюся в процессе доставки. Что я должен делать с qmail-send? Ответ: Просто возьмите и убейте процесс qmail-send. Он остановится правильно, дождавшись завершения текущих попыток доставки. Дождитесь появления в логах сообщения "exiting" ("завершение"). Для перезапуска qmail запустите /var/qmail/rc также, как он запускается из стартовых скриптов Вашей системы с правильными PATH, лимитами ресурсов и т.п. Вариант: Если qmail под контролем supervise, выполните svc -t /var/run/qmail. Процесс supervise убьет qmail, дождется его остановки и перезапустит его. Используйте -d вместо -t, если Вы не хотите, чтобы qmail перезапустился автоматически. 7.2. Как вручную управлять очередью сообщений? Мне бы хотелось, чтобы qmail попытался доставить все сообщения для удаленных получателей прямо сейчас Ответ: Пошлите qmail-send сигнал ALRM (или выполните svc -a /var/run/qmail, если qmail под управлением supervise) Возможно, вам имеет смысл запустить перед этим qmail-tcpok, чтобы убедиться, что qmail-remote попробует связаться со всеми получателями. Обычно, если несколько раз происходит сбой передачи какого-либо сообщения, qmail-remote откладывает его доставку на час. 7.3. Как "омолодить" сообщение? Кто-то снова сломал компьютер Эрика, он будет выключен еще как минимум два дня. Я знаю, что Эрик ожидает получения важного сообщения, а я уже вижу его в очереди в /var/qmail/queue/mess/15/26902 Оно здесь уже шесть дней, как мне убедиться, что завтра оно не будет отослано обратно? Ответ: Просто выполните touch /var/qmail/queue/info/15/26902 (Это единственный безопасный способ модификации очереди при запущенном qmail'е) 7.4. Как организовать большую сеть? У меня много машин, и я не знаю, с чего начать. Ответ: Сначала выберите имя домена, в котором Ваши пользователи будут получать почту. Обычно это кратчайшее имя из доступных Вашему контролю. Если Вы управляете именами *.movie.edu, то сможете использовать адреса вроде joe@movie.edu. Затем выберите компьютер, который будет знать, как поступать с почтой для пользователей в movie.edu. Задайте для него имя в DNS: mailhost.movie.edu. IN A 1.2.3.4 4.3.2.1.in-addr.arpa. IN PTR mailhost.movie.edu. (1.2.3.4 - IP адрес для данной машины) Далее создайте список машин, где должны быть расположены почтовые ящики пользователей. Например, если почта для Боба должна доставляться на его рабочую машину, внесите эту машину в список. Каждой из таких машин присвойте имя в DNS: bobhost.movie.edu. IN A 1.2.3.7 7.3.2.1.in-addr.arpa IN PTR bobhost.movie.edu. После этого установите qmail на bobhost.movie.edu. При установке по умолчанию qmail автоматически будет сконфигурирован для приема сообщений для bob@bobhost.movie.edu и доставки их в ~bob/Mailbox. Проделайте это для всех машин из списка. Установите qmail на mailhost.movie.edu. Добавьте movie.edu:alias-movie в control/virtualdomains на mailhost. Затем установите пересылку bob@movie.edu на bob@bobhost.movie.edu, поместив в ~alias/.qmail-movie-bob (на mailhost) bob@bobhost.movie.edu Проделайте аналогичную операцию для других пользователей. Затем добавьте movie.edu в control/rcpthosts на mailhost.movie.edu, теперь qmail будет принимать почту для пользователей домена movie.edu. Установите в DNS запись MX для доставки сообщений для movie.edu на mailhost: movie.edu. IN MX 10 mailhost.movie.edu. И наконец, поместите movie.edu в control/defaulthost на всех Ваших машинах. 7.5. Как сделать резервную копию и затем восстановить диск с очередью сообщений? Ответ: Вы не можете сделать этого. Первая трудность заключается в том, что во время работы qmail-send вы не можете получить целостной, непротиворечивой копии очереди, т.к. она постоянно изменяется. Другой проблемой является то, что имена файлов в очереди зависят от их номеров inode. Однако, значительно важнее то, что резервное копирование - даже дважды в день, - слишком ненадежно для почты. Если жесткие диски "умрут", то очень мало потерянных сообщений отыщутся в последней резервной копии. Существуют несколько способов увеличения надежности почтовых серверов. Источники бесперебойного питания дают Вам в случае необходимости время на штатную остановку сервера, предохраняя тем самым жесткие диски от поломки. Диски с устойчивым состоянием (solid-state disks) имеют встроенные аккумуляторы для таких ситуаций. RAID-системы позволяют Вам заменять "умершие" диски без потери данных. 7.6. Как запустить qmail под управлением supervise? svc выглядит полезным. Ответ: Установите daemontools (http://pobox.com/~djb/daemontools.html). Создайте каталог /var/run/qmail. Измените строчку /var/qmail/rc на supervise /var/run/qmail /var/qmail/rc в стартовых скриптах Вашей системы. Убедитесь, что supervise находится в каталогах, указанных в PATH. Теперь Вы можете использовать svc для управления qmail и svstat для проверки, запущен ли qmail. 7.7. Как отказаться от использования syslog? Он съедает много процессорного времени и ненадежен. Ответ: Установите daemontools (http://pobox.com/~djb/daemontools.html). Создайте каталог /var/log/qmail, принадлежащий qmaill, c режимом доступа 2700. Измените способ запуска qmail в /var/qmail/rc на qmail-start ./Mailbox /usr/local/bin/accustamp \ | setuser qmaill /usr/local/bin/cyclog /var/log/qmail & Если Вы ведете лог соединений tcpserver'а, создайте отдельный каталог /var/log/smtpd и запускайте /var/log/smtpd для tcpserver. Вам не следует запускать несколько копий cyclog в одном каталоге. По умолчанию cyclog сохраняет 10 автоматически заменяемых (rotated) лог-файлов максимум по 100Kb каждый. Для сохранения 20 файлов по 1Mb запускайте cyclog -s 1000000 -n 20. 8. Разное. 8.1. Как увеличить количество одновременно отправляемых сообщений? По умолчанию он запускает не более 20 одновременных qmail-remote. Ответ: Подумайте, сколько одновременных доставок вам требуется. Поместите это число в control/concurrencyremote. Перезапустите qmail как в вопросе 7.1. Если Ваша система имеет ограничение на используемые процессами ресурсы, убедитесь, что максимально допустимое количество дескрипторов по крайней мере равно удвоенному кол-ву одновременных доставок плюс 5. В противном случае Ваша почта будет без необходимости откладываться в моменты, когда почтовая система будет нагружена. Помните, что у qmail существует ограничение времени компиляции на кол-во одновременных доставок (120 по умолчанию, устанавливается в conf-spawn). 8.2. Как сохранять копии всех входящих и исходящих сообщений? Ответ: Установите в extra.h QUEUE_EXTRA равным "Tlog\0" и QUEUE_EXTRALEN равным 5. Перекомпилируйте qmail. Поместите в ~alias/.qmail-log строку ../msg_log Вы можете использовать QUEUE_EXTRA, например, для сохранения идентификационных номеров MESSAGE-ID сообщений: поместите | awk '/^$/ { exit } /^[mM][eE][sS][sS][aA][gG][eE]-/ { print }' в ~alias/.qmail-log. 8.3. Как постепенно переключиться с sendmail на qmail? Я подумываю о переключении всей сети heaven.af.mil на qmail, но, для начала, мне хотелось бы дать пользователям шанс попробовать qmail без нарушения работы sendmail. Мы используем NFS. Ответ: Найдите хост в Вашей сети, скажем, pc.heaven.af.mil, на котором не запущен SMTP сервер. (Если адрес pc.heaven.af.mil уже использовался, то для него в DNS уже должен установлен MX, указывающий на Ваш почтовый сервер) Создайте в DNS новую запись MX, направляющую почту для lists.heaven.af.mil на pc.heaven.af.mil. Установите qmail на pc.heaven.af.mil. Замените в конфигурационных файлах qmail'а pc на lists. Убедитесь, что документация для qmail и его man pages доступны на всех Ваших машинах. Теперь скажите Вашим пользователям о qmail. Пользователь может перенаправлять почту для joe@heaven.af.mil на joe@lists.heaven.af.mil для доставки в ~/Mailbox; он может устанавливать файлы .qmail; он может открывать свои списки рассылки на @lists.heaven.af.mil Когда Вы будете готовы отказаться от sendmail, вы можете установить pc.heaven.af.mil как новый почтовый сервер. Добавьте heaven.af.mil в control/locals и измените MX для heaven.af.mil на pc.heaven.af.mil. е забудьте оставить lists.heaven.af.mil в control/locals, чтобы временные адреса продолжали работать.
Исходная версия перевода Qmail FAQ сделана by
Alex Morozov, e-mail: alex@idisys.iae.nsk.su.
FAQ от автора сайта (Alexey Abramov)
1. Использование формата Maildir 2. Немедленная отправка всех сообщений из очереди 3. Конфигурирование MUA для работы с $HOME/Mailbox непосредственно 4. Проблема задержки с отправкой сообщений 5. Искусственные ограничения в системе qmail 6. Безопасное редактирование файла .qmail 7. Кода ошибок qmail-queue 8. Тайм-ауты qmail-popup и qmail-pop3d 9. Ответ об удачной доставке сообщения определенным адресатам 10. Поддержка формата Maildir IMAP-сервером. 11. Конфигурирование Xinetd. 12. Qmail и GMT/UTC формат времени в сообщениях 13. Man-страницы Qmail 14. Отправка бинарного файла из командной строки 1. Использование формата Maildir Создать директорию Maildir: # maildirmake $HOME/Maildir В файл $HOME/.qmail добавить в начало: ./Maildir/ Установить переменные окружения для возможности перевода почты в формат mbox: MAILDIR=$HOME/Maildir MAILTMP=$HOME/Mailtmp MAIL=$HOME/Mailbox export MAIL MAILDIR MAILTMP MAIL - Ваш mbox файл, MAILDIR - имя Вашего Maildir-каталога, MAILTMP - временный файл для команды maildir2mbox. Для просмотра каталога Maildir на наличие новых почтовых сообщений: # maildirwatch Для преобразования в формат mbox: # maildir2mbox 2. Немедленная отправка всех сообщений из очереди # kill -ALRM pid pid - идентификатор процесса qmail-send. 3. Конфигурирование MUA для работы с $HOME/Mailbox непосредственно (чтобы долго не думали) 3.1 Большинство MUA руководствуются переменными окружения, поэтому поместите переменную окружения в системный профайл и shell-rc файл: MAIL=$HOME/Mailbox 3.2 elm Замените mailbox на Mailbox в районе 388 строки файла newmbox.c и перекомпилируйте elm (elm воспринимает перменные окружения, но не справляется, если почту пытаются читать несколько пользователей одновременно). 3.3 pine Поместите в системный файл pine.conf (а также см. djb FAQ): inbox-path=Mailbox 3.4 qpopper 2.2 Замените в файле pop_dropcopy.c /.mail на /Mailbox и перекомпилируйте qpopper с опцией -DHOMEDIRMAIL в CFLAGS. 4. Проблема задержки с отправкой сообщений. Если Вы видите, что интервал, в течение которого сообщения обрабатываются в очереди слишком велик (например, процесс локальной доставки сообщения от локального отправителя занимает 10 и более минут), а по истечении этого интервала qmail пытается отправить сразу кучу скопившихся там сообщений, это, скорее всего, означает установку неверных прав доступа к файлу $QMAILHOME/queue/lock/trigger. Права должны быть такими: prw--w--w- 1 qmails qmail 0 Apr 14 15:02 trigger Замените в соответствие с этим права доступа и интервал исчезнет. Проблема в том, что программу qmail-send нужно ставить в известность о появлении в очереди новых сообщений, чтобы она активизировала процесс их отправки. Для подобного общения используется упомянутый выше файл. Причем права на запись в него должны иметь другие программы системы qmail. Если таких прав нет, qmail-send ничего не узнает о новых сообщениях в очереди и активизирует процесс их отправки через промежутки времени, соответствующие некому достаточно значительному тайм-ауту. По идее, проверку правильности установки прав доступа можно выполнить командой из каталога с исходными файлами qmail: # make check которая осуществит такую проверку и выдаст информацию об ошибках. 5. Искусственные ограничения в системе qmail Система qmail в состоянии управлять сообщениями, адресами, списками рассылки любого размера, ограниченными лишь возможностями памяти и дискового пространства компьютера. Тем не менее qmail налагает некоторые искусственные ограничения времени компиляции, а именно: - qmail-lspawn и qmail-rspawn имеют лимиты одновременно доставляемых сообщений, равные 120; изменить эти значения можно, отредактировав до компиляции файл conf-spawn - qmail-queue отвергает любые сообщения с адресами, содержащими более 1000 знаков - qmail-lspawn усекает любой слишком длинный ошибочный код от программы доставки; она добавляет об этом соответствующее заметку 6. Безопасное редактирование файла .qmail Так как сообщения могут приходить в любой момент, резонно редактировать Ваш файл .qmail в безопасном режиме. Для этого до редактирования установите sticky-бит для Вашего домашнего каталога: # chmod +t $HOME qmail-local будет тогда временно откладывать доставку любых сообщений. Не забудьте снять sticky-бит после окончания редактирования файла .qmail! # chmod -t $HOME Для тестирования Вашего нового файла .qmail можно пользоваться следующей командой: # qmail-local -n $USER ~ $USER '' '' '' '' ./Mailbox 7. Кода ошибок qmail-queue Программа qmail-queue, которая осуществляет постановку в очередь сообщений для последующей отправки, возвращает 0 при удачной постановке сообщения в очередь. Кода завершения от 11 до 40 указывают на наличие постоянных ошибок: 11 Адрес слишком длинный. 31 Почтовый сервер постоянно отказывается посылать сообщение любым адресатам. Все другие кода завершения указывают на наличие временных ошибок: 51 Нет свободной памяти. 52 Тайм-аут. 53 Ошибка записи, т.е. переполнение диска. 54 Невозможно прочитать сообщение или конверт. 55 Невозможно прочитать конфигурационный файл. 56 Проблема установки связи с данным хостом. 61 Проблема с домашним каталогом qmail. 62 Проблема с каталогом очереди сообщений. 63 Проблема с queue/pid. 64 Проблема с queue/mess. 65 Проблема с queue/intd. 66 Проблема с queue/todo. 71 Почтовый сервер временно отказывается посылать сообщения любым адресатам. 72 Тайм-аут контакта с почтовым сервером. 73 Прерывание контакта с почтовым сервером. 74 Контакт с почтовым сервером выполнен успешно, но связь не устанавливается. 81 Внутренняя ошибка. 91 Ошибка формата конверта. 8. Тайм-ауты qmail-popup и qmail-pop3d Программы qmail-popup и qmail-pop3d имеют тайм-ауты ожидания, равные 20 минутам. Изменить эти значения можно до компиляции пакета qmail. 9. Ответ об удачной доставке сообщения определенным адресатам Существует возможность посылать уведомление отправителю об успешной доставке сообщения конкретному адресату. Для этого необходимо в файле .qmail написать следующее (например, если Вы хотите посылать уведомления по адресу отправителя при получении сообщения, содержащего в поле Notice-Requested-Upon-Delivery-To заголовка famous@sun.com): ./Mailbox |qreceipt famous@sun.com 10. Поддержка формата Maildir IMAP-сервером. Традиционный популярный UW-IMAP сервер не имеет поддержки формата Maildir. Существует несколько альтернативных вариантов борьбы с данным "недоразумением". Один из способов предлагается следующий: перекомпилировать IMAP, снадбив исходники необходимыми патчами для работы с почтой в формате Maildir. Причем авторы предложили несколько заплаток, решая проблемы с новыми папками для почты, создаваемыми пользователями (создаются при необходимости в формате Maildir), а также ошибками взаимного преобразования форматов mbox и Maildir. Второй способ более продвинутый: IMAP-Maildir сервер Courier. Поддерживает SSL, авторизацию через MySQL, создание виртуальных почтовых ящиков, имеет встроенный POP3 сервер с аналогичными возможностями. 11. Конфигурирование Xinetd Xinetd, кто не сталкивался, альтернатива inetd, только с добавленными функциями контроля доступа и ведения логов. Вот примеры конфигурирования Xinetd для прослушивания портов 25 и 110 (стандарт для smtp и pop3), предполагаем, что tcpserver не используется, в качестве pop3 сервера используется qmail-pop3d: % more /etc/xinetd.d/smtp service smtp { socket_type = stream protocol = tcp wait = no user = qmaild server = /var/qmail/bin/tcp-env server_args = -R /var/qmail/bin/qmail-smtpd log_on_success = HOST log_on_failure = HOST RECORD } % more /etc/xinetd.d/pop3 service pop3 { socket_type = stream protocol = tcp wait = no user = root server = /var/qmail/bin/qmail-popup server_args = SERVERNAME /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir } После указанных манипуляций дайте возможность xinetd перечитать конфигурационный файлы: % kill -USR2 xinetd_PID Для использования tcp-wrappers с qmail файл /etc/xinetd.d/smtp должен выглядеть так: service smtp { flags = REUSE NAMEINARGS socket_type = stream wait = no user = qmaild server = /usr/sbin/tcpd server_args = /var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd log_on_failure += HOST ATTEMPT log_on_success += PID HOST EXIT DURATION } 12.Qmail и GMT/UTC формат времени в сообщениях John Saunders предложил патч к date822fmt.c, позволяющий решить проблему с указанием времени отправления сообщений в формате GMT/UTC. Для использрвания данного патча нужно скопировать его в каталог исходников qmail и выполнить: % patch -s -p1 < qmail-date-localtime.patch.gz 13. Man-страницы Qmail После установки qmail страницы руководства (man pages) помещаются по умолчанию в каталог $QMAILHOME/man (/var/qmail/man). Для их просмотра с использованием стандартной команды man необходимо дополнить переменную окружения MANPATH путями к ним. Для разных shells это делается по-разному, например, для bash - export MANPATH=$MANPATH:/var/qmail/man sh - MANPATH=$MANPATH:/var/qmail/man; export MANPATH 14. Отправка бинарного файла из командной строки Непосредственного отношения к основной теме FAQ это не имеет, однако может оказаться весьма полезным... Иногда, особенно в разного рода скриптах, возникает необходимость отправки по почте бинарного файла. Как это сделать напрямую, используя команды UNIX? Очень просто: % uuencode [binary_file] [binary_file] | datemail mail@address.com Команда uuencode производит конвертирование бинарного файла в специальный код, который воспринимается почтовыми программами (типа mail) и отправляется посредством представленной выше команды в качестве почтового сообщения.