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
