Postfix + Dovecot + MySQL.

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

Модератор: ROOT

Postfix + Dovecot + MySQL.

Сообщение ROOT » 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
Лучше ужасный конец, чем ужас без конца!


Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 421
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 14:26



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

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


Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 421
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 14:27



 02 - ClamAV 
Дописать
Лучше ужасный конец, чем ужас без конца!


Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 421
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 14:28



 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. Если намереваетесь использовать его, установку следует проводить на пустую базу.
Лучше ужасный конец, чем ужас без конца!


Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 421
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 14:30



 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 или нет. Считайте, что я их указал в информационных целях.
Лучше ужасный конец, чем ужас без конца!


Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 421
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 14:32



 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}
Лучше ужасный конец, чем ужас без конца!


Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 421
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 14:33



 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
Лучше ужасный конец, чем ужас без конца!


Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 421
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 14:34



 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
Лучше ужасный конец, чем ужас без конца!


Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 421
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 14:44



 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
Лучше ужасный конец, чем ужас без конца!


Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 421
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 14:45



 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
Лучше ужасный конец, чем ужас без конца!


Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 421
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 14:47



 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.
Лучше ужасный конец, чем ужас без конца!


Для желающих поддержать
Карта SB: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 421
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 14:48



 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: 5469 4009 6510 2267
Аватар пользователя
ROOT
Администратор
 
Сообщений: 421
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный


Вернуться в Fedora

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

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

cron