postfix+dovecot+mysql na FreeBSD

Uvod

Poštanski server sam već dugo želeo proučiti, ali tek sada su mi se pružile mogućnosti, a i informacije koje sam pronašao nisu bile naročito tačne, pa sam odlučio napisati što detaljniju objavu. Ova objava neće govoriti samo o postfixu, dovecotu, mysqlu, postfixadminu, već i o spamassassinu, clamav-milteru (posebna verzija clamava za poštanske servere), postgreyu, kao i o mogućnosti premještanja spam poruka u folder "Spam" (dovecot-pigeonhole).

Priprema

Prvo ćemo instalirati pakete koji će nam biti potrebni (postfix, dovecot i dovecot-pigeonhole potrebno je instalirati iz portova, dovecot-sieve se može instalirati iz paketa, ali u portovima mogu biti novije verzije i zbog toga može doći do nekompatibilnosti dovecota s dovecot-sieve). Instalirajmo sljedeće pakete:

pkg install apache24 php73 mod_php73 php73-extensions php73-mysqli php73-mbstring php73-openssl clamav-milter postgrey spamassassin mysql57-server openssl wget

Nakon instalacije, stavit ćemo potrebne usluge u automatski pokretanje:

#postfix и dovecot также добавим, чтобы не возвращаться к этому позже
sysrc postfix_enable="YES"
sysrc dovecot_enable="YES"

sysrc mysql_enable="YES"
sysrc apache24_enable="YES"

sysrc spamd_flags="-u spamd -H /var/spool/spamd"
sysrc spamd_enable="YES"

sysrc postgrey_enable="YES"

sysrc clamav_clamd_enable="YES"
sysrc clamav_milter_enable="YES"
sysrc clamav_freshclam_enable="YES"
#freshclam будем использовать как службу и проверять обновления 12 раз
sysrc clamav_freshclam_flags="--daemon --checks=12"

Pokrenimo usluge:

service apache24 start
service mysql-server start
# Prije pokretanja spamassassina potrebno je ažurirati baze i sastaviti pravila
sa-update
sa-compile
service sa-spamd start
# Ažurirajte baze clamava prije pokretanja
freshclam
service clamav-clamd start
service clamav-freshclam start
service clamav-milter start
# Prije pokretanja postgreya, potrebno je urediti inicijalizacijski skript (\usr\local\etc\rc.d\postgrey), kako bi se pošiljatelji prebacivali u "bjelu" listu nakon 4 pokušaja slanja e-pošte, potrebno je pronaći redak: ${postgrey_flags:=--inet=10023} i promijeniti ga u:
: ${postgrey_flags:=--inet=10023 --auto-whitelist-clients=4}
service postgrey start

Ne zaboravite dodati u httpd.conf redove potrebne za rad php-a u apacheu i pravilno funkcionisanje postfixadmina:

SetHandler application/x-httpd-php


    SetHandler application/x-httpd-php-source



    DirectoryIndex index.php


# Također je potrebno promijeniti domaći direktorij za pravilno funkcionisanje postfixadmina

DocumentRoot "/usr/local/www/apache24/data/postfixadmin-3.2/public"

Zatim je potrebno otići u direktorij i preuzeti postfixadmin

cd /usr/local/www/apache24/data

Preuzmite postfixadmin (u trenutku pisanja, aktualna verzija bila je 3.2)

wget --no-check-certificate https://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-3.2/postfixadmin-3.2.tar.gz

Nakon toga, potrebno je raspakirati arhiv u taj direktorij i promijeniti vlasnika direktorija:

gzip -d postfixadmin-3.2.tar.gz
tar -xvf postfixadmin-3.2.tar
chown -R www:www /usr/local/www/apache24/data
service apache24 restart

Zatim ćemo pripremiti bazu podataka za postfixadmin, izvršite skriptu mysql-secure-installation (lozinku koju izradite u ovoj skripti trebate također postaviti u mysql naredbom alter user), za osnovno podešavanje mysql-a, zatim se prijavite u mysql, izradite bazu podataka i prava za nju:

mysql -p -r
alter user 'root'@'localhost' identified by 'password123';
create database postfix;
grant all privileges on postfix.* to 'postfix'@'localhost' identified by 'password123';
exit

