Архитектура современных почтовых систем
Установим:
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