The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Почтовый сервер на базе Postfix с аккаунтами пользователей в PostgreSQL. (mail postfix postgresql imap virus)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: mail, postfix, postgresql, imap, virus,  (найти похожие документы)
From: evgy@rr.ru Date: Thu, 7 Aug 2003 19:50:19 +0100 Subject: Почтовый сервер на базе Postfix с аккаунтами пользователей в PostgreSQL. Задача: почтовая система для сети примерно на 300 человек, пользователи в базе, защита от вирусов, аутентификация SMTP отсутствует. Дано: Операционка - FreeBSD 4.8-RELEASE. Все привиллегированные команды исполняются через sudo, посему подразумеваю наличие ее у вас. Установку и настройку ее не описываю. Для реализации проекта задействовано: * Postfix-2.0.13 * Courier-IMAP-2.0.0 * PostgreSQL-7.3.4 * DrWEB-4.29.2-freebsd4 В статье подразумевается виртуальный домен thedom.ru ( the domain :) Прежде всего, скажу о моей "идеологии". Никому не навязываю, при наличии минимальных знаний можно ее ни коим образом не придерживаться. * 1) Люблю, чтобы все стояло под /usr/local/. Соответственно, все ставим туда. * 2) Всякие системные штуковины наподобие gmake ставим из портов, остальное - крупные пользовательские сервисы, ставим ручками. Ругайте или нет, я люблю покопаться, как и что устроено. * 3) Предпочитаю работать через консоль. Иксов на сервере у меня нет. Итак. Кое-что сегодня мы будем ставить из портов. А раз из портов - порты надо прежде обновить. Небольшое отступление по обновлению портов, или что такое CVSup (сивисап). Это софтверная система, позволяющая (помимо всего прочего) вам всегда получить конкретную, или, что нам интереснее, самую последнюю версию какой-либо части дерева файлов. В нашем случае, нас интересует дерево портов. CVSup Если вас интересует подробное руководство по сивисапу, то можно сходить на http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/cvsup.html, я именно по этому руководству и делал. Сначала поставим саму программу, которая будет нам обновлять дерево портов. То есть, саму cvsup. Поставить можно из портов (см. мое замечание выше - я отношу эту программу к системным программам) или из пакаджей. (по поводу портов: здесь сразу скажу, в /usr/ports/net/ лежит 2 версии cvsup: cvsup и cvsup-without-gui. Первая рассчитана работу с иксами, вторая - консольная, нам и нужна. Но по поводу установки из портов меня насторожила фраза в доке по упомянутому выше адресу: ...But be forewarned: the net/cvsup port depends on the Modula-3 system, which takes a substantial amount of time and disk space to download and build.... так как модулу ставить я не захотел, то...) ...я предпочел установку пакаджа, потому пошел на http://www.freebsd.org/ports/index.html, впечатал в поле поиска cvsup-without-gui, скачал пакадж ( ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-4-stable/All/cvsup-without-gui-16.1h.tgz) и поставил его: sudo pkg_add cvsup-without-gui-16.1h.tgz Для работы программы нужен каталог и конфиг, так что делаем sudo mkdir /usr/local/etc/cvsup и пишем конфиг. У меня конфиг зовется /etc/supfile и выглядит так: *default tag=. *default host=cvsup.ru.FreeBSD.org *default prefix=/usr *default base=/usr/local/etc/cvsup *default release=cvs delete use-rel-suffix compress ports-all Если интересует что здесь что значит - все описано в упомянутой доке по сивисапу, скажу лишь, что данный конфиг обновляет только дерево портов. Теперь все готово к обновлению. Запускаем его: sudo cvsup /etc/supfile После успешного выполнения (у меня ушло на это около 25 минут) должно написать Finished successfully. При желании, если хотим всегда иметь свежее дерево портов, то можно добавить упомянутый вызов (но только с полным путем к программе cvsup) в /etc/crontab. Пример - запуск программы ежедневно в 6:00 утра: 0 6 * * * root /usr/local/bin/cvsup /etc/supfile PostgreSQL Но мы время не тратим, открываем второе терминальное окошко, и приступаем к установке постгреса. Как и все существенное - ставим ручками. Идем на сайт слона http://www.postgresql.org/, и выбираем последнюю версию постгреса - на текущий момент есть 7.3.4. Скачиваем и разворачиваем тар: tar xzf postgresql-7.3.4.tar.gz cd postgresql-7.3.4 Пока продолжают обновляться порты, можно глянуть в INSTALL. Там написано, что для сборки постгреса нужен gmake версии не ниже 3.76.1, а не make, который штатно есть в системе. Если в ответ на команду gmake -v на нас выругаются, вместо того, чтобы сообщить номер версии, придется ставить еще и gmake. Учитывая, что это системная штука - ставим из портов. Значит, ждем, пока порты дообновляются :) Как только это свершится, cd /usr/ports/devel/gmake/ sudo make install clean Возвращаемся в каталог дистрибутива постгреса. Постгрес по умолчанию ставится куда мы желаем - в /usr/local/, где создает для всего своего хозяйства подкаталог pgsql. В процессе установки для нужд постгреса создадим пользователя. ./configure gmake sudo gmake install sudo vipw - и добавляем строку postgres:*:65530:65534::0:0:Unprivileged Postgre SQL:/nonexistent:/sbin/nologin sudo mkdir /usr/local/pgsql/data sudo chown postgres /usr/local/pgsql/data sudo -u postgres /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data sudo mkdir /usr/local/pgsql/log sudo chown postgres /usr/local/pgsql/log/ Для запуска постгреса я накропал такой скрипт: #!/bin/sh case "$1" in start) echo "Starting PostgreSQL..." /usr/local/bin/sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /usr/lo cal/pgsql/data -l /usr/local/pgsql/log/pgsql.log start ;; stop) echo "Stopping PostgreSQL..." /usr/local/bin/sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /usr/lo cal/pgsql/data -l /usr/local/pgsql/log/pgsql.log stop ;; reload) echo "Restarting PostgreSQL..." /usr/local/bin/sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /usr/lo cal/pgsql/data -l /usr/local/pgsql/log/pgsql.log reload ;; restart) echo "Restarting PostgreSQL..." /usr/local/bin/sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /usr/lo cal/pgsql/data -l /usr/local/pgsql/log/pgsql.log restart ;; status) echo "Restarting PostgreSQL..." /usr/local/bin/sudo -u postgres /usr/local/pgsql/bin/pg_ctl -D /usr/lo cal/pgsql/data -l /usr/local/pgsql/log/pgsql.log status ;; esac sleep 3 exit 0 Соответственно, лежит он в /usr/local/etc/rc.d/ и у меня зовется 340.pgsql.sh. Не забываем для него sudo chmod a+x /usr/local/etc/rc.d/340.pgsql.sh Стартуем постгрес: sudo /usr/local/etc/rc.d/340.pgsql.sh start Если в ответ получаем postmaster successfully started, значит все прекрасно, иначе смотрим в логи /usr/local/pgsql/log/pgsql.log и /var/log/messages что не так, и разбираемся. Если все нормально, то можем идти дальше. Нам надо создать в постгресе пользователя, под именем которого с постгресом будет работать постфикс. Делаем так: sudo -u postgres /usr/local/pgsql/bin/createuser Enter name of user to add: postfix Shall the new user be allowed to create databases? (y/n) n Shall the new user be allowed to create more new users? (y/n) n CREATE USER Пользователь создан, но пока у нас нет никакой защиты в постгресе, а это - нехорошо. sudo -u postgres /usr/local/pgsql/bin/psql template1 Welcome to psql 7.3.4, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit template1=# alter user postfix with password 'topsecret'; ALTER USER template1=# alter user postgres with password 'postgres'; ALTER USER template1=#\q Как вы, я надеюсь, поняли, последними командами мы установили постгресовские пароли: для пользователя postfix - пароль topsecret, а для postgres - пароль postgres. ВНИМАНИЕ, эти пароли не имеют НИКАКОГО отношения в паролям пользователей в системе!!! Нам остается поправить конфигурационный файл доступа (если мне не изменяет память, hba расшифровывается как host based authentication) sudo vi /usr/local/pgsql/data/pg_hba.conf правим внизу поля METHOD, что мы хотим проверку паролей, а не trust (работать без пароля), стоящее по умолчанию: # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD local all all md5 host all all 127.0.0.1 255.255.255.255 md5 после этого проверяем, перезапускаем постгрес и убеждаемся, что у нас спросят пароль: sudo /usr/local/etc/rc.d/340.pgsql.sh restart Restarting PostgreSQL... waiting for postmaster to shut down......done postmaster successfully shut down postmaster successfully started sudo -u postgres /usr/local/pgsql/bin/psql -u template1 psql: Warning: The -u option is deprecated. Use -U. User name: postfix Password: topsecret Welcome to psql 7.3.4, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit template1=>\q Пускает. Что ж, создаем нашу базу данных, в которой мы будем хранить пользователей. sudo -u postgres /usr/local/pgsql/bin/createdb mail Password: postgres CREATE DATABASE sudo -u postgres /usr/local/pgsql/bin/psql mail Password: postgres Welcome to psql 7.3.4, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit mail=# CREATE TABLE users ( mail(# id int, mail(# email text not null, mail(# mbox text not null, mail(# pass text, mail(# name text); CREATE TABLE mail=# grant select on users to postfix; GRANT mail=# CREATE TABLE aliases ( mail(# email text not null, mail(# alias text not null, mail(# comment text default ''); CREATE TABLE mail=# grant select on aliases to postfix; GRANT В первую таблицу мы будем вносить пользователей, во вторую - альясы. Итак, теперь мы готовы к тому, чтобы начать саму установку самого постфикса. Прежде всего, четко уверяем себя, что мы прощаемся с сендмейлом. Поэтому в /etc/rc.conf пишем sendmail_enable="NONE" Postfix Постфикс, как и БД, мы будем ставить ручками. Дело это не тривиальное, и придется немного повозиться. Для того, чтобы постфикс умел работать с постгресом, первый придется пропатчить. Но это чуть позже. А пока идем на http://www.postfix.org и берем последнюю версию постфикса. Сейчас это 2.0.13. Потом берем упомянутый патч - http://www.mat.cc/postfix/postfix-pg.postfix-2.0.0.2.patch, и сохраняем его. Как следует из названия, патч рассчитан на версию постфикса 2.0.0.2, у нас же - 2.0.13. Но новее я ничего найти не смог, однако и этот патч замечательно работает, после некоторой подгонки напильником :) Открываем postfix-pg.postfix-2.0.0.2.patch любым текстовым редактором и выполняем такие процедуры: 1. Найти все подстроки "2.0.0.2" и заменить их на "2.0.13" 2. Найти все подстроки "-vanilla" и заменить их все пустой строкой - "" А далее - все просто: tar xzf postfix-2.0.13.tar.gz patch < postfix-pg.postfix-2.0.0.2.patch cd postfix-2.0.13 Как я говорил уже, я люблю, чтоб все лежало под /usr/local, в отдельной папочке для каждого сервиса. Постфикс пусть раскладывает свое хозяйство в /usr/local/postfix. Сам постфикс по умолчанию ставится далеко не туда, куда я хочу, поэтому все задаем ключиками. Кроме того, ключиками же говорим, что у нас уже есть постгрес. Следующий ужас :) дается как одна команда в одну строку: make -f Makefile.init makefiles CCARGS='-DHAS_PGSQL -I/usr/local/pgsql/include \ -DDEF_CONFIG_DIR=\"/usr/local/postfix/etc\" -DDEF_COMMAND_DIR=\"/usr/local/postfix/sbin\" \ -DDEF_DAEMON_DIR=\"/usr/local/postfix/libexec\" -DDEF_MAILQ_PATH=\"/usr/local/postfix/bin/mailq\" \ -DDEF_MANPAGE_DIR=\"/usr/local/postfix/man\" -DDEF_NEWALIAS_PATH=\"/usr/local/postfix/bin/newaliases\" \ -DDEF_SAMPLE_DIR=\"/usr/local/postfix/etc/sample\" -DDEF_SENDMAIL_PATH=\"/usr/local/postfix/sbin/sendmail\"' \ 'AUXLIBS=-L/usr/local/pgsql/lib -lpq -lcrypt' затем make Постфиксу тоже нужен свой пользователь в системе. Делаем sudo vipw и добавляем строчку (юиды и гиды можно взять другие): postfix:*:1001:1001::0:0:Postfix Mail System:/var/spool/postfix:/sbin/nologin а потом - sudo vi /etc/group и добавляем: postfix:*:1001: postdrop:*:1002: При инсталляции у меня почему-то начал ругаться на то, что не может найти библиотечку от постгреса - libpq.so.3. Вылечилось командой sudo ln -s /usr/local/pgsql/lib/libpq.so.3 /usr/local/lib/libpq.so.3 Ставим: sudo make install Если вы делали конфигурацию (см. выше) так, как предлагаю я, то при инсталляции вам останется на все вопросы согласиться с предлагаемыми по умолчанию значениями: install_root: [/] tempdir: [/usr/home/evgy/postfix-2.0.13] config_directory: [/usr/local/postfix/etc] daemon_directory: [/usr/local/postfix/libexec] command_directory: [/usr/local/postfix/sbin] queue_directory: [/var/spool/postfix] sendmail_path: [/usr/local/postfix/sbin/sendmail] newaliases_path: [/usr/local/postfix/bin/newaliases] mailq_path: [/usr/local/postfix/bin/mailq] mail_owner: [postfix] setgid_group: [postdrop] manpage_directory: [/usr/local/postfix/man] sample_directory: [/usr/local/postfix/etc/sample] readme_directory: [no] Ура! Сам постфикс поставился. Рискнем выполнить первую настройку. У постфикса 2 главных конфигурационных файла main.cf и master.cf. Если следовать тому, как мы все ставим, то файлы будут лежать в /usr/local/postfix/etc. Даем: sudo vi /usr/local/postfix/etc/main.cf и первым делом правим конфиг на предмет альясов: alias_maps = hash:/etc/mail/aliases alias_database = hash:/etc/mail/aliases (у вас пути, разумеется, могут немного отличаться) Запустим постфикс и посмотрим, что получилось: sudo /usr/local/postfix/sbin/postfix start Пошлите сами себе письмо (это описывать не буду), проверьте, что будет в логах /var/log/maillog и /var/log/messages. Если все работает - переходим к самой интересной части - виртуальным почтовым доменам. Открываем конфигурацию main.cf постфикса и пишем: transport_maps = hash:/usr/local/postfix/etc/transportfile virtual_mailbox_base = / virtual_mailbox_maps = pgsql:/usr/local/postfix/etc/mailbox.pgsql virtual_alias_maps = pgsql:/usr/local/postfix/etc/aliases.pgsql virtual_uid_maps = pgsql:/usr/local/postfix/etc/uid.pgsql virtual_minimum_uid = 1000 virtual_gid_maps = static:1002 Что все это значит? Во всех документациях, что мне встречались, это объяснялось так: сделайте и не парьтесь. Я так не люблю. Надо ж хоть чуть-чуть представлять, что мы тут такое делаем?... На подробное описание я не претендую, но все же. transport_maps определяет список наших виртуальных доменов и транспортов, используемых при их обслуживании. Под транспортом понимается способ обслуживания почтового сообщения этого домена - например, положить в локальный почтовый ящик (транспорт local), передать на другой SMTP сервер (транспорт smtp), положить в локальный виртуальный почтовый ящик (транспорт virtual) и т.п. У нас будет один домен, тестовый, соответственно, мой /usr/local/postfix/etc/transportfile содержит: thedom.ru virtual: то есть, указывает, что для адресов домена thedom.ru необходимо применять транспорт virtual. Так как постфикс будет работать с хешем этого файла, то нам надо сделать: cd /usr/local/postfix/etc/ sudo /usr/local/postfix/sbin/postmap transportfile virtual_mailbox_base говорит, что надо добавлять к путям виртуальных почтовых ящиков, извлеченным из БД. Так как мы будем хранить в БД полные пути, то здесь пишем просто "/". virtual_mailbox_maps определяет, откуда постфикс будет брать информацию о путях к виртуальным почтовым ящикам. Фактически, файл mailbox.pgsql полностью описывает, как подключиться к БД, и где что взять: hosts = localhost user = postfix password = topsecret dbname = mail table = users select_field = mbox where_field = email #additional_conditions = and status = 'goodboy' Этот файл указывает подключиться к постгресовой базе mail на localhost'е, зайти под именем postfix и паролем topsecret, и сделать такой запрос вида select mbox from users where email=адрес. Зачум нужен additional_conditions, думаю, смекнете :) Аналогично и с директивами virtual_alias_maps и virtual_uid_maps. Первая описывает, откуда взять виртуальные альясы, вторая - UIDы пользователей, чтоб знать с какими правами обращаться на почтовый ящик. uid.pgsql: hosts = localhost user = postfix password = topsecret dbname = mail table = users select_field = id where_field = email aliases.pgsql: hosts = localhost user = postfix password = topsecret dbname = mail table = aliases select_field = alias where_field = email Последнеи 2 строчки с virtual_minimum_uid и virtual_gid_maps указывают минимальное значение UIDа виртуального пользователя, которое возможно в системе (некая степень защиты) а так же номер группы для всех пользователей. Последний тоже, если надо, можно вынимать из постгреса. Только зачем? :) Поэтому стоит static:1002. Вспомните, перед тем, как ставить постфикс, мы делали группу postdrop:*:1002: - именно для этих целей. Теперь немного надо подстроить постгрес, иначе постфикс не сможет коннектиться к БД через сокет. sudo vi /usr/local/pgsql/data/postgresql.conf Опция tcpip_socket должна быть раскомментирована и быть true. Создадим каталог для виртуальных почтовых ящиков: sudo mkdir /var/spool/VMAIL sudo chown postfix:postdrop /var/spool/VMAIL sudo chmod 775 /var/spool/VMAIL теперь добавляем пробного пользователя в БД, и посылаем ему письмо: /usr/local/pgsql/bin/psql -u mail psql: Warning: The -u option is deprecated. Use -U. User name: postgres Password: postgres Welcome to psql 7.3.4, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit mail=# INSERT INTO users VALUES (2002, 'evgy@thedom.ru', '/var/spool/VMAIL/evgy@thedom.ru/', 'pass','test user'); INSERT 16989 1 mail=# select * from users ; id | email | mbox | pass | name ------+----------------+----------------------------------+------+------ 2002 | evgy@thedom.ru | /var/spool/VMAIL/evgy@thedom.ru/ | pass | mail=# insert into aliases VALUES ('cool@thedom.ru','evgy@thedom.ru'); mail=# SELECT * from aliases ; email | alias | comment ----------------+----------------+--------- cool@thedom.ru | evgy@thedom.ru | (1 row) Теперь пробуем написать письмо от имени пользователя evgy@thedom.ru самому evgy@thedom.ru. Успешно прошедшее письмо можно будет обнаружить в каталоге /var/spool/VMAIL/evgy\@thedom.ru/new. Так же проверим альяс - пошлем письмо на cool@thedom.ru. Если есть ошибки - смотрим на логи /var/log/maillog и /var/log/messages и пытаемся понять, в чем дело. Для запуска постфикса при старте системы я использую такой скриптик: more /usr/local/etc/rc.d/360.postfix.sh #!/bin/sh case "$1" in start) echo "Starting POSTFIX..." /usr/local/postfix/sbin/postfix start ;; stop) echo "Stopping POSTFIX..." /usr/local/postfix/sbin/postfix stop ;; restart) echo "Restarting POSTFIX..." /usr/local/postfix/sbin/postfix reload ;; esac sleep 3 exit 0 Courier-IMAP Ну а если все нормально, то ставим Courier-IMAP. После постфикса его установка покажется детским лепетом :) Скачиваем дистрибутив - на текущий момент это версия 2.0.0 - http://prdownloads.sourceforge.net/courier/courier-imap-2.0.0.tar.b z2. Как и во всех нормальных дистрибутивах, внутри есть INSTALL, в котором все подробнейше описано. Это для любопытных. Следующие команды выполняем как обычный пользователь: bzip2 -d courier-imap-2.0.0.tar.bz2 tar xf courier-imap-2.0.0.tar export LDFLAGS="-L/usr/local/pgsql/lib" export CPPFLAGS="-I/usr/local/pgsql/include" cd courier-imap-2.0.0 ./configure --prefix=/usr/local/courier-imap --with-piddir=/var/run gmake (именно gmake, а не make) запускаем authlib/authinfo - эта программа должна выдать что-то вроде: AUTHENTICATION_MODULES="authdaemon" AUTHDAEMONMODULELIST="authcustom authcram authpgsql authuserdb authpam" SASL_AUTHENTICATION_MODULES="CRAM-SHA1 CRAM-MD5 PLAIN LOGIN" Главное, чтоб присутствовал "authpgsql". По умолчанию - его не находит, для этого мы и экспортировали LDFLAGS и CPPFLAGS. sudo gmake install (именно gmake, а не make) sudo gmake install-configure (именно gmake, а не make) cd /usr/local/courier-imap/etc sudo vi authdaemonrc находим строчку authmodulelist="authcustom authcram authuserdb authpgsql authpam" Это перечень всех возможных способов авторизации, поддерживаемых на машине. Оставляем от нее authmodulelist="authpgsql", больше ничего не трогаем. sudo vi authpgsqlrc Файл прекрасно внутри описан и по сути тоже задает как коннектиться к БД, и где что брать. У нас опции будут иметь такие значения:: #PGSQL_HOST pgsql.example.com PGSQL_PORT 5432 PGSQL_USERNAME postfix PGSQL_PASSWORD topsecret PGSQL_DATABASE mail PGSQL_USER_TABLE users #PGSQL_CRYPT_PWFIELD crypt PGSQL_CLEAR_PWFIELD pass PGSQL_UID_FIELD id PGSQL_GID_FIELD 1002 PGSQL_LOGIN_FIELD email PGSQL_HOME_FIELD mbox PGSQL_NAME_FIELD name PGSQL_MAILDIR_FIELD mbox Обратите внимание, параметры PGSQL_HOST и PGSQL_CRYPT_PWFIELD по умолчанию раскомментированы, они нам не нужны, закомментируйте их - поставьте "#". Запускаем и проверяем sudo /usr/local/courier-imap/libexec/pop3d.rc start посылаем сами себе почту, смотрим уже упоминавшиеся логи, если что не так. Чтоб курьер сам запускался при старте системы - делаем: sudo cp /usr/local/courier-imap/libexec/pop3d.rc /usr/local/etc/rc.d/380.courier.sh DrWEB Ну и на закуску - доктор веб. Берем с http://www.drweb.ru/unix/ версию веба, и примочку для связки его с постфиксом: ftp://ftp.drweb.ru/pub/unix/drweb-4.29.2-freebsd4.tar.gz ftp://ftp.drweb.ru/pub/unix/drweb-postfix-4.29.12-D-freebsd4.tar.gz разворачиваем их. Создаем пользователя drweb, принадлежащего группе drweb. Я брал юид и гид 1003: sudo vipw, добавляем drweb:*:1003:1003::0:0:DrWeb Anti Virus System:/nonexistent:/sbin/nologin sudo vi /etc/group, добавляем drweb:*:1003: Заходим в каталог веба. Видим install и install.sh. По умолчанию ДрВеб вообше пожелает встать в /opt - жуть! Это рассчитано на Linux. Поэтому придется поправить путь в файле установки - install.sh. Конфиги свои drweb пусть хранит в /etc/drweb - это немного отходит от моей идеологии - все в /usr/local, но иначе придется слишком много исправлять в настройках веба. Так что смиримся. Кроме того, доктор все равно хочет иметь спульный каталог в /var - это правильно. Так что он разложится за рамками /usr/local... Итак, приступим: правим - sudo vi install.sh меняем строчку DEFAULT_INSTALL_DIR на значение DEFAULT_INSTALL_DIR="/usr/local/drweb". sudo sh install.sh Enter destination directory (/usr/local/drweb is default): [Enter] Select interface language: 0) english 1) russian 0 Dr.Web is installed to /usr/local/drweb. Edit /drweb32.ini to complete setup. Сразу же разворачиваем примочку для связки веба с постфиксом. tar xzf drweb-postfix-4.29.12-D-freebsd4.tar.gz заходим внутрь и внутри видим 2 каталога - opt и etc. Содержимое каталога etc/drweb должно соответственно попасть в /etc/drweb, все из opt/drweb кладем в /usr/local/drweb/ sudo cp -R etc/drweb/* /etc/drweb/ sudo cp -R opt/drweb/* /usr/local/drweb/ Поправим права и правим файл запуска sudo chown -R drweb:drweb /var/drweb sudo chown -R drweb:drweb /etc/drweb/ sudo mv /usr/local/etc/rc.d/00drwebd /usr/local/etc/rc.d/100.drwebd.sh sudo vi /usr/local/etc/rc.d/100.drwebd.sh в case start и case restart встречается вызов демона /opt/drweb/drwebd, заменяем эту подстроку на /usr/local/drweb/drwebd >> /dev/null Правим конфиг /etc/drweb/drweb32.ini - внимательно смотрим на пути в секциях: [BSD] EnginePath = "/usr/local/drweb/lib/drweb32.dll" VirusBase = "/var/drweb/bases/*.vdb", "/var/drweb/bases/*.VDB" MoveFilesTo = "/var/drweb/infected" ;LngFileName = "/usr/local/drweb/lib/russian.dwl" Key = "/usr/local/drweb/drweb.key" LogFileName = "/var/drweb/log/drweb.log" UpdatePath = "/usr/local/drweb/updates" .................... [BSD:Daemon] EnginePath = "/usr/local/drweb/lib/drweb32.dll" VirusBase = "/var/drweb/bases/*.vdb", "/var/drweb/bases/*.VDB" MoveFilesTo = "/var/drweb/infected" ;LngFileName = "/usr/local/drweb/lib/russian.dwl" Key = "/usr/local/drweb/drwebd.key" LogTime = Yes LogFileName = "syslog" LogFileName = "/var/drweb/log/drwebd.log" BusyFile = "/var/drweb/run/drwebd.bsy" SocketMode = TCP SocketFile = "/var/drweb/run/drwebd.socket" ;SocketMode = Unix ;SocketAccess 0666 PidFile = "/var/drweb/run/drwebd.pid" DaemonPort = 3000 Разкомментировать строку User = drweb и проверить UpdatePath = "/usr/local/drweb/updates". Ну и попробуем: sudo /usr/local/etc/rc.d/100.drwebd.sh start Посмотрим, что скажет, если ругается - исправляем что не так. Далее правим конфигурационный файл для связки с постфиксом /etc/drweb/drweb_postfix.conf. Обязательно надо прописать альясы для оповещений: AdminMail = root RedirectMail = root FilterMail = root и в самом низу: Sendmail = /usr/local/postfix/sbin/sendmail Теперь скажем постфиксу фильтровать почту: sudo vi /usr/local/postfix/etc/master.cf строку smtp inet n - n - - smtpd правим на smtp inet n - n - 16 smtpd -o content_filte r=filter:dummy (16 - это: grep MaxChildren /etc/drweb/drweb32.ini MaxChildren = 16 ), а внизу добавляем: filter unix - n n - - pipe flags=R user=drweb argv=/usr/local/drweb/drweb-postfix -f ${sender} -- ${reci pient} Запускаем sudo /usr/local/etc/rc.d/100.drweb.sh start sudo /usr/local/postfix/sbin/postfix stop sudo /usr/local/postfix/sbin/postfix start tail -f /var/log/maillog посылаем письмо сами себе и проверяем, как пойдет. В логе обязательно должна проскочить строка вроде ... drweb-postfix: dwlib: scan[44496]: message(/var/drweb/spool/drweb.tmp.YKMi0 q) sent by .... is passed для того, чтобы симитировать вирус, создаем файл с текстом: X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* и сохраняем его под именем virus-test.com. Приаттачиваем к письму и проверяем. Ну и напоследок. Антивирусные базы надо бы обновлять. Для этого в комплекте доктора есть утилитка /usr/local/drweb/update/update.pl, а для ее работы нужен перловый модуль String::CRC32. Идем на http://www.cpan.org/, ищем и находим на http://www.cpan.org/authors/id/S/SO/SOENKE/String-CRC32-1.2.tar.gz , tar xzf String-CRC32-1.2.tar.gz cd String-CRC32-1.2 perl Makefile.PL make sudo make install запускаем update.pl. Если все ок, то можем запускать через cron с желаемой периодичностью. Все. _________________________________________________________________ Жду комментариев на evgy ЭТ rr.ru. При подготовке статьи использовался материал статьи Бешкова Андрея Юрьевича (http://onix.opennet.ru/ - Почтовая система среднего и малого офиса) и материалы из соответствующих описаний к упомянутым здесь программам (вроде INSTALL, README и пр.). Отдельное спасибо Певневу Андрею за периодические консультации и подсказки ;) редакция 1.1

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, dawnshade (?), 09:59, 13/08/2003 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    1. Гм, а курьеру разве не надо своего юзверя добавлять? Он же вроде ставится только из-под своего юзверя??
    2. "добавляем строку postgres:*:65530:65534" - обычно демонам как раз даються uid/gid ниже тысячных, тоже касается остальных.
     
     
  • 2.13, vvvua (?), 14:39, 28/10/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Пробовал на Debian linux.
    Стоит postgresql 8.0.4.
    Нужно править конфиг (возможно, и для 7-й версии).
    в authpgsqlrc нет отношения c - добавить
                            'disableimap' as options              \
                            from mailusers c                \
                            where login = '$(local_part)'||'@'||'$(domain)';


    В /etc/postfix/mailbox.pgsql
    Поправить отношение c. Т.е. должно быть:
    query = SELECT substring(c.login from 1 for 1)||'/'||c.login||'/Maildir/' from mailusers c where login = '%u'||'@'||'%d';


    postfix=> SELECT login as username,'' as cryptpw,pass as clearpw,506 as uid,506 as gid,'/mailboxes/'||substring(c.login from 1 for 1)||'/'||c.login as home,'' as maildir,30 as quota,fullname,'disableimap' as options from mailusers c where login = 'vvvua'||'@'||'mydomain.ltd';
            username        | cryptpw |  clearpw  | uid | gid |                home                 | maildir | quota | fullname |   options
    ------------------------+---------+-----------+-----+-----+-------------------------------------+---------+-------+----------+-------------
    vvvua@mydomain.ltd |         | testpass | 506 | 506 | /mailboxes/v/vvvua@mydomain.ltd |       |
    30 | VS       | disableimap
    (1 запись)

    postfix=>

     

  • 1.2, Alexey (?), 16:26, 13/01/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    в строке, где происходит наложения патча наверное надо добавить параметр -p0:
    patch -p0 < postfix..patch
     
  • 1.3, Alexey (?), 17:09, 21/01/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На RedHat интересно ставится: рекомендует сделать RPM. ;-)
    Чтобы не ругался на RedHat - надо добавить --with-redhat.
     
  • 1.4, proforg (?), 20:38, 13/04/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    чтоб ручками не править код патча
    можно просто сделать симлинку :)
    ln -s postfix-2.0.13 postfix-2.0.0.2
     
  • 1.5, Maklaut (?), 20:49, 23/04/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А нельзя запустить патч прямо из директории postfix-2.0.13 с параметром -p1, чтобы не делать симлинку?
     
  • 1.6, duglov (??), 11:48, 09/06/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    поставил postgre и postfix согласно статейки. Courier и все остальное еще не ставил. Пытаюсь отправить и командной строки сам себе письмо (пользователь в базе postgre есть)выдает ошибку:

    Recepient address rejected: user unknoun in local recipient table.

    Где искать ошибку и что править?? Помогите плззззз

     
     
  • 2.8, Logan (?), 04:57, 19/09/2004 [^] [^^] [^^^] [ответить]  
  • +/
    Необходимо в конфиге Postfix-а поставить параметр local_recipient_maps =
    (после знака "равно" строка кончается!) и перезапустить Postfix
     
  • 2.10, yerden (?), 08:37, 03/02/2005 [^] [^^] [^^^] [ответить]  
  • +/
    local_recipient_maps = $virtual_mailbox_maps
     

  • 1.7, Салягин (??), 11:16, 28/06/2004 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересно как научить постфикс работать с постгресом? У меня в логах пишецца fatal: unsupported dictionary type: pgsql
    postfix/master[31615]: warning: process /usr/libexec/postfix/smtpd pid 8844 exit status 1
    postfix/master[31615]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
    В чем прикол?
     
     
  • 2.9, yerden (?), 08:36, 03/02/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Это значит, что в вашем Postfix'е нет поддержки PostgreSQL
     
     
  • 3.12, vvvua (?), 14:36, 28/10/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Пробовал на Debian linux.
    Стоит postgresql 8.0.4.
    Нужно править конфиг (возможно, и для 7-й версии).
    в authpgsqlrc нет отношения c - добавить
                            'disableimap' as options              \
                            from mailusers c                \
                            where login = '$(local_part)'||'@'||'$(domain)';


    В /etc/postfix/mailbox.pgsql
    Поправить отношение c. Т.е. должно быть:
    query = SELECT substring(c.login from 1 for 1)||'/'||c.login||'/Maildir/' from mailusers c where login = '%u'||'@'||'%d';

    postfix=> SELECT login as username,'' as cryptpw,pass as clearpw,506 as uid,506 as gid,'/mailboxes/'||substring(c.login from 1 for 1)||'/'||c.login as home,'' as maildir,30 as quota,fullname,'disableimap' as options from mailusers c where login = 'vvvua'||'@'||'mydomain.ltd';
            username        | cryptpw |  clearpw  | uid | gid |                home                 | maildir | quota | fullname |   options
    ------------------------+---------+-----------+-----+-----+-------------------------------------+---------+-------+----------+-------------
    vvvua@mydomain.ltd |         | testpass | 506 | 506 | /mailboxes/v/vvvua@mydomain.ltd |       |
    30 | VS       | disableimap
    (1 запись)

    postfix=>


     

  • 1.14, vvvua (ok), 14:42, 28/10/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кстати, если неправильные sql запросы, то можно отловить по дебагу courier 'a и postfix'a
     
  • 1.15, noob (?), 13:51, 01/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    при сборке постфикс выдаёт ошибку
    gcc: OPT: No such file or directory
    gcc: =: No such file or directory
    *** Error code 1

    Stop in /usr/home/saps/postfix-2.2.9/src/util.
    *** Error code 1

    Stop in /usr/home/saps/postfix-2.2.9.

    подскажите что за ерунда

     
  • 1.16, nina (??), 15:10, 04/04/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    отказываюсь от ваших услуг
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру