Postfix mail сървър с MySQL виртуални кутии на Debian дистро

В тази статия ще се опитам да Ви обясня как да инсталирате и конфигурирате Postfix mail сървър на Debian дистро използващ MySQL сървър за виртуални кутии тъй като аз самия до скоро имах проблеми и неможех да намеря howto на български.

За целта смятам да използвам Postfix, Courier imap/pop3, MySQL

1. Инсталираме необходимия софтуер
apt-get install postfix postfix-mysql postfix-doc
apt-get install courier-authdaemon courier-authmysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl
apt-get install postfix-tls libsasl2 libsasl2-modules libsasl2-modules-sql openssl

* Ако вече имате mysql сървър пропуснете реда отдолу!
apt-get install mysql-server-5.0

2. Създаваме таблиците в mysql сървъра
* Ако вече имате mysql сървър пропуснете реда отдолу! Той просто ще сложи root парола на mysql ако вече няма такава…
mysqladmin -u root password <парола>като замените <парола> с паролата, която бихте искали да ползвате

Създаваме базата данни ‘mail’
mysqladmin -u root -p create mail
Сега се логваме като root в mysql сървъра за да създадем необходимите ни таблици…
mysql -u root -p
След като се логнем изпълняваме следните команди в конзолата на mysql-a
grant select on mail.* to mail_admin@localhost identified by '<парола>';
flush privileges;
USE mail;

Сега създаваме следните таблици: domains, forwardings и users
CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) ) TYPE=MyISAM;
CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) ) TYPE=MyISAM;
CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) ) TYPE=MyISAM;

Сега създаваме 4 файла в папката „/etc/postfix“, които ще използваме за да насочваме mail сървъра да чете виртуалните кутии от mysql сървъра…
cd /etc/postfix
touch mysql-virtual_domains.cf
touch mysql-virtual_forwardings.cf
touch mysql-virtual_mailboxes.cf
touch mysql-virtual_email2email.cf

Време е да редактираме файловете! Добавете следните редове във файловете:

mysql-virtual_domains.cf

user = mail_admin
password = <парола>
dbname = mail
table = domains
select_field = ‘virtual’
where_field = domain
hosts = 127.0.0.1

mysql-virtual_forwardings.cf

user = mail_admin
password = <парола>
dbname = mail
table = forwardings
select_field = destination
where_field = source
hosts = 127.0.0.1

mysql-virtual_mailboxes.cf

user = mail_admin
password = <парола>
dbname = mail
table = users
select_field = CONCAT(SUBSTRING_INDEX(email,’@',-1),’/',SUBSTRING_INDEX(email,’@',1),’/')
where_field = email
hosts = 127.0.0.1

mysql-virtual_email2email.cf

user = mail_admin
password = <парола>
dbname = mail
table = users
select_field = email
where_field = email
hosts = 127.0.0.1

Сега трябва да променим правата на файловете, за да немогат да бъдат четени от който и да е потребител.
chgrp postfix /etc/postfix/mysql-virtual_*.cf
chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf

Време е да създадем потребител ‘vmail’ в който ще се записват писмата
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Отваряме файла „/etc/postfix/main.cf“ за редактиране и променяме следните неща:

inet_interfaces = all
myhostname = mail.domain.com # променете domain.com с вашия домейн
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 127.0.0.0/8, 192.168.0.0/8 # избройте ip адресите които ще могат да изпращат и получават email-и през вашия сървър
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_forwardings.cf mysql:/etc/postfix/mysql-virtual_email2email.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_base = /home/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key

Нека направим малък тест… ще рестартираме postfix daemon-а
/etc/init.d/postfix restart
postfix check

Сега създаваме файла „/etc/postfix/sasl/smtpd.conf“ за да насочваме postfix откъде да чете потребителите и паролите им
touch /etc/postfix/sasl/smtpd.conf
и във файла записваме:

pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: plain login cram-md5 digest-md5
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: mail_admin
sql_passwd: <парола>
sql_database: mail
sql_select: select password from users where email=’%u@%r’

Променяме правата на файла:
chown root:postfix /etc/postfix/sasl/smtpd.conf
chmod u=rw,g=r,o= /etc/postfix/sasl/smtpd.conf

Продължаваме със създаването на няколко сертификата:
openssl req -new -outform PEM -out /etc/postfix/smtpd.cert -newkey rsa:2048 -nodes -keyout /etc/postfix/smtpd.key -keyform PEM -days 3650 -x509
Ще Ви бъдат зададени няколко въпроса. Попълнете ги според Вашите нужди…

Отваряме файла „/etc/courier/authmysqlrc“ за редактиране и коригираме следните линии:

MYSQL_SERVER localhost
MYSQL_USERNAME mail_admin
MYSQL_PASSWORD <парола>
MYSQL_PORT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE users
#MYSQL_CRYPT_PWFIELD (comment this out)
MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD „/home/vmail“
#MYSQL_NAME_FIELD (comment this out)
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,’@',-1),’/',SUBSTRING_INDEX(email,’@',1),’/')

Рестартираме courier-а:
/etc/init.d/courier-authdaemon restart
и проверяваме дали всичко е наред пишейки:
telnet localhost pop3
ако получим отговор „+OK Hello there.“ значи всичко е наред!

Сега ще създадем примерна виртуална кутия за да тестваме сървъра:
mysql -u root -p
INSERT INTO `domains` (`domain`) VALUES ('virtual.mail');
INSERT INTO `users` (`email`,`password`) VALUES ('user@virtual.mail','pass');
QUIT;

Сега ще проверим дали всичко е наред, като изпратим email на user@virtual.mail
За целта ще се свържем към smtp сървъра използвайки telnet:
telnet localhost 25
след като се свържете пишете

ehlo localhost

и трябва да получите следните линии

250-mailtest
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME

време е да изпратим примерния email

mail from:&lt;test@kostanev.com&gt;

трябва да получим

250 Ok

после пишем

rcpt to:&lt;user@virtual.mail&gt;

пак получаваме250 Okпишем
data
и получаваме

354 End data with .

сега пишем съобщението:
Hello! Tova e testov email.
.

получаваме

250 Ok: queued as ABC1D1C123

* ABC1D1C123 99,9% ще е различно при вас

и пишем
quit
за да излезнем от telnet връзката към smtp сървъра!

Сега ще направим проверка на лог файла за да видим дали всичко е OK
tail -n 10 -f /var/log/mail.log
ако имате редовете

Jul 24 21:48:28 myserver postfix/smtpd[9119]: connect from myserver[127.0.0.1]
Jul 24 21:48:48 myserver postfix/smtpd[9119]: F2C1B47BD: client=myserver[127.0.0.1]
Jul 24 21:48:52 myserver postfix/cleanup[9144]: F2C1B47BD: message-id=
Jul 24 21:48:52 myserver postfix/qmgr[9117]: F2C1B47BD: from=, size=313, nrcpt=1 (queue active)
Jul 24 21:48:52 myserver postfix/virtual[9148]: F2C1B47BD: to=, relay=virtual, delay=10, status=sent (delivered to maildir)

Изпълнете командата
find /home/vmail
и трябва да получите нещо от рода

/home/vmail/virtual.test
/home/vmail/virtual.test/user
/home/vmail/virtual.test/user/tmp
/home/vmail/virtual.test/user/cur
/home/vmail/virtual.test/user/new
/home/vmail/virtual.test/user/new/1114511715.V801I7400b.your.server

Ами честито! Вече се предполага, че трябва имате работещ mail сървър. Ако желаете да слагате разни (лично за мен не ефикасни) спам защити можете да потърсите информация за clamav, spamassassin, amavisd и т.н.

Ако желаете можете да ползвате webmail клиент. Някой добри и свободни за употреба са IlohaMail, SquirrelMail и т.н.

Публикувано в Уроци. Leave a Comment »

Вашият коментар