Аннотация |
Я просто записываю весь свой опыт по установке Qmail и предлагаю его прочесть тем, кто в нем нуждается. Версия 1.4 |
Спасибо всем, кто помогал мне, а именно Tony Nugent (tony@trishul.sci.gu.edu.au), David Summers (david@summersoft.fay.ar.us) и авторам S.u.S.E (дистрибутив Linux).
Что такое qmail, и почему я должен его использовать? Об этом расскажет сам автор (Dan Bernstein):
qmail - это безопасная, надежная, эффективная и простая программа пересылки почты. Она заменяет обычные программы работы с почтой, (sendmail, binmail и т.д.) применяемые в UNIX.
Безопасность: безопасность - это не цель, а требование. Доставка почты очень важна для пользователей. Ее нельзя просто прервать, поэтому она должна быть безопасной. (Я начал разработку qmail потому, что мне не нравятся проблемы с безопасностью в sendmail и других программах пересылки почты)
Надежность: qmail гарантирует, что, единожды попав в систему, письмо никогда не будет утеряно. qmail поддерживает maildir, новый, очень надежный стандарт для почтовых ящиков. Maildir, в отличии от файлов mbox и папок mh, не будут повреждены, если произойдет сбой системы во время принятия почты. Получается даже лучше, не только пользователь может проверить почту через NFS, но и любое количество клиентов могут отправить ему почту одновременно.
Эффективность: мы проверили быстродействие этой программы на Pentium под BSD/OS, и оказалось, что qmail может легко принимать и отсылать 200000 отдельных сообщений в день! Обычные программы ограничены скоростью DNS и SMTP, qmail по умолчанию поддерживает 20 одновременных посланий и быстро работает со списками рассылки. (Я начал разработку qmail, потому что у меня огромный список рассылки.)
Простота: qmail намного меньше, чем любая программа рассылки писем в Internet. Теперь несколько причин почему: (1) Другие программы поддерживают пересылку почты, псевдонимы и списки рассылки раздельно. qmail имеет один простой механизм пересылки, который позволяет пользователю иметь свой список рассылки. (2) Другие программы имеют несколько режимов рассылки, от быстрого+небезопасного до медленного+очередного. Команда qmail-send автоматически запускается при появлении письма в очереди, поэтому qmail имеет один режим рассылки: быстрый+очередной. (3) Другие программы содержат специализированную версию inetd, которая контролирует загруженность линий. qmail контролирует это по-своему, и поэтому она будет нормально работать из-под обычного inetd.
Замена программе sendmail: qmail поддерживает маскарадинг машин и пользователей, полное скрытие машины, виртуальные домены, null-клиенты, преобразование списков получателей, пересылку почты, обработку зацикленных писем, произвольные списки адресов по RFC 822, определение зацикленности сообщений списков рассылки, повторные попытки передать почту на отключенную машину, независимые интервалы попыток передачи сообщений, и т.д. В общем, она является самой быстродействующей из всех современных почтовых программ. В qmail также встроена эмуляция "sendmail", которая может быть использована вашими приложениями.
Следуйте в точности всем инструкциям INSTALL.
Замечания:
Прочтите полностью всю документацию. Цифры означают шаги при установке.
2 - Я устанавливал пользователей и их группы, как описано в INSTALL.ids
7 - ./qmail-makectl не работало на моей машине. Я добавил имя моего домена сам (mickey.n.eunet.de) в /var/qmail/control/me
23 - удостоверьтесь в том, что вы написали именно qmail-smtpd в файле inetd-conf. (Я написал qmail-smptd и искал ошибку два дня :( )
Dan Bernstein создал программу для отправки почты провайдеру из очереди при установке коммутируемого соединения. Этот файл (serialmailxxx) можно скачать с его странички.
Установите эту программу, как описано в руководстве (спасибо за создание руководства Rupert Mazzucco (maz@pap.univie.ac.at), она работает без всяких настроек!
maildir2smtp - blast a maildir across SMTP maildir2smtp позволяет посылать сообщения через SLIP- или PPP-соединение. Для того, чтобы это сделать, создайте новый maildir как указано далее на примере пользователя alias: # maildirmake ~alias/pppdir # chown -R alias ~alias/pppdir поместите :alias-ppp в control/virtualdomains и ./pppdir/ в ~alias/.qmail-ppp-default. Не забудьте о дополнительном знаке "/" в pppdir/. Затем в скрипте установки PPP напишите maildir2smtp ~alias/pppdir alias-ppp- $IP `hostname` заменив $IP адресом провайдера. |
Замечание:
Пожалуйста, полностью прочтите руководство.
Maildir2smtp требует. чтобы у вашего почтового сервера IP адрес был указан через точки. Если вы его не знаете, то можете узнать при помощи команды ping ВашеИмя@домен.страна.
Эта команда может быть включена в ваш скрипт для входа в систему, после этого при соединении с провайдером ваша почта будет отправляться автоматически.
В добавлении могу сказать, что я заменил /mh-6.8.4/mts/sendmail/smail.c программой mh-qmail-smail.c (написанной Dan Bernstein)
Файл mh-6.8.4/conf/MH выглядит следующим образом:
bin /usr/bin/mh etc /usr/lib/mh #mail #mandir /usr/man #manuals standard chown /bin/chown #cp cp #ln ln #remove mv -f cc gcc ccoptions -traditional -O2 -m486 -D_NFILE='getdtablesize()' -DSIGEMT=SIGUSR1 curses -lncurses #ldoptions -s #ldoptlibs lex flex #oldload off #ranlib on mts sendmail #mf off #bboards off #bbdelivery off #bbhome /usr/spool/bboards pop on popdir /usr/lib/mh sharedlib sys5 slflags -fPIC slibdir /usr/lib mailgroup mail signal void sprintf int #editor prompter #debug off #regtest off options ATHENA options BIND options DPOP options DUMB options FCNTL options MHE options MHRC options MIME options MORE='"/usr/bin/less"' options OVERHEAD options POP2 options POPSERVICE='"pop3"' options RENAME options RPATHS options RPOP options SOCKETS options SVR4 options SYS5 options SYS5DIR options TERMINFO options UNISTD options VSPRINTF |
Замечания:
Dominic Mitchell (hdm@demon.net) написал в comp.mail.mh (13 июня 1997): "Я скомпилировал только ``mts sendmail'' - прочел я в конференции comp.mail.mh по теме проблем с /smtp. "Не совсем так. С этой опцией МН работает с SMTP, как прямое соединение, а не сетевое. Вам надо добавить строку ~/.mh_profile в: postproc: /usr/local/nmh/lib/spost Это отправит сообщение через sendmail. А так как вы используете qmail, sendmail будет работать как оболочка.'' Спасибо Dominic.
Я закомментировал запуск "mail", потому что хочу управлять почтой при помощи mtstailor
qmail доставляет почту в домашний каталог (~/Mailbox). Я добавил следующее в mtstailor
localname: mickey localdomain: n.eunet.de mmdfldir: mmdflfil: Mailbox uucpldir: uucplfil: mmdelim1: \001\001\001\001\n mmdelim2: \001\001\001\001\n mmailid: 0 umincproc: lockldir: sendmail: /usr/lib/sendmail |
Замечания:
sendmail: /usr/lib/sendmail - это ссылка на оболочку qmail в /var/qmail/bin
MH не всегда понимает тильду (~/). Вместо этого вы можете использовать /home, или вообще ничего (согласно документации это по умолчанию равно $HOME).
Я установил MH и qmail на работе, где моя машина подключена к сети. При этом я добавил строчку в mtstailor: servers: почтовыйсервер.компания.страна
Ниже приведен мой .mh_profile
Path: Mail draft-folder: drafts unseen-sequence: unseen AliasFile: /home/rdn/.mh_aliases send: -msgid comp: -form /home/rdn/.mymh-components MailDrop: /home/rdn/Mailbox |
Замечания:
Я добавил строку MailDrop для надежности.
Я решил использовать fetchmail потому, что почтой пользуется и моя семья. Linux и fetchmail доставляют почту на порт smtp, где qmail вступает в работу.
При установке не возникло никаких проблем, посылка писем в многопользовательский ящик пользователям работает с .fetchmailrc :
poll PersonalMail.Germany.EU.net protocol pop3 username myname password mypassword # следующие две строки делают возможным посылку в многопользовательский ящик localdomains mydomain.de is * here # В FAQ fetchmail говорится, что qmail требует forcecr |
Это моя любимая почтовая программа.
Тут есть одна загвоздка - большинство программ TCL/TK имеют установки безопасности. Это решается при помощи скрипта .xserverrc.secure, который поставляется вместе с SuSE.
#!/bin/sh # # поместите этот файл в ~/.xserverrc, если вы не хотите давать доступ # к вашему X-серверу # if [ -x /usr/bin/keygen ]; then if [ ! -x /usr/bin/hostname -a ! -x /bin/hostname \ -a ! -x /usr/bsd/hostname ]; then echo "startx: can't get my hostname - exiting" exit 1 else host=`hostname` fi xauth add $host:0 . `/usr/bin/keygen` sleep 2 xauth add $host/"unix":0 . `/usr/bin/keygen` exec X :0 -auth .Xauthority $* else exec X :0 $* fi |
В FAQ qmail говорится что надо добавить
в ~/.qmail строку:
| preline procmail |
В версии 3.11pre7 изменилась переменная почтового ящика по умолчанию. Раньше она находилась в config.h. Теперь она в src/authenticate.c:
#define MAILSPOOLHOME "/Mailbox" /* обратите внимание на слэши / */ /* delivers to $HOME/Mailbox */ |
Я нашел очень много полезных советов по содержимому файла .procmailrc в comp.mail.mh и comp.mail.misc some . Спасибо всем!
# Пример .PROCMAILRC # Написан Catherine Hampton <ariel@best.com> # Версия 1.1 # Последнее обновление 1/25/98 # # Released to the Public Domain. # # # SET VARIABLES # Внутренние переменные # нижеследующее было изменено rdn 19980303 # Все говорят, что нужна среда SHELL SHELL=/bin/sh #Shell используется для запуска procmail. Удостоверьтесь, что эта #ссылка на ваш sh. LINEBUF=4096 #Задано для того, чтобы Procmail не "съедал" #длинные заголовки писем PATH=$HOME/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/mh:/usr/lib/mh: #Пути к вашим программам - лучше их не трогать VERBOSE=off #Смените это на "on" при испытаниях нового метода, #чтобы Procmail отмечал каждый свой шаг в журнале #НЕ ОСТАВЛЯЙТЕ ЭТО ВКЛЮЧЕННЫМ, иначе журналы могут #переполниться. # Стандартное расположение файлов и программ MAILDIR=$HOME/Mail #Вам лучше проверить, существует ли этот каталог DEFAULT=$HOME/Mailbox #Стандартный ящик входящей почты. Впишите сюда #верное для вашей системы значение LOGFILE=$MAILDIR/procmail.log #Расположение журналов. Рекомендуется его задать, иначе #все ошибки будут посылаться вам по почте FORMAIL=/usr/bin/formail #Это удобно для систем автоответа. SENDMAIL=/usr/sbin/sendmail #Это также удобно для систем автоответа. Измените это #значение в соответствии с вашей системой |
В Procmail имеется прекрасная документация. Прочтите руководство и установите файл .procmailrc.
Я написал эту главу потому, что ваш ящик не будет работать без PPP-линии к провайдеру. Мне пришлось немного помучаться перед тем, как ISDN начал работать. Дистрибутив SuSE включает себя настройки ISDN, но я бы хотел, чтобы все было еще проще. Все, что здесь написано, было взято из скриптов Bernhard Hailer. (Огромное спасибо)
Файл rc.config загружает необходимые модули во время установки:
#!/bin/bash # Это адаптированный скрипт, написанный Bernhard Hailer LOCAL_NUMBER="91311234" # ваш телефон 091311234 REMOTE_NUMBER="0911123456" # телефон провайдера LOCAL_IP="192.168.0.99" # у меня динамический IP REMOTE_IP="195.112.123.11" # адрес шлюза провайдера DEVICE="ippp0" SYSPATH="/sbin" ISDNCTRL="$SYSPATH/isdnctrl" case "$1" in start) # активирует isdn insmod /lib/modules/2.0.33/net/slhc.o insmod /lib/modules/2.0.33/misc/isdn.o sleep 1 # загружает модуль hisax insmod /lib/modules/2.0.33/misc/hisax.o id=Tel0 type=5 protocol=2 irq=10 io=0x300 echo "Запуск isdn4linux" # global $ISDNCTRL verbose 0 $ISDNCTRL addif $DEVICE # создает новый интерфейс $ISDNCTRL addphone $DEVICE in $REMOTE_NUMBER $ISDNCTRL addphone $DEVICE out $REMOTE_NUMBER $ISDNCTRL eaz $DEVICE $LOCAL_NUMBER $ISDNCTRL l2_prot $DEVICE hdlc $ISDNCTRL l3_prot $DEVICE trans $ISDNCTRL encap $DEVICE syncppp $ISDNCTRL huptimeout $DEVICE 300 $ISDNCTRL chargehup $DEVICE off $ISDNCTRL secure $DEVICE on $SYSPATH/ifconfig $DEVICE $LOCAL_IP pointopoint $REMOTE_IP metric 1 $SYSPATH/route add default $DEVICE $SYSPATH/ipppd /dev/ippp0 file /etc/ppp/options.ipppd & $SYSPATH/route del default ;; stop) #деактивирует isdn rmmod hisax.o sleep 1 rmmod isdn.o rmmod slhc.o echo "Отключение isdn4linux" $ISDNCTRL delif ippp0 ;; *) echo "Использование: $0 (start|stop)" exit 1 ;; esac |
Я использую следующий скрипт для установки коммутируемого соединения isdn on|off
#!/bin/bash # Это основано на скрипте написанном Bernhard Hailer IP_ADDRESS="195.112.123.11" case "$1" in on) echo "Вызов ippp0" /sbin/isdnctrl dial ippp0 # команда sleep дает время на установление РPP-соединения echo "Пауза 8s для установки соединения PPP" sleep 8s /sbin/route add default ippp0 echo "линия открыта - проверка...." # проверка установления PPP-соединения: set `ping -qc3 -i1 $IP_ADDRESS 2>/dev/null | grep transmitted` if [ $4 -gt 0 ]; then echo "успешно." echo "Запуск демона fetchmail" /usr/bin/fetchmail -d 600 -k -v -a -L /var/log/fetchmail echo "Сбрасываем очередь почты...." /usr/local/bin/serialmail/maildir2smtp ~alias/pppdir alias-ppp- mail.server.ip.no `hostname` else echo "ошибка!" /sbin/isdnctrl hangup ippp0 fi ;; off) echo -n "Отключаем демона fetchmail" /usr/bin/fetchmail --quit /sbin/isdnctrl hangup ippp0 /sbin/route del default # удаление маршрута echo "Отключение прошло успешно" ;; *) echo -e "\aИспользование:" echo "isdn on" echo "isdn off" ;; esac |
# Основано на: # Klaus Franken, kfr@suse.de # Версия: 27.08.97 (5.1) # # Этот файл скопирован с /etc/ppp/ioptions.YaST # в options.<device> user "myuserid" # имя системы (только для CHAP!) # имя my_system_name # получение адреса IP # используйте с динамическим адресом IP ipcp-accept-local ipcp-accept-remote noipdefault # попытка взять адрес из интерфейса # опции для ipppd (as opposed to pppd) # используются при статическом IP #useifip # запретить сжатие заголовков -vj -vjccomp -ac -pc -bsdcomp # иногда вам будет нужен: #noccp # максимальный размер принимаемых данных mru 1524 # максимальный размер передаваемых данных mtu 1500 # Если эта машина - сервер, то вам надо убрать пометки на комментариях в следующих строчках # "+pap" / "+chap" NUR AKTIVIEREN, WENN DIES EIN SERVER IST!!! #+pap #+chap # если у вас проблемы с соединением (нет ответа на первый # lcp пакет), то попытайтесь уменьшить время повторного цикла. По умолчанию он равен 3 сек, # попробуйте его уменьшить до 2: # lcp-restart 2 |
Нужные пакеты находятся по следующим адресам:
The net is so dynamic that it is pretty pointless to give sources. but for what it's worth:
Qmail http://www.qmail.org/
MH http://www.ics.uci.edu/˜mh/
glimpse http://glimpse.cs.arizona.edu/
Fetchmail http://sagan.earthspace.net/˜esr/fetchmail
Exmh http://www.beedub.com/exmh
Procmail ftp.informatik.rwth-aachen.de/pub/packages/promail
Кто-нибудь смог "заставить" работать mh с Maildir? Я не пробовал этого по принципу - не надо трогать хорошо работающую систему. Если вам это удалось, то напишите мне об этом, и я включу этот материал в следующую версию документа.
Авторские права на русский перевод этого текста принадлежат ╘ 2000 ASPLinux Все права зарезервированы.
Этот документ является частью проекта Linux HOWTO.
Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.
Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.
Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: <linux-howto@metalab.unc.edu> или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу <linux-howto@asplinux.ru>