Nakon što je baza podataka postavljena, potrebno je urediti datoteku config.inc.php, u ovom primjeru se datoteka nalazi u direktoriju /usr/local/www/apache24/data/postfixadmin-3.2/, u toj datoteci je potrebno urediti nekoliko redaka i prilagoditi ih, nakon što promijenite te postavke, ponovo pokrenite apache, također je potrebno izraditi direktorij templates_c u direktoriju /usr/local/www/apache24/data/postfixadmin-3.2 i odrediti mu vlasnika www:

mkdir /usr/local/www/apache24/data/postfixadmin-3.2/templates_c
chown -R www:www /usr/local/www/apache24/data/postfixadmin-3.2/templates_c

$CONF['configured'] = true
# Ova hash vrijednost mora biti generirana u web sučelju postfixadmin i dodana u ovu liniju.
$CONF['setup_password'] = 'dd28fb2139a3bca426f02f60e6877fd5:13d2703c477b0ab85858e3ac5e076a0a7a477315';
$CONF['default_language'] = 'hr'
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
# Lozinka i ime baze podataka koriste se koje ste stvorili u ovom primjeru
$CONF['database_password'] = 'password123';
$CONF['database_name'] = 'postfix';

service apache24 restart

SSL

Za generiranje ključa koristit ćemo metodu koja je predložena na stranici postfix.org, s izradom vlastitog centra za certifikaciju, potrebno je preći u direktorij /etc/ssl i izvršiti skriptu:

cd /etc/ssl
/usr/local/openssl/misc/CA.pl -newca

Prilikom izvršenja skripte bit će zatraženo ime za certifikat, ništa ne unosite, pritisnite Enter, zatim će skripta zatražiti da izradite lozinku za certifikat, a zatim će biti standardna pitanja za izradu certifikata.

Nakon toga potrebno je izraditi tajni ključ (bez lozinke) i ne potpisani certifikat javnog ključa (Organizational Unit Name (npr. odjel) [] mora se razlikovati od onoga što je navedeno u certifikatu stvorenom ranije):

openssl req -new -newkey rsa:4096 -nodes -keyout foo-key.pem -out foo-req.pem

Potpisat ćemo certifikat javnog ključa (broj dana navedite koliko vam je potrebno):

openssl ca -out foo-cert.pem -days 365 -infiles foo-req.pem

Ostavljene certifikate sačuvajte u ovom katalogu ili ih premjestite u katalog koji vam više odgovara. Postfix i dovecot konfiguracije bit će postavljene tako da će certifikati biti u ovom katalogu.

Korisnik vmail

Prije nego što započnemo s instalacijom postfixa, dovecota i dovecot-pigeonholea, kreirat ćemo korisnika i grupu (grupa će se automatski stvoriti) vmail, kao i katalog u kojem će se e-pošta nalaziti.

pw useradd -n vmail -s /usr/sbin/nologin -u 1000 -d /var/vmail

Kreirat ćemo katalog za e-poštu i postaviti vmail kao vlasnika:

mkdir /var/vmail
chown -R vmail:vmail /var/vmail
chmod -R 744 /var/vmail

Postfix, dovecot, dovecot-pigeonhole

Kao što sam ranije spomenuo, gradnju ovih aplikacija izvest ćemo iz portova. Izvršite naredbu za preuzimanje i raspakiravanje portova:

portsnap fetch extract

Nakon raspakiravanja portova, pređite u katalog dovecot, izvršite konfiguraciju porta (neophodno je označiti podršku za mysql) i pokrenite gradnju (BATCH=yes će reći make da ne postavlja pitanja tijekom instalacije):

cd /usr/ports/mail/dovecot
make config
make BATCH=yes install clean

Iste korake ponovite s postfixom i dovecot-pigeonholeom

dovecot-pigeonhole:

cd /usr/ports/mail/dovecot-pigeonhole
make BATCH=yes install clean

postfix: također označite u konfiguraciji porta podršku za mysql

cd /usr/ports/mail/postfix-sasl
make config
make BATCH=yes install clean

Prije pokretanja dovecota kopirajte "konfigure":

 cp -R /usr/local/etc/dovecot/example-config/* /usr/local/etc/dovecot

Nakon instalacije postfixa i dovecota pokrenite usluge:

service postfix start
service dovecot start

Također je potrebno stvoriti katalog u kojem će se kompilirati modul za prosljeđivanje neželjene pošte u mapu neželjenu poštu. U mom slučaju se taj katalog nalazi u /usr/local/etc/dovecot/conf.d, naziv katalog je def. Kreirat ćemo taj katalog i datoteku s kodom za kompilaciju i postaviti vmail kao vlasnika:

mkdir /usr/local/etc/dovecot/conf.d/def
touch /usr/local/etc/dovecot/conf.d/def/default.sieve
chown -R vmail:vmail /usr/local/etc/dovecot/conf.d/def
chmod -R 744 /usr/local/etc/dovecot/conf.d/def

U ovu datoteku stavite sljedeće linije:

require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
    fileinto "Junk";
}

"Konfigi"

U ovom dijelu ću dati primjere "konfiga" s komentarima, osim u "konfigu" spamassassina, jer nisam pronašao točne opise na mreži (ostavio sam "konfig" prema zadanim postavkama). Molim vas, nadopunite komentare kako bolje postaviti spamassassin.

Postfix

Prvo je potrebno stvoriti datoteke za vađenje korisnika, domena, kvota iz baze podataka. Kreirajte katalog za pohranu ovih datoteka i potrebne datoteke:

mkdir /usr/local/etc/postfix/mysql
touch /usr/local/etc/postfix/mysql/relay_domains.cf
touch /usr/local/etc/postfix/mysql/virtual_alias_maps.cf
touch /usr/local/etc/postfix/mysql/virtual_alias_domain_maps.cf
touch /usr/local/etc/postfix/mysql/virtual_mailbox_maps.cf

Sadržaj ovih datoteka bit će sljedeći:
relay_domains.cf

hosts = 127.0.0.1
user = postfix
password = password123
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1'

virtual_alias_maps.cf

hosts = 127.0.0.1
user = postfix
password = password123
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active ='1'

virtual_alias_domain_maps.cf

hosts = 127.0.0.1
user = postfix
password = password123
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'

virtual_mailbox_maps.cf

hosts = 127.0.0.1
user = postfix
password = password123
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

master.cf

#Указать postfix о том, что необходимо использовать dovecot для доставки почты
dovecot unix - n n - - pipe
    flags=DRhu user=vmail:vmail argv=/usr/local/libexec/dovecot/deliver -f ${sender} -d ${recipient}

#Укажем службе smtpd о возможности авторизоваться через sasl, а также о том, что spamassassin будет фильтровать почту
smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=spamassassin
  -o smtpd_sasl_auth_enable=yes

#Использовать порт 587 и возможность авторизации через sasl
submission inet n       -       n       -       -       smtpd
 -o smtpd_sasl_auth_enable=yes

#Указать службе smtp использовать авторизацию через SASL
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_wrappermode=yes

#Использовать Spamassassin
spamassassin   unix  -       n       n       -       -       pipe
   flags=DROhu user=vmail:vmail argv=/usr/local/bin/spamc -f -e
   /usr/local/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop}

#628       inet  n       -       n       -       -       qmqpd
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
#qmgr     unix  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp
        -o syslog_name=postfix/$service_name
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache
postlog   unix-dgram n  -       n       -       1       postlogd

main.cf

#Если не указать в данном параметре значение dovecot, то почта будет поступать локальным пользователям
local_transport = dovecot

#Не чувствительный к регистру список ключевых слов, которые SMTP-сервер не будет отправлять в ответе EHLO удалённому SMTP клиенту
smtpd_discard_ehlo_keywords = CONNECT GET POST

#Подождать пока придёт вся информация о клиенте и только потом применить ограничения
smtpd_delay_reject = yes

#Требовать начинать сессию с приветствия
smtpd_helo_required = yes

#Запретить узнавать существует определённый почтовый ящик, или нет
disable_vrfy_command = yes

#Этот параметр необходим для работы устаревших клиентов
broken_sasl_auth_clients = yes

#Запретить анонимную авторизацию
smtpd_sasl_security_options = noanonymous noactive nodictionary
smtp_sasl_security_options = noanonymous noactive nodictionary

#Использовать dovecot для авторизации(по умолчанию cyrus)
smtpd_sasl_type = dovecot
smtp_sasl_type = dovecot

#путь до плагина аутентификации
smtpd_sasl_path = private/auth

#Список существующих пользователей
local_recipient_maps = $virtual_mailbox_maps $virtual_alias_maps

#Если пользователя не существует, тогда отклонить почту
smtpd_reject_unlisted_recipient = yes

#Лимиты размера писем
message_size_limit = 10485760

#Каждый получатель получит индивидуальную обработку spamassassin
spamassassin_destination_recipient_limit = 1

#Антивирус
milter_default_action = accept
milter_protocol = 2
#Путь до сокета clamav
smtpd_milters = unix:/var/run/clamav/clmilter.sock
non_smtpd_milters = unix:/var/run/clamav/clmilter.sock


#MYSQL
relay_domains = mysql:/usr/local/etc/postfix/mysql/relay_domains.cf
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql/virtual_alias_maps.cf, mysql:/usr/local/etc/postfix/mysql/virtual_alias_domain_maps.cf
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql/virtual_mailbox_maps.cf

#Проверка HELO
smtpd_helo_restrictions = permit_sasl_authenticated, reject_non_fqdn_helo_hostname, reject_invalid_hostname

#Ограничения для содержимого писем
smtpd_data_restrictions = permit_sasl_authenticated reject_unauth_pipelining, reject_multi_recipient_bounce

#Правила отправки почты
smtpd_sender_restrictions = permit_sasl_authenticated reject_sender_login_mismatch,reject_unauthenticated_sender_login_mismatch, reject_non_fqdn_sender, reject_unknown_sender_domain

#Правила приёма почты(check_policy_service inet:127.0.0.1:10023 параметр postgrey - запрещает приём почты с первого раза)
smtpd_recipient_restrictions = permit_sasl_authenticated reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_multi_recipient_bounce, reject_unknown_client_hostname, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023


#Папка для почты
virtual_mailbox_base = /var/vmail

#uid и gid vmail
virtual_minimum_uid = 1000
virtual_uid_maps = static:1000
virtual_gid_maps = static:1000

#Указать виртуальный транспорт
virtual_transport = devecot
dovecot_destination_recipient_limit = 1


#Настройки шифрования
smtp_use_tls=yes
smtp_tls_note_starttls_offer=yes
#строка smtp_tls_security_level=encrypt отвечает за отправку почту только через ssl, если сервер не поддерживает приём почты через ssl, тогда необходимо поставить smtp_tls_security_level=may(если сервер не поддерживает ssl, то отправить в открытом виде)
smtp_tls_security_level=encrypt
smtp_tls_session_cache_database=btree:$data_directory/smtp_tls_session_cache
smtp_tls_CAfile=/etc/ssl/demoCA/cacert.pem
smtp_tls_key_file=/etc/ssl/foo-key.pem
smtp_tls_cert_file=/etc/ssl/foo-cert.pem
smtp_tls_session_cache_timeout=3600s
smtp_tls_protocols=!TLSv1.2
smtp_tls_loglevel=1

#строка smtpd_tls_security_level=encrypt отвечает за отправку почту только через ssl, если сервер не поддерживает приём почты через ssl, тогда необходимо поставить smtpd_tls_security_level=may(если сервер не поддерживает ssl, то отправить в открытом виде)
smtpd_tls_security_level=encrypt
smtpd_use_tls=yes
smtpd_tls_auth_only=yes
smtpd_tls_loglevel=1
smtpd_tls_received_header=yes
smtpd_tls_session_cache_timeout=3600s
smtpd_tls_session_cache_database=btree:$data_directory/smtpd_tls_session_cache
smtpd_tls_key_file=/etc/ssl/foo-key.pem
smtpd_tls_cert_file=/etc/ssl/foo-cert.pem
smtpd_tls_CAfile= /etc/ssl/demoCA/cacert.pem
smtpd_tls_protocols=!TLSv1.2

#Путь до устройства генератора случайных чисел
tls_random_source=dev:/dev/urandom

#Обратная совместимость
compatibility_level = 2

#Сообщить клиенту о том, что почта не отклонена, а необходимо отправит ее ещё раз, но немного позже
soft_bounce = no

#Системная учётная запись UNIX из по которой запускается и работает postfix
mail_owner = postfix

#Имя хоста на котором развёрнут postfix(в данном примере имя домена и имя хоста совпадают)
myhostname = $mydomain

#В данном параметре необходимо указать имя домена
mydomain = virusslayer.su
myorigin = $myhostname

#Какие интерфейсы необходимо использовать
inet_interfaces = all

#Список доменов на которые будет осуществляться доставка почты
mydestination = $mydomain, localhost, localhost.$mydomain

#Отправляет код ответа 550 отправителю который пытается отправить письмо не существующему пользователю
unknown_local_recipient_reject_code = 550

#пересылать почту только от localhost
mynetworks_style = host

#В данном параметре не нужно не чего указывать, так-как подсети указанные в данном параметре будут считаться привилегированными
mynetworks =

#Версия протокола ip
inet_protocols = ipv4

#Алиасы локальных пользователей(если конечно это необходимо)
alias_maps = hash:/etc/mail/aliases
alias_database = dbm:/etc/mail/aliases.db

#Данным сообщением сервер будет представляться при отправке и получении почты
smtpd_banner = $myhostname ESMTP $mail_name

#Указать на сколько подробным должен быть отчёт
debug_peer_level = 2

#Указать между какими доменами отслкживать пересылку (для записи в лог, можно указать например yandex.ru gmail.ru mail.ru и т.д.)
debug_peer_list = 127.0.0.1

#Путь до отладчика
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5

#Совместимость с sendmail
sendmail_path = /usr/local/sbin/sendmail
mailq_path = /usr/local/bin/mailq


setgid_group = maildrop

#Пути до различных каталогов
html_directory = /usr/local/share/doc/postfix
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = /usr/local/share/doc/postfix
meta_directory = /usr/local/libexec/postfix
shlib_directory = /usr/local/lib/postfix
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix

Dovecot

dovecot.conf

#Протоколы с которыми будет работать dovecot
protocols = imap pop3

#Какие адреса необходимо слушать
listen = *, ::

#Путь до файла с параметрами извлечения квот из mysql
dict {
    quota = mysql:/usr/local/etc/dovecot/dovecot-dict-sql.conf.ext
}

#Извлечь необходимые конфиги
!include conf.d/*.conf
!include_try local.conf

dovecot-dict-sql.conf.ext

connect = host=127.0.0.1 dbname=postfix user=postfix password=password123

map {
  pattern = priv/quota/storage
  table = quota2
  username_field = username
  value_field = bytes
}
map {
  pattern = priv/quota/messages
  table = quota2
  username_field = username
  value_field = messages
}

dovecot-sql.conf.ext

#Параметры подключения к базе MYSQL
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfix password=password123

#Какая схема используется для паролей
default_pass_scheme = MD5

#Запросы для пользователей, паролей и квот
user_query = SELECT '/var/mail/%d/%n/' AS  home, 'maildir:/var/vmail/%d/%n' AS mail, 1000 AS uid, 1000 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, 1000 as userdb_uid, 
 1000 as userdb_gid, concat('*:bytes=',quota) AS userdb_quota_rule FROM mailbox WHERE username ='%u' AND active ='1'

10-auth.conf

#Запретить авторизацию без SSL
disable_plaintext_auth = yes

#Имя Вашего домена
auth_realms = virusslayer.su
auth_default_realm = virusslayer.su

#Использовать авторизацию в открытом виде(обычным текстом, но в данном случаи все будете передаваться через ssl)
auth_mechanisms = plain login

#Необходимо закомментировать все строки, кроме !include auth-sql.conf.ext, так как пользователи будут виртуальные из базы mysql
#!include auth-deny.conf.ext
#!include auth-master.conf.ext

#!include auth-system.conf.ext
!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

10-mail.conf

#Путь до почтовых ящиков
mail_location = maildir:/var/vmail/%d/%n

#Возможен только один ящик для приёма писем
namespace inbox {
  inbox = yes
}

#uid и gid vmail
mail_uid = 1000
mail_gid = 1000

#Список плагинов, в данном случаи quota
mail_plugins = quota

10-master.conf

#Описание номеров портов и использование ssl
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}

service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

service submission-login {
  inet_listener submission {
    port = 587
  }
}

#Пользователи и права для их доступа к базе пользователей и авторизации (возможно не корректно описал, но эти параметры я понял именно так)
service auth {
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    group = vmail
  }
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}

#Права пользователя vmail к квотам
service dict {
  unix_listener dict {
    mode = 0660
    user =  vmail
    group = vmail
    }
  }

10-Uklonjena je neiskorištena tabela INFORMATION_SCHEMA.TABLESPACES..conf

#Использовать ssl принудительно (попытки использовать авторизацию без sll будут запрещены)
ssl = required

#Пути до сертификатов
ssl_cert = </etc/ssl/foo-cert.pem
ssl_key = </etc/ssl/foo-key.pem
ssl_ca = </etc/ssl/demoCA/cacert.pem

#Какой необходимо использовать протокол
ssl_min_protocol = TLSv1.2

15-lda.conf

quota_full_tempfail = no
lda_mailbox_autosubscribe = yes
protocol lda {
 # U ovoj liniji je naveden sieve modul koji će preusmjeriti spam u mapu spam
  mail_plugins = $mail_plugins sieve quota
}

90-plugin.conf

#Необходимо указать каталог в котором будут правила для переноса спам писем в каталог "СПАМ", также необходимо данному каталогу выставить права chown -R vmail:vmail
#В данном каталоге скомпилируется файл для переброса спама в каталог "СПАМ"
plugin {
  #setting_name = value
  sieve = /usr/local/etc/dovecot/conf.d/def/default.sieve
}

auth-sql.conf.ext

#Файлы с настройками доступа к базе MYSQL
passdb {
  driver = sql

  # Path for SQL configuration file, see example-config/dovecot-sql.conf.ext
  args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
}

userdb {
  driver = sql
  args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
}

Spamassassin

«Konfiguracija» spamassassina izgleda ovako, ali mislim da nije dovoljno postavljene, molim vas, pomozite s ovom «konfiguracijom»:

local.cf

rewrite_header Subject *****SPAM*****
report_safe 0
required_score 5.0
use_bayes 1
bayes_auto_learn 1
ifplugin Mail::SpamAssassin::Plugin::Shortcircuit
endif # Mail::SpamAssassin::Plugin::Shortcircuit

Također je potrebno izvršiti učenje na e-mailovima sa spamom i bez njega:

sa-learn --spam /path/spam/folder
sa-learn --ham /path/ham/folder

Dodatno

U ovom odjeljku ću navesti postavke vatrozida temeljenih na pf, dodati ću pf u automatsku početnu i naznačiti datoteku s pravilima:

sysrc pf_enable="YES"
sysrc pf_rules="/etc/0.pf"

Stvorit ćemo datoteku s pravilima:

ee /etc/0.pf

I dodati u nju pravila:

#Данный параметр(не фильтровать интерфейс lo0) обязательно необходимо указывать первым, или он не сработает
set skip on lo0

#Настроим доступ к необходимым портам пользователям deovecot, postfix, root
pass in quick proto { tcp, udp } from any to any port {53,25,465,587,110,143,993,995} user {dovecot,postfix,root} flags S/SA modulate state
pass out quick proto { tcp, udp } from any to any port {53,25,465,587,110,143,993,995} user {dovecot,postfix,root}

#разрешить любой исходящий трафик для пользователя root
pass out quick proto {tcp,udp} from any to any user root

#Разрешить заходить на вэб интерфейс
pass in quick proto tcp from any to any port 80 flags S/SA modulate state

#SSH
pass in quick proto tcp from any to any port 22 flags S/SA modulate state

#Разрешить доступ в сеть пользователям clamav и spamd 
pass out quick proto {tcp,udp} from any to any user {clamav,spamd}

#DNS и ICMP
pass out quick proto {tcp,udp} from any to any port=53 keep state
pass out quick proto icmp from any to any

block from any to any fragment
block from any to any
block all

Pokretanje pf može se izvršiti naredbom:

service pf start

Testiranje

Za testiranje svih mogućih veza (STARTTLS, SSL) možete koristiti klijent za mobilne uređaje (u mom slučaju za iOS) «MojOofis Pošta», u ovom aplikaciji postoje mnoge opcije za postavku veza s poštanskim poslužiteljem.

Za testiranje spamassassina koristimo potpis GTUBE, u e-mail dodajte sljedeći redak:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Ako je sve ispravno, e-mail će biti označen kao spam i prebačen u mapu spam.

Za testiranje antivirusnog programa potrebno je poslati e-mail s tekstualnom datotekom, u kojoj će biti sekvenca EICAR:

X5O!P%@AP[4PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Naravno, poruke je potrebno slati s vanjskih email adresa.
Za pregled logova u stvarnom vremenu pokrenite:

tail -f /var/log/maillog

Također, za ispravno testiranje slanja emailova na vanjske adrese (na primjer yandex.ru, mail.ru, gmail.com itd.) potrebno je postaviti povratnu DNS zonu (PTR zapis), što možete učiniti obraćanjem svom pružatelju usluga (ako naravno nemate vlastiti DNS poslužitelj).

Izvještaj

Možda se može činiti da je email poslužitelj prilično složen, ali kad se razjasni, to uopće nije tako; s malo vremena utrošenog na konfiguraciju, možete dobiti vrlo funkcionalan email poslužitelj, s zaštitom od spama i virusa.

P.S. Ako planirate 'kopirati i zalijepiti' s komentarima, potrebno je dodati korisnika root (i onima kojima je to potrebno) u logove klasa russian:

pw usermod root -L russian

Nakon ovih radnji ruski će se znakovi ispravno prikazivati.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster