Отже пишу я цю статтю в зв'язку із проблемами які виникли при відправці повідомлень із серва який працює на Zimbra
Пошта почала потрапляти до спаму в гуглі та інших поштових сервісах :(, якось не весело
Коротко про DKIM, SPF, DMARC
* DomainKeys Identified Mail (DKIM) - використовується для захисту від спуфинга за допомогою додавання цифрового підпису в заголовки вихідних повідомлень.
* Sender Policy Framework (SPF) - це розширення для протоколу відправки електронної пошти через SMTP, завдяки якому можна перевірити, чи не підроблений чи домен відправника.
* Domain-based Message Authentication, Reporting and Conformance (DMARC) - це технічна специфікація, що передбачає механізми для обміну інформацією між відправником і отримувачем про якість фільтрації спаму і фішингових атаках.
Налаштування DKIM в Zimbra
Метод передбачає шифрування заголовків вихідних повідомлень за допомогою закритого ключа домену, і додавання відкритої версії ключа в запису DNS домену, доступного всім. MTA сервера-одержувача запитує відкритий ключ у DNS-сервера відправника, для розшифровки заголовків вхідних повідомлень і перевіряє, чи дійсно повідомлення надіслано від заявленого джерела.
DKIM став доступний починаючи з версії Zimbra 8.0. Налаштування підпису складається з двох етапів (за матеріалами wiki.zimbra.com):
Перший етап: генерація ключів та селектора
Додавання даних DKIM до домену, у якого ще немає існуючої конфігурації DKIM
Налаштуємо кожну з цих систем.
# su - zimbra $ /opt/zimbra/libexec/zmdkimkeyutil -a -d pc-service.com
Отримаємо запис типу:
DKIM Data added to LDAP for domain pc-service.cv.ua with selector 2416545A-9151-11E7-90EF-A92301118211
Public signature to enter into DNS:
2416545A-9151-11E7-90EF-A92301118211._domainkey IN TXT ( "v=DKIM1; k=rsa; "
"p=qGSIb3DQEBAQUAA4GNADCMIGfMA0GCSBiQKBgQDHmLsFfqWxwbw/VB11kGkFo9GYFvHz9n3BNtSRcmJvNMIGfMA0GCSTpVM9l+bBXhb3hR7M+ihyTEi8bGbZ6X+7hntZFwUO57tVHAOgT4y/CjIq5+bEa8yAHgSNikcfk56+X9GjtyRFHn8uUe2gRsxy7gnGO6SlJcPmjZq0ndyiEwIDAQAB" ) ; ----- DKIM key 2416545A-9151-11E7-90EF-A92301118211 for pc-service.cv.ua
Отже після створення даного ключа необхідно його перевірити на сервісі dkimcore.org
Вписуєм все без лапок " " та перевіряємо на валідність
якщо отримуєте зеленим надпис This is a valid DKIM key record - То все налаштовано вірно,
якщо ж ні то This is not a good DKIM key record. You should fix the errors shown in red.
В мене з першого разу не пройшло все гладко, тому були проведені деякі маніпуляції з довжиною ключа, а саме змінені дефолтні налаштування створення ключів з 2048 на 1024
# nano /opt/zimbra/libexec/zmdkimkeyutil
my $bits=1024;
if ($bits < 1024) {
print "Bit size less than 1024 is not allowed, as it is insecure.\n";
print " Only works with -a and -u. Default when not specified is 1024 bits.\n";
Після чого обновлюєм ключі від користувача zimbra
/opt/zimbra/libexec/zmdkimkeyutil -u -b 2048 -d pc-service.cv.ua
Якщо необхідно буде здійснити ще якісь маніпуляції із ключами то перелік команд нведено нище:
Видалення DKIM даних для домену:
/opt/zimbra/libexec/zmdkimkeyutil -r -d pc-service.cv.ua
Показати збережені даних DKIM для домену:
/opt/zimbra/libexec/zmdkimkeyutil -q -d pc-service.cv.ua
Ця команда буде виводити всю збережену інформацію DKIM, зокрема:
DKIM Domain
DKIM Selector
DKIM Private Key
DKIM Public Signature
DKIM Identity
Отже обновили ключі та заново пробуємо перевірити їх на на сервісі dkimcore.org Якщо валідність не проходить можете спробувати видалити всі спец символи \ ' / " з вашого ключа
Наступний крок є буде важливим в подальшому, але він потребує деякого часу для того щоб він почав діяти!
ОБНОВЛЕННЯ DNS ЗАПИСІВ
Заходимо в панель керування вашими доменами та вписуємо запис TXT
Селектор:
2416545A-9151-11E7-90EF-A92301118211._domainkey
Та значення
v=DKIM1; k=rsa; p=qGSIb3DQEBAQUAA4GNADCMIGfMA0GCSBiQKBgQDHmLsFfqWxwbw/VB11kGkFo9GYFvHz9n3BNtSRcmJvNMIGfMA0GCSTpVM9l+bBXhb3hR7M+ihyTEi8bGbZ6X+7hntZFwUO57tVHAOgT4y/CjIq5+bEa8yAHgSNikcfk56+X9GjtyRFHn8uUe2gRsxy7gnGO6SlJcPmjZq0ndyiEwIDAQAB
Перевірте результат виконання командою:
dig -t txt 2416545A-9151-11E7-90EF-A92301118211._domainkey._domainkey.pc-service.cv.ua ns.example.com
Якщо ключ витягується використовуйте команду: /opt/zimbra/common/sbin/opendkim-testkey для перегляду відображення відкритого ключа закритому
/opt/zimbra/common/sbin/opendkim-testkey -d exemple.com -s 1E335F4-03A-11C-923B-A560CA19D195 -x /opt/zimbra/conf/opendkim.conf
Якщо отримаєте помилку
ERROR: account.NO_SUCH_SERVER (no such server: pc-service.com)
або
ERROR: account.INVALID_ATTR_NAME (invalid attr name: invalid attr name - unable to modify attributes: ldap host=pc-service.cv.ua:389: ./libexec/configrewrite: AttributeDescription contains inappropriate characters)
То запустіть команду
zmprov ms `zmhostname` +zimbraServiceEnabled opendkim ./libexec/configrewrite opendkim
Яка обновить сервіс opendkim, та сконфігурує файл
Якщо стає необхідним відкликати ключ підписування DKIM, це може бути легко здійснено в DNS, використовуючи порожній тег "p =" у запису TXT.
Отже саму складну частину ми завершили, тепер до настпної:
Sender Policy Framework (SPF)
Рамкова політика Sender (SPF) - це система перевірки електронної пошти, розроблена для запобігання небажаним електронним листам за допомогою системи зловмисників. Щоб перевірити цю спільну проблему безпеки, SPF збирається перевірити джерело IP-адреси електронної пошти та порівняти його з записом DNS TXT з вмістом SPF.
Як налаштувати його?
Перш за все, генеруйте запис TXT SPF DNS (використовуючи інструмент "Mailradar SPF" або щось подібне), наприклад, з доменом pc-service.cv.ua та 3 різних записів для додавання:
- The A entry - pc-service.cv.ua
- The MX entry - mail.pc-service.cv.ua
- The IPv4 entry - 5.5.5.18
В даній статті я використаю ось такий SPF: v=spf1 ip4:5.5.5.18/32 ~all - де ІР це адреса звідки буде слатись пошта, тобто ваша реальна адреса доменного імені
DMARC
DMARC, що означає "автентифікація повідомлень на основі домену, звітність і відповідність на основі домену", є технічною специфікацією, створена групою організацій, які хочуть зменшити потенціал зловживань електронною поштою, вирішивши пару застарілих операційних операцій, розгортання , а також звітні питання, пов'язані з протоколами аутентифікації електронної пошти.
DMARC стандартизує, як електронна пошта отримує автентифікацію електронної пошти за допомогою відомих механізмів SPF та DKIM. Це означає, що відправники будуть мати постійні результати автентифікації для своїх повідомлень в AOL, Gmail, Hotmail, Yahoo! та будь-який інший електронний приймач, що реалізує DMARC. Ми сподіваємося, що це спонукає відправників ширше автентифікувати вихідні повідомлення електронної пошти, які можуть зробити електронну пошту надійнішим способом спілкування.
Як налаштувати його?
Звіт DMARC може бути створений на декількох веб-сайтах, наприклад, http://www.kitterman.com
Використовуючи домен example.com, можливий варіант може бути наступним, будь ласка, майте на увазі, що всі параметри за умовчанням будуть неявними, навіть якщо ви не виберете їх у генераторі:
DMARC record for: example.com
Record should be published at _dmarc.example.com
v=DMARC1; p=quarantine; rua=Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її.; ruf=Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її.; sp=quarantine
Обновіть ваші DNS записи
_dmarc IN TXT "v=DMARC1; p=none; rua=mailto:Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її."
Не потрапляйте в спас бази та регулярно проводьте діагностику ваших поштових серверів mxtoolbox.com вам допоможе визначити проблеми в роботі
Налаштування SpamAssassin через командний рядок
Наші рекомендовані налаштування SpamAssassin включають три додаткові методи:
1. Збільште рівень журналу, який повідомляє Amavis, щоб отримати ясність від SpamAssassin щодо того, чому/як спам блокується та проходить через нього.
2. Помістіть тимчасовий каталог Amavis на RAM-диск, щоб прискорити обробку.
3. Налаштуйте оцінки для кількох окремих тестів SpamAssassin після встановлення Pyzor і Razor2.
1. Збільште рівень журналу Amavis
Для збільшення рівня журналу з 1 до 2 додає до /var/log/zimbra.log конкретні тести SpamAssassin, які запускає кожен лист.
zmprov mcf zimbraAmavisLogLevel 2
Також можна змінити файл конфігурації /opt/zimbra/conf/amavisd.conf.in.
$log_level = 2; # verbosity 0..5 - 1 is the minimum for msg tracing
Також змінити mail_body_size_limit у файлі: /opt/zimbra/conf/amavisd.conf.in
# ORIGINAL LINE BELOW - CHANGES TO THIS FILE WILL NOT SURVIVE ZIMBRA UPGRADES
# $sa_mail_body_size_limit = 512*1024; # don't waste time on SA if mail is larger
$sa_mail_body_size_limit = 1024*1024; # don't waste time on SA if mail is larger
2. Помістіть Temp Dir Amavis на RAM-диск
Ми бачили навіть із швидкими масивами RAID10, що Amavis обробка електронного листа з великими вкладеннями через SpamAssassin може тривати до 10-20 секунд. Розміщення тимчасового каталогу Amavis'd на диску RAM скорочує це до 1-2 секунд.
Зупиніть amavis, підключіть RAM-диск, запустіть amavis, а потім відредагуйте /etc/fstab, щоб зробити зміни постійними.
Таким чином, запис /etc/fstab для дисків RAM 1 ГБ на сервері виглядає так:
zmamavisdctl stop
Змініть файл /etc/fstab добавивши в кінець такі стрічки
tmpfs /opt/zimbra/data/amavisd/tmp tmpfs defaults,noexec,nodev,nosuid,size=1024m,mode=750,uid=zimbra,gid=zimbra 0 0
Перевірити ци спацювало можна:
$ grep amavis /etc/fstab tmpfs /opt/zimbra/data/amavisd/tmp tmpfs defaults,noexec,nodev,nosuid,size=1024m,mode=750,uid=zimbra,gid=zimbra 0 0
Зауважте, що Amavis не може бути запущений, якщо ви хочете реалізувати це без перезавантаження. Щоб зробити це на живій системі Zimbra, ви повинні зробити:
(As root)
su - zimbra
zmamavisdctl stop
ls /opt/zimbra/data/amavisd/tmp <= Цей каталог має бути порожнім із зупиненим Amavis
exit <= Щоб повернутися до того, щоб бути root
mount /opt/zimbra/data/amavisd/tmp
df -h <= Щоб переконатися, що монтування вдалось
chown -R zimbra:zimbra /opt/zimbra/data/amavisd/tmp
su - zimbra
zmamavisdctl start
postfix flush
ls /opt/zimbra/data/amavisd/tmp <= Тепер у цьому каталозі має бути кілька каталогів "amavis-2022...".
Проект SpamAssassin періодично оновлює сотні правил, які використовує SpamAssassin, але Zimbra за замовчуванням не оновлює правила SpamAssassin, тому нам потрібно вказати Zimbra періодично оновлювати SpamAssassin і перезапускати SpamAssassin після оновлення:
zmlocalconfig -e antispam_enable_rule_updates=true
zmlocalconfig -e antispam_enable_restarts=true
ClamAV сам подбає про оновлення за замовчуванням; Zimbra періодично запускає супровідний сервіс «freshclam» ClamAV, щоб оновлювати визначення вірусів ClamAV. На жаль, частота оновлення за замовчуванням надто рідка для нас, тому, щоб оновлювати визначення вірусів кожні дві години, ми виконуємо:
zmprov mcf zimbraVirusDefinitionsUpdateFrequency 6h
Тепер, коли Amavis, SpamAssasin і ClamAV готові до роботи, нам потрібно налаштувати SpamAssassin, щоб використовувати наші постачальники платних списків блокування та запобігти деяким поширеним помилковим результатам.
invaluement, uribl.com і Spamhaus надають клієнтам файли конфігурації SpamAssassin, які слід розмістити в /opt/zimbra/data/spamassassin/localrules. Ці файли змушують SpamAssasin виконувати додаткові/змінені тести сканування вмісту електронної пошти, які підтримуються постачальниками. Крім того, файли, які не належать до Zimbra, у цьому каталозі залишаються недоторканими інсталятором Zimbra, тому патчі Zimbra та оновлення версії Zimbra не «зламають» ваші налаштування SpamAssassin.
Нам потрібно зробити ще одну річ, щоб налаштувати SpamAssassin… Якщо ви ще цього не зробили, запустіть користувач zimbra:
nano ~/data/spamassassin/localrules/zzsauser.cf
Додайте такі рядки до наведеного вище файлу zzsauser.cf:
score MALFORMED_FREEMAIL 0.001 score FORGED_GMAIL_RCVD 4.0 score DOS_OUTLOOK_TO_MX 0 score TO_EQ_FM_DIRECT_MX 0 score RDNS_NONE 0.1 score RCVD_IN_PBL 0.1 score RCVD_IN_RP_RNBL 4.0 score FROM_FMBLA_NEWDOM 2.5 score FROM_NEWDOM_BTC 3.0 score RCVD_IN_DNSWL_HI -1.50 score RCVD_IN_DNSWL_MED -0.50 score MISSING_HEADERS 1.0 score FREEMAIL_REPLY 1.5 score FREEMAIL_REPLYTO 1.5 score DKIM_ADSP_NXDOMAIN 1.0 score SENDGRID_REDIR 1.50 score RCVD_IN_RP_CERTIFIED 0.00 internal_networks 192.168.2.0/24 internal_networks 192.168.1.0/24 use_bayes 0 score DKIM_INVALID 0.1 score URIBL_DBL_SPAM 1.0 score URIBL_ABUSE_SURBL 1.0 use_razor2 1 use_pyzor 1 pyzor_path /usr/bin/pyzor pyzor_timeout 10 score RAZOR2_CHECK 3.250 score PYZOR_CHECK 3.250 score __RCVD_IN_DNSWL 0.001 score FUZZY_BITCOIN 2.0
# Fabel Spam Sources
#header RCVD_IN_FABEL rbleval:check_rbl('fabel', 'sbl.spamhaus.org.')
#describe RCVD_IN_FABEL Received via a relay in sbl.spamhaus.org
#tflags RCVD_IN_FABEL net
#score RCVD_IN_FABEL 2
#clear_originating_ip_headers
#originating_ip_headers X-Yahoo-Post-IP X-Apparently-From
#originating_ip_headers X-SenderIP X-AOL-IP
#originating_ip_headers X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp
#dns_query_restriction deny isipp.com
Також для безпеки поштового сервера є необхідінсть використовувати Razor і Pyzor
Поштові сервери отримувачі бачать проблеми в PYZOR_CHECK
Як встановити Razor і Pyzor Встановлення Razor та Pyzor на Ubuntu
# apt install razor pyzor
# apt-get install libgeo-ip-perl libgeo-ipfree-perl libnet-patricia-perl lrzip lzop arj rar unrar p7zip-full p7zip-rar tnef ripole nomarch arc pyzor razor
Налаштування Pyzor
# su zimbra
$ pyzor --homedir /opt/zimbra/data/amavisd/.pyzor discover
Створити папку sa, та надати їй права доступа користувачу zimbra
# mkdir /opt/zimbra/conf/sa/
# chown -R zimbra:zimbra /opt/zimbra/conf/sa
Створити файл /opt/zimbra/conf/sa/sauser.cf зі вмістом:
# pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor
# DNS lookups for pyzor can time out easily. Set the following line IF you want to give pyzor up to 20 seconds to respond
# may slow down email delivery
pyzor_timeout 20
Налаштування Razor
razor-admin -home=/opt/zimbra/data/amavisd/.razor -create
razor-admin -home=/opt/zimbra/data/amavisd/.razor -discover
razor-admin -home=/opt/zimbra/data/amavisd/.razor -register -user Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її.
Якщо все успішно то буде повідомлення про успіх
Register successful. Identity stored in /opt/zimbra/data/amavisd/.razor/identity-postmaster@Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її.
Обновлюємо файл, добавивши в кінець файлу /opt/zimbra/conf/sa/sauser.cf
# razor
use_razor2 1
Обновлюєм оцінку SpamAssassin, в кінець файлу /opt/zimbra/conf/sa/sauser.cf
score URIBL_BLACK 3.250
score RAZOR2_CHECK 3.250
score PYZOR_CHECK 3.250
score BAYES_99 4.30000
score BAYES_60 2.250
score BAYES_50 1.500
score BAYES_00 -0.500
score RP_MATCHES_RCVD -0.000
score SPF_FAIL 5.000
score SPF_HELO_FAIL 5.000
score DMARC_FAIL_REJECT 2.000
Переходим до користувача Zimbra, su zimbra та запускаєм команду "zmantispamctl restart ; zmmtactl restart"
В мене були проблеми з правами доступ на файли які запускає pyzor, змінив права на папки та файли chmod -R 755 /usr/share/perl5/Razor2/
ls -la /usr/share/perl5/Razor2/
drwxr-xr-x 6 root root 4096 May 2 2019 .
drwxr-xr-x 66 root root 4096 May 15 21:21 ..
drwxr-xr-x 2 root root 4096 May 2 2019 Client
drwxr-xr-x 2 root root 4096 May 2 2019 Engine
-rwxr-xr-x 1 root root 3058 Aug 3 2005 Errorhandler.pm
-rwxr-xr-x 1 root root 4100 Jun 10 2005 Logger.pm
drwxr-xr-x 2 root root 4096 May 2 2019 Preproc
drwxr-xr-x 2 root root 4096 May 2 2019 Signature
-rwxr-xr-x 1 root root 31146 Dec 18 2015 String.pm
-rwxr-xr-x 1 root root 3793 May 9 2005 Syslog.pm
На крайній випадок: видалити папку rm -R /opt/zimbra/data/amavisd/.pyzor/
І заново зробити ось це:
razor-admin -home=/opt/zimbra/data/amavisd/.razor -create
razor-admin -home=/opt/zimbra/data/amavisd/.razor -discover
razor-admin -home=/opt/zimbra/data/amavisd/.razor -register -user Ця електронна адреса захищена від спам-ботів. Вам необхідно увімкнути JavaScript, щоб побачити її.
Zimbra, su zimbra та запускаєм команду "zmantispamctl restart ; zmmtactl restart"
Після чого перевіряєм повторно тестування (ресурси для перевірки вибираєм самостійно)
Офіційні джерела:
wiki.zimbra.com/wiki/Configuring_for_DKIM
wiki.zimbra.com/SPF,_DKIM_and_DMARC
wiki.zimbra.com/wiki/Anti-spam_Strategies