Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Мини-HOWTO: Установка qmail и MH

Версия 1.4, 5 Марта 1998

Я просто записываю весь свой опыт по установке Qmail и предлагаю его прочесть тем, кто в нем нуждается. Версия 1.4


1. Введение

Спасибо всем, кто помогал мне, а именно 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", которая может быть использована вашими приложениями.


2. Описание моей системы

Дистрибутив SuSE Linux 5.1 с ядром 2.0.33.

PPP связь с провайдером


3. Установка Qmail

Следуйте в точности всем инструкциям INSTALL.

Замечания:

Прочтите полностью всю документацию. Цифры означают шаги при установке.

  • 2 - Я устанавливал пользователей и их группы, как описано в INSTALL.ids

  • 7 - ./qmail-makectl не работало на моей машине. Я добавил имя моего домена сам (mickey.n.eunet.de) в /var/qmail/control/me

  • 23 - удостоверьтесь в том, что вы написали именно qmail-smtpd в файле inetd-conf. (Я написал qmail-smptd и искал ошибку два дня :( )


3.1. Maildir2smtp

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 ВашеИмя@домен.страна.

  • Эта команда может быть включена в ваш скрипт для входа в систему, после этого при соединении с провайдером ваша почта будет отправляться автоматически.


4. Установка MH

В добавлении могу сказать, что я заменил /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


4.1. 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: почтовыйсервер.компания.страна


4.2. mh_profile

Ниже приведен мой .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 для надежности.


5. Fetchmail

Я решил использовать 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 

6. Exmh

Это моя любимая почтовая программа.

Тут есть одна загвоздка - большинство программ 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 

7. Procmail

В 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.


8. ISDN

Я написал эту главу потому, что ваш ящик не будет работать без 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 
Теперь займемся файлом опций /etc/ppp/options.ipppd
# Основано на:
# 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 

9. Ссылки

Нужные пакеты находятся по следующим адресам:

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


10. Ответственность

Вы используете все под свою ответственность, никаких возвратов денег и т.п.


11. Послесловие

Кто-нибудь смог "заставить" работать mh с Maildir? Я не пробовал этого по принципу - не надо трогать хорошо работающую систему. Если вам это удалось, то напишите мне об этом, и я включу этот материал в следующую версию документа.


12. Авторские права

Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу