Настройка почтового сервера Postfix+mysql+mabill+IMSS

Операционная система: Fedora Core 2.
Внимание! При создании разделов, под swap необходимо выделить не менее 4 Гб! (Требование Trend Micro).
Устанавливаются пакеты: http, php, php+mysql, mysql, mysql-devel, postfix, gcc, gcc-devel, gcc34, gcc34-devel, а также tcl-8.4.5-7.i386.rpm, compat-gcc-7.3-2.96.118.i386.rpm, compat-libstdc++-7.3-2.96.118.i386.rpm, compat-libstdc++-devel-7.3-2.96.118.i386.rpm, compat-gcc-c++-7.3-2.96.118.i386.rpm, compat-db-3.3.11-4.i386.rpm – именно в такой последовательности. Еще необходимо установить libdbi-0.6.5-8.1i386.rpm, libdbi-dbd-mysql-0.6.5-8.1i386.rpm, libdbi-devel-0.6.5-8.1i386.rpm.
Скачать исходники: postfix-2.3-20051217-nonprod.tar.gz, cyrus-sasl-2.1.21.tar.gz, courier-authlib-0.56.tar.bz2, courier-imap-4.03.tar.bz2, mabill.1.02 (как самый стабильный), gps-1.004.tar.gz.
Далее:
1. Создать папку /install.
2. Распаковать туда mabill.1.02 (или какой там найдете).
3. В корневом каталоге апача создать каталог mail и скопировать туда содержимое каталога /install/mabill.1.02, кроме файла /DOC/mabill.sql.
4. Редактируем файл mabill.sql. В разделе CREATE TABLE mail_domains надо изменить строку domain varchar(50) NOT NULL default ‘’, на domain varchar(50) NOT NULL default ‘virtual:’. Сохранить файл в/install/mabill.sql.

Далее инициализируем mysql: service mysqld start.
После его инициализации запускаем mysql и видим приглашение вида:
Mysql>
Пишем следующее:
Mysql>set password for root@localhost=password(‘newpassword’);
Mysql>create database mail;
Mysql>Grant select,insert,delete,update on mail.* to mail@localhost;
Mysql>set password for mail@localhost=password(‘mail’);
Mysql>Grant select on mail.* to postfix@localhost;
Mysql>set password for postfix@localhost=password(‘postfix’);
Пользователь mail нужен для того, чтобы записывать и считывать из базы данные и будет использоваться в Web-интерфейсе.
Mysql> set password for mail@localhost=password(‘mail’);
Установили ему пароль.
Mysql>exit;
Mysql –u root –p < ./install/mabill.sql mail
Password: вводим пароль рута, заданный в начале.
Таким образом, мы создали базу mail с таблицами из файла mabill.sql.

Приступаем к настройке cyrus-sasl.
Распаковываем архив cyrus-sasl-2.1.21.tar.gz в /install. Сyrus-sasl необходимо собрать с поддержкой mysql. Делается это так.
cd cyrus-sasl-2.1.21/
env CPPFLAGS="-I/usr/include/mysql" \
LDFLAGS="-L/usr/lib/mysql -lmysqlclient -lz" \
./configure --with-mysql --enable-login --enable-sql --disable-otp
make
make install
Если все было сделано правильно, то sasl установит свои библиотеки в /usr/local/lib/sasl2. Чтобы postfix мог с ним работать, надо сделать символьные линки в /usr/lib/sasl2:
ln -s /usr/local/lib/sasl2/ /usr/lib/sasl2
ln -s /usr/local/lib/libsasl2.so /usr/lib/libsasl2.so
ln -s /usr/local/lib/libsasl2.so.2 /usr/lib/libsasl2.so.2
В каталоге /usr/lib/sasl2 создаем файл smtpd.conf со следующим содержимым:
Allowplaintext: yes
Sasl_pwcheck_metod: auxprop
Mech_list: PLAIN LOGIN
Sql_engine: mysql
Mysql_user: postfix
Mysql_passwd: postfix
Mysql_hostnames: localhost
Mysql_database: mail
Mysql_statement: select password from mail_users where email=’%u@%r’
Mysql_verbose: yes

