Удаляем sendmail: rpm -e --nodeps sendmail Ключ --nodeps используется для того, чтобы удалить sendmail несмотря на то, что его используют другие установленные в системе пакеты для своих нужд. С этими задачами будет справляться наш postfix.
i_volume bigint unsigned not null, # volume limit, in bytes
is_active tinyint not null default 0,
k_mail_domain bigint unsigned not null,
s_comment blob not null,
s_mail varbinary(64) not null,
s_net tinyblob not null, # с каких хостов разрешён вход
s_password binary(32) not null,
is_remove tinyint not null default 0,
index(k_mail_domain),
unique index(s_mail),
foreign key(k_mail_domain) references studio_mail_domain(k_mail_domain) on delete cascade
) engine=InnoDB default character set=binary;
# выдадим права пользователю (после создания таблиц, так как тут есть ссылки на таблицы)
grant select on mail.* to u_mail@localhost identified by 'mailpass';
grant delete,insert,update on mail.studio_mail_quota to u_mail@localhost;
# Внесём запись о виртуальном домене:
INSERT INTO studio_mail_domain (k_mail_domain, s_domain,is_active) VALUES (1, '01.site.1024.info',1);
# Создадим первый тестовый ящик
INSERT INTO studio_mail_user (k_mail_user, k_mail_domain, s_mail, s_password,is_active) VALUES (1, 1, 'test@01.site.1024.info', MD5('password'),1);
# Создадим первый тестовый алиас
INSERT INTO studio_mail_alias (k_mail_alias, s_from, s_to) VALUES (1, 'test@01.site.1024.info','test@01.site.1024.info'), (2, 'test@01.site.1024.info', 'yuri@popoff.donetsk.ua');
/etc/postfix/mysql-virtual-mailbox-domains.cf user = mailuser
password = mailuser2007
hosts = 127.0.0.1:46157
dbname = mailserver
query = SELECT 1 FROM studio_mail_domain WHERE s_domain='%s' and is_active=1 and is_remove=0
/etc/postfix/mysql-virtual-mailbox-maps.cf user = mailuser
password = mailuser2007
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM studio_mail_user WHERE s_mail='%s' and is_active=1 and is_remove=0
/etc/postfix/mysql-virtual-alias-maps.cf user = mailuser
password = mailuser2007
hosts = 127.0.0.1
dbname = mailserver
query = SELECT s_to FROM studio_mail_alias WHERE s_from='%s' and is_remove=0
/etc/postfix/mysql-email2email.cf user = mailuser
password = mailuser2007
hosts = 127.0.0.1
dbname = mailserver
query = SELECT s_mail FROM studio_mail_user WHERE s_mail='%s' and is_active=1 and is_remove=0
/etc/postfix/mysql-quota.cf user = mailuser
password = mailuser2007
hosts = 127.0.0.1:46157
dbname = mailserver
query = SELECT
'452 Mailbox is over quota'
FROM.
studio_mail_user left join
studio_mail_quota on
studio_mail_quota.s_mail=studio_mail_user.s_mail
WHERE.
studio_mail_user.s_mail = '%s' and
studio_mail_user.i_volume>0 and
(
studio_mail_quota.s_mail is null or
studio_mail_quota.i_byte>=studio_mail_user.i_volume
)
Выставим правильные права доступа на файлы конфигкрации почтового сервера, ведь в них хранятся пароли от базы данных chgrp postfix /etc/postfix/mysql-*.cf chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf
postmap -q 01.site.1024.info mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf должны увидеть 1, если всё ок
postmap -q test@01.site.1024.info mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf должны увидеть 1, если всё ок
postmap -q test@01.site.1024.info mysql:/etc/postfix/mysql-virtual-alias-maps.cf должны увидеть: test@01.site.1024.info,yuri@popoff.donetsk.ua
Далее настроим dovecot в качестве локального агента доставки писем, для этого отредактируйте файл /etc/postfix/master.cf добавив в конец это dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d ${recipient}
(вторая строка обязательно с пробелами!)
Запускаем сервер postfix: service postfix start chkconfig postfix on
Если сервер уже был загружен, то нужно перезагрузить конфиг: postfix reload
Добавить информацию о виртуальном транспорте в главный конфиг Postfix postconf -e virtual_transport=dovecot postconf -e dovecot_destination_recipient_limit=1
Готовим каталог, где будет храниться почта. /var/vmail/ удаляем эту ссылку и создаём вместо неё каталог с владельцем vmail:vmail и правами 0770
Настройка dovecot: /etc/dovecot/dovecot.conf # Это надо поменять:
protocols = imap pop3
login_greeting = Welcome to IMAP/POP3 server
раскомментировать и поменять: mail_location = maildir:/var/vmail/%d/%n mail_uid = 5000 mail_gid = 5000 first_valid_uid = 5000 # только наш юзер может быть использован last_valid_uid = 5000
найти #namespace и после него добавить: namespace {
type = private
separator =.
prefix = INBOX.
/etc/dovecot/conf.d/90-quota.conf Надо только найти эти строчки и раскомментировать нужное: plugin {
quota = dict:user::proxy::quotadict
quota_rule = *:bytes=1073741824
quota_rule2 = Trash:storage=+100M
}
/etc/dovecot/dovecot-sql.conf driver = mysql
connect = host=/var/run/mysqld/mysqld.sock dbname=mail user=u_mail password=pass
default_pass_scheme = PLAIN-MD5
password_query = SELECT s_mail as user, s_password as password FROM studio_mail_user WHERE s_mail='%u' and is_active=1 and is_remove=0;
user_query = SELECT CONCAT('/var/vmail/',CONCAT(SUBSTRING_INDEX(s_mail,'@',-1),'/',SUBSTRING_INDEX(s_mail,'@',1))) AS home,s_mail as user, 5000 AS uid, 5000 AS gid, CONCAT('*:bytes=',i_volume) AS quota_rule FROM studio_mail_user WHERE s_mail='%u';
iterate_query = SELECT s_mail AS username FROM studio_mail_user;
Выставим права доступа к конфигам dovecot: chgrp vmail /etc/dovecot/dovecot*.conf chmod g+r,o-rwx /etc/dovecot/dovecot*.conf
Поскольку журнал dovecot-deliver.log может быстро расти, нужно настроить ротацию журналов: /etc/logrotate.d/dovecot-deliver /var/vmail/dovecot-deliver.log {
weekly
rotate 14
compress
}
Запускаем сервер dovecot: service dovecot start chkconfig dovecot on
Если сервер уже был загружен, то нужно перезагрузить конфиг: service dovecot restart
настроим аутентификацию SMTP в postfix: postconf -e mynetworks=192.168.50.0/24 # это только если надо разрешить локально отправлять без аутентификации postconf -e smtpd_sasl_type=dovecot
можно добавить permit_mynetworks (обязательно после check_recipient_access, который должен быть обязательно первым)
TXT “v=spf1 ip4:85.214.93.191 ip4:85.214.149.150 -all” The “-all” at the end tells you that no other IP addresses should be accepted (FAIL). Another definition like “~all” means a SOFTFAIL - you should at least be suspicious and perhaps increase the spam score. Идти сюда, чтобы сгенерировать правильную запись: http://www.openspf.org/