Inleiding
Ik wilde al een tijd een mailserver bestuderen, maar ik kwam er pas nu aan toe, en ik kon ook niet echt veel correcte informatie vinden. Daarom besloot ik een zo gedetailleerd mogelijke publicatie te schrijven. In deze publicatie gaat het niet alleen over postfix, dovecot, mysql, postfixadmin, maar ook over spamassassin, clamav-milter (een speciale versie van clamav voor mailservers), postgrey, en de mogelijkheid om spam naar de "Spam"-map te verplaatsen (dovecot-pigeonhole).
Voorbereiding
Als eerste installeren we de pakketten die nodig zijn voor de werking (postfix, dovecot en dovecot-pigeonhole moeten uit ports worden geïnstalleerd, dovecot-sieve kan in principe uit pakketten worden geïnstalleerd, maar in ports zijn de versies vaak nieuwer en daarom kan er incompatibiliteit zijn tussen dovecot en dovecot-sieve). We installeren de volgende pakketten:
pkg install apache24 php73 mod_php73 php73-extensions php73-mysqli php73-mbstring php73-openssl clamav-milter postgrey spamassassin mysql57-server openssl wget
Na de installatie voegen we de benodigde diensten toe aan de opstartlijst:
#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"
We starten de diensten:
service apache24 start
service mysql-server start
# Voor het starten van spamassassin moeten de databases worden bijgewerkt en regels worden gecompileerd
sa-update
sa-compile
service sa-spamd start
# Voer database-updates van clamav uit voor het starten
freshclam
service clamav-clamd start
service clamav-freshclam start
service clamav-milter start
# Voor het starten van postgrey moet het initiële script worden bewerkt (\/usr\/local\/etc\/rc.d\/postgrey). Om afzenders na 4 pogingen om e-mails te verzenden op de "witte" lijst te zetten, moet je de regel vinden: ${postgrey_flags:=--inet=10023} en deze aanpassen naar:
: ${postgrey_flags:=--inet=10023 --auto-whitelist-clients=4}
service postgrey start
Vergeet niet de benodigde regels voor de werking van php in apache en correcte werking van postfixadmin toe te voegen aan httpd.conf:
<FilesMatch ".php$">
SetHandler application/x-httpd-php
<\/FilesMatch>
<FilesMatch ".phps$">
SetHandler application/x-httpd-php-source
<\/FilesMatch>
<IfModule dir_module>
DirectoryIndex index.php
<\/IfModule>
# En ook moet de document root worden gewijzigd voor de correcte werking van postfixadmin
DocumentRoot "\/usr\/local\/www\/apache24\/data\/postfixadmin-3.2\/public"
Vervolgens moet je naar de directory gaan en postfixadmin downloaden
cd \/usr\/local\/www\/apache24\/data
Laten we postfixadmin downloaden (ten tijde van schrijven was de actuele versie 3.2)
wget --no-check-certificate https:\/\/sourceforge.net\/projects\/postfixadmin\/files\/postfixadmin\/postfixadmin-3.2\/postfixadmin-3.2.tar.gz
Daarna moet je het archief in deze directory uitpakken en de eigenaar van de directory wijzigen:
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
Laten we de database voor postfixadmin voorbereiden. Voer het script mysql-secure-installation uit (het wachtwoord dat u in dit script aanmaakt, moet ook in mysql worden aangemaakt met het commando alter user), voor de initiële configuratie van mysql. Log vervolgens in op mysql, maak de database en de rechten hiervoor aan:
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
Nadat de database is ingesteld, moet het bestand config.inc.php worden bewerkt. In dit voorbeeld bevindt dit bestand zich in de map /usr/local/www/apache24/data/postfixadmin-3.2/. In dit bestand moeten enkele regels worden bewerkt en in de juiste vorm worden gebracht. Nadat u de configuratiegegevens hebt gewijzigd, herstart u apache. Ook moet u de map templates_c in de map /usr/local/www/apache24/data/postfixadmin-3.2 aanmaken en de eigenaar www toewijzen:
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
#Deze hash moet worden gegenereerd in de webinterface van postfixadmin en aan deze regel worden toegevoegd.
$CONF['setup_password'] = 'dd28fb2139a3bca426f02f60e6877fd5:13d2703c477b0ab85858e3ac5e076a0a7a477315';
$CONF['default_language'] = 'nl'
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
#Wachtwoord en naam van de databases die ik in dit voorbeeld heb aangemaakt
$CONF['database_password'] = 'password123';
$CONF['database_name'] = 'postfix';
service apache24 restart
SSL
Voor het genereren van de sleutel zullen we de methode gebruiken die wordt voorgesteld op de site postfix.org, door een eigen certificeringsinstantie aan te maken. Ga naar de map /etc/ssl en voer het script uit:
cd /etc/ssl
/usr/local/openssl/misc/CA.pl -newca
Tijdens de uitvoering van het script wordt u gevraagd om een naam voor het certificaat in te voeren. Voer niets in, druk op Enter. Vervolgens vraagt het script om een wachtwoord voor het certificaat, daarna volgen de standaardvragen voor het aanmaken van het certificaat.
Vervolgens moet u een privésleutel (zonder wachtwoord) en een niet-ondertekend certificaat van de openbare sleutel aanmaken (Organizational Unit Name (bijv. sectie) [] moet verschillen van wat is opgegeven in het certificaat dat hierboven is aangemaakt):
openssl req -new -newkey rsa:4096 -nodes -keyout foo-key.pem -out foo-req.pem
We zullen het certificaat van de openbare sleutel ondertekenen (geef het aantal dagen op dat u nodig heeft):
openssl ca -out foo-cert.pem -days 365 -infiles foo-req.pem
Laat de aangemaakte certificaten in deze map staan, of verplaats ze naar een map die voor u handiger is. De configuraties van postfix en dovecot worden ingesteld met het idee dat de certificaten in deze map bevinden.
Gebruiker vmail
Voordat we beginnen met het installeren van postfix, dovecot en dovecot-pigeonhole, creëren we de gebruiker en groep (de groep wordt automatisch aangemaakt) vmail, evenals de map waarin de e-mail zal worden opgeslagen.
pw useradd -n vmail -s /usr/sbin/nologin -u 1000 -d /var/vmail
Laten we een map voor de e-mail aanmaken en de gebruiker vmail als eigenaar instellen:
mkdir /var/vmail
chown -R vmail:vmail /var/vmail
chmod -R 744 /var/vmail
Postfix, dovecot, dovecot-pigeonhole
Zoals eerder vermeld, zullen we de benodigde applicaties uit de ports bundelen; voer de opdracht uit om de ports te downloaden en uit te pakken:
portsnap fetch extract
Na het uitpakken van de ports, ga naar de dovecot-map, voer de configuratie-instellingen uit (vergeet niet de ondersteuning voor mysql aan te vinken) en start de bundel (BATCH=yes zorgt ervoor dat make geen vragen stelt tijdens de installatie):
cd /usr/ports/mail/dovecot
make config
make BATCH=yes install clean
Voer dezelfde stappen uit voor postfix en dovecot-pigeonhole
dovecot-pigeonhole:
cd /usr/ports/mail/dovecot-pigeonhole
make BATCH=yes install clean
postfix: vink ook de ondersteuning voor mysql aan in de configuratie-instellingen van de port
cd /usr/ports/mail/postfix-sasl
make config
make BATCH=yes install clean
Kopieer de configuraties voordat je dovecot start:
cp -R /usr/local/etc/dovecot/example-config/* /usr/local/etc/dovecot
Na de installatie van postfix en dovecot, start de services:
service postfix start
service dovecot start
Het is ook noodzakelijk om een map te creëren waar de module voor het doorsturen van spam naar de map Spam wordt gecompileerd. In mijn geval bevindt deze map zich in de map /usr/local/etc/dovecot/conf.d, de naam van de map is def. Laten we deze map aanmaken en een bestand met de code voor compilatie maken, en instellen dat vmail de eigenaar van deze map is:
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
Plaats de volgende regels in dit bestand:
require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
fileinto "Junk";
}
Configuraties
In dit gedeelte geef ik voorbeelden van configuraties met opmerkingen, ik twijfel alleen over de configuratie van spamassassin, omdat ik geen correcte beschrijvingen op het internet heb gevonden (ik heb de standaard configuratie gelaten), ik verzoek om aanvullingen in de opmerkingen over hoe spamassassin het beste te configureren.
Postfix
Allereerst is het nodig om bestanden te creëren voor het ophalen van gebruikers, domeinen en quotas uit de database. Maak een map aan voor het opslaan van de gegevensbestanden en de benodigde bestanden:
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
De inhoud van deze bestanden zal als volgt zijn:
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-ssl.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 {
# In deze regel staat de sieve-module, die spam naar de spam-map zal omleiden
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
De configuratie van spamassassin ziet er als volgt uit, maar ik heb het gevoel dat deze instellingen niet toereikend zijn, ik vraag om hulp met deze configuratie:
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
Ook moet er training plaatsvinden met e-mails die spam zijn en e-mails die dat niet zijn:
sa-learn --spam /path/spam/folder
sa-learn --ham /path/ham/folder
Aanvullend
In deze sectie geef ik de firewallinstellingen op basis van pf, we voegen pf toe aan de opstart en geven het bestand met regels op:
sysrc pf_enable="YES"
sysrc pf_rules="/etc/0.pf"
We maken een bestand met regels aan:
ee /etc/0.pf
En voegen de regels eraan toe:
#Данный параметр(не фильтровать интерфейс 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
Pf kan gestart worden met het commando:
service pf start
Testen
Voor het testen van alle mogelijke verbindingen (STARTTLS, SSL) kan een mobiele client worden gebruikt (in mijn geval voor iOS) "MijnKantoor Mail", in deze applicatie zijn er veel parameters voor het instellen van verbindingen met de mailserver.
Voor het testen van Spamassassin gebruiken we de GTUBE-handtekening, voeg de volgende regel toe aan de e-mail:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Als alles correct is, wordt de e-mail gemarkeerd als spam en dus verplaatst naar de spam-map.
Voor het testen van de antivirus moet je een e-mail sturen met een tekstbestand waarin de EICAR-sequentie staat:
X5O!P%@AP[4PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Natuurlijk moeten e-mails worden verzonden vanaf externe e-mailadressen.
Gebruik de volgende opdracht om logboeken in realtime te bekijken:
tail -f /var/log/maillog
Voor een correcte test van het verzenden van e-mail naar externe e-mailadressen (zoals yandex.ru, mail.ru, gmail.com, enz.) moet ook een omgekeerde DNS-zone (PTR-record) worden ingesteld, wat kan worden gedaan door contact op te nemen met uw provider (tenzij u natuurlijk uw eigen DNS-server heeft).
Uitslag
Het kan misschien lijken dat een e-mailserver een complexe zaak is, maar als je het begrijpt, is dat helemaal niet zo. Met een beetje tijd voor configuratie kun je een vrij functionele e-mailserver opzetten, met bescherming tegen spam en virussen.
P.S. Als je van plan bent om te 'copy-pasten' met opmerkingen, moet je de gebruiker root (en degenen aan wie dat nodig is) toevoegen aan de logboeken van de klasse russian:
pw usermod root -L russian
Na deze handelingen zullen Russische tekens correct worden weergegeven.
Bron: habr.com
