Postfix + Dovecot + MySQL.

Установка, настройка, эксплуатация.

Модератор: sergey

Postfix + Dovecot + MySQL.

Сообщение sergey » 05 авг 2018, 00:40

Оглавление


Темы
 00 - Подготовительный этап 
 01 - MySQL 
 02 - ClamAV 
 03 - База данных и веб-интерфейсы 
 04 - Postfix 
 05 - Dovecot 
 06 - Spamassassin 
 07 - Amavisd-new 
 08 - Postgrey 
 09 - Fail2ban 
 10 - Тестирование 
 11 - Заключение 


Здесь находится исходная статья
  • Приём и отправка внешней почты
  • Пересылка почты с системных учётных записей на ящик виртуального пользователя
 00 - Подготовительный этап 
  1. Устанавливаем BIND - DNS-сервер
  2. Работа с SELinux достойна отдельного материала, поэтому в рамках данной статьи примем, что selinux по-ламерски сделан permissive или disabled.
  3. Не забываем про ntp. Это позволит избежать возможной проблемы Dovecot’a «Time has moved backwards»:
    Синхронизация времени
  4. В завершение подготовительного этапа ставим утилиты, которые облегчат нам тестирование и дальнейшую работу:
    Код: выделить все
    dnf install wget mlocate bind-utils telnet mailx sharutils


 01 - MySQL 
Создаём пользователя postfix с одноимённой базой и всеми правами на неё.
Код: выделить все
CREATE USER postfix@localhost IDENTIFIED BY 'mypassword';
CREATE DATABASE postfix;
GRANT ALL PRIVILEGES ON postfix.* TO postfix;

Либо можно воспользоваться моими скриптами для создания пользователя и базы в MySQL, а так же виртуального хоста для Apache.

 02 - ClamAV 
Дописать


 03 - База данных и веб-интерфейсы 
Развёртывать или не развёртывать веб-интерфейс — личное дело каждого. Мне он понадобился для контроля процесса миграции. Вам он может понадобиться для создания структуры базы и администрирования доменов, ящиков, алиасов и т.п. Для последних задач в большинстве руководств активно предлагается PostfixAdmin, но мне он категорически не нравится. Равно как я бы рекомендовал придерживаться принципа разделения, по которому почтовый сервер должен заниматься обработкой почты, веб-сервер держать веб-приложения, а DB-сервер работать с базами данных.
Для тех, кто не захочет развёртывать веб-подсистему, прилагаю SQL-дамп базы данных для почтового сервера на все случаи жизни. Даже с некоторыми неиспользуемыми возможностями: mysql_dump.sql на гитхабе.
Если же потребуется PostfixAdmin — ставьте nginx/apache + php и собственно сам PostfixAdmin. И обратите внимание, что развернуть его поверх приведённого дампа не удастся — из структуры удалены некоторые «лишние» таблицы.

Переходим в каталог где будет храниться postfixadmin
Код: выделить все
cd /srv/

выкачиваем архив с postfixadmin
Код: выделить все
wget https://sourceforge.net/projects/postfixadmin/files/latest/download?source=files -O postfixadmin.tar.gz

распаковываем скаченный архив и удаляем его
Код: выделить все
tar -xvzf postfixadmin.tar.gz && rm postfixadmin.tar.gz

создаем символическую ссылку на каталог public в каталоге web-сервера
Код: выделить все
ln -s /srv/postfixadmin/public /var/www/postfix.free-adm.ru/public_html/postfixadmin

Установка владельца и прав на каталог /srv/postfixadmin ????
Код: выделить все

Нюансов настройки PostfixAdmin немного. Редактируем config.inc.php, обращая внимание на следующие параметры:
!!! должен содержать тот же метод хэширования пароля, что и dovecot
e /srv/postfixadmin/config.inc.php
Код: выделить все
$CONF['encrypt'] = 'md5crypt';
$CONF['transport_default'] = 'dovecotl';
$CONF['emailcheck_resolve_domain']='NO';
## Поскольку будет использоваться dovecot, убираем префикс
$CONF['create_mailbox_subdirs_prefix']='';
## На случай, если захочется использовать хранение квот не в maildir, а в базе данных через dict
$CONF['new_quota_table'] = 'yes';

После этого можно идти на domain.tld/postfixadmin/setup.php, генерировать пароль и создавать учётную запись супер-администратора. Теперь сгенерированный хэш надо внести в файл config.inc.php и изменить его статус:
Код: выделить все
$CONF['configured'] = true;
$CONF['setup_password'] = 't8h9i9s2i7s7m2y4l9o8g9i4n:a0n9d5p2a5s2s9w5o4r7d';

[!] Postfixadmin сам создаёт структуру базы и в mysql, и в postgresql при запуске setup.php. Если намереваетесь использовать его, установку следует проводить на пустую базу.


 04 - Postfix 
Устанавливаем недостающие пакеты
Код: выделить все
dnf install postfix-mysql dovecot-mysql

Все основные компоненты почтовой системы будут оперировать с файлами в /var/vmail под отдельным пользователем:
Код: выделить все
groupadd  -g 1010 vmail
useradd -d /var/vmail/ -g 1010 -u 1010 vmail
chown vmail:vmail /var/vmail

Сделаем самоподписанные SSL сертификаты:
Код: выделить все
mkdir /etc/postfix/certs
cd /etc/postfix/ssl/
openssl req -x509 -nodes -newkey rsa:1024 -days $((365*5)) -keyout free-adm2.ru.key -out free-adm2.ru.crt -subj /C=RU/ST=MOSCOW/L=BALASHICHA/O=HOME/OU=ENG/CN=free-adm.ru/emailAddress=sav@mail.ru

Просмотреть информацию о сертификате (*.crt)
Код: выделить все
openssl x509 -noout -text -in free-adm2.ru.crt



Убеждаем Postfix работать с базой данных
Код: выделить все
mkdir /etc/postfix/mysql

cat /etc/postfix/mysql/relay_domains.cf
Код: выделить все
hosts = localhost
user = postfix
password = 123456
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1'

cat /etc/postfix/mysql/virtual_alias_domain_maps.cf
Код: выделить все
hosts = localhost
user = postfix
password = 123456
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1

cat /etc/postfix/mysql/virtual_alias_maps.cf
Код: выделить все
hosts = localhost
user = postfix
password = 123456
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

cat /etc/postfix/mysql/virtual_mailbox_domains.cf
Код: выделить все
hosts = localhost
user = postfix
password = 123456
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'

cat /etc/postfix/mysql/virtual_mailbox_maps.cf
Код: выделить все
hosts = localhost
user = postfix
password = 123456
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

Редактируем файл /etc/postfix/main.cf, обучая Postfix работать с базой по свежесозданным файлам:
Код: выделить все
# ============================================================
# MySQL mappings
# ============================================================
relay_domains = mysql:/etc/postfix/mysql/relay_domains.cf
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual_alias_maps.cf,
                     mysql:/etc/postfix/mysql/virtual_alias_domain_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf

в /etc/postfix/master.cf редактируем секцию, отвечающую за submission:
Код: выделить все
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_wrappermode=no
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
  -o milter_macro_daemon_name=ORIGINATING

[!] Обязательно обращаем внимание на пробелы перед -o ключами — без них конфиг не будет валидным.


Пока отложим в сторону master.cf, к нему мы вернёмся позднее, и продолжим с /etc/postfix/main.cf
Код: выделить все
soft_bounce = no
myhostname = mail.domain.tld
mydomain = domain.tld
myorigin = $myhostname

# Убираем $myhostname и $mydomain из локального класа
# Чтобы не было do not list domain in BOTH mydestination and virtual_mailbox_domains
mydestination = localhost.$mydomain, localhost

## Вписываем свои сетки
## Обязательно отредактировать и сузить до максимально узкого диапазона
## Лучше вообще не использовать и не позволять отправку почты без авторизации
mynetworks = 195.0.1.0/24, 127.0.0.0/8

## Убираем nis:/ чтобы избежать спама в лог
## dict_nis_init: NIS domain name not set - NIS lookups disabled
alias_maps = hash:/etc/aliases

smtpd_banner = $myhostname ESMTP $mail_name
debug_peer_level = 2
debug_peer_list = 127.0.0.1

Это были изменения строк по умолчанию. А теперь добавим несколько секций наших настроек. Проверьте на дубликаты, убирая их из родной конфигурации, если они там встречаются. Я предлагаю свои настройки вписывать структурированными блоками в нижней части файла /etc/postfix/main.cf:
Код: выделить все
# ============================================================
# RESTRICTIONS
#
# Uncomment reject_rbl_client if necessary
# More information at: http://help.ubuntu.ru/wiki/фильтрация_спама_на_уровне_smtp_протокола
# ============================================================
smtpd_discard_ehlo_keywords = etrn, silent-discard
smtpd_forbidden_commands = CONNECT GET POST
broken_sasl_auth_clients = yes
smtpd_delay_reject = yes
smtpd_helo_required = yes
disable_vrfy_command = yes

smtpd_helo_restrictions = permit_mynetworks,
                          permit_sasl_authenticated,
                          reject_non_fqdn_helo_hostname,
                          reject_invalid_helo_hostname

smtpd_data_restrictions = permit_mynetworks,
                          permit_sasl_authenticated,
                          reject_unauth_pipelining,
                          reject_multi_recipient_bounce,

smtpd_sender_restrictions = permit_mynetworks,
                            permit_sasl_authenticated,
                            reject_non_fqdn_sender,
                            reject_unknown_sender_domain

smtpd_recipient_restrictions = reject_non_fqdn_recipient,
                              # reject_unknown_recipient_domain,
                               reject_multi_recipient_bounce,
                               permit_mynetworks,
                               permit_sasl_authenticated,
                               reject_unauth_destination,
                               #check_policy_service unix:/var/spool/postfix/postgrey/socket,
                               #reject_rbl_client zen.spamhaus.org,
                               #reject_rbl_client bl.spamcop.net,
                               #reject_rbl_client dnsbl.sorbs.net,
                               reject_invalid_hostname

# ============================================================
# TLS
# ============================================================
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache
smtpd_tls_key_file = /etc/postfix/certs/key.pem
smtpd_tls_cert_file = /etc/postfix/certs/cert.pem
tls_random_source = dev:/dev/urandom

# ============================================================
# LIMITS
# ============================================================
message_size_limit = 51200000
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 15
smtpd_error_sleep_time = 20
anvil_rate_time_unit = 60s
smtpd_client_connection_count_limit = 20
smtpd_client_connection_rate_limit = 30
smtpd_client_message_rate_limit = 30
smtpd_client_event_limit_exceptions = $mynetworks
smtpd_client_connection_limit_exceptions = $mynetworks

# ============================================================
# QUEUE
# ============================================================
maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d

Использовать или не использовать чёрные списки — ваш выбор. Я закомментировал соответствующие директивы reject_rbl_client, чтобы не плодить холивары. Грейлистинга зачастую хватает, а Spamhaus и иже с ним исповедуют неоднозначную политику, но на практике оказалось, что «честных ребят», в чёрные списки просто так не заносит и ложных срабатываний у нас не было. Повезло, наверное. Поэтому — дело вкуса включать директивы RBL или нет. Считайте, что я их указал в информационных целях.


 05 - Dovecot 
Dovecot — свободный IMAP- и POP3-сервер, разрабатываемый с упором на безопасность, гибкость настройки и быстродействие.
Что это такое:
  • Поддержка форматов почтовых ящиков mbox и Maildir, а также собственные форматы dbox и Cydir
  • Высокое быстродействие благодаря индексации содержимого ящиков
  • Большое количество поддерживаемых механизмов хранения аутентификационной информации (включая LDAP) и самой аутентификации (поддерживается SSL).
  • Собственная реализация SASL. Postfix 2.3+ и Exim 4.64+ могут аутентифицироваться напрямую через Dovecot.
  • Полная поддержка IMAP ACL для гибкой настройки прав пользователей
  • Поддержка общих ящиков и папок (shared mailboxes and folders)
  • Расширяемость при помощи плагинов
  • Собственный MDA с поддержкой Sieve
  • Строгое следование стандартам — Dovecot один из немногих кто проходит тест на соответствие всем стандартам IMAP
  • Возможность модификации индексов с нескольких компьютеров — что позволяет ему работать с NFS и кластерными файловыми системами
  • Поддерживает различные виды квот
  • Поддержка различных ОС: Linux, Solaris, FreeBSD, OpenBSD, NetBSD и Mac OS X
  • Простота настройки.
Пара изменений в /etc/dovecot/dovecot.conf:
Код: выделить все
protocols = imap pop3
login_greeting = Dovecot ready.

/etc/dovecot/conf.d/10-auth.conf
Код: выделить все
disable_plaintext_auth = no
auth_realms = free-adm.ru
auth_default_realm = free-adm.ru
auth_mechanisms = plain login
## [!] Комментируем auth-system.conf.ext, чтобы не
## заставлять dovecot искать пользователя в pam
#!include auth-system.conf.ext

/etc/dovecot/conf.d/10-logging.conf (Разобраться с правами на log-файлы иначе почта не работает)
Код: выделить все
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log
debug_log_path = /var/log/dovecot-debug.log
auth_verbose = no
auth_verbose_passwords = no
auth_debug = no
auth_debug_passwords = no
mail_debug = no
verbose_ssl = no
plugin {
}

/etc/dovecot/conf.d/10-mail.conf
Код: выделить все
mail_location = maildir:/var/vmail/%d/%n
mail_uid = 1010
mail_gid = 1010
mail_plugins = quota

/etc/dovecot/conf.d/10-master.conf
Код: выделить все
# Поднимаем imap и imaps
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}

# Поднимаем pop3 и pop3s
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

# Поднимаем SASL, куда будет ходить postfix
service auth {
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    group = vmail
  }
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user=postfix
    group=postfix
  }
}

/etc/dovecot/conf.d/10-ssl.conf
Код: выделить все
ssl = yes
ssl_cert = </etc/postfix/ssl/free-adm.ru.crt
ssl_key =  </etc/postfix/ssl/free-adm.ru.key

=============================================================================================
Разобраться с плагинами (autocreate устарел)
/etc/dovecot/conf.d/15-lda.conf
Код: выделить все
quota_full_tempfail = no
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
protocol lda {
mail_plugins = $mail_plugins
}

Тот же самый вопрос по плагинам
/etc/dovecot/conf.d/20-imap.conf
Код: выделить все
protocol imap {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins quota imap_quota
}

/etc/dovecot/conf.d/90-plugin.conf
Код: выделить все

=============================================================================================
/etc/dovecot/conf.d/90-quota.conf
Код: выделить все

/etc/dovecot/conf.d/auth-sql.conf.ext
Код: выделить все
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}

Создаём /etc/dovecot/dovecot-sql.conf.ext:
cat /etc/dovecot/dovecot-sql.conf.ext
Код: выделить все
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=123456
default_pass_scheme = MD5-CRYPT
user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n'as mail, 1010 AS uid, 1010 AS gid, concat('*:bytes=', quota) AS quota_rule 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, 1010 as userdb_uid, 1010 as userdb_gid, concat('*:bytes=', quota) AS userdb_quota_rule FROM mailbox WHERE username = '%u' AND active = '1'

Теперь подружим Postfix с Dovecot. Добавим две секции в /etc/postfix/main.cf:
Код: выделить все
# ============================================================
# SASL
# ============================================================
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

# ============================================================
# VIRTUAL
# ============================================================
virtual_mailbox_base = /var/vmail
virtual_minimum_uid = 1000
virtual_uid_maps = static:1010
virtual_gid_maps = static:1010
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

И поставим Postfix перед фактом, что доставкой почты занимается dovecot. В /etc/postfix/master.cf:
Код: выделить все
# ====================================================================
# DOVECOT
# ====================================================================
dovecot unix    -       n       n       -       -      pipe
  flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}




 06 - Spamassassin 
Поскольку у нас будет работать Amavis, который является прослойкой между почтовыми агентами и антивирусно-антиспамовыми системами, то запускать spamd отдельно не нужно – он работает как модуль, подгружающийся при необходимости. Чтобы SA держать обновлённым, используется родная утилита sa-update. Убедимся, что в etc/cron.d есть файлик sa-update с запланированным запуском апдейтера.
Код: выделить все
dnf install spamassassin amavisd-new

Немного подкорректируем /etc/mail/spamassassin/local.cf
Код: выделить все
required_hits 6
report_safe 0
rewrite_header Subject [ *** SPAM *** ]

#
# WEIRD STUFF
#
score FORGED_MUA_OUTLOOK 2.199 2.199 0.963 1.116
score FH_DATE_PAST_20XX 0.0
score DOS_OE_TO_MX_IMAGE 0.0
score DOS_OE_TO_MX 0.0
score DOS_OUTLOOK_TO_MX 0.0
score TO_NO_BRKTS_DIRECT 0.0
score HELO_LOCALHOST 0.0
score FSL_RU_URL 0.0
score FROM_MISSP_EH_MATCH 1.0
score TVD_RCVD_SINGLE 1.0
score TO_IN_SUBJ 1.0

#
# TUNING
#
score SUBJ_FULL_OF_8BITS 0.00
score HTML_COMMENT_8BITS 0.01
score HEADER_8BITS 0.00
score TO_NO_USER 0.01
score FORGED_MUA_OUTLOOK 0.5
score X_AUTH_WARNING 0.01
score SUBJ_HAS_UNIQ_ID 9.99
score HTTP_USERNAME_USED 9.99
score FORGED_YAHOO_RCVD 9.99
score FORGED_JUNO_RCVD 16
score UNWANTED_LANGUAGE_BODY 1.02
score MLM 5.55
score RCVD_NUMERIC_HELO 4.95

#
# WHITE/BLACK LISTS
#
whitelist_from root@localhost
whitelist_from *@free-adm.ru
blacklist_from *@outblaze.com
auto_whitelist_path /etc/mail/spamassassin/auto-whitelist
auto_whitelist_file_mode 0666



 07 - Amavisd-new 
Теперь сообщим Postfix'у, что отныне он использует Amavis для проверки почты. Вносим соответствующий блок в /etc/postfix/master.cf
Код: выделить все
# ====================================================================
# AMAVIS
# ====================================================================
amavisfeed unix -       -       n       -       4       lmtp
  -o lmtp_data_done_timeout=1200
  -o lmtp_send_xforward_command=yes
  -o disable_dns_lookups=yes
  -o max_use=20
127.0.0.1:10025 inet n    -       n       -       -     smtpd
  -o content_filter=
  -o smtpd_delay_reject=no
  -o smtpd_client_restrictions=permit_mynetworks,reject
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o smtpd_data_restrictions=reject_unauth_pipelining
  -o smtpd_end_of_data_restrictions=
  -o smtpd_restriction_classes=
  -o mynetworks=127.0.0.0/8,195.0.1.0/24
  -o smtpd_error_sleep_time=0
  -o smtpd_soft_error_limit=1001
  -o smtpd_hard_error_limit=1000
  -o smtpd_client_connection_count_limit=0
  -o smtpd_client_connection_rate_limit=0
  -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters,no_address_mappings
  -o local_header_rewrite_clients=
  -o smtpd_milters=
  -o local_recipient_maps=
  -o relay_recipient_maps=

и в /etc/postfix/main.cf добавляем
Код: выделить все
# ============================================================
# AMAVIS
# ============================================================
content_filter=amavisfeed:[127.0.0.1]:10024

Отрабатываем сервисы:
Код: выделить все
systemctl enable amavisd.service && systemctl start amavisd.service
systemctl restart postfix.service



 08 - Postgrey 
Об эффективности грейлистинга писалось уже не раз, поэтому просто молча
Код: выделить все
dnf install postgrey
systemctl enable postgrey
systemctl start postgrey

Никакой дополнительной конфигурации не требуется — прописываем его в /etc/postfix/main.cf
Код: выделить все
smtpd_recipient_restrictions = ...
                               reject_unauth_destination,
                               check_policy_service unix:/var/spool/postfix/postgrey/socket,
                               ...

[!] Директива check_policy_service должна обязательно идти после reject_unauth_destination.
Если есть необходимость исключить из проверки какие-либо сервера — редактируем /etc/postfix/postgrey_whitelist_clients.local, а для исключения из проверки конкретные почтовые адреса на локальном сервере — редактируем postgrey_whitelist_recipients. Исчерпывающая информация доступна в вики: wiki


 09 - Fail2ban 
Теперь установим и настроемfail2ban
Код: выделить все
dnf install fail2ban

Затем в каталоге /etc/fail2ban/jail.d создаём необходимые файлы для активации нужных нам клеток
Код: выделить все
cat <<EOF > /etc/fail2ban/jail.d/sshd.conf
[sshd]
enabled = true
EOF

Код: выделить все
cat <<EOF > /etc/fail2ban/jail.d/postfix.conf
[postfix]
enabled = true
EOF

Код: выделить все
cat <<EOF > /etc/fail2ban/jail.d/dovecot.conf
[dovecot]
enabled = true
EOF

Код: выделить все
cat <<EOF > /etc/fail2ban/jail.d/named-refused.conf
[named-refused]
enabled = true
EOF

Запускаем и добавляем в автозагрузку сервис fail2ban.service
Код: выделить все
systemctl enable fail2ban.service
systemctl start fail2ban.service



 10 - Тестирование 
Поскольку в Dovecot мы подключили плагин autocreate, то для создания доменов и почтовых ящиков достаточно завести их в базу через Postfixadmin или делая INSERT INTO в консоли. При первой же аутентификации или первом полученном письме структура директорий будет создана автоматически.
Потестируем pop3, imap, smtp в разных позах
  1. Тестируем логин POP3
    Код: выделить все
    telnet 127.0.0.1 110
    user test
    pass testpassword
    UIDL

  2. Тестируем логин IMAP
    Код: выделить все
    telnet 127.0.0.1 143
    1 LOGIN test testpassword
    1 SELECT INBOX

  3. Тестируем SMTP без авторизации
    Код: выделить все
    telnet 127.0.0.1 25
    #220 mail.domain.tld ESMTP Postfix
    helo darling
    #250 mail.domain.tld
    MAIL FROM: root@localhost
    #250 2.1.0 Ok
    RCPT TO: test@example.com
    #250 2.1.5 Ok
    DATA
    #354 End data with <CR><LF>.<CR><LF>
    this is text message

    .
    #250 2.0.0 Ok: queued as E3BA1A15FA
    quit
    #221 2.0.0 Bye

  4. Тестируем SMTP c авторизацией без SSL
    Предварительно закодируйте в base64 тестовые логин и пароль, которые посылаются последовательно после AUTH LOGIN. Входящие требования с кодом 334 тоже закодированы в base64.
    Код: выделить все
    telnet 127.0.0.1 25
    #220 mail.domain.tld ESMTP Postfix
    ehlo darling
    #250-mail2.dautkom.lv
    #250-PIPELINING
    #250-SIZE 51200000
    #250-STARTTLS
    #250-AUTH PLAIN LOGIN
    #250-AUTH=PLAIN LOGIN
    #250-ENHANCEDSTATUSCODES
    #250-8BITMIME
    #250 DSN
    AUTH LOGIN
    #334 VXNlcm5hbWU6
    dGVzdA==
    #334 UGFzc3dvcmQ6
    dGVzdHBhc3N3b3Jk
    #235 2.7.0 Authentication successful

  5. Тестируем SMTP c SSL
    Код: выделить все
    # Зашифруем наши credentials
    perl -MMIME::Base64 -e 'print encode_base64("\000test\@example.com\000testpassword")'           
    # Получаем строку
    # AHRlc3RAZXhhbXBsZS5jb20AdGVzdHBhc3N3b3Jk

    openssl s_client -starttls smtp -connect 127.0.0.1:587 -crlf -ign_eof
    # Обмен приветствиям
    # На полтора экрана текста

    EHLO darling
    #250-mail.example.com
    #250-PIPELINING
    #250-SIZE 51200000
    #250-ENHANCEDSTATUSCODES
    #250-8BITMIME
    #250 DSN

    AUTH PLAIN AHRlc3RAZXhhbXBsZS5jb20AdGVzdHBhc3N3b3Jk
    #235 2.7.0 Authentication successful

Потестируем антивирусную защиту
  1. В комплекте с amavis идут вирусы и спам. Тестовые, разумеется. И чтобы сканеры не паниковали, они лежат запакованные. Поэтому перед дальнейшими тестами распакуем эту радость:
    Код: выделить все
    cd /usr/share/doc/amavisd-new-2.8.0/test-messages
    perl -pe 's/./chr(ord($&)^255)/sge' <sample.tar.gz.compl | zcat | tar xvf -


  2. Теперь можно тестировать отправку вирусов и спама:
    Код: выделить все
    sendmail -i your-address@example.com < sample-virus-simple.txt
    sendmail -i your-address@example.com < sample-spam-GTUBE-junk.txt

    Информацию по обработке можно читать в логах (по умолчанию /var/log/maillog). Чтобы увидеть больше информации, поднимите уровень verbose в /etc/dovecot/conf.d/10-logging.conf и log-level в /etc/amavisd/amavisd.conf.



 11 - Заключение 
Теперь можно начинать работать с почтовым сервером, создавать домены, пользователей, алиасы и т.п. Напоследок несколько общих моментов и рекомендаций:

  1. Для работы с конфигурационными файлами я использую git, превратив директорию /etc в репозиторий. Такой подход позволяет удобно шарить конфиги между сотрудниками техотдела и пошагово контролировать процесс настройки. В работе с такой комплексной системой, как почтовый сервер, подобная практика может сильно облегчить жизнь.
  2. Одной из моих задач была миграция c courier на dovecot. И да, это реально. Официальная документация wiki2.dovecot.org/Migration/Courier даёт почти всю необходимую информацию. В дополнение к ней порекомендую вручную выполнить POP3 команду UIDL на старом и новом сервере под одним и тем же пользователем с непустым почтовым ящиком, сравнивая результаты. Они должны быть одинаковыми, иначе почтовый клиент пользователя скачает всю почту из ящика заново.
    Также можно по окончании миграции на новом сервере удалить ненужные папки и файлы
    Код: выделить все
    find . -name "courier*" -delete
  3. Не забудьте про iptables — откройте только нужные порты и скройте от любопытных глаз служебные.
    Идущий в комплекте логгер rsyslog мне никогда не нравился, и я его меняю на syslog-ng из EPEL. Кстати, при непосредственном участии syslog-ng рисуется график из шестой главы — сбор и запись статистики ведётся путём парсинга логов.
  4. Таблица vacation создаётся, но в dovecot не поставлен плагин Sieve и «автоответчика» нет. Поэтому таблица — просто задел «на будущее». Гайд и так гигантский получился.
Почти полную сборку конфигурационных файлов я выложил на гитхаб, чтобы при необходимости можно было получить доступ к конфигурационным файлам не по кусочкам, а целиком. В этой статье файлы редактировались постепенно, имитируя такую же постепенную настройку всех систем. В подавляющем большинстве руководств файлы давались сразу и у читателя не получалось составить представление что за чем идёт и как связывается. Я постарался от этого избавиться, показывая поэтапность настройки. Авось, кому-то да пригодится.
Ещё раз подчеркну, что это начальный этап установки. Даже если не считать подключение мониторинга, который крайне желателен на почтовом сервере, работы ещё непочатый край. Однозначно потребуется тщательная настройка антиспам политики; если планируется использовать дополнительные релеи, то потребуется доработка запросов; обязательно будет нужно выверять параметры ограничений и т.п.
Но в остальном на этом пробу пера в написании масштабного руководства можно считать завершённой. В планах есть публикация материала уже не для «начинающих» и не по почтовому серверу, но я решил потренироваться на кошках. Кто дочитал до этого места… гм… завидую вашему терпению, но разбивать публикацию на несколько частей представлялось нецелесообразным.
Для желающих отблагодарить
SB: 4274320029755744
QIWI: +79175241450
Аватар пользователя
sergey
Администратор
 
Сообщений: 132
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Вернуться в Fedora

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron