ISP-MAIL-HOWTO. v1.2. (с) 2002 Вячеслав Калошин, multik@multik.ru Данный документ описывает установку и настройку почтовой системы на основе Postfix, Cyrus-SASL, MySQL, Courier-IMAP, SquirrelMail, DrWeb. В итоге должна получиться легко масштабируемая и управляемая система, которая без проблем как со стороны админа, так и со стороны железа спокойно будет тянуть по 5-10 тысяч почтовых пользователей. При этом нет разницы, сколько почтовых доменов заведено в системе, как называются пользователи и так далее. С системными они никак не коррелируют. Пользователи же получат стандартный набор сервисов: SMTP с аунтефикацией, pop и imap сервисы, доступ к почте через браузер. Плюс чистую от вирусов почту. Теперь оговорки. Данный текст написан в расчете на тех, кто уже понимает механизмы, происходящие внутри Linux. Если вы неделю как поставили Linux и желаете с помощью этого документа поставить свой hotmail.com, то я ни за что как обычно не отвечаю. Все логи и прочее были взяты с моей рабочей системы. Я ничего не выдумывал и не придумывал - это все работает реально. В качестве базовой системы использовался RedHat 7.2. Но аналогично построенные системы работают на RedHat 6.2 и ASPLinux 7.2. Поэтому не вижу причин, почему бы им не работать на других системах. Все программы и пакеты вы сможете найти в окрестностях freshmeat.net. Если вы желаете задать мне вопрос, задавайте по мылу, но прежде прочтите хотя бы PostfixFAQ на www.postfix.org - ответы на 90% вопросов, на которые я не отвечаю, есть там. Еще одно условие - сначала обдумайте и прочтите все сообщения системы в /var/log/messages и /var/log/maillog - обычно там есть исчерпывающая информация, почему не работает что-либо. Работать переводчиком (обьяснение и разжевывание каждой строчки лога с обьяснением, почему это так случилось) я готов за $50/строчка. Для нормальных ;-): Просто мне ОЧЕНЬ надоели письма вида "А чего оно не работает, когда я сделал все так, как ты написал?". Итак, еще немного лирики: Почему я выбрал postfix? Ведь есть стандарт-де-факто sendmail. Есть еще exim, qmail и куча других почтовых серверов. Ну sendmail я вынужден сразу cкинуть со счетов. То, что описывается ниже, sendmail неспособен выполнить. Или способен, но с очень большими усилиями администратора системы. На творения djb я почему-то не могу смотреть органически. Ну а exim я просто не видел. Courier-IMAP выбран по другой причине. Где-то с полгода назад он оказался единственным IMAP сервером, который смог собраться на моей машине и работать под нагрузкой, не требуя к себе внимания. DrWEB. Ну просто хороший антивирус. Нет такой толпы глюков, на которые я почему-то переодически напарывюсь, когда гляжу на AVP. Тем более, он даже с триальной лицензией спокойно выполняет работу почтового фильтра. Да, с купленной лицензией будет гораздо спокойнее - вирусы даже в архивах не пройдут. Но - если нет лицензии, то - нет. SquirrelMail - это просто единственная система Web-based почты, которая не вызывает брезгливой реакции при первом и последующих взглядах. Плюс она приемлимо работает с русским языком. Итак, начнем. Для начала установите MySQL, если он не установлен. Авторы MySQL рекомендуют собирать MySQL определенным способом (компилятор определенной версии и так далее) и предупреждают, что самособранные и дистрибутивные MySQL могут и не работать так, как задумывалось. Я в этом им почему-то верю (были преценденты) и поэтому теперь забираю MySQL уже собранный с mysql.com. # rpm -i MySQL* Preparing db table Preparing host table Preparing user table Preparing func table Preparing tables_priv table Preparing columns_priv table Installing all prepared tables 020628 14:29:10 /usr/sbin/mysqld: Shutdown Complete PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! This is done with: /usr/bin/mysqladmin -u root -p password 'new-password' /usr/bin/mysqladmin -u root -h multik.ip-tel.int -p password 'new-password' See the manual for more instructions. Please report any problems with the /usr/bin/mysqlbug script! The latest information about MySQL is available on the web at http://www.mysql.com Support MySQL by buying support/licenses at https://order.mysql.com Starting mysqld daemon with databases from /var/lib/mysql Вот MySQL и установлен. Не будем подвергать других искушению и сменим пароль администратора MySQL (к системному root не имеет никакого отношения!) # /usr/bin/mysqladmin -u root -p password 'password' mysqladmin спросит пароль - в первый раз он пустой - просто нажмите Enter. Теперь устанавливаем SASL. К сожалению, установить его из RPM не получится. Все, что я видел до этого, собрано либо не так, либо не туда. В общем, неработоспособное. Но вы можете попытать удачу. # tar zxvf cyrus-sasl-1.5.27.tar.gz # cd cyrus-sasl-1.5.27 Заберите патч для поддержки MySQL и LDAP отсюда: http://www.surf.org.uk/downloads/sasl-1.5.27-ldap-ssl-filter-mysql-patch4.tgz Рапакуйте полученный архив и положите sasl-ldap+mysql.patch в корень дерева исходников SASL. Затем выполните следующие команды: # patch -b -p1 < sasl-ldap+mysql.patch # autoheader # autoconf # automake -i Все, патч установлен. Давайте сконфигурируем SASL: # ./configure --with-mysql=/usr/include/mysql --enable-login Соберем и установим его: # make # make install # ln -s /usr/local/lib/sasl /usr/lib/sasl # echo /usr/lib/sasl >> /etc/ld.so.conf # ldconfig # cd .. Устанавливаем методы аунтефикации. # cat > /usr/local/lib/sasl/smtpd.conf pwcheck_method: mysql mysql_user: postfix mysql_passwd: postfix mysql_host: localhost mysql_database: mail mysql_table: aliases mysql_uidcol: alias mysql_pwdcol: password ^D А это для других почтовых демонов. # ln -s /usr/local/lib/sasl/smtpd.conf /usr/local/lib/sasl/imapd.conf # ln -s /usr/local/lib/sasl/smtpd.conf /usr/local/lib/sasl/pop3d.conf Теперь пришла очередь postfix. Здесь ситуация та же. В принципе по сети бродит много rpm, которые содержат в себе откомпилированный postfix с поддержкой MySQL. Я предпочитаю собрать его сам и быть чуть-чуть увереннным в том, что я знаю, что собрал. # tar zxvf postfix-1.1.11.tar.gz # cd postfix-1.1.11 Следующие строчки - это одна команда. Ее следует вводить в один прием. # make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -DUSE_SASL_AUTH -I/usr/include/mysql -I/usr/local/include -L /usr/local/lib -lsasl -lmysqlclient' Собираем и устанавливаем: # make # adduser postfix # groupadd postdrop # make install Вот ответы, которые я дал в ответ инсталлятору: install_root: [/] tempdir: [/usr/src/post/postfix-1.1.11] /tmp config_directory: [/etc/postfix] daemon_directory: [/usr/libexec/postfix] command_directory: [/usr/sbin] queue_directory: [/var/spool/postfix] sendmail_path: [/usr/sbin/sendmail] newaliases_path: [/usr/bin/newaliases] mailq_path: [/usr/bin/mailq] mail_owner: [postfix] setgid_group: [postdrop] manpage_directory: [/usr/local/man] sample_directory: [/etc/postfix] readme_directory: [no] Ура. Postfix встал. Теперь наша задача его отконфигурировать. # cd /etc/postfix/ # mcedit main.cf ( Вместо mcedit может быть vi, emacs или любой другой предпочитаемый вами текстовый редактор - это некритично ;-) ) Редактируем главный файл конфигурации postfix, обращая внимание на следующие строчки: broken_sasl_auth_clients = yes smtpd_sasl_auth_enable = yes transport_maps = mysql:/etc/postfix/transport.cf virtual_mailbox_base = / virtual_uid_maps = mysql:/etc/postfix/ids.cf virtual_gid_maps = mysql:/etc/postfix/gids.cf virtual_mailbox_maps = mysql:/etc/postfix/aliases.cf virtual_maps = mysql:/etc/postfix/remote_aliases.cf relay_domains = $transport_maps smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,check_relay_domains disable_vrfy_command = yes Что они означают и каково их действие, вы можете прочитать в документации по postfix или в FAQ. Теперь разбираемся, где и что у нас лежит. # cat > transport.cf user = postfix password = postfix dbname = mail table = transport select_field = transport where_field = domain hosts = localhost ^D # cat > ids.cf user = postfix password = postfix dbname = mail table = aliases select_field = id where_field = alias hosts = localhost ^D # cat > gids.cf user = postfix password = postfix dbname = mail table = aliases select_field = gid where_field = alias hosts = localhost ^D Обратите внимание на отсутствие лишних пробелов и других невидимых знаков в концах строчек - это важно!. Как наверное, стало понятно из вышеприведенных файлов, я указал postfix искать MySQL на localhost, подключаться пользователем postfix с паролем postfix, использовать базу данных mail. Конечно, эти данные даны лишь для примера - вы должны или их изменить или понять чем грозит использование паролев, сходными с логинами. Понятно, эти файлы незачем читать всем (намек на правильный chmod). Проверяем, все ли в порядке. # postfix check Команда должна отработать без каких-либо сообщений об ошибках. Если что-то она вывела - разбирайтесь, что системе не понравилось. Теперь необходимо создать пользователя и все необходимые таблицы с помощью вызова mysql -p: mysql> create database mail; Query OK, 1 row affected (0.62 sec) mysql> grant insert,select,delete,update on mail.* to postfix@localhost identified by 'postfix'; Query OK, 0 rows affected (0.72 sec) mysql> use mail; Database changed mysql> create table transport (domain varchar(255) PRIMARY KEY, transport char(8)); Query OK, 0 rows affected (0.00 sec) mysql> create table aliases (id int(6), gid int(6), alias varchar(255) PRIMARY KEY, maildir varchar(255),password varchar(128), info varchar(128)); Query OK, 0 rows affected (0.00 sec) mysql> create table remote_aliases (alias varchar(255) PRIMARY KEY, rcpt varchar(255)); Query OK, 0 rows affected (0.02 sec) В конце у вас должно получиться следующее: Здесь будет храниться информация о доменах, обслуживаемых postfix mysql> desc transport; +-----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+-------+ | domain | varchar(255) | | PRI | | | | transport | varchar(8) | YES | | NULL | | +-----------+--------------+------+-----+---------+-------+ 2 rows in set (0.05 sec) Здесь информация о почтовых пользователях системы: mysql> desc aliases; +----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+-------+ | id | int(6) | YES | | NULL | | | gid | int(6) | YES | | NULL | | | alias | varchar(255) | | PRI | | | | maildir | varchar(255) | YES | | NULL | | | password | varchar(128) | YES | | NULL | | | info | varchar(128) | YES | | NULL | | +----------+--------------+------+-----+---------+-------+ 6 rows in set (0.06 sec) А здесь информация о почтовых переадресациях и прочем. Небольшие списки рассылки тоже включать можно сюда. mysql> desc remote_aliases; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | alias | varchar(255) | | PRI | | | | rcpt | varchar(255) | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) Проверьте, имеет ли пользователь postfix доступ к MySQL # mysql -u postfix -p Запускаем postfix # postfix start postfix/postfix-script: starting the Postfix mail system И в консоли MySQL добавляем домен test.ru mysql> insert into transport values ('test.ru','virtual:'); И пользователя multik@test.ru. Обратите внимание на путь к почтовому каталогу пользователя и на завершающий / в конце строки. mysql> insert into aliases values (1000,12,'multik@test.ru','/var/spool/vmail/test.ru_multik/','testpassword','info'); Число 1000 я взял из головы - главное, что бы оно было больше последнего UID в системе. В RedHat пользовательские UID начинаются с 500, поэтому я думаю, что 500 локальных пользователей - вполне достаточно. А 12 - это GID группы mail на моей системе. Проверяем, что у нас получилось. Заметье, мы добавили пользователя без затрагивания postfix и других подсистем - это открывает большой простор для написания различных управляющих почтовой системой программ. Создаем каталог, где будет храниться почта и устанавлиаем на него права. # mkdir /var/spool/vmail # chown nobody.mail /var/spool/vmail # chmod 770 /var/spool/vmail И проверяем, как у нас работает прием почты: $ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mail.test.ru ESMTP Postfix mail from: multik@test.ru 250 Ok rcpt to: multik@test.ru 250 Ok data 354 End data with . hello . 250 Ok: queued as 252BFEEAE6 В /var/log/messages должны появиться аналогичные строчки: Jun 28 16:24:21 multik postfix/smtpd[21863]: connect from multik.ip-tel.int[127.0.0.1] Jun 28 16:24:23 multik postfix/smtpd[21863]: 252BFEEAE6: client=multik.ip-tel.int[127.0.0.1] Jun 28 16:24:32 multik postfix/cleanup[21919]: 252BFEEAE6: message-id=<20020628122423.252BFEEAE6@mail.test.ru> Jun 28 16:24:32 multik postfix/qmgr[21762]: 252BFEEAE6: from=, size=340, nrcpt=1 (queue active) Jun 28 16:24:32 multik postfix/virtual[21921]: 252BFEEAE6: to=, relay=virtual, delay=9, status=sent (maildir) Если мы посмотрим в почтовый спул, то увидим, что письмо принято и дожидается своей очереди. # ls -lR /var/spool/vmail /var/spool/vmail: итого 4 drwx------ 5 1000 mail 4096 Июн 28 16:26 test.ru_multik /var/spool/vmail/test.ru_multik: итого 12 drwx------ 2 1000 mail 4096 Июн 28 16:26 cur drwx------ 2 1000 mail 4096 Июн 28 16:26 new drwx------ 2 1000 mail 4096 Июн 28 16:26 tmp /var/spool/vmail/test.ru_multik/cur: итого 0 /var/spool/vmail/test.ru_multik/new: итого 4 -rw------- 1 1000 mail 389 Июн 28 16:26 1025267217.21935_0.multik.ip-tel.int /var/spool/vmail/test.ru_multik/tmp: итого 0 Теперь подошла очередь установки IMAP и POP3 демонов. Иначе пользователям не через что будет получать почту. (Из одного письма: А чего у меня sendmail не отдает по pop3 почту Outlook'у ?) Распаковываем и собираем Courier-IMAP # tar zxvf courier-imap-1.5.1.tar.gz # adduser courier # chown courier.courier courier-imap-1.5.1 # cd courier-imap-1.5.1 # su - courier $ cd /{куда распаковывали}/courier-imap-1.5.1 $ ./configure $ make Тут останавливаемся и проверяем, что у нас есть из демонов, которые будут почту проверять: $ authlib/authinfo AUTHENTICATION_MODULES="authdaemon" AUTHDAEMONMODULELIST="authcustom authcram authmysql authuserdb authpam" SASL_AUTHENTICATION_MODULES="CRAM-SHA1 CRAM-MD5 PLAIN LOGIN" Обращаем внимание на наличие authmysql. Иначе разбираемся, почему не так. Выходим из-под пользователя courier и устанавливаем демонов: $ exit # make install # make install_configure А теперь отдадим дань конфигурированию: # cd /usr/lib/courier-imap/etc/ # cp authdaemonrc.dist authdaemonrc Редактируем authdaemonrc - находим строчку authmodulelist="authcustom authcram authuserdb authmysql authpam" и оставляем от нее только такой вот огрызок. authmodulelist="authmysql" Другие строки НЕ ТРОГАЕМ. Теперь указываем, где искать MySQL и информацию о пользователях: # cat > authmysqlrc MYSQL_SERVER localhost MYSQL_USERNAME postfix MYSQL_PASSWORD postfix MYSQL_PORT 3306 MYSQL_DATABASE mail MYSQL_USER_TABLE aliases MYSQL_CLEAR_PWFIELD password DEFAULT_DOMAIN test.ru MYSQL_UID_FIELD id MYSQL_GID_FIELD gid MYSQL_LOGIN_FIELD alias MYSQL_HOME_FIELD maildir MYSQL_NAME_FIELD info MYSQL_MAILDIR_FIELD maildir ^D Опция DEFAULT_DOMAIN указывает, что добавлять к логину, если пользователь пытается ввести логин без доменной части. Остальное, я думаю, понятно из названия и описаний. И запускаем pop3. /usr/lib/courier-imap/libexec/pop3d.rc start Должен запуститься и не ругаться ни на что. Проверяем: # telnet localhost 110 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK Hello there. user multik@test.ru +OK Password required. pass testpassword +OK logged in. list +OK POP3 clients that break here, they violate STD53. 1 400 . quit +OK Bye-bye. Connection closed by foreign host. Как видите, система нас пустила. Наше отправленное письмо лежит и дожидается нас. В maillog должны быть записи похожие на эти: Jun 28 17:27:17 multik pop3d: LOGIN, user=multik@test.ru, ip=[::ffff:127.0.0.1] Jun 28 17:27:24 multik pop3d: LOGOUT, user=multik@test.ru, ip=[::ffff:127.0.0.1], top=0, retr=0 Радуемся - базовая функциональность достигнута. Можно смело запускать imap сервер аналогично pop, раздавать пользователей и совершать другие необходимые телодвижения. Но лично мне этого мало. Я не хочу видеть вирусы в своем почтовом ящике и в ящиках своих работников и клиентов. Ставим DrWeb. Забираем с drweb.ru файлы: drweb-4.28.1-linux.tgz drweb-postfix-4.28.4-linux.tgz И распаковываем их. Хотя могли бы взять rpm файлы - их содержание абсолютно идентично. Проверяем, то ли мы распокавали и туда ли. # cd /opt/drweb # ./drweb Key file: /opt/drweb/drweb.key Registration info: 0100003942 Evaluation Key (ID Anti-Virus Lab. Ltd, St.Petersburg) This is an EVALUATION version with limited functionality! To get your registration key, call regional dealer. Loading /var/drweb/bases/drwebase.vdb - Ok, virus records: 29405 Как видите, drweb работает в ограниченом режиме. То есть он может только находить вирусы, но не лечить их. Плюс он не смотрит внутрь архивов. Но для функциональности почтового шлюза этого вполне хватит. Но лучше купите лицензию - будет еще возможность проверять и лечить пользовательские файлы. Тщательно прочитываем /opt/drweb/doc/postfix/readme.rus И добавляем drweb в качестве фильтра к postfix: # adduser drweb # mkdir /var/spool/drweb # chown drweb.drweb /var/spool/drweb # chmod 770 /var/spool/drweb Редактируем /etc/postfix/master.cf, как указано в документации к DrWeb: smtp inet n - n - 50 smtpd -o content_filter=filter:dummy и добавляем в конец следующее: filter unix - n n - - pipe flags=R user=drweb argv=/opt/drweb/drweb-postfix -f ${sender} -- ${recipient} Затем тщательно читаем и редактируем /etc/drweb/drweb_postfix.conf Лично я изменил следующие параметры: SkipObject = pass Я хочу пропускать те обьекты, которые drweb не переваривает. MailbombObject = pass Один из доменов, который обслуживается у меня, принадлежит дизайнерам и прочему художественному люду. Они очень обожают кидаться друг в друга архивами с картинками, которые сжаты очень сильно. DrWeb обычно считает такие письма за мэйлбомбы. AdminMail = root@test.ru Кто тут у нас администратор FilterMail = DrWeb-DAEMON@ip-tel.ru И от кого будет приходить почта с руганью и прочими сообщениями. Далее везде: SenderNotify = no Не надо извещать посылателя писем - в 90% случаев это безполезно и лишь забивает почтовые каналы. Если отправитель известен адресату, то он сам напишет ему гневное письмо. Перемещаем /etc/rc.d/drwebd в /etc/init.d/drwebd и с помощью ntsysv или chkconfig включаем автостарт drweb при запуске системы. Тем, кто ставил drweb через rpm, этого делать не надо. Просто посмотрите, все ли на месте. Запрещаем всяким лазить куда не следует: cd /var/drweb chown -R drweb.drweb * И запускаем демона drweb: /etc/init.d/drwebd start Starting Dr. Web daemon...Key file: /opt/drweb/drwebd.key Registration info: 0100003943 Evaluation Key (ID Anti-Virus Lab. Ltd, St.Petersburg) This is an EVALUATION version with limited functionality! To get your registration key, call regional dealer. Loading /var/drweb/bases/drwebase.vdb - Ok, virus records: 29405 Daemon is installed, TCP socket created on port 3000 Работоспособность проверяем простым запуском /opt/drweb/drweb-postfix. Он должен запуститься без какого-либо писка и висеть, томительно выжидая и занимая консоль. А в логах должно появиться следующее: Jun 29 13:41:08 multik drweb-postfix: load configuration from /etc/drweb/drweb_postfix.conf Jun 29 13:41:08 multik drweb-postfix: Actions: infected=Q, suspicious=Q, skip=P, mailbomb=P, scanning_error=T, processing_error=R, empty_from=C, spam_filter=P Jun 29 13:41:08 multik drweb-postfix: dwlib: read_conf(/etc/drweb/drweb_postfix.conf): successfully loaded Jun 29 13:41:08 multik drweb-postfix: dwlib: startup: set timeout for whole session to 60000 milliseconds (-1 means infinite) Jun 29 13:41:08 multik drweb-postfix: drweb-pipe: [2250] started ... Все. Значит все работает. Перезапускайте postfix и drweb встанет на стражу вашей почты. Можете проверить, послав какой-нить вирус. Вы получите лишь уведомление о том, что вы выирус посылали. Но просто защиты мне мало. Мне необходима еще и свежая защита. А для свежей защиты необходимо обновлять базы данных о вирусах. Для этого у DrWeb есть обновлялка, написанная на perl. Для нее нужен модуль String::CRC32. Делающие все правильно могут вспомнить что написано в man CPAN и с помощью install установить этот модуль. Мне оказалось проще и быстрее сделать все вручную: Файл я взял с http://www.cpan.org/modules/by-module/String/String-CRC32-1.2.tar.gz И установил: # tar zxvf String-CRC32-1.2.tar.gz # cd String-CRC32-1.2 # perl Makefile.PL # make # make test # make install Проверяем: # cd /opt/drweb/update # ./update.pl update.pl должен сходить в инет на сайт DrWeb, забрать все обновления и перезапустить drwebd, если он есть. В логах или после запуска вы должны увидеть следующее: Key file: /opt/drweb/drweb.key Registration info: 0100003942 Evaluation Key (ID Anti-Virus Lab. Ltd, St.Petersburg) This is an EVALUATION version with limited functionality! To get your registration key, call regional dealer. Loading /var/drweb/bases/drwtoday.vdb - Ok, virus records: 173 Loading /var/drweb/bases/drw42807.vdb - Ok, virus records: 33 Loading /var/drweb/bases/drw42806.vdb - Ok, virus records: 57 Loading /var/drweb/bases/drw42805.vdb - Ok, virus records: 133 Loading /var/drweb/bases/drw42804.vdb - Ok, virus records: 123 Loading /var/drweb/bases/drw42803.vdb - Ok, virus records: 73 Loading /var/drweb/bases/drw42802.vdb - Ok, virus records: 143 Loading /var/drweb/bases/drw42801.vdb - Ok, virus records: 76 Loading /var/drweb/bases/drwebase.vdb - Ok, virus records: 29405 Видите, появились свежие обновления для drweb с новыми вирусами. Теперь со спокойной душой запихиваем вызов update.pl в crontab. У меня он вызывается каждую ночь. Одно НО: Необходимо переодически вручную отслеживать выход новых версий drweb. Потому что как только выйдет новый DrWeb, ваш автоматически перестанет получать новые вирусные дополнения. И последний шаг - установка www-почты: Я взял последнюю версию SquirellMail с http://www.squirrelmail.org/ и установил согласно прилагающимся инструкциям. Для ее работы необходим настроенный Apache c PHP. Как это делать я уже писал несколько раз. Да и в сети куча документов, посвященным этому вопросу. Установка простая, поэтому я тут останавливаться не буду. Не забудьте - для SquirellMail необходим запущенный imap демон - так что не оплошайте. Для завершения нашей эпопеи осталось всего два шага: 1 - Проверьте, все ли запустится при запуске системы. Если есть возможность - перезагрузитесь и проверьте, запустился ли drweb, postfix, courier pop3 и/или imap c mysql. Отрабатывает ли update'р новые обновления и так далее. Просмотрите все конфигурационные файлы еще раз - не оставили ли вы где-нить ляпов или "соплей"? Для самостоятельной работы можете посмотреть на антиспамерные возможности drweb. 2 - проверьте, прикрыт ли MySQL и DrWeb от посторонних людей. В общем все. Можете откинуться на спинку кресла и наблюдать, как работает почта. Но для меня еще не все опять. Раз все равно стоит для пользователей Apache с PHP, то я написал простенькую WWW - утилитку для управления почтовыми пользователями. Для ее работы необходимо в MySQL создать такую таблицу: mysql> desc admins; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | login | varchar(20) | YES | | NULL | | | password | varchar(20) | YES | | NULL | | | rights | int(6) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 3 rows in set (0.04 sec) И руками занести туда значения вроде 'admin','password',0. Эта таблица у меня используется в других внутрикорпоративных сервисах, поэтому желающие могут залезть в код и все исправить. Рядом с этим лежат 3 файла. auth.php.txt global.php.txt и index.php.txt Расширение .php.txt выбрано специально - что бы вы смогли их скачать. Просто положите эти три файла в один каталог, доступный вам. Поправьте значения в global.php. Все, можете вызывать и пользоваться. Логин и пароль - те, которые вы вручную добавили в таблицу admins. Ну а дальше я думаю вы поймете. Утилитка писалась "на коленке", поэтому я вполне понимаю, что можно написать лучше и красивее. Пишите. Удачи ! А тем, кто до сюда дочитал - маленький бонус. Если вы поглядите на это: $ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mail.test.ru ESMTP Postfix ehlo multik 250-mail.test.ru 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-XVERP 250 8BITMIME К вашему большому сожалению вы не увидите строчек: 250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5 250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5 Либо увидите эти строчки, но почему-то нормальные почтовые клиенты (к примеру, TheBat или stuphead) не могут авторизоваться для отправки почты. Только для отправки! В чем же дело ? Дело в одной маленькой библиотеке, называемой Cyrus-SASL. К сожалению, ее писали .... люди, которые писали ее неправильно. Метод sasldb в ней важнее всех. Внимание: Если /etc/sasldb не пустой (смотреть вывод sasldblistusers) то в выводе postfix появляются строчки про DIGEST-MD5 и CRAM-MD5. Если пустой - то не появляются. Если в sasldb есть хоть одна запись, то аунтефикация с участием методов LOGIN, DIGEST-MD5 и CRAM-MD5 идет через sasldb, НЕВЗИРАЯ на то, что написано после pwcheck_method. Поэтому, если у вас есть много мигрирующие пользователи с нормальными почтовыми клиентами (Outlook и Mozilla - не подходят - они оба используют только метод PLAIN), то для отправки почты с таких клиентов их надо заводить вручную, используюя команду аналогичную этой: saslpasswd -c -u `postconf -h myhostname` username Вот такой вот SASL. Правда, обещают, что в v2 будет все по честному, но пока v2 не выбралась из бета-состояния, да и postfix в стабильных версиях не поддерживает Cyrus-SASL v2. Courier-IMAP использует SASL по другому, поэтому с ним все в порядке. Вот теперь точно все. Удачи! (c) 2002 Вячеслав Калошин multik@multik.ru