Теперь можно переходить к следующему этапу – установке Postfix. Я выбрал версию postfix-2.3-20051217-nonprod.tar.gz, хотя, по-моему, можно и stable. Postfix надо собрать с поддержкой mysql и sasl, для этого необходимо пересобрать makefile.init. Делается это так:
Cd postfix-2.3-20051217-nonprod
make -f Makefile.init makefiles \
'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -I/usr/include/sasl' \
'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib -lsasl2'
make
Теперь, если у вас уже был установлен postfix из пакетов, то просто пропустите дальнейший шаг, если же postfix устанавливается впервые, то необходимо создать пользователей для него:
Groupadd postfix
Useradd –g postfix postfix
Groupadd postdrop
Useradd –g postdrop postdrop
После этого можно инсталлировать postfix:
Make install
В процессе инсталляции postfix задаст несколько вопросов, на которые надо ответить утвердительно, на все, чтобы он установился в место по умолчанию. После этого надо найти файл main.cf (/etc/postfix, если вы на все вопросы ответили правильно) и добавить туда следующие строчки:
Myhostname = youredomain.ru
Mydomain = youredomain.ru
Inet_interfaces = all
Mydestination = mysql:/etc/postfix/transport.cf
Unknown_local_recipient_reject_code = 550
Mynetworks_style = host
Mynetworks = 127.0.0.1,192.168.2.0/24
#
Broken_sasl_auth_client = yes
Smtpd_sasl_auth_enable = yes
#
Virtual_mailbox_base = / - это для courier-imap так надо.
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
Transport_maps = mysql:/etc/postfix/transport.cf
Relay_domains = $transport_maps
Message_size_limit = 10240000
#
Теперь надо создать следующие файлы:
/etc/postfix/ids.cf
User = postfix
Password = postfix
Dbname = mail
Table = mail_users
Select_field = gid
Where_field = email
Hosts = localhost

/etc/postfix/gids.cf
User = postfix
Password = postfix
Dbname = mail
Table = mail_users
Select_field = id
Where_field = email
Hosts = localhost

/etc/postfix/aliases.cf
User = postfix
Password = postfix
Dbname = mail
Table = mail_users
Select_field = maildir
Where_field = email
Hosts = localhost

/etc/postfix/remote-aliases.cf
User = postfix
Password = postfix
Dbname = mail
Table = mail_virtual
Select_field = goto
Where_field = email
Hosts = localhost

/etc/postfix/transport.cf
User = postfix
Password = postfix
Dbname = mail
Table = mail_domains
Select_field = domain
Where_field = domain
Hosts = localhost

Запускаем postfix и смотрим в логи, если все правильно, то ошибок быть не должно.
Сейчас можно приступить к настройке всего вышеустановленного. Чтобы проверить работает ли sasl-авторизация, проделаем следующую telnet-сессию:
telnet localhost 25
220 youredomain ESMTP Postfix
ehlo mail.ru
250-youredomain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
если вы видите что-то похожее, значит все работает нормально, можно ехать дальше.

Во-первых, апач.
Чтобы русские буквы в кодировке KOI8-R отображались удобочитаемо, а не крякозябрами, надо подредактировать httpd.conf следующим образом:
DefaultLanguage ru
AddLanguage ru .ru
LanguagePriority ru en …..
AddDefaultCharset KOI8-R
AddCharset KOI8-r .koi8-r .koi8-ru
Перезапускаем сервис: service httpd restart.
Заходим на http://ip_addres/mail/DOC/HELP/crypt.php и генерируем пароль для рута. Если не получается, ищем файлик php.ini и меняем там register_global c off на on, перезапускать сервис httpd обязательно! После того, как пароль сгенерировался, необходимо проделать следующее:
Перейти в директорию, куда скопировали mabill (обычно это /var/www/html/mail), там, в каталоге /config найти файл config.php и отредактировать его следующим образом:
$rootlogin[1]=”root”;
$rootpasswd[1]=”сюда переписать контрольную сумму созданного ранее пароля”;
$sqlhost[“billing”] = “localhost”;
$sqlbase[“billing”] = “mail”;
$sqllogin[“billing”] = “mail”;
$sqlpasswd[“billing”] = “mail”;
$mail_dir=”/usr/spool/имя_домена_”; - в этом случае ящики пользователей будут иметь вид /usr/spool/domain_user, вообще же можно использовать любой каталог.
$mail_gid=”2000”; - в принципе тут может быть любое число, но по умолчанию стоит 2000. Теперь, необходимо сделать следующее: надо поставить на каталог /usr/spool полный доступ для пользователя
На этом, пожалуй, и все, можно пробовать заходить на http://ip_address/mail. Если все сделано правильно, увидите начальную страницу Mabill. Заходите рутом и делаете все, что надо – заводите компанию, домен, администратора этого домена и какого-нить юзверя. После этого проверяем работу postfix. Заходим телнетом на 25 порт вашего сервера:
220 youredomain.ru ESMTP Postfix
Helo youredomain.ru
250 hostname
Mail from: user@youredomain.ru
250 2.1.0 OK
Rcpt to: user@youredomain.ru
250 2.1.5 OK
Data
354 End data with .
Test
.
250 2.0.0 Ok: queued as 440D62CDAA
quit
221 2.0.0 Bye
Если у вас получилось что-то похожее, значит Postfix работает. Лезем в /usr/spool – после вышеприведенных манипуляций там должна создаться папка с именем имя_домена_user, в которую Postfix будет складывать входящую корреспонденцию, принадлежащую user@youredomain.ru.
Теперь можно заняться прикручиванием courier-imap, надо ж чем-то забирать почту из ящиков!
Распаковываем courier-authlib-0.56.tar.bz2 в папку /install. В установке courier-imap есть две хитрости. Первая – выполнять сборку надо от имени любого пользователя, но только не рута. Второе, чтобы все правильно собралось, надо написать следующее:
cd courier-authlib-0.56/
env CPPFLAGS="-I/usr/include/mysql" \
LDFLAGS="-L/usr/lib/mysql -lmysqlclient -lz" \
./configure --without-authvchkpw --without-authdeamon \
--without-authuserdb --without-authpam --without-authldap \
--without-authpwd --without-authshadow --without-authpgsql \
--without-authcustom --without-authpipe --with-authmysql \
--with-authmysql-libs=/usr/lib/mysql \
--with-authmysql-includes=/usr/include/mysql \
--with-redhat
make
make check
su
make install-strip
make install-configure
cp courier-authlib.sysvinit /etc/init.d/courierauthlib
chmod 755 /etc/rc.d/courierauthlib
chkconfig –-add courierauthlib
Редактируем файл /usr/local/etc/authlib/authdaemonrc следующим образом:
Authmodulelist=”authmysql”
Authmodulelistorig=”authmysql”
Daemons=40
Authdaemonvar=/usr/local/var/spool/authdaemon
DEBUG_LOGIN=2
DEFAULTOPTIONS=””
Переходим к файлу /usr/local/etc/authlib/authmysqlrc.
MYSQL_SERVER localhost
MYSQL_NAME postfix
MYSQL_PASSWORD postfix
MYSQL_SOCKET /var/lib/mysql/mysql.sock
MYSQL_PORT 3306
MYSQL_OPT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE mail_users
MYSQL_CRYPT_PWFIELD password
DEFAULT_DOMAIN youredomain.ru
MYSQL_UID_FIELD gid
MYSQL_GID_FIELD gid
#uid и gid оба должны указывать на gid.
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD ‘/’
MYSQL_NAME_FIELD info
MYSQL_MAILDIR_FIELD maildir

Устанавливаем courier-imap-4.0.3.tar.bz2. Установка этого пакета происходит также, как и предыдущего, то есть НЕ от имени рута.
cd courier-imap-4.0.3
./configure --prefix=/usr/local --with-redhat
make
В процессе выполнения команды make может возникнуть такая ошибка: /usr/bin/ld: cannot find –lselinux. Это означает, что крипт спрашивает у ld библиотеку libselinux.so, возможно, что эта библиотека скрывается под именем libselinux.so.1, которая находится в /lib/. Сделайте символьный линк.
make check
su
make install-strip
make install-configure
cp courier-imap.sysvinit /etc/init.d/imapd
chmod 755 /etc/init.d/imapd
chkconfig –-add imapd
Редактируем файл /usr/local/etc/imapd следующим образом:

ADDRESS=0
PORT=143
MAXDAEMONS=40
MAXPERIP=4
PIDFILE=/var/run/imapd.pid
TCPDOPTS=”-nodnslookup –noidentlookup”
IMAP_CAPABILITY=”IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE”
IMAP_KEYWORDS=1
IMAP_CAPABILITY_ORIG=”IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE”
IMAP_PROXY=0
IMAP_PROXY_FOREIGN=0
IMAP_IDLE_TIMEOUT=60
IMAP_CAPABILITY_TLS=”$IMAP_CAPABILITY AUTH=PLAIN”
IMAP_CAPABILITY_TLS_ORIG=”$IMAP_CAPABILITY AUTH=PLAIN”
IMAP_DISABLETHREADSORT=0
IMAP_CHECK_ALL_FOLDERS=0
IMAP_OBSOLETE_CLIENT=0
IMAP_UMASK=022
IMAP_ULIMITD=65536
IMAP_USERLOCKS=1
IMAP_SHAREDINDEXFILE=/usr/local/etc/shared/index
IMAP_ENHANCEDIDLE=0
IMAP_TRASHFOLDERNAME=Trash
IMAP_EMPTYTRASH=Trash:7
IMAP_MOVE_EXPUNGE_TO_TRASH=0
SENDMAIL=/usr/sbin/sendmail
HEADERFROM=X-IMAP-SENDER
IMAPDSTART=NO
MAILDIRPATH=maildir

Теперь файл /usr/local/etc/pop3d:
PIDFILE=/var/run/pop3d.pid
MAXDAEMONS=40
MAXPERIP=4
AUTHMODULES=”authdaemond”
AUTHMODULES_ORIG=”authdaemond”
POP3AUTH=”LOGIN PLAIN”
POP3AUTH_ORIG=”LOGIN PLAIN”
POP3AUTH_TLS=”LOGIN PLAIN”
POP3AUTH_TLS_ORIG=”LOGIN PLAIN”
POP3_PROXY=0
PORT=110
ADDRESS=0
TCPDOPTS=”-nodnslookup –noidentlookup”
POP3DSTART=YES
А вот сейчас еще одна хитрость есть. Сhowner каталога юзера и сам id юзера в MYSQL должны совпадать, то есть нам надо создать пользователя, например courier без пароля, открыть файл /etc/passwd и изменить uid и gid этого пользователя на значение, указанное в файле config.php билинга MaBill. После этого надо дать этому пользователю полные права на доступ к папке /usr/spool.

Установка greylist.
Распаковываем gps-1.004.tar.gz в ту же папку install, после чего устанавливаем следующим образом:
cd gps-1.004
make -f Makefile.cvs
./configure
make
make install

После этого создаем в /usr/local/etc/ файл gps.conf со следующим содержимым:
Mode=init
Mode=reverse
Mode=weak
Mode=normal
Dbtype=mysql
Db_host=localhost
Db_username=greylist
Db_password=password
Db_name=greylist
Timeout=3600
Wl_pattern=dbcashed
Wl_network= dbcashed
Wl_recipient=db

Для работы этой программы необходимо создать в mysql базу greylist. Делаем:

mysql -p
> CREATE DATABASE greylist;
> GRANT ALL ON greylist.* TO greylist@localhost;
> SET PASSWORD FOR greylist@localhost=PASSWORD(‘password’);
>exit
Теперь надо создать таблицы в этой базе. Gps делает это автоматически, для этого нужно в файле /usr/local/etc/gps.conf раскомментировать строку mode=init, остальные строки, начинающиеся с mode закомментировать:
Mode=init
#mode=reverse
#mode=weak
#mode=normal
Теперь надо запустить gps:
/usr/local/bin/gps –v /usr/local/etc/gps.conf
Подождать пару секунд и отменить выполнение (Ctrl+C). Смотрим в папку, где mysql хранит свои базы, создалась ли база с именем greylist. Если да, то едем дальше, если нет, вчитываемся сначала.
Если все прошло успешно, закомментируем строку Mode=init в файле /usr/local/etc/gps и раскомментируем mode=normal:
#Mode=init
#mode=reverse
#mode=weak
mode=normal
Теперь надо указать gps, что почта от нашего домена и из локальной сети освобождается от применения функции greylist.
mysql -p
use greylist;
> insert into network values ('192.168.0.','my home network');
> insert into recipient values ('address1@mydomain.com','this user wants his spam');
> exit
К сожалению, команду №2 надо повторить для всех почтовых ящиков вашего домена. Я не силен в PHP, а то можно было бы включить эту команду в файл admin/mail_add.php.
Теперь переходим к редактированию конфигурационных файлов Postfix. В main.cf добавляем следующие строчки:
smtpd_recipient_restrictions =
reject_unauth_destination
check_policy_service unix:private/policy
В master.cf пишем вот такое:
policy unix - n n - - spawn
user=nobody argv=/usr/local/bin/gps /usr/local/etc/gps.conf
т.е. конфиг должен выглядеть примерно так:
smtp inet n - n - - smtpd
policy unix - n n - - spawn
user=nobody argv=/usr/local/bin/gps /usr/local/etc/gps.conf
далее всё остальное, созданное по умолчанию.
Теперь можно рестартить сервер.
После рестарта проводим полный тест: создаем юзеря, настраиваем свой любимый почтовый клиент и пробуем как оно работает. Если все нормально – едем дальше, если нет – втыкаем в логи и читаем сначала.

