Настройка DKIM-записи для работы с sendmail на сервере с Linux Ubuntu
Если вдруг перед вами встала задача использования Sendmail для отправки почты вместо использования альтернативных способов, стоит подумать о том, чтобы верно настроить DKIM-запись, чем обезопасить свою корреспонденцию от придирчивых спам-фильтров. Однако, не всегда этот процесс проходит просто и быстро. В сети множество инструкций о том, как это сделать, но итогом нескольких часов настройки стал собственный опыт и этот мануал.
Сегодняшняя инструкция протестирована на сервере с Linux Ubuntu 16.04.
Сначала установка sendmail
Тут всё просто. Достаточно выполнить команду:
sudo apt-get update
sudo apt-get install sendmail
Если не сработает, иногда приходится добавить также:
sudo apt-get install sensible-mda
sudo apt-get install sendmail-bin
После этого стоит обновить файл hosts, открыв его на редактирование командой:
Добавляем туда строку:
127.0.0.1 localhost localhost.localdomain имя_вашего_хоста
Здесь обратите внимание на «имя вашего хоста», которое необходимо заменить на справедливое для вас значение.
Затем пересобираем конфиг и перезапускаем сервис:
sendmailconfig
service sendmail restart
Приступаем к DKIM
Нам потребуются пакеты. Доустанваливаем тех, что скорее всего, пока не хватает:
apt-get install opendkim opendkim-tools
Затем создаём директорию для хранения ключей:
mkdir -p /etc/opendkim/keys/ваш_домен_ру
Здесь и далее мы будем использовать в коде подстановку «ваш_домен_ру», которую необходимо заменить на соответствующее название домена. Будьте внимательны, это нам потребуется ещё ни один раз.
Далее потребуется сгенерировать ключи. Приватные будут храниться на вашем сервере, а публичные нужно будет прописать в виде DNS-записей у хостера. Здесь же придумываем название селектора, которое сейчас и в дальнейшем будем использовать. В нашем случае это будет слово «mail».
opendkim-genkey -D /etc/opendkim/keys/your-domain.com -d your-domain.com -s default
После выполнения команды в директории хранения ключей будет создано два файла с именами «mail.private» и «mail.txt».Теперь назначаем верные права доступа и владельца:
chown -R opendkim:opendkim /etc/opendkim/keys/ващ_домен_ру
chmod 640 /etc/opendkim/keys/your-domain.com/mail.private
chmod 644 /etc/opendkim/keys/your-domain.com/mail.txt
Залезаем в конфиг командой:
sudo nano /etc/opendkim.conf
И вставляем туда эти строки (это пример работающего конфига, который подойдёт для большинства пользователей):
AutoRestart Yes
AutoRestartRate 10/1h
UMask 002
Syslog yes
SyslogSuccess Yes
LogWhy Yes
Canonicalization relaxed/simple
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
Mode sv
PidFile /var/run/opendkim/opendkim.pid
SignatureAlgorithm rsa-sha256
UserID opendkim:opendkim
Socket inet:8891@127.0.0.1
Domain ваш_домен_ру
Selector mail
Теперь создаём те самые три файла, что описали в конфиге. Сначала первый:
sudo nano /etc/opendkim/KeyTable
Вставляем содержимое:
mail._domainkey.ваш_домен_ру ваш_домен_ру:mail:/etc/opendkim/keys/ващ_домен_ру/mail.private
Создаём второй:
sudo nano /etc/opendkim/SigningTable
Содержимое:
*@ваш_домен_ру mail._domainkey.ваш_домен_ру
Переходим к третьему:
sudo nano /etc/opendkim/TrustedHosts
Вставляем туда строки:
127.0.0.1
localhost
ваш_домен_ру
Снова конфигурируем sendmail, сообщая о том, что теперь есть подпись DKIM. Открываем на редактирование файл:
sudo nano /etc/mail/sendmail.mc
И добавляем в конец файла строку:
INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@127.0.0.1')
Редактируем ещё один конфиг:
sudo nano /etc/default/opendkim
Здесь нужно раскомментировать строку «SOCKET=»inet:8891@localhost»».
Затем снова пересобираем конфиг sendmail, перезапускаем службу и запускаем openDKIM:
sendmailconfig
service sendmail restart
service opendkim start
Пора добавить DNS-записи
Для начала нам потребуется просмотреть содержимое файла ключа:
cat /etc/opendkim/keys/ваш_домен_ру/mail.txt
В итоге увидим что-то в духе:
default._domainkey IN TXT ( «v=DKIM1; k=rsa; «
«p=MIGfMA0000qGSIb3DQEBAQUAA4GNADCxxxxBgQCgmHiX7BojGFoggggXa25Xs444WRhLmNpnv7777TY7FU4mG/WxtgrpV////Tzt3EZQ1/BpyICjlJZXIhgggguePnyd/iNFh4xKF3pi8yoqWB0eyq6KI/fXUbUWdd+NiU4ffffv89St92g24UFaElEl54XXCa6GlllldHFMetkBXwID/QAB» ) ; —— DKIM key default for droidnews.ru
Теперь в панели хостера необходимо добавить TXT-Запись «mail._domainkey» (здесь «mail» снова выбранный нами ранее селектор). В качестве значения указываем всё, что прописано в кавычках, включая кавычки.
Проверяем результат
Чтобы понять, верно ли у нас всё получилось, можно, например, воспользоваться сервисом https://www.mail-tester.com или http://www.isnotspam.com, http://www.appmaildev.com/en/dkim, https://mxtoolbox.com/SuperTool.
aspx, которые расскажут о том, удалось отправить подписанное письмо с вашего сервера, а также проверить вашу DKIM-запись на валидность.
Кроме того, даст ещё некоторые полезные советы, как повысить рейтинг вашего отправления, чтобы оно было успешно доставлено до адресата, минуя спам-фильтры.
Ещё пара полезных записей в DNS
Почтовые сервисы также одобрят у вас появление записи DMARC.
Для этого в панели хостера добавляем TXT-запись «_ваш_домен_ру» (первый знак нижнего подчёркивания надо оставить) со следующим значением «v=DMARC1; p=none».
Кроме того, добавим SPF-запись. TXT-запись с названием «ваш_домен_ру» и значением «v=spf1 a mx -all».
Теперь ваши письма должны всегда успешно доходить до адресатов.
Если вам интересны новости мира ИТ также сильно, как нам, подписывайтесь на наш Telegram-канал. Там все материалы появляются максимально оперативно.
Или, может быть, вам удобнее «» или ? Мы есть даже в Яндекс.Дзене.
Ещё сегодня было:
Установка Sendmail + Dovecot + DrWeb на Ubuntu
Adatum
Я буду использовать белый ip 77.222.61.85 вы вместо него прописывайте свой.
Для начала ставим дополнительные компоненты для удобства работы это файловый менеджер MC и WebMin
sudo apt-get upgrade sudo apt-get install mc
теперь ставим графический WEB интерфейс
sudo nano /etc/apt/sources.list
В самом конце добавляем строку:
deb http://download.webmin.com/download/repository sarge contrib
Устанавливаем GPG ключ:
wget http://www.webmin.com/jcameron-key.asc sudo apt-key add jcameron-key.asc
Устанавливаем Webmin для этого вводим команду:
sudo apt-get update sudo apt-get install webmin
Запустить Webmin можно через браузер для этого введите следующий адресу в строку url:
https://77.222.61.85:10000
Устанавливаем MTA агент передачи почты Sendmail (MTA — mail transfer agent)
он отвечает за передачу почты по SMTP.
sudo apt-get install sendmail
После установки редактируем следующие файлы файлы
sudo nano /etc/hosts sudo nano /etc/mail/local-host-names sudo nano -w /etc/hostname
вписываем или меняем строку, она должна принять вид типа
77.222.61.85 mail.adatum.ru mail2
[/php]Редактируем файл /etc/mail/access
в файле /etc/mail/access устанавливаются права доступа nano /etc/mail/access
дописываем строки с нужными нам ip либо доменами от куда разрешена отправка почты
Connect:adatum.ru RELAY Connect:mail.adatum.ru RELAY Connect:192.168.0 RELAY Connect:77.222.61.85 RELAY
Управление sendmail
Просмотр очереди сообщений:
sudo mailq
Просмотр очереди сообщений по определенному адресу:
sudo mailq | grep 'email@adatum.ru' | wc -l
Очистка очереди сообщений sendmail:
sudo rm -r /var/spool/mqueue-client/*
Очистка очереди сообщений sendmail по адресату:
cd /var/spool/mqueue
Проверка сендмайла
telnet 77.222.61.85 smtp
Если зашёл все хорошо и продолжаем дальше.
Выход из телнета написать QUIT
netstat -nlp|grep sendmail
Перезагрузка конфига sendmail
/etc/init.d/sendmail restart
Настройка и установка Dovecot
sudo apt-get install dovecot-imapd dovecot-pop3d
IMAPS и POP3S более безопасные чем обычные IMAP и POP3, поскольку используют SSLшифрование для соединения. Как только вы выберете протокол,
исправьте следующую строку в файле /etc/dovecot/dovecot.conf
protocols = pop3 pop3s imap imaps
Далее выберите формат почтового ящика, который вы собираетесь использовать.
Dovecot поддерживает форматы maildir и mbox.
Выбрав тип почтового ящика, измените в файле /etc/dovecot/conf.d/10-mail.conf
nano /etc/dovecot/conf.d/10-mail.conf
следующую строку:
mail_location = maildir:~/Maildir #
для mbox:
mail_location = mbox:~/mail:INBOX=/var/spool/mail/%u #
в моем случае я использовал mbox.в моем случае отправка почты возможна только с локальной сети поэтому я использую передачу данных авторизации в открытом виде.
Редактируем dovecot.conf
nano /etc/dovecot/dovecot.conf
добавляем строку
disable_plaintext_auth = no
Этим параметром мы явно указываем что можно передавать данные для авторизации на сервере в открытом виде.
Проверка Dovecot
telnet 77.222.61.85 pop3
Если зашёл все хорошо и продолжаем дальше.
Выход из телнета написать QUIT
Перезагрузка конфига dovecot
/etc/init.d/dovecot restart
Добавление записей в DNS
Теперь чтобы это все виделось с интернета необходимо внести 2 записи в dns примерно такого вида.
/etc/bind/zone/adatum.ru.hosts
mail.adatum.ru. IN A 77.222.61.85 mail.adatum.ru. IN MX 5 mail.adatum.ru.
Перенос и создание новых пользователей
в моем случае нужно было перенести старых пользователей.
для этого создаем на новом сервере пользователей с такими же логинами как и на старом сервере командой.
sudo useradd -d /home/misa -m misa sudo useradd -d /home/ivanpetrovich -m ivanpetrovich sudo useradd -d /home/lolos -m lolos
Теперь нужно перенести ХЭШ паролей с старого сервера на новый, хэши хранятся в файле /etc/shadow
nano /etc/shadow
копируем записи нужных пользователей из старого файла в новый. Это актуально если не известны все пароли пользователей на сервере.
Отступление (Пароли и пользователи)
Все данные о пользователях хранятся в файлах ( /etc/passwd, /etc/shadow или /etc/master.passwd)
Cгенери́ровать хэш из командной строки можно так:
echo root:123 | chpasswd -S -c SHA512 SHA512 root:$6$ioakXVaHexL$nD9wXc6lxdbljUV1.MTKr8Z8McW7gzqbDbRh9o15y1t FSg8ezUDhbeioXY9s3PCFMT4sWoIENVIMlcIvdr/l8.
Шифрование паролей в Ubuntu .* Без признаков – DES (практически давно не используется, неадекватно слаб по сегодняшним меркам);* _ – Модификация имплементации алгоритма DES, сделанная BSDi;* $1$ – MD5 (наиболее популярный, но имеет математические уязвимости);* $2$, $2a$ – Blowfish (используется преимущественно в OpenBSD, FreeBSD);* $5$ – SHA-256;
* $6$ – SHA-512
Установка Drweb анти спам+антивирус
Репозиторий для Debian защищен с помощью механизма цифровой подписи. Для корректной работы нужно импортировать лицензионный ключ командой
wget -O — http://officeshield.drweb.com/drweb/drweb.key | apt-key add —
или
curl http://officeshield.drweb.com/drweb/drweb.key | apt-key add —
Внимание! Для установки пакетов и импорта ключа необходимы права администратора (root)
Чтобы подключить репозиторий, добавьте следующую строку в файл /etc/apt/sources.list:
nano /etc/apt/sources.list deb http://officeshield.drweb.com/drweb/debian stable non-free
Обновите репозиторий командой
sudo apt-get update
Для установки Dr.Web для почтовых серверов UNIX выполните команду:
sudo apt-get install drweb-sendmail-av-as Ключк DrWeb-а помещаем в папку /opt/drweb он должен иметь название drweb32.key.Основные конфиги:-/etc/drweb/plugin_vaderetro.conf (основной файл настроек антиспама)-/etc/drweb/drweb32.ini-/etc/drweb/maild_sendmail.conf
-/etc/drweb/plugin_drweb.conf
Настройка белого листа (доменов от куда почта не проверяется)редактируем файл/etc/drweb/plugin_vaderetro.conf
редактируем строку
WhiteList = /etc/drweb/w.txt
файл w.txt следующего содержания
*@gov.ru *@mail.ru *@web.adatum.ru
Работа с пользователями через WebMin
Заходим браузером на https://77.222.61.85:10000 вводим наш логин и пароль(который установили при установки Ubuntu).
открываем вкладку System -> Users and Groups.
Нажимаем Create a new user. Заполняем необходимые поля и нажимаем кнопку CREATE. Для редактирования пользователя возвращаемся в System -> Users and Groups. В открывшемся окне можно сменить пароль, прочитать почту либо удалить пользователя.
Для настройки почтовой системы
‘cd /opt/drweb/maild/scripts/ && ./configure_mta.sh’
Для настройки Dr.Web MailD
‘cd /opt/drweb/maild/scripts/ && ./configure.pl’
Установка и настройка sendmail
Сервер в кармане, или просто о сложном!
главная — Статьи — Почта — Sendmail
sendmail Почтовый сервер
Настраиваем sendmail (8.12.6/7/8) для виртуального почтового хостинга.
Установка sendmail
Сначала устанавливаем итз портов sendmail c поддержкой cyrus sasl (система аутентификации).
cd /usr/ports/mail/sendmail-sasl make install
После установки sendmail мы должны изменить файл /etc/make.conf. Добавляем в него строчку
SENDMAIL_CF_DIR= /usr/local/share/sendmail/cf
Если до этого стоял более старый sendmail, устанавливаем файл submit.cf
make submit.cf
Для запуска sendmail будем использовать следующий сценарий (переименуем его в удобоваримый формат):
mv /usr/local/etc/rc.d/sendmail.sh.sample /usr/local/etc/rc.d/030.sendmail.sh
Для нормального запуска обновленной версии мы должны указать путь к ней (файл /etc/mail/mailer.conf). Это можно сделать либо при помощи команды
make mailer.conf
либо вручную, изменив файл mailer.conf:
sendmail /usr/local/sbin/sendmail send-mail /usr/local/sbin/sendmail mailq /usr/local/sbin/sendmail newaliases /usr/local/sbin/sendmail hoststat /usr/local/sbin/sendmail purgestat /usr/local/sbin/sendmail
На этом установка sendmail окончена. Осталоь столько запустить его командой
/usr/local/etc/rc.d/030.sendmail.sh start sendmail sm-msp-queue
Сообщения sendmail sm-msp-queue говорят о том, что все прошло нормально.
Настройка sendmail
Будем считать, что мы настраиваем два виртуальных почтовых домена: perldoc.ru и perlfaq.ru. Для настройки sendmail c поддержкой виртуального постового хостинга нам потребуется создать (или изменить) следующие файлы:
- freebsd.mc
- aliases
- access
- local-host-names
- virtusertable
aliases
Этот файл описывает пользовательские псевдонимы, используемые sendmail. Файл расположен в каталоге /etc/mail и представляет собой список вида
имя addr_1, addr_2, addr_3…
Более подробно структура файла aliases описана в aliases (5). В этот файл мы добавляем строку
root: admin@perldoc.ru
Вся локальная почта, адресованная пользователю root, теперь будет приходить на адрес admin@perldoc.ru.
access
В этом файле мы указываем, для каких IP адресов sendmail должен принимать и пересылать почту. Поскольку для эих целей мы будем использовать аутентификацию cyrus sasl, мы разрешим только отсылку с локального хоста
localhost.localdomain RELAY localhost RELAY
local-host-names
В этом файле мы храним названия доменов, для которых наш сервер должен обрабатывать почту. Поскольку мы хотим использовать наш сервер для двух виртуальных почтовых доменов perldoc.ru и perlfaq.ru, пропишем их в файл:
perldoc.ru perlfaq.ru
virtusertable
В файле virtusertable мы указываем sendmail, куда направлять почту, пришедшую на адреса в доменах perldoc.ru и perlfaq.ru.
stellar@perldoc.ru stellar-perldoc.ru admin@perldoc.ru admin-perldoc.ru @perldoc.ru error:nouser No such user here stellar@perlfaq.ru stellar-perlfaq.ru @perlfaq.ru error:nouser No such user here
Вся почта, пришедшая на адрес stellar@perldoc.ru будет направляться в почтовый ящик пользователя stellar-perldoc.ru, а почта, пришедшая на admin@perldoc.ru, соответственно будет отсылаться пользователю admin-perldoc.ru. Тоже самое будет и для домена perlfaq.ru. Если на наш домен будет прислана почта с несуществующем пользователем, сработает строчка
@perldoc.ru error:nouser No such user here
и sendmail откажется принимать такое сообщение.
freebsd.mc
Теперь нам осталось только изменить конфигурацию файла freebsd.mc, чтобы sendmail научился работать с виртуальными почтовыми доменами.
Здесь надо понимать, что в том случае, когда существует файл, у которого имя совпадает с названием машины (например, для машины с именем genius файл будет genius.
mc), он используется вместо файла freebsd.mc
Вот примерный вид конфигурационного файла:
1 divert(0) 2 VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.10.2.16 2002/05/22 16:39:14 gshapiro Exp $') 3 OSTYPE(freebsd4) 4 DOMAIN(generic) 5 6 FEATURE(access_db, `hash -o -T /etc/mail/access') 7 FEATURE(blacklist_recipients) 8 FEATURE(local_lmtp) 9 dnl FEATURE(mailertable, `hash -o /etc/mail/mailertable') 10 FEATURE(virtusertable, `hash -o /etc/mail/virtusertable') 11 12 dnl Uncomment to allow relaying your MX records. 13 dnl NOTE: This can allow sites to use your server as a backup MX without 14 dnl your permission. 15 dnl FEATURE(relay_based_on_MX) 16 17 dnl DNS based black hole lists 18 dnl ——————————— 19 dnl DNS based black hole lists come and go on a regular basis 20 dnl so this file will not serve as a database of the available servers. 21 dnl For that, visit http://dmoz.org/Computers/Internet/Abuse/Spam/Blacklists/ 22 23 dnl Uncomment to activate Realtime Blackhole List 24 dnl information available at http://www.mail-abuse.com/ 25 dnl NOTE: This is a subscription service as of July 31, 2001 26 FEATURE(dnsbl) 27 dnl Alternatively, you can provide your own server and rejection message: 28 FEATURE(dnsbl, `blackholes.mail-abuse.org', `»550 Mail from » $&{client_addr} » rejected, see http://mail-abuse.org/cgi-bin/lookup?» $&{client_addr}') 29 30 dnl Dialup users should uncomment and define this appropriately 31 dnl define(`SMART_HOST', `your.isp.mail.server') 32 33 dnl Uncomment the first line to change the location of the default 34 dnl /etc/mail/local-host-names and comment out the second line. 35 dnl define(`confCW_FILE', `-o /etc/mail/sendmail.cw') 36 define(`confCW_FILE', `-o /etc/mail/local-host-names') 37 38 dnl Uncomment both of the following lines to listen on IPv6 as well as IPv4 39 dnl DAEMON_OPTIONS(`Name=IPv4, Family=inet') 40 dnl DAEMON_OPTIONS(`Name=IPv6, Family=inet6') 41 42 TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl 43 define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl 44 define(`confDEF_AUTH_INFO', `/etc/mail/auth/auth-info')dnl 45 FEATURE(`no_default_msa')dnl turn off default entry for MSA 46 DAEMON_OPTIONS(`Port=25, Name=MSA, M=E')dnl 47 48 define(`confMAX_RCPTS_PER_MESSAGE', `10') 49 define(`confMAX_MESSAGE_SIZE', `1048576') 50 51 define(`conIND_OPTS', `WorkAroundBrokenAAAA') 52 define(`confMAX_MIME_HEADER_LENGTH', `256/128') 53 define(`confNO_RCPT_ACTION', `add-to-undisclosed') 54 define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy') 55 MAILER(local) 56 MAILER(smtp)
В строке 6 мы задаем файл с пользовательскими псевдонимами; в десятой строке — имя файла трансляции виртуальных пользователей в настоящих, а в 36-й строке — названия доменов, для которых наш сервер должен обрабатывать почту.
Также ограничим максимальный размер письма одним мегабайтом (строка 49) и запретим рассылать письмо одновременно более, чем 10 получателям (строка 48).Если есть необходимость отправки всей почты на промежуточный SMTP сервер (например, на SMTP сервер провайдера), следует раскомментировать строку 31 и вместо «your.isp.mail.server» указать IP адрес или имя SMTP сервера провайдера.
Запуск и тестирование
Теперь, когда почти все сделано, нам надо пересобрать заново файл конфигурации sendmail и обновить базы данных. Делается это следующим набором команд:
cd /etc/mail rm *.db rm freebsd.cf make all make install
Результатом будет нечто вроде этого:
/usr/bin/m4 -D_CF_DIR_=/usr/local/share/sendmail/cf/ /usr/local/share/sendmail/cf/m4/cf.m4 genius.mc > genius.cf /usr/sbin/makemap hash virtusertable.db
db
cf /etc/mail/submit.cf
Теперь перезапускаем sendmail
/usr/local/etc/rc.d/030.sendmail.sh stop /usr/local/etc/rc.d/030.sendmail.sh start
и тестируем:
telnet localhost 25
Trying ::1… Trying 127.0.0.1… Connected to localhost. Escape character is ']'. 220 localhost.my.domain ESMTP Sendmail 8.12.6/8.12.6; Mon, 30 Dec 2002 13:31:56 +0300 (MSK) EHLO localhost 250-localhost.my.
domain Hello localhost [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN 250-DELIVERBY 250 HELP QUIT 221 2.0.0 localhost.my.
domain closing connection
Наличие строчки «250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN» говорит нам о том, что sendmail может аутентифицировать пользователя. Добавляем пользователя:
saslpasswd2 admin-perldoc.ru Password: Again (for verification):
Вводим пароль пользователя и проверяем:
sasldblistusers2 admin-perldoc.ru@genius: userPassword
Собственно говоря, на этом настройка sendmail закончена. Теперь настраиваем The Bat! для того, чтобы можно было отправлять почту с аутентификацией:
Заходим в Ящик -> Свойства почтового ящика -> Транспорт -> Аутентификация
Выделяем чекбокс «Аутентификация SMTP (RFC-2554)».Переключаем кнопку «Использовать параметры, указанные ниже.»Вводим имя пользователя и пароль, которые создали при помощи saslpasswd2.Пользователь: admin-perldoc.ru@genius.Пароль: *********
(!) Обратите внимание на то, что имя пользователя указано вместе с именем машины.
Выделяем чекбокс «Требовать безопасную (MD5) аутентификацию».
В том случае, если используется MS Outlook или другой почтовый клиент, в котором нет безопасной аутентификации (DIGEST-MD5, CRAM-MD5), необходимо использовать аутентификацию по методам PLAIN или LOGIN. При этом в качестве имени пользователя надо использовать имя пользователя БЕЗ добавленного имени машины. В нашем случае имя пользователя будет выглядеть так: admin-perldoc.ru.
После отправки письма в лог-файле /var/log/maillog должны быть примерно такие записи:
Dec 30 13:54:41 genius sm-mta[77570]: AUTH=server, relay=xxx.yyy.zzz.kkk [xxx.yyy.zzz.kkk], authid=admin-perldoc.ru@genius, mech=CRAM-MD5, bits=0 Поддерживается http://stellar.df.ru
Авторизуйтесь для добавления комментариев!
HOWTO setup ubuntu 18.04 sendmail+DKIM+SPF+DMARC или о том как мне удалось пробиться в бастион Gmail
На моем сервере крутится 2 отдельных домена. До истории с блокировками Роскомнадзора мы собирали трафик около 2000 посещений в сутки, а почтовый сервер отправлял в сутки около 200 писем на все популярные почтовые сервисы, в т.ч. Гугл и Яндекс. Все было здорово.
Но как говорится в известном ролике: «Все было так хорошо, пока не пришел Навальный Роскомнадзор! Теперь, когда нам удалось найти хостера, чьи IP адреса не попадают под блокировки государственной цензуры появилась другая проблема. Корпорация добра Гугл перестала дальше порога пускать нашего почтальона.
MX сервер google выбрасывает мою почту с примерно следующим сообщением: „Твое сообщение похоже на нежелательное, давай до свидания…“
лог соединения с SMTP сервером гугла050 … Connecting to gmail-smtp-in.l.google.com. via esmtp…050 220 mx.google.com ESMTP v6-v6si38552789wrc.432 — gsmtp050 >>> EHLO sevenlight.ru050 250-mx.google.
com at your service, [2a02:c207:2018:3546::1]050 250-SIZE 157286400050 250-8BITMIME050 250-STARTTLS050 250-ENHANCEDSTATUSCODES050 250-PIPELINING050 250-CHUNKING050 250 SMTPUTF8050 >>> STARTTLS050 220 2.0.0 Ready to start TLS050 >>> EHLO sevenlight.ru050 250-mx.google.
com at your service, [2a02:c207:2018:3546::1]050 250-SIZE 157286400050 250-8BITMIME050 250-ENHANCEDSTATUSCODES050 250-PIPELINING050 250-CHUNKING050 250 SMTPUTF8050 >>> MAIL From: SIZE=297050 250 2.1.0 OK v6-v6si38552789wrc.432 — gsmtp050 >>> RCPT To:050 >>> DATA050 250 2.1.5 OK v6-v6si38552789wrc.432 — gsmtp050 354 Go ahead v6-v6si38552789wrc.432 — gsmtp050 >>> .050 550-5.
7.1 [2a02:c207:2018:3546::1 7] Our system has detected that this050 550-5.7.1 message is ly unsolicited mail. To reduce the amount of spam sent050 550-5.7.1 to Gmail, this message has been blocked. Please visit050 550-5.7.1 https://support.google.com/mail/?p=UnsolicitedMessageError050 550 5.7.1 for more information. v6-v6si38552789wrc.
432 — gsmtp
Этой командой я отправлял тестовое сообщение: echo «Subject: Hello baby!» | sendmail -v legale.legale@gmail.com Писать о своих танцах с бубном в попытках пробиться через спам-фильтры я не буду. Скажу только, что провозился я всю ночь, но добиться успеха смог только на следующий день. Именно поэтому я и решил написать сей мануал.
Инструкция по настройке spf+dkim на ubuntu 18.04
Крутизна данной инструкции в том, что она работает, в отличие от множества других. Я гарантирую, что как минимум 2 домена на 1 сервере ты сможешь настроить без особого труда.
2. Настраиваем opendkim
Конфиг лежит тут: /etc/opendkim.conf /etc/opendkim.
confAutoRestart Yes UMask 002 Syslog yes AutoRestartRate 10/1h Canonicalization relaxed/simple ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts KeyTable refile:/etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable LogWhy Yes Mode sv PidFile /var/run/opendkim/opendkim.pid SignatureAlgorithm rsa-sha256 Socket inet:8891@localhost SyslogSuccess Yes TemporaryDirectory /var/tmp UserID opendkim:opendkim
3. Настраиваем ключи и правила подписывания
Я опишу процедуру по созданию собственных ключей для тех, кто хочет полной автономности. Лично у меня используется яндексовый сервис «Почта для домена» pdd.yandex.ru, поэтому у меня ключи сгенерированные Яндексом. #сначала делаем каталогmkdir -p /etc/opendkim/keys/*****.ru#переходим тудаcd /etc/opendkim/keys/******.
ru#делаем ключи#-s определяет селектор -d домен для которого делать ключopendkim-genkey -s mail -d ******.ru#должны появится 2 файла mail.txt с открытым ключом и mail.private с закрытым#назначим владельцем файлов ключей opendkim:opendkimchown opendkim:opendkim mail.*#ограничим доступ к секретному ключуchmod 600 mail.
private Далее подключаем наш созданный или загруженный у Яндекса секретный ключ DKIM.
Нас интересуют вот эти три строчки из конфига opendkim: InternalHosts refile:/etc/opendkim/TrustedHostsKeyTable refile:/etc/opendkim/KeyTableSigningTable refile:/etc/opendkim/SigningTableВ первом файле /etc/opendkim/TrustedHosts хранятся хосты, которые будут иметь доступ к серверу opendkim для подписывания писем. /etc/opendkim/TrustedHosts127.0.0.
1 localhost ######.ru ******.ru
Во втором файле /etc/opendkim/KeyTable хранится таблица секретных ключей и связанных с ними записей DKIM, которые представляют из себя следующее: [selector]._domainkey.[domain_name] /etc/opendkim/KeyTablemail._domainkey.sevenlight.ru sevenlight.ru:mail:/etc/opendkim/keys/sevenlight.ru/mail.private mail._domainkey.st-goods.ru st-goods.
ru:mail:/etc/opendkim/keys/st-goods.ru/mail.private
В третьем файле /etc/opendkim/SigningTable лежит таблица правил подписывания писем. Тут указано чьи письма и каким именно ключом подписывать. /etc/opendkim/SigningTable*@sevenlight.ru mail._domainkey.sevenlight.ru *@st-goods.ru mail._domainkey.st-goods.ru Создаем эти файлы, указывая свой домен и свой путь к файлу ключа. На этом настройка opendkim закончена.
4. Настройка sendmail
Настройка sendmail максимально проста. Нам всего лишь нужно добавить в конец файла прототипа конфига /etc/mail/sendmail.mc следующие строчки: #Эта строка включает поддержу starttlsinclude(`/etc/mail/tls/starttls.
m4')dnl#Заставим sendmail пропускать письма через opendkimINPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')dnl
Чтобы почта по умолчанию отправлялась с правильного домена надо сделать еще одно изменение в файле /etc/mail/sendmail.mc
Ищем строку, похожую на эту: MASQUERADE_AS(`st-goods.ru')dnl Заменяем на нужный домен.
Именно этот домен будет использован в качестве обратного адреса по умолчанию. Обратите внимание, что кавычки там разные, строго говоря, первый знак ` называется гравис. Так зачем-то заведено в конфиге sendmail.
Теперь добавим записи в файл /etc/hosts Это нужно для того, чтобы sendmail пропускал письма через фильтр. Опытным путем установлено, что если не добавлять записей, все логи остаются девственно чистыми, не показывая ни одной ошибки, однако письма не подписываются. #ipv4echo -e «127.0.0.1 st-goods.ru» >> /etc/hosts#ipv6echo -e «::1 st-goods.ru» >> /etc/hosts Теперь надо пересобрать sendmail с новыми настройками. #запускаем скрипт #на все вопросы отвечаем «да»sendmailconfig#перезапускам службы opendkim и sendmailservice opendkim restart && service sendmail restart Теперь наш сервер sendmail умеет пропускать исходящие письма через сервер opendkim, который добавляет цифровую подпись и шифрует заголовки отправляемых писем. Осталось опубликовать для принимающей стороны открытый ключ, чтобы можно было расшифровать заголовки и удостоверится, что заголовки не изменялись.
5. Настройки DKIM TXT записи на DNS сервере
Ключ надо подвесить на DNS сервере в строке типа TXT следующего содержания:
хост: mail._domainkey
значение: v=DKIM1; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2wtGTw/5KPjtlIEh282JY7ovxZ/8eqveFn9ivhzpYJldl3EOKw Пояснения:
p= это наш открытый ключ
v= определяет номер версии DKIM
t= устанавливает флаги, по умолчанию флаги не устанавливаются. Существует 2 флага 'y' и 's'.
y говорит о том, что DKIM работает в тестовом режиме.
s означает режим, когда правая часть почтового адреса после @ должна полностью совпадать с доменом указанным в параметре d= DKIM подписи письма.
Хост надо указать в следующем виде: [selector]._domainkey
У нас селектор mail, поэтому хост будет таким: mail._domainkey
Открытый ключ надо вытащить из файла /etc/opendkim/keys/st-goods.ru/mail.txt
/etc/opendkim/keys/st-goods.rumail._domainkey IN TXT ( «v=DKIM1; h=sha256; k=rsa; „
“p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsLFjSAqvfSrjvF0JfMkiSzqWRhXwwVPzW5OEtRFSoDVBwDxR6hMna1iESnUQ1OzbUQQPnDPbrFXkalDCAXigZqltTSAV+JQSyOwhi0b88WS3djb1IkA/qioCobjlhMFSatvcmz5kMkG8oeoHhVFQ/BE84PwDPTXRmcObDvg7meUmkYpdxeyr+tcG5ezuC+s15I00+6NSAaj0Tj»
«Y/Bl2e2TE/WG45wVShlQ85E8IpYixscd0qDJ9/NbZrbWIfy8shujW5izNU4PqcWwW7/H9uTkhAbMu0fgqT8W9Jv/GRVAireOCzMl13E9PVANt4o+ywqyGk38vSY8QdgJsZPDUQIDAQAB» ); — DKIM key mail for st-goods.ru
Ключ выделен жирным.
6. Настройка SPF
SPF (Sender Policy Frameword) это еще 1 технология защиты от спама, рассказывать про нее не буду. Только 2 слова для понимания сути этой технологии.
В DNS записи домена аналогично открытому ключу DKIM записываются адреса серверов, которые имеют право отправлять почту с этого домена. Нам нужно прописать в этой записи ip адреса своего сервера.
В моем случае в список также добавлен сервер Яндекса. Вот пример моей записи:
хост:@
значение:v=spf1 a mx include:_spf.yandex.net ip4:173.249.51.13 ip6:2a02:c207:2018:3546::1 ~all Синтаксис простой. Сначала указывается версия spf, а потом через пробел с плюсом или без него указываются адреса серверов, которые имеют право слать почту с этого домена. У меня указаны записи a и mx, что означает, что серверы из DNS записей A и MX тоже входят в список разрешенных. Через include: указан адрес сервера Яндекса, а дальше ipv4 и ipv6 адреса моего сервера. ~all означает softfail «мягкий отказ». Т.е. все адреса, которые не перечислены в разрешенных все таки могут пройти по усмотрению принимающего сервера. -all означал бы жесткий отказ.
7. Настройка DMARC
Последний гвоздь для проникновения в бастион gmail — DMARC. DMARC устанавливает что нужно делать с письмами, которые не проходят проверку SPF или DKIM. Все делаем точно также через DNS запись типа TXT.
хост: _dmarc
значение: v=DMARC1; p=none Здесь мы устанавливаем, что если письма не прошли SPF или DKIM ничего делать не надо. Можно поставить p=reject. Тогда такие письма будут забракованы.
Проверка
Отправляем себе письмо. echo «Subject: Hello baby!» | sendmail -v legale.legale@gmail.com
Смотрим последние записи лога почты. tail -f /var/log/mail.log | grep dkim
Должна появится строка похожая на эту: Jun 11 22:07:55 sevenlight opendkim[6473]: w5BK7sl9008069: DKIM-Signature field added (s=mail, d=st-goods.ru) Если строка есть, значит сервер sendmail и opendkim сработались и подписали твое письмо. Если такой строки нет, смотри раздел «Возможные проблемы». Теперь смотрим, что получилось в почтовом ящике. Открываем письмо и нажимаем в правом верхнем углу письма кнопку со стрелкой вниз. В выпадающем меню выбираем пункт «Show original». Вот что получилось у меня: Message ID Created on: 11 June 2018 at 22:07 (Delivered after 2 seconds)From: info@*****.ruTo: legale.legale@gmail.comSubject: Заказ №2221 Интернет-магазин напольных покрытий ******.ruSPF: PASS with IP 2a02:c207:2018:3546:0:0:0:1 Learn moreDKIM: 'PASS' with domain *****.ru Learn moreDMARC: 'PASS' Learn more PROFIT$$$
Возможные проблемы
Я искренне надеюсь, что нужды читать этот раздел не будет, но техника — вещь сложная… Иногда не понятно кто на кого работает. Сначала проверяем все ли ты сделал в точной последовательность указанной в инструкции.
Сначала проверяем файл /etc/hosts на предмет корректности изменений в нем. У меня больше всего проблем было именно там. Дальше проверим системный лог на предмет ошибок dkim.
Пока я ковырялся мне довелось столкнуться с ситуацией невозможности чтения opendkim секретного ключа, хотя я назначил владельцем файла пользователя opendkim.
Дальше следует внимательно изучить лог выполнения команды sendmailconfig У меня был случай, что я использовал обычную одиночную кавычку вместо положенного грависа, а sendmailconfig ругался на это. Если ничего не помогло напиши мне и keep trying.
- SPF
- DKIM
- DMARC
- SENDMAIL
- OPENDKIM
- UBUNTU 18.04
- SPAM
- спам-фильтр
ssmtp настройка отправки почты с Ubuntu/Debian/Linux
Устанавливаем ssmtp
Отправляем почту из консоли
Отрпавка текстового сообщения из файла message.txt
Отправим почтовое сообщение через PHP
Отправка письма при отсутвии пинга
Проблемы
Устанавливваем ssmtp
apt-get install ssmtp
Полный список параметров
man -m 5 ssmtp.conf
Делаем бекап файла конфигуации
mv /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.default
Копируем болванку файла конфигурации ssmtp.conf, столкнулся еще с тем что после последней строки
AuthPass=password, необходим перевод строки, иначе аутентификация не пройдет.
wget -P /etc/ssmtp http://itautsors.ru/ssmtp.conf
Редактируем файл конфигурации
nano /etc/ssmtp/ssmtp.conf
Содержимое файла ssmtp.conf
# cat ssmtp.conf
# /etc/ssmtp.conf — конфигурационный файл для sSMTP sendmail.
#
# Пользователь, который получает всю почту для userids
# Сделайте пустым для отключения перезаписи. Или укажите пользователя.
# А также вы можете указать нужный е-майл на который будет
# приходить почта для root.
root=postmaster
# Место, где идет почта. Настоящее имя машины не требуются
# MX записи. Обычно mailhosts является именем mail.domain.com
# Например если вы находитесь в domain.com ваш mailhub с таким же именем.
# Пример для SMTP портом 2525
# mailhub=mail.your.domain:2525
# Пример для SMTP портом 25 (Standard/RFC)
# mailhub=mail.your.domain
# Пример для SSL шифрованного соединения
# mailhub=mail.your.domain:465
#Адрес и порт доверенного smtp сервера, с которого будет осуществляться отправка ваших почтовых сообщений
#Для гугла
mailhub=smtp.gmail.com:587
#Для яндекса
#mailhub = smtp.yandex.ru:465
#От кого якобы должна приходить почта?
#если используете pdd.yandex.ru можно указать свой домен mydomain.ru
rewriteDomain=
# Полное имя машины
#если закомментировано, ssmtp определяет параметр самостоятельно
hostname=_HOSTNAME_
# Установите это чтобы никогда не переписывать «From:» (если не указано) и
# использовать этот адрес в «from line» оболочки.
# Если YES Поле From: будет выставляться самим smtp переписывая значение вводимое скриптами
# Если NO, скрипты смогут записывать свое значение в поле From:
#Должно присутсвовать обязательно, иначе не пройдет авторизация Gmail.
#FromLineOverride=YES
# Использовать SSL/TLS, чтобы отправить безопасные сообщения на сервер.
#Должно присутсвовать обязательно, иначе не пройдет авторизация Gmail:
#UseSTARTTLS=YES
# Использовать SSL/TLS сертификат для аутентификации на SMTP-хосте.
#UseTLSCert=YES
# Используйте этот сертификат RSA.
#TLSCert=/usr/local/etc/ssmtp/ssmtp.pem
# Получить расширенное (* действительно * расширенную) отладочную информацию в логах
# Если вы хотите иметь отладке в конфигурационных отпарсенных файлах, переместите этот
# параметр в начало файла конфигурации и раскомментируйте
#Debug=YES
#Параметры существующего аккаунта почты
# Указываем имя пользователя на smtp-сервере (от какого пользователя шлем почту).
AuthUser=myaccount@domain.com
# Указываем пароль от smtp-аккаунта:
AuthPass=password
#End Of File
Далее правим файл revaliases
nano /etc/ssmtp/revaliases
Содержимое файла revaliases
# sSMTP aliases
#
# Format: local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.
# В данном конфиге явно указывается, почта от какого пользователя и с какого ящика может уходить.
# Данная настройка позволяет защитить сервер от возможности слать через него спам с пользовательских учеток.
# для яндекса
root:my-yandex-email@mydomain.ru:smtp.yandex.ru:465
# для гугла
root:my-gmail-account@gmail.com:smtp.gmail.com:587
Однако исторически в системе Linux принято, что программа для передачи почтовых сообщений должна быть именно sendmail. Поэтому, когда устанавливается любая из MTA-программ, она создает файлы линков /usr/sbin/sendmail и /usr/lib/sendmail, которые указывают на нужную программу.
Посмотрим куда у нас ведет mail
whereis mail
Проверяем файл симилинк,
$ cd /usr/sbin && ls -l | grep sendmail
Должны увидеть
lrwxrwxrwx 1 root root 5 2011-04-07 03:09 sendmail -> ssmtp
Если же нет то виртуальный пакет mail-transfer-agent не ссылается на пакет ssmtp, и это необходимо исправить. Удалив пакеты на которые ссылается mail-transfer-agent, к примеру posfix.
Отправляем почту из консоли
echo «Это тестовое письмо из консоли» | ssmtp -v -s адрескудаотправляем@domain.com
если письмо пришло то ssmpt работает
теперь отправляем
echo «Наше тест-сообщения» | mail -v -s «Наш заголовак письма» адрескудаотправляем@domain.com
если присьмо пришло то линки настроены правильно
Отрпавка текстового сообщения из файла message.txt
Создаем файл и пишем в него текст сообщения
echo «это наше сообщение из файла» > /home/NameUser/message.txt
Отправим текст из файла
ssmtp адрескудаотправляем@domain.com Отправим почтовое сообщение через PHP
Отправка писем для своего сайта, использующего php
Изменения файле php.ini, который может находится в разных каталогах в зависимости от способа подключения интерпретатора php:
# php подключен как модуль apache$ nano /etc/php/apache2-php5.2/php.ini# php в режиме php-fpm для nginx$ nano /etc/php/fpm-php5.3/php.ini
Найдите в php.ini строку sendmail_path и отредактируйте ее до следующего вида:
sendmail_path = /usr/sbin/ssmtp -t
Для проверки сделанных настроек создайте файл в корневой директории вашего сервера вида phpinfo.php и вставьте в него следующий код:
Откройте созданную страницу в браузере http://мойсайт/phpinfo.php и в секции Configuration PHP Core найдите значение параметра sendmail_path.
Создать файл для проверки работы функции PHP mail():
Соответственно, на указанный ящик вы должны получить письмо.
Отправка письма при отсутвии пинга
создаем файл скрипта
touch /home/NameUser/test_ping.sh
Содержимое файла test_ping.sh
#! /bin/bash
SENDTO=»адрескудаотправляем@domain.com» #куда отсылаем
ADDRESS=»192.168.XXX.YYY» # что пингуем
if ping -c 10 -s 10 -W 10 $ADDRESS
then
echo «Статус сервера $ADDRESS Online»
else
#отправим сообщение по почте
echo «Недоступен хост $ADDRESS» | mail -v -s «Не доступен $ADDRESS» $SENDTO
fi
# End Of File
или скачиваем его
wget -P /home/NameUser/ http://itautsors.ru/ping_test.sh
Делаем файл исполняемым
chmod +x /home/NameUser/ping_test.sh
Зайдем в крон
crontab -e
И пропишем запуск нашего скрипта
SHELL=/bin/bashMAILTO=user0-59 * * * * /home/UserName/ping_test.sh
Проблемы
В конфигурационном файле ssmtp.conf Добавляем в самое начало конфига строчку:
Далее в одной консоли запускаем
tail -f /var/log/maillog
из другой консоли шлем письмо