Настройка почтового сервера: различия между версиями
Sol (обсуждение | вклад) (→Exim) |
Sol (обсуждение | вклад) |
||
Строка 186: | Строка 186: | ||
====Основные опции==== | ====Основные опции==== | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | # | + | # подключаем mysql (хост/база/логин/пароль) |
+ | hide mysql_servers = 127.0.0.1/vmail/mail/17V3BZ8Vh9 | ||
+ | # определяем место с какого будем вычитывать локальные домены и домены для которых будем выступать релеем. | ||
+ | domainlist local_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}} | ||
+ | domainlist relay_to_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}} | ||
+ | hostlist relay_from_hosts = 127.0.0.1 | ||
+ | # имя хоста, будет использоваться при HELO | ||
+ | primary_hostname = mail.webko.net.ua | ||
+ | # домен, добавляемый при отправке локальной почты; | ||
+ | # например письма от root будут вида [email protected] | ||
+ | qualify_domain = mail.webko.net.ua | ||
+ | # домен для локальный получателей, противоположность пункта выше; | ||
+ | # если не указать - будет использоваться значение из qualify_domain | ||
+ | qualify_recipient = mail.webko.net.ua | ||
+ | |||
+ | # приветственное сообщение сервера | ||
+ | smtp_banner = "$primary_hostname, Microsoft ESMTP MAIL service ready" | ||
+ | |||
+ | # ip на котором будет слушать exim, если их несколько можно указать конкретный | ||
+ | local_interfaces = 212.216.16.35 | ||
+ | # отключаем ipv6 | ||
+ | disable_ipv6 = true | ||
+ | |||
+ | # порты на которых бдет слушать exim, в том числе tls | ||
+ | daemon_smtp_ports = 25 : 465 : 587 | ||
+ | tls_on_connect_ports = 465 | ||
+ | |||
+ | # сертификаты для tls соединений | ||
+ | tls_certificate = /etc/ssl/certs/exim.pem | ||
+ | tls_privatekey = /etc/ssl/private/exim.key | ||
+ | |||
+ | tls_advertise_hosts = * | ||
+ | |||
+ | # подключаем антивирус | ||
+ | av_scanner = clamd:/var/run/clamd/clamd.sock | ||
+ | |||
+ | # определяем пользователя и групу для работы exim | ||
+ | never_users = root | ||
+ | trusted_users = mail:exim:root:vmail | ||
+ | |||
+ | exim_user = exim | ||
+ | exim_group = vmail | ||
+ | |||
+ | host_lookup = !10.0.0.0/8 : !127.0.0.0/8 : !192.168.0.0/16 : !172.16.0.0/12 : * | ||
+ | |||
+ | rfc1413_hosts = !* | ||
+ | rfc1413_query_timeout = 1s | ||
+ | |||
+ | ignore_bounce_errors_after = 3h | ||
+ | |||
+ | timeout_frozen_after = 7d | ||
+ | |||
+ | split_spool_directory = true | ||
+ | |||
+ | check_rfc2047_length = false | ||
+ | |||
+ | log_selector = +smtp_confirmation -queue_run -retry_defer +sender_on_delivery +received_recipients +delivery_size +subject -etrn -host_lookup_failed +received_sender -rejected_header -skip_delivery +deliver_time | ||
+ | |||
+ | allow_utf8_domains = true | ||
+ | accept_8bitmime = true | ||
+ | queue_run_max = 6 | ||
+ | #smtp_accept_max_per_host = ${lookup{$sender_host_address}lsearch{/etc/mail/max_per_host} {$value}{3}} | ||
+ | |||
+ | # максимальный обем письма для приема/передачи | ||
+ | message_size_limit = 50M | ||
+ | # макс. количество одновременных подключений для отправки | ||
+ | smtp_accept_max = 50 | ||
+ | |||
+ | # макс. кол-во писем за одно подключение | ||
+ | smtp_accept_max_per_connection = 25 | ||
+ | |||
+ | # макс. подключений с одного хоста | ||
+ | smtp_accept_max_per_host = 20 | ||
+ | |||
+ | queue_run_in_order = false | ||
+ | |||
+ | remote_max_parallel = 15 | ||
+ | return_size_limit = 70k | ||
+ | |||
+ | # принудительная синхронизация с клиентом при обмене сообщениями/командами | ||
+ | smtp_enforce_sync = true | ||
+ | |||
+ | #system_filter = /etc/mail/system-filter | ||
+ | #system_filter_pipe_transport = address_pipe_archive | ||
+ | #system_filter_user = exim | ||
+ | |||
+ | # принимать ли почту с доменов, состоящих из IP; | ||
+ | # не вижу адекватных серверов, которые бы так отправляли - запрещаем; | ||
+ | # по-умолчанию тоже false | ||
+ | allow_domain_literals = false | ||
+ | |||
+ | # список хостов, которым не делаем проверку корректности HELO/EHLO | ||
+ | helo_accept_junk_hosts = 127.0.0.0/8 | ||
+ | helo_allow_chars = _ | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
==== ACL ==== | ==== ACL ==== | ||
Версия 15:50, 30 ноября 2016
Исходная информация
Настройка почтового сервера на базе CentOS 7 и Exim
OS - CentOS 7
smtp - Exim
pop3/imap - Dovecot
antivirus - ClamAV
gui - PostfixAdmin
webmail - Roundcube
Подготовка сервера
1) Устанавливаем ОС в минимальной поставке.
2) Назначаем валидный(белый) ip адрес с бэерезолвом в хостнейм сервера (PTR).
3) Обновляем свежеустановленую систему:
[root@mail ~] yum update -y
[root@mail ~] reboot
4) Устанавливаем необходимые репозитории
[root@mail ~] yum install epel-release.noarch -y
5) Устанавливаем необходимый прикладной софт
[root@mail ~] yum install mc vim wget net-tools bind-utils htop -y
6) Отключаем SELINUX
[root@mail ~] vim /etc/sysconfig/selinux
Заменяем SELINUX=enforcing на SELINUX=disabled, сохраняем
7) Отключаем firewalld
[root@mail ~] systemctl stop firewalld
[root@mail ~] systemctl disable firewalld
[root@mail ~] yum remove firewalld -y
8) Отключаем и удаляем то что нам не пригодится
[root@mail ~] systemctl stop wpa_supplicant postfix
[root@mail ~] systemctl disable wpa_supplicant postfix
[root@mail ~] yum remove postfix -y
9) Перезагружаемся
[root@mail ~] reboot
Натройка компонентов
Переходим непосредственно к настройке почтовых и вспомагательных сервисов.
Создадим пользователя и групу от имени которого будем работать с почтой.
Так как почту будем хранить в каталоге /var/spool/vmail то туда же и назначим домашнюю деректорию нашего пользователя.
[root@mail ~] useradd -d /var/spool/vmail -s /sbin/nologin -c "vmail user" vmail
ClamAV
Установим и настроим антивирус, подготовим его для работы с exim.
[root@mail ~] yum install clamav-server clamav-update clamav -y
Создадим пользователя от которого будет рботать демон clamav и добавим его в групу vmail
[root@mail ~] useradd -G clamupdate -d /var/lib/clamav -s /sbin/nologin -c "clamd user" clamd
[root@mail ~] usermod -G clamd,clamupdate,vmail clamd
Создадим файл сервиса для управления clamav через systemd
[root@mail ~] vim /usr/lib/systemd/system/clamd.service
[Unit]
Description = clamd scanner daemon
After = syslog.target nss-lookup.target network.target
[Service]
Type = simple
ExecStartPre=-/usr/bin/mkdir /var/run/clamd
ExecStartPre=/usr/bin/chown -R clamd:vmail /var/run/clamd
ExecStart = /usr/sbin/clamd -c /etc/clamd.d/clamd.conf --foreground=yes
Restart = on-failure
PrivateTmp = true
[Install]
WantedBy=multi-user.target
Натроим clamd
[root@mail ~] vim /etc/clamd.d/clamd.conf
LogSyslog yes
LogFacility LOG_MAIL
ExtendedDetectionInfo yes
PidFile /var/run/clamd/clamd.pid
TemporaryDirectory /tmp
LocalSocket /var/run/clamd/clamd.sock
LocalSocketMode 660
User clamd
AllowSupplementaryGroups yes
PhishingSignatures yes
MaxThreads 20
Настроим freshclam
[root@mail ~] vim /etc/sysconfig/freshclam
удаляем последнюю строчку
FRESHCLAM_DELAY=disabled-warn # REMOVE ME
[root@mail ~] mv /etc/freshclam.conf /etc/freshclam.conf.bak
[root@mail ~] vim /etc/freshclam.conf
UpdateLogFile /var/log/freshclam.log
DatabaseMirror database.clamav.net
NotifyClamd /etc/clamd/clamd.conf
Обновляем базу сигнатур (займет какое-то время)
[root@mail ~] freshclam
Дальше он будет обновлятся по крону.
Запускаем демона clamd
[root@mail ~] systemctl daemon-reload
[root@mail ~] systemctl start clamd
# проверим запустился ли
[root@mail ~] systemctl status clamd
[root@mail ~] systemctl enable clamd
MySQL/MariaDB
Установим и настроим базу данных для хранения информации о наших ящиках и работы postfixadmin, roundcube.
[root@mail ~] yum install mariadb-server mariadb
Запустим и установим рутовй пароль
[root@mail ~] systemctl start mariadb
[root@mail ~] systemctl enable mariadb
[root@mail ~] mysql_secure_installation
# на вопрос ''Enter current password for root (enter for none):'' жмем Enter
# на следующий вопрос отвечаем Yes и вводим рутовый пароль
Создадим базу данных и дадим 2 пользователям на нее права (однуму чтение запись, второму чтение(для postfix и exim))
[root@mail ~] mysql -u root -p
MariaDB [(none)]> create database vmail;
MariaDB [(none)]> grant all on vmail.* to pf_admin@localhost identified by 'fizvSdyCXy';
MariaDB [(none)]> grant select on vmail.* to mail@localhost identified by '17V3BZ8Vh9'; # exim и dovecot больше и не нужно.
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
Exim
Установим и настроим exim
[root@mail ~] yum install exim exim-mysql -y
[root@mail ~]
[root@mail ~] mv /etc/exim/exim.conf /etc/exim/exim.conf.def
[root@mail ~] vim /etc/exim/exim.conf
Основные опции
# подключаем mysql (хост/база/логин/пароль)
hide mysql_servers = 127.0.0.1/vmail/mail/17V3BZ8Vh9
# определяем место с какого будем вычитывать локальные домены и домены для которых будем выступать релеем.
domainlist local_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}}
domainlist relay_to_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}}
hostlist relay_from_hosts = 127.0.0.1
# имя хоста, будет использоваться при HELO
primary_hostname = mail.webko.net.ua
# домен, добавляемый при отправке локальной почты;
# например письма от root будут вида [email protected]
qualify_domain = mail.webko.net.ua
# домен для локальный получателей, противоположность пункта выше;
# если не указать - будет использоваться значение из qualify_domain
qualify_recipient = mail.webko.net.ua
# приветственное сообщение сервера
smtp_banner = "$primary_hostname, Microsoft ESMTP MAIL service ready"
# ip на котором будет слушать exim, если их несколько можно указать конкретный
local_interfaces = 212.216.16.35
# отключаем ipv6
disable_ipv6 = true
# порты на которых бдет слушать exim, в том числе tls
daemon_smtp_ports = 25 : 465 : 587
tls_on_connect_ports = 465
# сертификаты для tls соединений
tls_certificate = /etc/ssl/certs/exim.pem
tls_privatekey = /etc/ssl/private/exim.key
tls_advertise_hosts = *
# подключаем антивирус
av_scanner = clamd:/var/run/clamd/clamd.sock
# определяем пользователя и групу для работы exim
never_users = root
trusted_users = mail:exim:root:vmail
exim_user = exim
exim_group = vmail
host_lookup = !10.0.0.0/8 : !127.0.0.0/8 : !192.168.0.0/16 : !172.16.0.0/12 : *
rfc1413_hosts = !*
rfc1413_query_timeout = 1s
ignore_bounce_errors_after = 3h
timeout_frozen_after = 7d
split_spool_directory = true
check_rfc2047_length = false
log_selector = +smtp_confirmation -queue_run -retry_defer +sender_on_delivery +received_recipients +delivery_size +subject -etrn -host_lookup_failed +received_sender -rejected_header -skip_delivery +deliver_time
allow_utf8_domains = true
accept_8bitmime = true
queue_run_max = 6
#smtp_accept_max_per_host = ${lookup{$sender_host_address}lsearch{/etc/mail/max_per_host} {$value}{3}}
# максимальный обем письма для приема/передачи
message_size_limit = 50M
# макс. количество одновременных подключений для отправки
smtp_accept_max = 50
# макс. кол-во писем за одно подключение
smtp_accept_max_per_connection = 25
# макс. подключений с одного хоста
smtp_accept_max_per_host = 20
queue_run_in_order = false
remote_max_parallel = 15
return_size_limit = 70k
# принудительная синхронизация с клиентом при обмене сообщениями/командами
smtp_enforce_sync = true
#system_filter = /etc/mail/system-filter
#system_filter_pipe_transport = address_pipe_archive
#system_filter_user = exim
# принимать ли почту с доменов, состоящих из IP;
# не вижу адекватных серверов, которые бы так отправляли - запрещаем;
# по-умолчанию тоже false
allow_domain_literals = false
# список хостов, которым не делаем проверку корректности HELO/EHLO
helo_accept_junk_hosts = 127.0.0.0/8
helo_allow_chars = _