Настройка почтового сервера (Postfix, Dovecot, MariaDB/MySQL) в CentOS/RHEL 7
Содержание
Предполагается что у вас уже установлены и настроены Apache, MariaDB/MySQL и PHP. Инструкцию по настройке можно прочитать по этой ссылке.
Установка PostfixAdmin
Скачаем архив с PostfixAdmin, распакуем и разложим его содержимое по разным папкам:
$ wget http://sourceforge.net/projects/postfixadmin/files/latest/download?source=files -O postfixadmin.tar.gz
$ tar zxvf postfixadmin.tar.gz --no-same-owner --no-same-permissions --directory=/usr/share
$ rm -f postfixadmin.tar.gz
$ ln -s /usr/share/postfixadmin-2.92 /usr/share/postfixadmin
$ chcon -u system_u /usr/share/postfixadmin* -R
$ mkdir /usr/share/doc/postfixadmin-2.92
$ chcon -u system_u /usr/share/doc/postfixadmin-2.92
$ mv /usr/share/postfixadmin/{ADDITIONS,DOCUMENTS,VIRTUAL_VACATION} /usr/share/doc/postfixadmin-2.92
$ rm -rf /usr/share/postfixadmin/debian
$ chcon -t httpd_sys_rw_content_t /usr/share/postfixadmin/templates_c
$ chown root:apache /usr/share/postfixadmin/templates_c
$ chmod g+w /usr/share/postfixadmin/templates_c
$ mkdir /etc/postfixadmin
$ touch /etc/postfixadmin/config.local.php
$ chown root:apache /etc/postfixadmin/config.local.php
$ chmod 0640 /etc/postfixadmin/config.local.php
$ chcon -u system_u /etc/postfixadmin -R
$ chcon -t httpd_sys_content_t /etc/postfixadmin/config.local.php
$ ln -s /etc/postfixadmin/config.local.php /usr/share/postfixadmin/
$ chcon -u system_u /usr/share/postfixadmin/config.local.php -R
Теперь создадим в MySQL базу данных, в которой будет храниться информация о почтовых пользователях:
$ mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 5.5.40-MariaDB MariaDB Server Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE `%VMailDB%` DEFAULT CHARACTER SET utf8; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> CREATE USER '%VMailUser%'@'localhost' IDENTIFIED BY '%VMailPassWord%'; Query OK, 0 rows affected (0.03 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON `%VMailDB%`.* TO '%VMailUser%'@'localhost'; Query OK, 0 rows affected (0.03 sec) MariaDB [(none)]> \q Bye
Условимся, что здесь и далее вместо %VMailDB%, %VMailUser% и %VMailPassWord% нужно вписывать название базы данных, имя пользователя и пароль. Никаких процентов!
Пропишем данные о созданной базе в конфигурационный файл PostfixAdmin и сделаем несколько дополнительных настроек:
$ nano -w /etc/postfixadmin/config.local.php
<?php
$CONF['configured'] = true;
$CONF['setup_password'] = 'changeme';
$CONF['default_language'] = 'en';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = '%VMailUser%';
$CONF['database_password'] = '%VMailPassWord%';
$CONF['database_name'] = '%VMailDB%';
$CONF['admin_email'] = 'postmaster@example.com';
$CONF['page_size'] = '50';
$CONF['default_aliases'] = array (
'MAILER-DAEMON' => 'postmaster@example.com',
'abuse' => 'postmaster@example.com',
'postmaster' => 'hostmaster@example.com',
'webmaster' => 'hostmaster@example.com',
'hostmaster' => 'root@example.com',
'root' => 'admin@example.com'
);
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['transport'] = 'YES';
$CONF['transport_options'] = array (
'dovecot', // for virtual accounts
'virtual', // for virtual accounts
'local', // for system accounts
'relay' // for backup mx
);
$CONF['transport_default'] = 'dovecot';
$CONF['vacation'] = 'NO';
$CONF['vacation_control'] = 'NO';
$CONF['vacation_control_admin'] = 'NO';
$CONF['backup'] = 'YES';
$CONF['sendmail'] = 'YES';
$CONF['logging'] = 'YES';
$CONF['fetchmail'] = 'YES';
$CONF['fetchmail_extra_options'] = 'YES';
$CONF['footer_text'] = 'Return to mail.example.com';
$CONF['footer_link'] = 'http://mail.example.com';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';
Подключим PostfixAdmin к веб-серверу Apache:
$ nano -w /etc/httpd/conf.d/postfixadmin.conf
# postfixadmin - Web based Management tool created for Postfix.
#
# Allows only localhost by default
#
# But allowing postfixadmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL
Alias /postfixadmin /usr/share/postfixadmin
<Directory /usr/share/postfixadmin/>
AddDefaultCharset UTF-8
<IfModule mod_authz_core.c>
# Apache 2.4
<RequireAny>
Require ip 127.0.0.1
Require ip ::1
Require ip 192.168.0.0/16
</RequireAny>
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
Allow from 192.168.0.0/16
</IfModule>
</Directory>
$ chcon -u system_u /etc/httpd/conf.d/postfixadmin.conf
$ systemctl reload httpd.service
Открываем в браузере ссылку https://mail.example.com/postfixadmin/setup.php
Проверьте везде ли написано OK в требованиях. Далее задайте пароль для изменения настроек и получившийся хэш сохраните в файл /etc/postfixadmin/config.local.php
$ nano -w /etc/postfixadmin/config.local.php $CONF['setup_password'] = 'd2aec49ec9b65d5e606ea7ddcdb78d3a:831aa5735816eb6480232a93e859a1de84aec174';
Теперь опять открываем в браузере ссылку https://mail.example.com/postfixadmin/setup.php, вводим пароль и создаём учётную запись администратора.
Учётная запись администратора создана, открываем PostfixAdmin по адресу https://mail.example.com/postfixadmin/ и вводим данные администратора. Наша задача для начала создать домен и почтовые ящики пользователей.
Для того чтобы создать домен выбираем в меню «Domain List» и там пункт «New Domain». Заполняем форму (в поле «Transport» необходимо выбрать «dovecot») и нажимаем на кнопку «Add Domain».
После создания домена – создадим пользователей и алиасы. Для этого выбираем в меню «Virtual List» и там пункт «Add Mailbox». Заполняем форму и нажимаем на кнопку «Add Mailbox». По умолчанию для домена создаётся ряд системных алиасов, почта с которых в итоге редиректится на адрес admin@example.com. Нужно теперь создать редирект с имени admin@example.com на адрес администратора. Для этого выбираем в меню «Virtual List» и там пункт «Add Alias». Вводим admin в поле «Alias», в поле «To» вводим полный адрес для редиректа и нажимаем на кнопку «Add Alias».
Теперь открываем список созданных почтовых ящиков и алиасов, выбрав пункт «Virtual List» в меню «Virtual List». Если всё в порядке – приступаем к дальнейшей настройке почтовой системы.
Исправление работы PostfixAdmin с русскими символами
- Для начала исправим кодировку в таблицах MySQL:
$ echo "ALTER DATABASE \`%VMailDB%\` CHARACTER SET utf8;" >temp.txt $ echo "ALTER TABLE \`%VMailDB%\`.\`quota\` DROP PRIMARY KEY, ADD PRIMARY KEY (`username`) COMMENT '';" >>temp.txt $ mysql -u root -p --database=%VMailDB% -B -N -e "SHOW TABLES" | awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' >>temp.txt $ mysql -u root -p --database=%VMailDB% <temp.txt $ rm -f temp.txt - А теперь исправим php-скрипты PostfixAdmin для правильной работы с кодировкой utf-8:
Исправить нужно все вызовы функцииhtmlentitiesв каталогах/usr/share/postfixadminи/usr/share/postfixadmin/templates, нужно добавить 2 аргумента|, ENT_QUOTES, 'UTF-8'|.
Исправление бага с сохранением extra-опций для fetchmail
- В файле
fetchmail.phpдважды выполняется функцияescape_string, поэтому слеши сохраняются в MySQL.
$ nano -w /usr/share/postfixadmin/fetchmail.php # $formvars[$key]= escape_string( function_exists($func) ?$func($val) :$val); $formvars[$key]= function_exists($func) ?$func($val) :$val;
Установка postfix
Для начала определимся где будут физически находиться почтовые ящики пользователей. Если планируется их оставить в дефолтной папке – пропускаем этот пункт. У меня почта физически лежит на специальном разделе, который примонтирован в /srv. Для того чтобы сделать так же – монтируем раздел и выполняем следующее:
$ mv /var/spool/mail/ /srv/ $ ln -s /srv/mail/ /var/spool/mail $ chcon -u system_u -t mail_spool_t /var/spool/mail -R
В CentOS 7 по умолчанию устанавливается postfix, а в предыдущих версиях CentOS нужно было выполнить команду:
$ yum -y install postfix && yum -y remove sendmail
Отредактируем основной конфигурационный файл postfix:
$ nano -w /etc/postfix/main.cf myhostname = mail.example.com mydomain = example.com myorigin = $mydomain inet_interfaces = all inet_protocols = ipv4 mynetworks_style = host mynetworks = $config_directory/mynetworks smtpd_banner = $myhostname ESMTP $mail_name # ---------------------- VIRTUAL DOMAINS START ---------------------- virtual_alias_maps = proxy:mysql:$config_directory/sql/virtual_alias_maps.cf virtual_mailbox_domains = proxy:mysql:$config_directory/sql/virtual_domains_maps.cf virtual_mailbox_maps = proxy:mysql:$config_directory/sql/virtual_mailbox_maps.cf #virtual_mailbox_limit_maps = proxy:mysql:$config_directory/sql/virtual_mailbox_limit_maps.cf virtual_mailbox_base = /var/spool/mail virtual_uid_maps = static:8 virtual_gid_maps = static:12 mailbox_size_limit = 104857600 message_size_limit = 104857600 relay_domains = proxy:mysql:$config_directory/sql/relay_domains.cf relay_recipient_maps = proxy:mysql:$config_directory/sql/relay_recipient_maps.cf transport_maps = proxy:mysql:$config_directory/sql/transport_maps.cf #transport_maps = hash:$config_directory/transport #virtual_transport = dovecot dovecot_destination_recipient_limit = 1 # ----------------------- VIRTUAL DOMAINS END ----------------------- # ------------------------- SASL PART START ------------------------- broken_sasl_auth_clients = yes smtpd_helo_required = yes smtpd_client_restrictions = permit_sasl_authenticated smtpd_sender_restrictions = permit_sasl_authenticated smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_tls_security_options = $smtpd_sasl_security_options smtpd_sasl_type = dovecot # Can be an absolute path, or relative to $queue_directory smtpd_sasl_path = private/auth # -------------------------- SASL PART END -------------------------- # -------------------------- TLS PART START ------------------------- smtpd_use_tls = yes smtpd_tls_auth_only = yes smtpd_tls_CAfile = /etc/pki/tls/certs/sub.class2.server.ca.pem smtpd_tls_cert_file = /etc/pki/tls/certs/mail.example.com.crt smtpd_tls_key_file = /etc/pki/tls/private/mail.example.com.key smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3 smtpd_tls_received_header = yes smtpd_tls_loglevel = 1 tls_random_source = dev:/dev/urandom # --------------------------- TLS PART END -------------------------- # ------------------ SMTPD RESTRICTIONS PART START ------------------ disable_vrfy_command = yes non_fqdn_reject_code = 450 invalid_hostname_reject_code = 450 maps_rbl_reject_code = 450 unverified_sender_reject_code = 550 #header_checks = pcre:$config_directory/header_checks #body_checks = pcre:$config_directory/body_checks #warning: the restrictions reject_unknown_(sender|recipient)_domain #will trigger if your DNS becomes unavailable smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination reject_invalid_helo_hostname warn_if_reject reject_non_fqdn_helo_hostname warn_if_reject reject_unknown_helo_hostname warn_if_reject reject_unknown_client reject_non_fqdn_sender reject_non_fqdn_recipient reject_unknown_sender_domain reject_unknown_recipient_domain check_client_access hash:$config_directory/rbl_override reject_rbl_client zen.spamhaus.org reject_rbl_client bl.spamcop.net reject_rbl_client dnsbl.sorbs.net=127.0.0.2 reject_rbl_client dnsbl.sorbs.net=127.0.0.3 reject_rbl_client dnsbl.sorbs.net=127.0.0.4 reject_rbl_client dnsbl.sorbs.net=127.0.0.5 reject_rbl_client dnsbl.sorbs.net=127.0.0.7 reject_rbl_client dnsbl.sorbs.net=127.0.0.9 reject_rbl_client dnsbl.sorbs.net=127.0.0.11 reject_rbl_client dnsbl.sorbs.net=127.0.0.12 permit smtpd_data_restrictions = permit_mynetworks, reject_unauth_pipelining, reject_multi_recipient_bounce, permit # ------------------- SMTPD RESTRICTIONS PART END --------------------
Блок «VIRTUAL DOMAINS» отвечает за наши обслуживаемые домены и пользователей, которые мы заводили в PostfixAdmin. Блок «SASL» нужен для авторизации пользователей на SMTP, для того чтобы можно было отправлять почту через наш сервер. В блоке «TLS» прописываем наши SSL-сертификаты, для того чтобы всё общение с почтовым сервером проходило в зашифрованном виде. А блок «SMTPD RESTRICTIONS» нужен для того чтобы отсечь львиную долю спама.
Создадим список исключений из RBL-списка. Для того чтобы иметь возможность получать почту с этих серверов даже если они по какой-то причине попадут в RBL-список.
$ nano -w /etc/postfix/rbl_override mail.example.com OK 1.2.3.4 OK mail.example.org OK 2.3.4.5 OK $ postmap /etc/postfix/rbl_override $ chcon -u system_u /etc/postfix/rbl_override*
Создадим список хостов, которые смогут без авторизации отправлять почту через наш почтовый сервис (очень опасная штука, на моей памяти реально такое понадобилось только для одного блейд-центра, который не умел авторизовываться, всё остальное железо спокойно авторизуется на smtp и без проблем отправляет почту).
$ nano -w /etc/postfix/mynetworks # localhost 127.0.0.0/8 # sw01.example.com 192.168.255.123/32 $ chcon -u system_u /etc/postfix/mynetworks
Настроим dovecot в качестве почтового транспорта:
$ nano -w /etc/postfix/master.cf
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
dovecot unix - n n - - pipe
flags=DRhu user=mail:mail argv=/usr/libexec/dovecot/deliver -d ${recipient}
Создадим дополнительные конфигурационные файлы с данными для подключения к SQL-таблицам с данными о наших доменах и пользователях:
$ mkdir /etc/postfix/sql $ nano -w /etc/postfix/sql/virtual_alias_maps.cf hosts = localhost dbname = %VMailDB% user = %VMailUser% password = %VMailPassWord% table = alias select_field = goto where_field = address additional_conditions = AND active = '1' $ nano -w /etc/postfix/sql/virtual_domains_maps.cf hosts = localhost dbname = %VMailDB% user = %VMailUser% password = %VMailPassWord% table = domain select_field = description where_field = domain additional_conditions = AND backupmx = '0' AND active = '1' $ nano -w /etc/postfix/sql/virtual_mailbox_maps.cf hosts = localhost dbname = %VMailDB% user = %VMailUser% password = %VMailPassWord% table = mailbox select_field = maildir where_field = username additional_conditions = AND active = '1' $ nano -w /etc/postfix/sql/virtual_mailbox_limit_maps.cf hosts = localhost dbname = %VMailDB% user = %VMailUser% password = %VMailPassWord% table = mailbox select_field = quota where_field = username additional_conditions = AND active = '1' $ nano -w /etc/postfix/sql/relay_domains.cf hosts = localhost dbname = %VMailDB% user = %VMailUser% password = %VMailPassWord% table = domain select_field = domain where_field = domain additional_conditions = AND backupmx = '1' AND active = '1' $ nano -w /etc/postfix/sql/relay_recipient_maps.cf hosts = localhost dbname = %VMailDB% user = %VMailUser% password = %VMailPassWord% table = alias select_field = goto where_field = address additional_conditions = AND active = '1' $ nano -w /etc/postfix/sql/transport_maps.cf hosts = localhost dbname = %VMailDB% user = %VMailUser% password = %VMailPassWord% table = domain select_field = transport where_field = domain additional_conditions = AND active = '1' $ chown root:postfix /etc/postfix/sql/ -R $ chcon -u system_u /etc/postfix/sql -R $ chmod 0640 /etc/postfix/sql/*.cf $ chmod 0750 /etc/postfix/sql/ $ newaliases
Postfix настроен, но запускать его не будем, пока не настроим dovecot.
Установка dovecot
Установим сервер dovecot и сопутствующие плагины для работы с базой MySQL и для работы с Sieve-фильтрами:
$ yum -y install dovecot dovecot-mysql dovecot-pigeonhole
$ nano -w /etc/dovecot/dovecot.conf
protocols = imap
$ nano -w /etc/dovecot/conf.d/10-auth.conf
#!include auth-system.conf.ext
!include auth-sql.conf.ext
$ nano -w /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/spool/mail/%d/%n
mail_privileged_group = mail
mail_access_groups = mail
mmap_disable = yes
first_valid_uid = 8
first_valid_gid = 12
$ nano -w /etc/dovecot/conf.d/10-master.conf
service auth {
unix_listener auth-userdb {
mode = 0600
user = mail
group = mail
}
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
$ nano -w /etc/dovecot/conf.d/10-ssl.conf
ssl = yes
ssl_cert = </etc/pki/tls/certs/mail.example.com.crt
ssl_key = </etc/pki/tls/private/mail.example.com.key
ssl_ca = </etc/pki/tls/certs/sub.class2.server.ca.pem
ssl_protocols = !SSLv2 !SSLv3
$ nano -w /etc/dovecot/conf.d/15-lda.conf
postmaster_address = postmaster@example.com
hostname = mail.example.com
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
protocol lda {
mail_plugins = sieve
}
$ nano -w /etc/dovecot/conf.d/20-managesieve.conf
protocols = $protocols sieve
$ nano -w /etc/dovecot/conf.d/90-sieve.conf
plugin {
sieve = /var/spool/mail/%Ld/%Ln.sieve/.dovecot.sieve
sieve_dir = /var/spool/mail/%Ld/%Ln.sieve/
sieve_extensions = +notify +imapflags
}
$ nano -w /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=%VMailDB% user=%VMailUser% password=%VMailPassWord%
user_query = \
SELECT CONCAT("/var/spool/mail/", domain) AS home, 8 AS uid, 12 AS gid, \
'maildir:/var/spool/mail/%d/%n' AS mail, CONCAT("dirsize:storage=", quota) AS quota \
FROM mailbox WHERE username = '%u' AND active = '1'
password_query = \
SELECT username AS user, password, \
CONCAT("/var/spool/mail/", domain) AS userdb_home, 8 AS userdb_uid, 12 AS userdb_gid \
FROM mailbox WHERE username = '%u' AND active='1'
iterate_query = SELECT username AS user FROM mailbox WHERE active='1'
$ chcon -u system_u /etc/dovecot/dovecot-sql.conf.ext
$ chmod 0600 /etc/dovecot/dovecot-sql.conf.ext
Запуск сервисов
Запустим dovecot и postfix и добавим их в автозагрузку:
$ systemctl enable dovecot
$ systemctl start dovecot
$ systemctl status dovecot
dovecot.service - Dovecot IMAP/POP3 email server
Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled)
Active: active (running) since Wed 2014-11-26 15:58:44 MSK; 3min 41s ago
Main PID: 20380 (dovecot)
CGroup: /system.slice/dovecot.service
├─20380 /usr/sbin/dovecot -F
├─20384 dovecot/anvil
├─20385 dovecot/log
└─20387 dovecot/config
Nov 26 15:58:44 example.com systemd[1]: Started Dovecot IMAP/POP3 email server.
Nov 26 15:58:44 example.com dovecot[20380]: master: Dovecot v2.2.10 starting up for imap, sieve (core dumps disabled)
$ systemctl enable postfix
$ systemctl restart postfix
$ systemctl status postfix
postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled)
Active: active (running) since Wed 2014-11-26 16:01:53 MSK; 1s ago
Process: 20542 ExecStop=/usr/sbin/postfix stop (code=exited, status=0/SUCCESS)
Process: 20558 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
Process: 20555 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
Process: 20552 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
Main PID: 20630 (master)
CGroup: /system.slice/postfix.service
├─20630 /usr/libexec/postfix/master -w
├─20631 pickup -l -t unix -u
├─20632 qmgr -l -t unix -u
└─20633 proxymap -t unix -u
Nov 26 16:01:52 example.com systemd[1]: Starting Postfix Mail Transport Agent...
Nov 26 16:01:53 example.com postfix/postfix-script[20628]: starting the Postfix mail system
Nov 26 16:01:53 example.com postfix/master[20630]: daemon started -- version 2.10.1, configuration /etc/postfix
Nov 26 16:01:53 example.com systemd[1]: Started Postfix Mail Transport Agent.
Проверка работоспособности SMTP
Теперь проверим, принимает ли postfix почту для нашего домена:
$ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mail.example.com ESMTP Postfix EHLO localhost 250-mail.example.com 250-PIPELINING 250-SIZE 104857600 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN MAIL FROM: wakko@example.org 250 2.1.0 Ok RCPT TO: admin@example.com 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> Hi, Admin! It's only test and nothing else. . 250 2.0.0 Ok: queued as 43A7A209ED22 QUIT 221 2.0.0 Bye Connection closed by foreign host.
А таким образом проверим подключение через TLS и авторизацию:
$ echo -ne "\0test@example.com\0testpassword" | base64
AHRlc3RAZXhhbXBsZS5jb20AdGVzdHBhc3N3b3Jk
$ openssl s_client -starttls smtp -connect localhost:25 -crlf -ign_eof
CONNECTED(00000003)
depth=2 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Certification Authority
verify return:1
depth=1 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Class 1 Primary Intermediate Server CA
verify return:1
depth=0 C = RU, CN = mail.example.com, emailAddress = hostmaster@example.com
verify return:1
---
Certificate chain
0 s:/C=RU/CN=mail.example.com/emailAddress=hostmaster@example.com
i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
---
Server certificate
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
subject=/C=RU/CN=mail.example.com/emailAddress=hostmaster@example.com
issuer=/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
---
No client certificate CA names sent
Server Temp Key: ECDH, prime256v1, 256 bits
---
SSL handshake has read 2450 bytes and written 410 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: ...
Session-ID-ctx:
Master-Key: ...
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
TLS session ticket lifetime hint: 3600 (seconds)
TLS session ticket:
0000 - ...
Start Time: 1417022108
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
250 DSN
EHLO localhost
250-mail.example.com
250-PIPELINING
250-SIZE 104857600
250-ETRN
250-AUTH PLAIN
250-AUTH=PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN AHRlc3RAZXhhbXBsZS5jb20AdGVzdHBhc3N3b3Jk
235 2.7.0 Authentication successful
MAIL FROM: test@example.com
250 2.1.0 Ok
RCPT TO: test@example.org
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
It's only test message.
.
250 2.0.0 Ok: queued as 8078F20A8F43
QUIT
221 2.0.0 Bye
closed
Настройка firewall
Проверив что postfix функционирует и готов к принятию почты – открываем его во внешний мир:
$ firewall-cmd --permanent --zone=public --add-service=smtp $ firewall-cmd --permanent --zone=public --add-service=imaps $ firewall-cmd --permanent --zone=public --add-port=465/tcp $ firewall-cmd --permanent --zone=public --add-port=4190/tcp $ firewall-cmd --reload
Настройка FetchMail
Прежде всего установим необходимые пакеты:
$ yum -y install fetchmail perl-LockFile-Simple perl-Sys-Syslog
Теперь создадим конфигурационный файл для fetchmail:
$ nano -w /etc/postfixadmin/fetchmail.conf $db_type = "mysql"; $db_host="localhost"; $db_name="%VMailDB%"; $db_username="%VMailUser%"; $db_password="%VMailPassWord%"; $ chcon -u system_u /etc/postfixadmin/fetchmail.conf $ chown root:postfix /etc/postfixadmin/fetchmail.conf $ chmod 0640 /etc/postfixadmin/fetchmail.conf
Затем подготовим скрипт, который будет запускаться сервисом cron в определённое время и забирать для нас почту:
$ cp /usr/share/doc/postfixadmin-*/ADDITIONS/fetchmail.pl /usr/libexec/postfix/
$ chmod 0755 /usr/libexec/postfix/fetchmail.pl
$ sed -i 's/\/etc\/mail\/postfixadmin/\/etc\/postfixadmin/g' /usr/libexec/postfix/fetchmail.pl
$ sed -i 's/-f \$filename -i/-s -f \$filename --pidfile/g' /usr/libexec/postfix/fetchmail.pl
$ nano -w /usr/libexec/postfix/fetchmail.pl
$mda =~ s/\${mailbox}/${mailbox}/;
# syslog("info","fetch ${src_user}@${src_server} for ${mailbox}");
$ chcon -u system_u /usr/libexec/postfix/fetchmail.pl
$ mkdir /var/run/fetchmail
$ chcon -u system_u /var/run/fetchmail
$ chown postfix:mail /var/run/fetchmail
$ chmod 0775 /var/run/fetchmail
Добавим выполнение этого скрипта в cron:
$ crontab -u postfix -e MAILTO=root */1 * * * * /usr/libexec/postfix/fetchmail.pl
Теперь нам необходимо залогиниться в наш PostfixAdmin и прописать почтовые учётные записи, с которых будет собираться почта. Для этого откроем веб-интерфейс PostfixAdmin и выберем в меню «Fetch Email» пункт «New Entry». Выбираем Mailbox, куда будет складываться почта, вводим имя удалённого сервера, имя пользователя и пароль, так же выбираем протокол по которому будет забираться почта (IMAP/POP3). Если на той стороне IMAP-сервер с несколькими папками, то для каждой папки нужно будет создать отдельную запись для сбора почты, и в каждой записи в поле «Folder» – указать свою папку. Если сбор почты осуществляется используя SSL-шифрование, то необходимо отметить галочкой пункт «SSL active», так же желательно заполнить поле «SSL fingerpring (md5)», для того чтобы Fetchmail не ругался на SSL-сертификат. После этого сохраняем запись нажав на кнопку «Save Changes».
А для получения fingerprint нужно выполнить следующую команду:
$ echo "QUIT" | openssl s_client -connect mail.example.org:993 -showcerts | sed -ne '/BEGIN/,/END/p' >/tmp/temp.crt depth=2 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Certification Authority verify return:1 depth=1 C = IL, O = StartCom Ltd., OU = Secure Digital Certificate Signing, CN = StartCom Class 1 Primary Intermediate Server CA verify return:1 depth=0 description = 907535-Ri93n22WJHt0psNK, CN = mail.example.org, emailAddress = postmaster@example.org verify return:1 notAfter=Oct 13 05:50:16 2015 GMT verify return:1 depth=0 description = 907535-Ri93n22WJHt0psNK, CN = mail.example.org, emailAddress = postmaster@example.org notAfter=Oct 13 05:50:16 2015 GMT verify return:1 DONE $ openssl x509 -in /tmp/temp.crt -fingerprint -noout -md5 | sed "s/MD5 Fingerprint=//" 4F:80:51:CD:B5:1C:6A:37:74:3A:46:4B:E1:02:A7:BC $ rm -f /tmp/temp.crt
В этой статье можно прочитать про настройку спам-фильтра DSpam. Так же там есть пример файла с Sieve-правилами. А в этой статье можно прочитать про установку и настройку веб-интерфейса для почты – RoundCube.
zlo_ch
26.01.2015 - 02:45
Сделали все так и получаем:
an 26 02:39:03 mail fetchmail-all[3344]: can’t lock /var/run/fetchmail/fetchmail-all.lock
Jan 26 02:39:03 mail fetchmail-all[3344]: can’t lock /var/run/fetchmail/fetchmail-all.lock
Jan 26 02:39:03 mail postfix/pickup[2570]: 45F3C84045B: uid=89 from=
Jan 26 02:39:03 mail postfix/cleanup[2675]: 45F3C84045B: message-id=
Jan 26 02:39:03 mail postfix/pickup[2570]: 45F3C84045B: uid=89 from=
Jan 26 02:39:03 mail postfix/cleanup[2675]: 45F3C84045B: message-id=
Jan 26 02:39:03 mail postfix/qmgr[2571]: 45F3C84045B: from=, size=829, nrcpt=1 (queue active)
Jan 26 02:39:03 mail postfix/qmgr[2571]: 45F3C84045B: from=, size=829, nrcpt=1 (queue active)
Jan 26 02:39:03 mail postfix/proxymap[2572]: warning: table «mysql:/etc/postfix/sql/virtual_domains_maps.cf»: empty lookup result for: «maindomain.ru» — ignored
Jan 26 02:39:03 mail postfix/proxymap[2572]: warning: table «mysql:/etc/postfix/sql/virtual_domains_maps.cf»: empty lookup result for: «maindomain.ru» — ignored
Jan 26 02:39:03 mail dovecot: lda: Error: user admin@maindomain.ru: Mail access for users with UID 8 not permitted (see first_valid_uid in config file, uid from userdb lookup).
Jan 26 02:39:03 mail dovecot: lda: Fatal: Invalid user settings. Refer to server log for more information.
Jan 26 02:39:03 mail dovecot: lda: Error: user admin@maindomain.ru: Mail access for users with UID 8 not permitted (see first_valid_uid in config file, uid from userdb lookup).
Jan 26 02:39:03 mail dovecot: lda: Fatal: Invalid user settings. Refer to server log for more information.
Получается, что пользователь mail с uid=8 gid=12 не имеет прав на запись в папку …… хотя права стоят 777 на папку…….
Wakko
26.01.2015 - 12:19
А что показывает cat /var/log/audit/audit.log | grep AVC ?
zlo_ch
27.01.2015 - 00:15
неверно название директив было введено извиняюсь ….
first_valid_uid = 8
first_valid_gid = 12 <—— тут ошибся в названии
Дошел до настроек fetchmail
$ nano -w /etc/postfix/fetchmail.conf <—— тут его не, создаем
$db_type = "mysql";
$db_host="localhost";
$db_name="%VMailDB%";
$db_username="%VMailUser%";
$db_password="%VMailPassWord%";
$ chcon -u system_u /etc/postfixadmin/fetchmail.conf <—— мы же его в другом месте создавали ??? там такого файла нет
$ chown root:postfix /etc/postfixadmin/fetchmail.conf
$ chmod 0640 /etc/postfixadmin/fetchmail.conf
Да и потом:
$ cp /usr/share/doc/postfixadmin-*/ADDITIONS/fetchmail.pl /usr/libexec/postfix/
$ chmod 0755 /usr/libexec/postfix/fetchmail.pl
$ sed -i 's/\/etc\/mail\/postfixadmin/\/etc\/postfixadmin/g' /usr/libexec/postfix/fetchmail.pl <— как раз говорим что искать "/etc/postfixadmin/fetchmail.conf"
$ sed -i 's/-f \$filename -i/-s -f \$filename —pidfile/g' /usr/libexec/postfix/fetchmail.pl
$ nano -w /usr/libexec/postfix/fetchmail.pl
$mda =~ s/\${mailbox}/${mailbox}/;
# syslog("info","fetch ${src_user}@${src_server} for ${mailbox}");
$ chcon -u system_u /usr/libexec/postfix/fetchmail.pl
$ mkdir /var/run/fetchmail
$ chcon -u system_u /var/run/fetchmail
$ chown postfix:mail /var/run/fetchmail
$ chmod 0775 /var/run/fetchmail
Так где настройки fetchmail должны лежать то ?
Alex
12.02.2015 - 11:40
Добрый день!
Не могли бы вы привести настройки сети, перед тем как начать настраивать постфик и все остальное?
интересует как правильно настроить DNS (в плане заглушки) для работы.
Alex
12.02.2015 - 13:21
Добрый день!
Подскажи пжл, как настроить DNS заглушку для работы с postfix или какие нужны сетевые настройке перед установкой почтового сервера
Yevgeny Taradayko
28.03.2015 - 01:17
Автору респект и уважуха, это пожалуй лучшее что я видел за последние пол-года. Даже среди английских статей. Отличная систематизация и оформление. Большое спасибо! Буду писать скрипт по автоматической установке почтовой системы по Вашей статье. 🙂 Ну правда для совсем ленивых админов нехватило только описания создания самоподписных сертификатов но это мелочь. Супер!
Евгений
06.05.2015 - 15:43
$ mkdir /var/run/fetchmail
$ chcon -u system_u /var/run/fetchmail
$ chown postfix:mail /var/run/fetchmail
$ chmod 0775 /var/run/fetchmail
после перезагрузки сервера не создается /var/run/fetchmail и в логах пишет can’t lock /var/run/fetchmail/fetchmail-all.lock
Wakko
06.05.2015 - 15:45
Да, есть такой баг. Пока в файл /etc/rc.local временно добавил пару строк:
mkdir /var/run/fetchmailchown postfix:postfix /var/run/fetchmail
zlo_ch
09.08.2015 - 01:48
Всю голову расшиб
Мигрируем с mdaemon настраиваю сборщик почты на mdaemon простая авторизация без ssl
по POP3
Aug 9 01:37:01 mail fetchmail[45115]: Статус запроса=3 (AUTHFAIL)
Aug 9 01:40:02 mail fetchmail[45615]: Ошибка авторизации для itadmin@domain.com@mail.domain.com
Aug 9 01:40:02 mail fetchmail[45615]: For help, see http://www.fetchmail.info/fetchmail-FAQ.html#R15
Aug 9 01:40:02 mail fetchmail[45615]: Статус запроса=3 (AUTHFAIL)
Aug 9 01:42:01 mail fetchmail[45629]: Неизвестный логин или ошибка аутентификации для itadmin@domain.com@mail.domain.com
IMAP
Aug 9 01:42:01 mail fetchmail[45629]: Ошибка сокет при выборке из itadmin@domain.com@mail.domain.com
Aug 9 01:42:01 mail fetchmail[45629]: Статус запроса=2 (SOCKET)
Где может быть проблема? логин с паролем точно верные и введены правильно.
Пробовал по IP адрес сервера в postfixadmin вводить и логин до собаки — результат тот же ….:(
pavel
20.09.2015 - 15:27
подскажите, а как быть вот с такой штукой как setrlimit, при старте dovecot пишет:
master: Error: setrlimit(RLIMIT_NPROC, 4190): Operation not permitted
systemctl status -l dovecot
dovecot.service — Dovecot IMAP/POP3 email server
Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled)
Active: active (running) since Вс 2015-09-20 15:15:03 EEST; 2s ago
Process: 2810 ExecStartPre=/usr/libexec/dovecot/prestartscript (code=exited, status=0/SUCCESS)
Main PID: 2815 (dovecot)
CGroup: /system.slice/dovecot.service
├─2815 /usr/sbin/dovecot -F
├─2818 dovecot/anvil
├─2819 dovecot/log
└─2821 dovecot/config
сен 20 15:15:03 pupkin.net systemd[1]: Starting Dovecot IMAP/POP3 email server…
сен 20 15:15:03 pupkin.net systemd[1]: Started Dovecot IMAP/POP3 email server.
сен 20 15:15:03 pupkin.net dovecot[2815]: master: Error: setrlimit(RLIMIT_NPROC, 4190): Operation not permitted
сен 20 15:15:03 pupkin.net dovecot[2815]: master: Dovecot v2.2.10 starting up for imap, sieve (core dumps disabled)
pavel
20.09.2015 - 18:03
подскажите как быть с такой ошибкой:
master: Error: setrlimit(RLIMIT_NPROC, 4190): Operation not permitted
systemctl status -l dovecot
dovecot.service — Dovecot IMAP/POP3 email server
Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled)
Active: active (running) since Вс 2015-09-20 15:15:03 EEST; 2s ago
Process: 2810 ExecStartPre=/usr/libexec/dovecot/prestartscript (code=exited, status=0/SUCCESS)
Main PID: 2815 (dovecot)
CGroup: /system.slice/dovecot.service
├─2815 /usr/sbin/dovecot -F
├─2818 dovecot/anvil
├─2819 dovecot/log
└─2821 dovecot/config
сен 20 15:15:03 pupkin.net systemd[1]: Starting Dovecot IMAP/POP3 email server…
сен 20 15:15:03 pupkin.net systemd[1]: Started Dovecot IMAP/POP3 email server.
сен 20 15:15:03 pupkin.net dovecot[2815]: master: Error: setrlimit(RLIMIT_NPROC, 4190): Operation not permitted
сен 20 15:15:03 pupkin.net dovecot[2815]: master: Dovecot v2.2.10 starting up for imap, sieve (core dumps disabled)
ну можно по простому, например # semanage permissive -a dovecot_t , а как правильно?
sysv
23.02.2016 - 00:51
nano -w /etc/postfix/sql/virtual_domains_maps.cf
select_field почему description?
я поставил
select_field = domain
Wakko
23.02.2016 - 21:11
Где-то я прочитал следующее: «Postfix does not care about the result in this query, it is more of a yes/no answer.», так что description вполне вписывается в логику.
Yevgeny Taradayko
23.03.2016 - 13:27
Заметил один недостаток в данной конфигурации. Смптомы: при отправке на gmail.com при получении письма видим красный поломанный навесной замочек вверху слева. Диагноз: Почта отправляется без ssl/tls шифрования.
Лекарство:
Строчки ниже нужно добавить в TLS раздел main.cf
smtp_use_tls = yes
tls_high_cipherlist = ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA
-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256
:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
smtp_tls_mandatory_ciphers = high
smtp_tls_mandatory_protocols=!SSLv2,!SSLv3
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
на счет того нужна ли последняя строка не уверен, но рекомендуют добавлять и ее тоже.
Думаю это будет хорошим дополнением к данному конфигу.
Shilov
24.05.2016 - 11:37
У вас опечатка вкралась:
$ dovecot.service — Dovecot IMAP/POP3 email server — это не команда, а вывод команды $ systemctl status dovecot
Wakko
24.05.2016 - 11:45
Угу, пропустил команду
systemctl dovecot status.Исправил. Спасибо!
Александр
07.07.2016 - 14:29
Добрый день!
Как можно подключиться к 25 порту на localhost, если в вашем /etc/postfix/master.cf нет записи для этого порта ?
master запускается на 465
Wakko
07.07.2016 - 17:26
Обратите внимание на самую первую строчку этого файла не являющуюся комментарием.
Александр
07.07.2016 - 18:05
Спасибо за ответ! Я разобрался, Ваша первая запись как говорит о том, что нужно запускать smtps. Я создавал новый конфиг только с теми записями, что указали Вы и это моя ошибка. Я отредактировал дефолтный конфиг и всё завелось.
Сейчас я столкнулся с другой проблемой —
при подключении telnet’ом получаю вот такую ошибку —
451 4.3.0 : Temporary lookup failure
Вместо mail@mydomain.ru — существующий ящик.
Доступы до БД есть, всё в порядке.
Изначально стоит задача — сделать параллельный почтовый сервер тому, что уже существует.
Тот, что уже существует развёрнут на FreeBsd на старых версиях postfix + dovecot.
У меня была идея следующая — развернуть сервер, поставить туда centos 7.2, установить все обновления и развернуть ту же связку + развернуть дамп базы с основного. Создать MX запись с mail2.domain.ru и привязать её к этому серверу.
И, в случае поломки основного, у сотрудников сменить сервер в почтовых клиентах.
Так же можно будет при отключении основного почтового сервера, поменять внешний адрес mail.mydomain.ru на мой новый сервер, а на сервере поменять настройки на основной почтовый сервер.
Viktr
15.11.2017 - 12:19
Не получается подключиться к почтовому серверу. Пишет: «Thunderbird не удалось найти настройки для вашей учетной записи почты». При этом из RoundCube получается залогиниться.
Подскажите пожалуйста в какую сторону смотреть.