Лекция
Привет, сегодня поговорим про правила правильной массовой рассылки , обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое правила правильной массовой рассылки , спам , opendkim , postfix , настоятельно рекомендую прочитать все из категории Вредоносное ПО и защита информации.
ТРЕБОВАНИЯ к отправляемым сообщениям gmail https://support.google.com/mail/answer/81126?hl=ru
требования яндекса http://help.yandex.ru/mail/honest-mailers.xml
ТРЕБОВАНИЯ mail ru https://help.mail.ru/mail-help/rules/technical
Рекомендации для всех http://www.uceprotect.net/downloads/asta.pdf
https://support.google.com/mail/answer/1366858?hl=ru&expand=5
кроме выполнения требований и рекомендаций желательно добавиться в статистику приема писем соответвующих серверов
у вас скорее всего установлен один из этих sendmail postfix qmail
Отрправляем письма на gmail/yandex/mail в оригинале письма смотрим отметки о прохождении проверки (будут записи DKIP pass). Есть спец сервисы для проверки правильности настройки, там тоже проверяемся
https://help.ubuntu.com/community/Postfix/DKIM
(подробная настройка ниже)
если коротко то у вас в днс должно быть дополнительная TXT запись
селектор._domainkey.вашдомен.com. v=DKIM1; g=*; k=rsa; p=PpYHdE2t4c3v4db6g,ij/k0.o,mytbv5cxs4fghjPaz1IbOGs/6bm5QIDAQAB селектор вы сами придумаете любой. потом для него через opendkim генерируете открытый и закрытый ключ
_domainkey- это просто стандартное ключевое слово- у всех одинаково.
затем настраиваете dkim- указываете какой ключ и где они лежат (отк и закрытый)
через что принимать файлы на подпись
с каких доменов и ип адресов возможна отправка , и если не удовлетворена то или в
спам или не принимать стороннему сервису почту
настраиваете почтовый агент для того чтобы он перед отправкой писем в инет добавил особые заголовки сгенерированные dkim
это можнон сделать через файловый или портовый unix сокет
DNS можно проверить тут например
http://dkimcore.org/tools/dkimrecordcheck.html
http://dkimcore.org/tools/keycheck.html
http://www.protodave.com/tools/dkim-key-checker/
Мониторим статистику
https://postmaster.mail.ru/
https://postoffice.yandex.ru/
https://gmail.com/postmaster/
Ведет на сайт и выключает рассылку. и заголовок в теле письма . благодаря ему у пользователей появится кнопочка отписаться
и для ip должна быть правильно настроена PTR запись(скорее всего ее может изменить только владелец ип адреса- то есть провайдер)
HELO должно соответсвороть SPF правлу в ДНС и PTR записи
ptr=вашему домену
в правильном порядке, и с првавильной кодировкой,
обязательно должен быть верный Return-Path
его можно добавить или в насройках php он правильные настройки postfix передаст или с помощью пятого параметра в функции mail
"-femail@mysite.com")
BACKSCATTERER http://www.backscatterer.org
BARRACUDA http://barracudacentral.org
CASA-CBLPLUS http://www.anti-spam.org.cn
IMP-SPAM http://antispam.imp.ch
INPS_DE http://dnsbl.inps.de
LASHBACK http://blacklist.lashback.com/
MAILSPIKE-BL http://mailspike.net/
NIXSPAM http://www.heise.de/ix/nixspam/dnsbl_en/
PSBL http://psbl.surriel.com/
RATS-ALL http://www.spamrats.com/
REDHAWK http://spameatingmonkey.com
SEM-BACKSCATTER http://spameatingmonkey.com
SEM-BLACK http://spameatingmonkey.com
SORBS-DUHL http://www.sorbs.net
SORBS-SPAM http://www.sorbs.net
SPAMCANNIBAL http://www.spamcannibal.org/
SPAMCOP http://spamcop.net
SPAMHAUS-ZEN http://www.spamhaus.org/
SWINOG http://antispam.imp.ch/
TRUNCATE http://www.gbudb.com
UCEPROTECTL http://www.uceprotect.net/
WPBL http://wpbl.pc9.org/
Также есть готовые сервисы по проверке в базах черных адресов вашего ip
http://xseo.in/dnsbl
результат бдет примерно такой
NSBL сервер | Наличие в DNSBL | Код(ы) ответа сервера* | Доп. информация** |
all.s5h.net | Нет | ||
b.barracudacentral.org | Нет | ||
bl.emailbasura.org | Нет | ||
bl.spamcannibal.org | Нет | ||
bl.spamcop.net | Нет | ||
blackholes.five-ten-sg.com | Нет | ||
blacklist.woody.ch | Нет | ||
bogons.cymru.com | Нет | ||
cbl.abuseat.org | Нет | ||
cdl.anti-spam.org.cn | Нет | ||
combined.abuse.ch | Нет | ||
db.wpbl.info | Нет | ||
dnsbl-1.uceprotect.net | Нет | ||
dnsbl-2.uceprotect.net | Нет | ||
dnsbl-3.uceprotect.net | Нет | ||
dnsbl.anticaptcha.net | Нет | ||
dnsbl.cyberlogic.net | Нет | ||
dnsbl.dronebl.org | Нет | ||
dnsbl.inps.de | Нет | ||
dnsbl.sorbs.net | Нет | ||
drone.abuse.ch | Нет | ||
duinv.aupads.org | Нет | ||
dul.dnsbl.sorbs.net | Нет | ||
dyna.spamrats.com | Да | ||
dynip.rothen.com | Нет | ||
exitnodes.tor.dnsbl.sectoor.de | Нет | ||
http.dnsbl.sorbs.net | Нет | ||
ips.backscatterer.org | Нет | ||
ix.dnsbl.manitu.net | Нет | ||
korea.services.net | Нет | ||
misc.dnsbl.sorbs.net | Нет | ||
noptr.spamrats.com | Нет | ||
orvedb.aupads.org | Нет | ||
pbl.spamhaus.org | Да | ||
proxy.bl.gweep.ca | Нет | ||
psbl.surriel.com | Нет | ||
rbl.interserver.net | Нет | ||
rbl.megarbl.net | Нет | ||
relays.bl.gweep.ca | Нет | ||
relays.bl.kundenserver.de | Нет | ||
relays.nether.net | Нет | ||
sbl.spamhaus.org | Нет | ||
service.mailblacklist.com | Нет | ||
short.rbl.jp | Нет | ||
singular.ttk.pte.hu | Нет | ||
smtp.dnsbl.sorbs.net | Нет | ||
socks.dnsbl.sorbs.net | Нет | ||
spam.abuse.ch | Нет | ||
spam.dnsbl.sorbs.net | Нет | ||
spam.spamrats.com | Нет | ||
spambot.bls.digibase.ca | Нет | ||
spamrbl.imp.ch | Нет | ||
spamsources.fabel.dk | Нет | ||
ubl.lashback.com | Нет | ||
ubl.unsubscore.com | Нет | ||
virbl.bit.nl | Нет | ||
virus.rbl.jp | Нет | ||
web.dnsbl.sorbs.net | Нет | ||
wormrbl.imp.ch | Нет | ||
xbl.spamhaus.org | Нет | ||
zen.spamhaus.org | Да | ||
zombie.dnsbl.sorbs.net | Нет |
Проверки spf ptr записей
тхт запись для домена v=spf1 a mx ip4:123.123.321.321 ~all
или v=spf1 +mx +a ~all
ptr запись должна выглядить так
123.123.321.321.in-addr.arpa | IN | PTR | mysite.com |
тема должна иметь свою кодировку
$newsubject='=?UTF-8?B?'.base64_encode($subject).'?=';
должны быть заголовки
$headers = 'From: no-reply@myсайт.ком' . Об этом говорит сайт https://intellect.icu . "\r\n" .
'Reply-To: no-reply@сайт.ком' . "\r\n" .
List-Unsubscribe: ,
'X-Mailer: PHP/' . phpversion();
длмнные строки должны разрываться
$message = wordwrap($message, 70);
$t= mail($to, $newsubject, $message, $headers,"-fno-reply@myсайт.ком");
mail("email@mysite.com", "subj", "message text", "From: email@mysite.com\nContent-Type: text/plain; charset=windows-1251\nContent-Transfer-Encoding: 8bit", "-femail@mysite.com");
комплексо протестировать можно , например, тут http://www.mail-tester.com/
результаы теста должны быть примерно такими
Знаменитый спам фильтр SpamAssassin. Оценка: -1.9.
Оценка ниже -5 считается спамом.
-0.1 | DKIM_SIGNED | Message has a DKIM or DK signature, not necessarily valid Этот отрицательный рейтинг станет положительным, если подтвердить подпись. Как это сделать смотрите ниже. |
0.1 | DKIM_VALID | Message has at least one valid DKIM or DK signature Отлично! Ваша подпись действительна |
0.1 | DKIM_VALID_AU | Message has a valid DKIM or DK signature from author's domain Отлично! Ваша подпись действительна, и она принадлежит вашему доменному имени |
-0.243 | PP_MIME_FAKE_ASCII_TEXT | MIME text/plain claims to be ASCII but isn't |
-0.972 | SPF_SOFTFAIL | SPF: sender does not match SPF record (softfail) SPF запись не верна, Вы должны исправить это (смотрите ниже в секции проверки подлинности сервера) |
0.01 | T_RP_MATCHES_RCVD | Envelope sender domain matches handover relay domain |
-0.791 | UPPERCASE_50_75 | message body is 50-75% uppercase |
Мы проверяем подлинность сервера, с которого отправлено письмо
Проверяется, так ли хорошо Ваше письмо отформатировано или нет.
HTML-версии сообщения в Вашем письме нет.
Атрибуты Alt обеспечивают текстовую альтернативу Вашим изображениям.
Это полезный обходной путь для людей, страдающих от проблем со зрением и для случаев, когда Ваше изображение не может быть отображено.
Проверяется наличие в Вашем письме наличие опасных HTML элементов, таких как JavaScript, фреймы, внедренное содержимое и апплеты.
Проверяем, использует ли Ваше письмо системы сокращения ссылок.
Заголовок List-Unsubscribe требуется, если вы посылаете массовые рассылки, что позволяет пользователю легко отказаться от нее.
Ваше сообщение не содержит заголовок List-Unsubscribe
результат должен быть
Вы не в черном списке
все уведомления, не должны содержать сырых данных вводимых пользвателем, текст комментария, даже имени - т к в имя можно добавить ссылку и она будет рассылаться на нужные спамеру емейлу, действия требующие уведомления должны контролироваться или по частоте или с помощью капчи.
в противном случае принимающая сторона может внести в сво черный список ваш сервер.
Дело в том что письма отправляются не сразу а после очереди. и если сгенерировано много сообщени в еди ницу времени то некторые принимающие сервера отвергают сообщение и просят посторить позже, если таких сообщений накапливаемтся и следовательно цвеличивается количество их повторов, то возможно занесние вашего ип в черны списоок принимающим сервером.
Иногда, приходиться удалять письма из очереди, и если не знаете как это сделать ( или может забыли), то данная тема поможет с этим разобраться.
Для начала, проверим что иметься в очереди:
$·postqueue -p
У меня например, образовалось вот такая очередь:
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
dsfsdf C9 438 Wed Apr 5 19:34:35 root@lintellect.icu
(connect to example.org[2236:22300:220:1:2238:1893:25c8:1946]:25: Connection timed out)
user@example.org
CC3B64A220C4 430 Wed Apr 2 12:30:46 root@intellect.icu
(connect to example.org[91.111.211.11]:25: Connection timed out)
user@example.org
7DFGGWEFCCE 3221 Fri Apr 7 14:21:23 MAILER-DAEMON
(connect to captain-notes[/var/lib/imap/socket/lmtp]: No such file or directory)
www@intellect.icu
-- 4 Kbytes in 3 Requests.
Или, имеется другая утилита:
$ mailq
Чтобы сохранить результат в текстовый файл, можно запустить:
$·postqueue -p >·mailq_output.txt $·mailq >mailq_output.txt
Предположим, что сообщение имеет идентификатор XXXXXXX (я выше показывал как )
$ postcat -vq XXXXXXXXXX $ postcat -vq XXXXXXXXXX > msg_output.txt
Если есть необходимость удалить конкретное письмо ( нужно знать его ID), выполните команду:
# postsuper -d mail_queue_id
Чтобы очистить очередь в Postfix MTA просто введите следующую команду:
# postfix flush Или: # postfix -f
Чтобы удалить всю почту из очереди, введите:
Чтобы удалить все письма в отложенной очереди (deferred), введите:
# postsuper -d ALL deferred
Чтобы удалить все письма из почтовой очереди, которые пришли с test_user@linux-notes.org или отправлены на адрес test_user@linux-notes.org (команда одинакова независимо от того, является ли это адресом отправителя или получателя), вы можете использовать следующую команду:
#·mailq | tail -n +2 | awk 'BEGIN { RS = "" } /test_user@intellect\.icu$/ { print $1 }' | tr -d '*!' | postsuper -d - #·mailq | tail -n +2 | grep -v '^ *(' | \ gawk 'BEGIN {RS = ""} /test_user@intellect.icu/ {print $1}' | \ tr -d '*!' | sudo postsuper -d -
Ничего сложного в этом нет.
Нашел в интернете, готовый скрипт, который удаляет всю почту из mailq, которая соответствует регулярному выражению (указанному в качестве первого аргумента).
$ vim drop_email_queue.pl
И прописываем в него:
#!/usr/bin/perl $REGEXP = shift || die "no email-adress given (regexp-style, e.g. bl.*\@yahoo.com)!"; @data = qx; for (@data) { if (/^(\w+)(\*|\!)?\s/) { $queue_id = $1; } if($queue_id) { if (/$REGEXP/i) { $Q{$queue_id} = 1; $queue_id = ""; } } } #open(POSTSUPER,"|cat") || die "couldn't open postsuper" ; open(POSTSUPER,"|postsuper -d -") || die "couldn't open postsuper" ; foreach (keys %Q) { print POSTSUPER "$_\n"; }; close(POSTSUPER); Например, удалите все поставленные в очередь сообщения (исходящие и входящие) для https://intellect.icu: # ./drop_email_queue.pl intellect.icu Удалите все сообщения в очереди, содержащие слово «world»: # ./drop_email_queue.pl world
В этой статье будет рассмотрена настройка цифровой подписи для Вашего домена.
Технология DomainKeys Identified Mail (DKIM) — это метод e-mail аутентификации: к отправленному письму добавляется заголовок DKIM-Signature, в котором содержится зашифрованная информация о домене отправителя. Таким образом, содержимое заголовка DKIM-Signature подтверждает отправителя письма. На стороне получателя подпись автоматически проверяется, после чего для определения репутации отправителя применяются "белые списки" и "черные списки". После оценки репутации отправителя письма это письмо может быть принято, помещено в папку "Спам", либо отправлено на дополнительную проверку.
настроить DKIM-подпись для следующих способов отправки писем:
А теперь подробнее как настроить DKIM в Ubunutu 16
1. Устанавливаем
apt install opendkim apt install opendkim-tools
2. генерируем ключ и копируем в папки настройки
opendkim-genkey -t -s mail -d mysite.com
появятся 2 файла (/home/user/mail.txt хешем,
и /home/user/mail.private с закрытым ключем )
нужно создать папки /var/log/dkim-filter и /etc/mail/ если их нет
cp mail.private /etc/mail/dkim.key
на файл конфига должен иметь права 600 и владельцем должен быть пользователь opendkim
хеш нужно вставить в днс TXT запись
/home/user/mail.txt
sdkim._domainkey IN TXT ( "v=DKIM1; k=rsa; t=y; p=MIGfMA0GC ... nlkgKWqM8E+kHwIDAQAB" ) ;
----- DKIM key mail for mysite.com
Для этого в DNS создаем TXT запись
селектор._domainkey.вашдомен.com. проверить добавленную записьможно в линуксе через DIG пример dig google._domainkey.protodave.com TXT
3. настроиваем 2 конфиг-файла opendkim
/etc/opendkim.conf /etc/default/opendkim
селектор вы сами придумаете любой но он дожен быть такой же как в TXT записи например, sdkim
3.1 /etc/opendkim.conf
Syslog yes
#UserID 105 # 'id postfix' in your shell
Domain mysite.com Selector sdkim
#Domain * - все домены
KeyFile /etc/mail/dkim.key # See bellow how to generate and set up the key Selector mail
AutoRestart yes Background yes Canonicalization relaxed/relaxed DNSTimeout 5 Mode sv SignatureAlgorithm rsa-sha256 SubDomains no
X-Header no
Statistics /var/log/dkim-filter/dkim-stats
#RequiredHeaders yes
3.2 /etc/default/opendkim
SOCKET="inet:8891@localhost" # Ubuntu default - listen on loopback on port 8891 остальное должно быть закоментировано
4. настроиваем конфигфайл postfix
/etc/postfix/main.cf
# DKIM milter_default_action = accept milter_protocol = 2 smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891
если имеете Postfix/DomainKeys
milter_default_action = accept milter_protocol = 2 smtpd_milters = inet:localhost:8891,inet:localhost:8892 non_smtpd_milters = inet:localhost:8891,inet:localhost:8892
5. добавляем в ДНС ТХТ запись взятую из сформированного файла opendkim
6. перезапускаем и смотрим логи и то что opendkim слушает порт
sudo service opendkim start
sudo service opendkim restart
sudo /etc/init.d/postfix restart
netstat -ntap | grep opendkim
grep -i dkim /var/log/mail.log
7. возможные проблемы с правами,
на файл конфига должен быть ровно 600 и созданный от имени пользователя opendkim
другие проблем в основном связаны неверными настройками
если вы добавили параметер t то gmail test mode DKIM будет, уберите его из днс записи.
проверте что вы сгенерировали ключ не менее чем 1024 битным шифрованием
8. проверяем заголовки в почтовых сервисах
reason=pubkey_syntax -ошибка на стороне получателя в заголовках полученного письма
X-DKIM-FAIL: DKIM test failed: invalid (address=info@site.com domain=site.com reason=pubkey_syntax). X-DMARC-Policy: no X-Magic: A2BBA6E1549E1F578244526 .... 918F9CA260D04BD65B X-Mras: PROBABLE_SPAM X-Mru-Authenticated-Sender: uid:33@site.com X-Spam: undefined X-UBL: White Проверьте DNS запись TXT возможно есть пробел или перенос в публичном ключе 9. reason=pubkey_unavailable -ошибка на стороне получателя в заголовках полученного письма
X-DKIM-FAIL: DKIM test failed: invalid (address=info@site.com domain=site.com reason=pubkey_unavailable). X-DMARC-Policy: no X-Magic: B35BD59DA489B18B ... EE438187B06E8F9CA260D04BD65B X-Mras: PROBABLE_SPAM X-Mru-Authenticated-Sender: uid:33@site.com X-Spam: undefined X-UBL: White
Проверьте DNS запись TXT возможно есть пробел или перенос в публичном ключе, название селектора чтобы в насройках DKIM, в письме и в DNS записи совпадали
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=site.com; s=SELECTOR; t=1473841660; bh=tynu3gy6dVp9yA.....oDMk6pM=; h=To:Subject:Message-ID:Date:From:From:Sender:To:CC:Subject: Message-ID:Date; b=TqVp3+wapQuy......nrPUcNr4MI=
dig SELECTOR._domainkey.site.com TXT
; <<>> DiG 9.10.3-P4-Ubuntu <<>> SELECTOR._domainkey.site.com TXT
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36811
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;SELECTOR._domainkey.site.com. IN TXT
;; ANSWER SECTION:
SELECTOR
._domainkey.siter.com. 86400 IN TXT "v=DKIM1; k=rsa; p=MIGfM...B"
;; Query time: 47 msec
;; SERVER: 11.11.11.11#53(1.1.1.10)
;; WHEN: Wed Sep 14 10:41:32 CEST 2016
;; MSG SIZE rcvd: 307
10. “Sender:” and “Message-Id” fields not included in signature
В конфиг opendkim.conf дким добавьте ...
SignHeaders From,Sender,To,CC,Subject,Message-ID,Date,Content-Type,MIME-Version
OversignHeaders From,Sender,To,CC,Subject,Message-ID,Date,Content-Type,MIME-Version
....
15. Настраиваем Brand Indicators for Message Identification (BIMI). для отображения своих «аутентифицированных логотипов» внутри почтовых клиентов. Для этого нужно изготовить VMC сертификаты , которые необходимы компаниям для подтверждения прав собственности на логотип.
На этом все! Теперь вы знаете все про правила правильной массовой рассылки , Помните, что это теперь будет проще использовать на практике. Надеюсь, что теперь ты понял что такое правила правильной массовой рассылки , спам , opendkim , postfix и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Вредоносное ПО и защита информации
Комментарии
Оставить комментарий
Информационная безопасность, Вредоносное ПО и защита информации
Термины: Информационная безопасность, Вредоносное ПО и защита информации