Установка trend micro.
Распаковываем imss55linux-1123.tar.gz в любое место. Получается две папки - IMSS55_LX_GM и IMSS55_LX_SP2. Нас интересует только первая - IMSS55_LX_GM, открываем ее и запускаем isinst. Долго читаем лицензионное соглашение, нажимая на enter. Тут главное, не пропустить вопрос типа Желаете ли вы установить продукт? Надо ответить yes и снова нажать на enter. В процессе инсталлятор задаст множество глупых и не очень вопросов, на которые надо ответить. Самое главное – на вопрос поставить ли Web-interface, обязательно ответить yes, на вопрос будете ли вы использовать Postfix, ответить да, на остальные вопросы тоже ответить нет. Если вы установили в систему все вышеперечисленные пакеты, то антивирус установится корректно и без ошибок. В конце инсталляции, вам будет задан вопрос насчет того, желаете ли вы зарегистрировать свой продукт. Я рекомендую поставить там yes и потратить 3-4 минуты на ввод регистрационного кода, чтобы потом уже не заморачиваться, хотя, конечно, это можно сделать и потом, через Web-interface программы. Примечание: для антивируса и антиспама, регистрационный код один и тот же, а именно вот этот: AP-J9HN-533KS-JFYBJ-235UD-L3YMC-GYTZK.
По завершении установки можно перезагрузить компьютер, с тем, чтобы порверить, корректно ли будут стартовать сервисы.
Во время перезагрузки мы вдруг видим, что сервис CCGI не стартовал, то есть невозможно получить доступ к web-интерфейсу антивируса. Замечательно. Лезем в логи и находим там, что для запуска ccgi нужна библиотека libdb.so.2. Внимательно втыкаем во все папки, где может находиться эта хреновина, и убеждаемся таки, что ее нигде нету. Зато в папке /lib обнаруживаем библиотеку libdb2.so.3 и думаем, что она, наверное, подойдет (версия все-таки более поздняя). Делаем на нее символьный линк или, если в лом, копируем ее туда же под именем libdb.so.2, а потом еще в папку /usr/lib. Вот теперь компьютер снова можно перезагрузить. В процессе загрузки убеждаемся, что все сервисы стартовали и теперь до нашего антивируса можно достучаться по web- интерфейсу. Стучимся: http://<ваш сервер>:8081/IMSS.html и видим, что оно хочет пароль. Так как по умолчанию пароля там никакого нету, тыкаем в кнопку ОК и вываливаемся в основное меню. В принципе на этом можно пока остановиться и приступить непосредственно к прикручиванию всего этого хозяйства к Postfix’у. Для этого нужно в изменить файлы main.cf и master.cf следующим образом:

/etc/postfix/main.cf:
default_process_limit=200

imss_timeout=10m
imss_connect_timeout=1s

content_filter=imss:localhost:10025
imss_destination_recipient_limit=200
imss_destination_concurrency_limit=20

/etc/postfix/master.cf:
Imss unix - - n - - smtp
disable_dns_lookups=yes
smtp_connect_timeout=$imss_connect_timeout
smtp_data_done_timeout=$imss_timeout

localhost:10026 inet n - n - 20 smtpd
content_filter=
smtpd_timeout=$imss_timeout
local_recipient_maps=
myhostname=localhost.$mydomain

После этого перезапускаем Postfix (а лучше перезагрузить компьютер чтобы убедиться, что все работает). Собственно на этом основную работу можно считать законченной, все дальнейшие действия сводятся к тонкой настройке антивируса и, возможно, Postfix’a.

RSS-материал