Въведение
Пощенският сървър исках да изследвам отдавна, но чак сега намерих време, а и информацията, която успях да намеря, не беше особено много, затова реших да напиша колкото се може по-подробна публикация. В тази публикация ще става въпрос не само за postfix, dovecot, mysql, postfixadmin, а също така и за spamassassin, clamav-milter (специална версия на clamav за пощенски сървъри), postgrey, както и за възможността за прехвърляне на спам в папката „Спам“ (dovecot-pigeonhole).
Подготовка
Първо ще инсталираме пакетите, които ще ни трябват за работа (postfix, dovecot и dovecot-pigeonhole е необходимо да се инсталират от портовете, dovecot-sieve може в принцип да се инсталира от пакети, но в портовете версиите често са по-нови и поради това може да има несъвместимости между dovecot и dovecot-sieve). Ще инсталираме следните пакети:
pkg install apache24 php73 mod_php73 php73-extensions php73-mysqli php73-mbstring php73-openssl clamav-milter postgrey spamassassin mysql57-server openssl wget
След инсталацията ще добавим необходимите услуги за автоматичен старт:
#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"
Ще стартираме услугите:
service apache24 start
service mysql-server start
# Преди да стартирате spamassassin е необходимо да актуализирате базите и да компилирате правилата
sa-update
sa-compile
service sa-spamd start
# Изпълнете актуализациите на базите clamav преди стартиране
freshclam
service clamav-clamd start
service clamav-freshclam start
service clamav-milter start
# Преди стартирането на postgrey е необходимо да редактирате инициализационния скрипт (\/usr\/local\/etc\/rc.d\/postgrey). За да се прехвърлят изпращачите в "белия" списък след 4 опити за изпращане на имейли, е необходимо да намерите реда: ${postgrey_flags:=--inet=10023} и да го промените на:
: ${postgrey_flags:=--inet=10023 --auto-whitelist-clients=4}
service postgrey start
Не забравяйте да добавите в httpd.conf редовете, необходими за работа на php в apache и коректна работа на postfixadmin:
SetHandler application/x-httpd-php
SetHandler application/x-httpd-php-source
DirectoryIndex index.php
# Също така е необходимо да промените домашната директория за правилна работа на postfixadmin
DocumentRoot "/usr/local/www/apache24/data/postfixadmin-3.2/public"
След това е необходимо да преминете в каталога и да изтеглите postfixadmin
cd /usr/local/www/apache24/data
Ще изтеглим postfixadmin (към момента на писане актуалната версия беше 3.2)
wget --no-check-certificate https://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-3.2/postfixadmin-3.2.tar.gz
След това е необходимо да разархивирате архива в този каталог и да смените собственика на каталога:
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
Следва да подготвим база данни за postfixadmin. Изпълнете скрипта mysql-secure-installation (паролата, която ще създадете в този скрипт, трябва да бъде създадена и в mysql с команда alter user) за първоначалната настройка на mysql. След това влезте в mysql, създайте база данни и задайте права за нея:
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
След като базата данни е настроена, е необходимо да редактирате файла config.inc.php. В този пример файлът се намира в каталога /usr/local/www/apache24/data/postfixadmin-3.2/. В него ще трябва да редактирате няколко реда и да ги приведете в желания вид. След като промените данните, перезаредете apache. Също така е необходимо да създадете каталога templates_c в /usr/local/www/apache24/data/postfixadmin-3.2 и да зададете собственик 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
#този хеш трябва да бъде генериран в уеб интерфейса на postfixadmin и добавен в този ред.
$CONF['setup_password'] = 'dd28fb2139a3bca426f02f60e6877fd5:13d2703c477b0ab85858e3ac5e076a0a7a477315';
$CONF['default_language'] = 'ru'
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
#Паролата и името на базата данни, които създадох в този пример
$CONF['database_password'] = 'password123';
$CONF['database_name'] = 'postfix';
service apache24 restart
SSL
За генериране на ключа ще използваме метода, предложен на сайта postfix.org, с създаване на собствен сертификационен център. Необходимо е да отидете в каталога /etc/ssl и да изпълните скрипта:
cd /etc/ssl
/usr/local/openssl/misc/CA.pl -newca
По време на изпълнението на скрипта ще бъде поискано име за сертификата. Нищо не въвеждайте, натиснете Enter. След това скриптът ще попита да създадете парола за сертификата, след което ще има стандартни въпроси за създаването на сертификата.
След това е необходимо да създадете частен ключ (без парола) и неподписан сертификат на публичен ключ (Organizational Unit Name (например, отдел) [] трябва да се различава от това, което е посочено в сертификата, създаден по-горе):
openssl req -new -newkey rsa:4096 -nodes -keyout foo-key.pem -out foo-req.pem
Ще подпишем сертификата на публичния ключ (посочете колко дни са необходими):
openssl ca -out foo-cert.pem -days 365 -infiles foo-req.pem
Оставете създадените сертификати в тази директория или ги преместете в предпочитана от вас директория. Конфигурационните файлове на postfix и dovecot ще бъдат настроени с оглед на факта, че сертификатите ще се намират в тази директория.
Потребител vmail
Преди да започнем с инсталацията на postfix, dovecot и dovecot-pigeonhole, ще създадем потребител и група (групата ще се създаде автоматично) vmail, както и директория, в която ще се съхранява пощата.
pw useradd -n vmail -s /usr/sbin/nologin -u 1000 -d /var/vmail
Нека създадем директория за пощата и назначим потребителя vmail за неин собственик:
mkdir /var/vmail
chown -R vmail:vmail /var/vmail
chmod -R 744 /var/vmail
Postfix, dovecot, dovecot-pigeonhole
Както споменах по-рано, изграждането на тези приложения ще се извърши от портовете. Изпълнете командата за изтегляне и разархивиране на портовете:
portsnap fetch extract
След разархивирането на портовете, влезте в директорията на dovecot, конфигурирайте порта (необходимо е да отбележите поддръжката на mysql) и стартирайте изграждането (BATCH=yes ще укаже на make да не задава въпроси при инсталацията):
cd /usr/ports/mail/dovecot
make config
make BATCH=yes install clean
Същите действия да се извършат и с postfix и dovecot-pigeonhole
dovecot-pigeonhole:
cd /usr/ports/mail/dovecot-pigeonhole
make BATCH=yes install clean
postfix: също отбележете поддръжката на mysql в настройките на порта
cd /usr/ports/mail/postfix-sasl
make config
make BATCH=yes install clean
Преди да стартирате dovecot, копирайте конфигурационните файлове:
cp -R /usr/local/etc/dovecot/example-config/* /usr/local/etc/dovecot
След инсталирането на postfix и dovecot, стартирайте услугите:
service postfix start
service dovecot start
Също така е необходимо да се създаде директория, в която да се компилира модулът за пренасочване на спам в папка 'спам'. В моя случай, тази директория се намира в /usr/local/etc/dovecot/conf.d, името на директорията е def. Нека създадем тази директория и файла с кода за компилация, и установим потребителя vmail за собственик на тази директория:
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
В този файл поставете следните редове:
require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
fileinto "Junk";
}
Конфигурации
В този раздел ще предоставя примери за 'конфигурации' с коментари в тях. Съмнявам се само в 'конфигурацията' на spamassassin, защото не намерих коректни описания в интернет (оставил съм 'конфигурацията' по подразбиране). Моля, допълнете в коментарите как е най-добре да настроим spamassassin.
Postfix
Първо е необходимо да създадете файлове за извличане на потребители, домейни и квоти от базата данни. Създайте директория за съхраняване на данните на файловете и необходимите файлове:
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
Съдържанието на тези файлове ще бъде следното:
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 {
# В този ред е посочен модулът sieve, който ще пренасочва спам към папката спам
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
Конфигурацията на spamassassin е следната, но ми се струва, че данните настройки не са достатъчни, моля за помощ с тази конфигурация:
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
Също е необходимо да се извърши обучение с имейли, съдържащи спам и такива без него:
sa-learn --spam /path/spam/folder
sa-learn --ham /path/ham/folder
Допълнително
В тази част ще посоча настройки на firewall на базата pf, ще добавим pf в автоматичен старт и ще укажем файл с правилата:
sysrc pf_enable="YES"
sysrc pf_rules="/etc/0.pf"
Създайте файл с правила:
ee /etc/0.pf
И добавете в него правилата:
#Данный параметр(не фильтровать интерфейс 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 може да се стартира с командата:
service pf start
Тестиране
За тестване на всички възможни връзки (STARTTLS, SSL) можете да използвате клиент за мобилни устройства (в моя случай за iOS) "МойОфис Почта", в това приложение има множество параметри за настройка на свързването с пощенския сървър.
За тестване на spamassassin използвайте сигнатурата GTUBE, добавете следния ред в имейла:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Ако всичко е коректно, имейлът ще бъде маркиран като спам и съответно преместен в папката спам.
За тестване на антивируса е необходимо да изпратите имейл с текстов файл, в който ще бъде последователността EICAR:
X5O!P%@AP[4PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Разбира се, писмата трябва да се изпращат от външни пощенски кутии.
За да видите логовете в реално време, стартирайте:
tail -f /var/log/maillog
Също така, за правилно тестване на изпращането на имейли до външни пощенски кутии (например на yandex.ru, mail.ru, gmail.com и т.н.) е необходимо да се зададе обратна DNS зона (PTR запис). Това можете да направите, като се свържете с Вашия доставчик (освен ако разбира се нямате собствен DNS сървър).
Извод
Може да изглежда, че пощенският сървър е доста сложен, но ако се задълбочите, ще видите, че не е така. С малко време за конфигурация можете да получите доста функционален пощенски сървър с защита от спам и вируси.
P.S. Ако планирате да "копирате и поставите" с коментари, е необходимо да добавите потребителя root (и тези, на които е нужно) в логовете на клас russian:
pw usermod root -L russian
След тези действия руският текст ще се показва правилно.
Източник: habr.com
