Skip to content

By Тодор in Linux

Много е удобно да се ползват виртуални потребители за пощенски сървър, а е и много по-сигурно.
В тази конфигурация ще ползвам операционна система CentOS 5.5 и демоните dovecot, postfix, postgresql. Косвено участва и Apache, като уеб сървър за уеб интерфейса postfixadmin.

1. Инсталиране на postgresql server:
#yum -y install postgresql-server

След стартиране на postgresql – продължаваме.
Създаване на потребител и база за postfix:

#su postgres
$psql
postgres=# create user postfix with password 'password';
postgres=# create database postfix owner postfix;
postgres=# \q
$exit

2. Инсталиране на Postfix с поддръжка на база данни.
Ако до сега сте имали инсталиран Postfix, той трябва да бъде деинсталиран:
#yum erase postfix

Редактира се /etc/yum.repos.d/CentOS-Base.repo:
В раздел [base] и [updates] се добавя реда:
exclude=postfix
В раздел [centosplus]:
enabled=1

Проверка дали пакета на Postfix с поддръжката на бази данни се “вижда”:

#yum list postfix
...
...
postfix.x86_64  2:2.3.3-2.1.centos.mysql_pgsql

Това, което ни трябва се вижда на края – “…mysql_pgsql”.
Инсталираме:
#yum -y install postfix

Това, което ни трбява в /etc/postfix/main.cf:

myhostname = mail.mydomain.tld
inet_interfaces = all
transport_maps = pgsql:/etc/postfix/transport.cf
virtual_alias_maps = pgsql:/etc/postfix/virtual.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_minimum_uid = 5000
virtual_minimum_gid = 5000
virtual_mailbox_domains = pgsql:/etc/postfix/transport.cf
virtual_mailbox_base = /home/mail
virtual_mailbox_maps = pgsql:/etc/postfix/mailboxes.cf
virtual_mailbox_limit = 1073741824

Последния ред означава, че имаме лимит от 1GB на пощенска кутия.

/etc/postfix/transport.cf:

hosts = localhost
user = postfix
password = password
dbname = postfix
table = domain
select_field = transport
where_field = domain

/etc/postfix/virtual.cf

hosts = localhost
user = postfix
password = password
dbname = postfix
table = alias
select_field = goto
where_field = address

/etc/postfix/mailboxes.cf

hosts = localhost
user = postfix
password = password
dbname = postfix
table = mailbox
select_field = maildir
where_field = username

След като всички конфигурационни файлове са готови, стартираме демона:
#/etc/init.d/postfix start

3. Инсталиране на dovecot:
#yum -y install dovecot

В /etc/dovecot.conf:

auth default {
    mechanisms = plain
    passdb sql {
        args = /etc/dovecot-pgsql.conf
    }
    userdb sql {
        args = /etc/dovecot-pgsql.conf
    }
    socket listen {
        client {
            path = /var/run/dovecot/auth-client
            mode = 0660
            user = postfix
            group = postfix
        }
    }
}
first_valid_uid = 5000
first_valid_gid = 5000

/etc/dovecot-pgsql.conf:

driver = pgsql
connect = host=localhost dbname=postfix user=postfix password=password
default_pass_scheme = crypt
password_query = SELECT password FROM mailbox WHERE username='%u' AND active='1'
user_query = SELECT '/home/mail/'||maildir AS home, '/home/mail/'||maildir AS mail, 5000 as uid, 5000 as gid FROM mailbox WHERE username='%u' AND active='1'

Стартиране на dovecot:
#/etc/init.d/dovecot start

Поглеждаме в /var/log/maillog за евентуални грешки. Ако всичко е наред може би дори ще се вижда и поток от спам към несъществуващи пощенски кутии.

4. Postfixadmin
Инсталацията му се свежда до разархивирането на архива в папка достъпна през уеб и редакцията на config.inc.php, като в него единствено трябва да са попълни конфигурацията за достъп до базата данни.

След като създадем потребители чрез postfixadmin, те вече ще могат да получават поща, както и ще имат достъп до пощенските си кутии чрез IMAP/POP3.

5. Изпращане на електронна поща – SMTP
Елементарен начин това да стане е като се опишат мрежите, които е разрешено да релейват през този пощенски сървър в /etc/postfix/main.cf:
mynetworks = 127.0.0.0/8 192.168.0.0/24

Това не е най-сигурният метод, понеже не използва никаква идентификация на ниво потребител.
По-добрият вариант е потребителят да трябва да се идентифицира, за да изпрати успешно писмо.
Добавяме в /etc/postfix/main.cf следните няколко реда:

smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Вече можете и да изпращате през този сървър 😉

Добре ще е да сложим и елементарна спам-защита. Необхоримо е да преработим smtpd_recipient_restrictions записа в main.cf, така, че да се получи следното:

smtpd_recipient_restrictions =
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    permit_mynetworks,
    permit_sasl_authenticated,
    check_client_access hash:/etc/postfix/whitelist,
    reject_rbl_client zen.spamhaus.org,
    reject_rbl_client bl.spamcop.net,
    reject_rbl_client 0spam.fusionzero.com,
    reject_rbl_client bl.spamcannibal.org,
    reject_rbl_client blackholes.five-ten-sg.com,
    reject_rbl_client blackholes.intersil.net,
    reject_rbl_client dnsbl.sorbs.net,
    reject_rbl_client dnsbl-0.uceprotect.net,
    reject_rbl_client dnsbl-1.uceprotect.net,
    reject_unauth_destination

Като файлът /etc/postfix/whitelist съдържа хостове изпращащи поща, които не желаете да преминат през спам-филтрите. Обикновено това са пощенски сървъри на мързеливи администратори, които не отговарят на някое или всички изисквания за легитимно изпращане на поща. Ето примерно съдържание на файла:

212.39.90.88  OK
mbox.contact.bg  OK
sts-tech.com  OK
87.121.24.7  OK

Това е всичко необходимо за напълно работещ сървър с виртуални потребители. За въпроси – ползвайте коментарите. Скоро ще пусна статия как да подсигурим същият този сървър с помощта на SSL.

Tags: , , , , , ,

Comment Feed

No Responses (yet)



Some HTML is OK

or, reply to this post via trackback.