CentOS Postfix Postfixadmin

Архитектура современных почтовых систем

Установим:
MTA – Postfix (SMTP)
MDA – Dovecot (POP3/IMAP)
Postfixadmin – веб-интерфейс для управления Postfix
Squirrelmail – веб-интерфейс для пользователей почтового сервера

Приступим к установке Postfix. Удаляем из системы монстра Sendmail

# service sendmail stop
# yum -y remove sendmail

Репозиторий CentALT требует для своей работы подключенного репозитория EPEL
1. Устанавливаем epel репозиторий

# rpm -ihv http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

2. Устанавливаем CentALT репозиторий

# rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm

Так как базу аккаунтов пользователей будем хранить в MySQL необходимо его установить

# yum -y install mysql mysql-server mysql-devel mysql-libs php-mysql 

Запускаем сервер MySQL

# chkconfig mysqld on
# service mysqld start

Воспользуемся скриптом для настройки безопасности MySQL сервера

# /usr/bin/mysql_secure_installation
Change the root password? [Y/n]
Remove anonymous users? [Y/n]
Disallow root login remotely? [Y/n]
Remove test database and access to it? [Y/n]
Reload privilege tables now? [Y/n]
All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
С помощью этого скрипта мы выполнили следующие действия:
-задали пароль для супер пользователя root, так как по умолчанию для него не установлен пароль
-удалили анонимного пользователя, который создается только для тестовых целей
-запретили пользователю root входить удаленно. Теперь он сможет заходить только с localhost
-удалили тестовую БД test и доступ к ней

Последние штрихи с MySQL, создадим базу данных postfix и пользователя postfix

# mysql -p
mysql> CREATE DATABASE postfix;
mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON `postfix`.* TO 'postfix'@'localhost';
mysql> quit;

Перезапускаем сервис MySQL

# service mysqld restart

Устанавливаем Postfix

yum -y install postfix

Проверяем что Postfix собран с поддержкой MySQL

# postconf -m | grep mysql
mysql

Устанавливаем Postfix в автозагрузку и запускаем сервис

# chkconfig postfix on
# service postfix start
Starting postfix:                                          [  OK  ]

Настройка Postfix статья на OpenNET
Перевод конфигурационного файла postfix main.cf
Конфигурационные файлы находятся в /etc/postfix

Редактируем /etc/postfix/main.cf

soft_bounce = no
default_privs = nobody
myhostname = postfix.bezha.od.ua
mydomain = bezha.od.ua
myorigin = $mydomain
inet_interfaces = all
local_recipient_maps = $virtual_mailbox_maps, $virtual_alias_maps
mynetworks = 127.0.0.0/8
mail_spool_directory = /var/spool/mail
debug_peer_list = 127.0.0.1

Получаем промежуточный вариант /etc/postfix/main.cf

# grep -v -E "#|^$" main.cf
soft_bounce = no
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
default_privs = nobody
myhostname = postfix.bezha.od.ua
mydomain = bezha.od.ua
myorigin = $mydomain
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mail_spool_directory = /var/spool/mail
smtpd_banner = $myhostname ESMTP
debug_peer_level = 2
debug_peer_list = 127.0.0.1
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.6.7/samples
readme_directory = /usr/share/doc/postfix-2.6.7/README_FILES
config_directory = /etc/postfix

Настраиваем конфигурацию для работы с виртуальными пользователями

virtual_mailbox_domains = mysql:$config_directory/sql/vdomains.cf
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = mysql:$config_directory/sql/vmailbox.cf
virtual_alias_maps = mysql:$config_directory/sql/valias.cf
virtual_minimum_uid = 1150
virtual_uid_maps = static:1150
virtual_gid_maps = static:12
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

Настройка SMTP авторизации

smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_non_fqdn_recipient,
reject_unverified_recipient,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dialups.mail-abuse.org,
reject_rbl_client dull.ru

Создаем файлы которые мы прописали в конфигурационном файле main.cf

# mkdir /etc/postfix/sql

Конфигурационный файл /etc/postfix/sql/vdomains.cf

user = postfix
password = password
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
query = SELECT domain FROM domain WHERE domain='%s' AND backupmx='0' AND active='1'

Конфигурационный файл /etc/postfix/sql/vmailbox.cf

user = postfix
password = password
hosts = localhost
dbname = postfix
table = mailbox
select_field = CONCAT(domain,'/',maildir)
where_field = username
additional_conditions = and active = '1'
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'

Конфигурационный файл /etc/postfix/sql/valias.cf

user = postfix
password = password
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

Для того, чтобы dovecot служил локальным транспортом нам необходимо добавить в master.cf

dovecot unix - n n - - pipe
flags=DRhu user=vmail:mail argv=/usr/libexec/dovecot/deliver -d $(recipient)

Установка и настройка Dovecot

Устанавливаем Dovecot и прописываем в автозагрузку

# yum -y install dovecot
# chkconfig dovecot on

Добавляем следующие строки в /etc/dovecot.conf

base_dir = /var/run/dovecot/
protocols = imap pop3
protocol imap {
     listen = *:143
}
protocol pop3 {
     listen = *:110
}
log_timestamp = "%Y-%m-%d %H:%M:%"
syslog_facility = mail
mail_location = maildir:/var/vmail/%d/%u
first_valid_uid = 1000
last_valid_uid = 1000
maildir_copy_with_hardlinks = yes
protocol imap {
login_executable = /usr/libexec/dovecot/imap-login
mail_executable = /usr/libexec/dovecot/imap
imap_max_line_length = 65536
}
protocol pop3 {
login_executable = /usr/libexec/dovecot/pop3-login
mail_executable = /usr/libexec/dovecot/pop3
pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
postmaster_address = postmaster@postfix.bezha.od.ua
sendmail_path = /usr/lib/sendmail
auth_socket_path = /var/run/dovecot/auth-master
}
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
auth default {
mechanisms = plain
passdb sql {
    args = /etc/dovecot-sql.conf
  }
user = nobody
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0660
user = vmail
group = mail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postdrop
}
}
}
dict {
}
plugin {
}

Конфигурационный файл /etc/dovecot-sql.conf

driver = mysql
connect = host=localhost dbname=postfix user=postfix password=password
default_pass_scheme = MD5
user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail,
1000 AS uid, 12 AS gid, concat('dirsize:storage=', quota) AS quota FROM mailbox
WHERE username = '%u' AND active = '1'
password_query = SELECT username as user, password, '/var/vmail/%d/%n' as userdb_
home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 1000 as userdb_uid, 12 as userdb_gid
FROM mailbox WHERE username = '%u' AND active = '1'

Postfixadmin
Postfixadmin – веб-интерфейс для управления Postfix.
Устанавливаем Apache и php

# yum -y install httpd php php-imap php-mysql php-mbstring
# chkconfig httpd on
# service httpd start
Starting httpd:                                            [  OK  ]

Установка PostfixAdmin

# cd /var/www/html
Скачиваем архив с сайта  http://sourceforge.net 
# tar zxvf postfixadmin-2.3.2.tar.gz
# mv postfixadmin-2.3.2 postfixadmin

В файле /var/www/html/postfixadmin/config.inc.php

$CONF['configured'] = true;
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'password';
$CONF['database_name'] = 'postfix';

Заходим на http://ip.ip.ip.ip/postfixadmin/setup.php и создаем суперпользователя
С версии 2.3 более нет необходимости удалять файл setup.php!
Управление осуществляется с адреса http://ip.ip.ip.ip/postfixadmin/login.php