ВсёПросто

Установка и настройка Sendmail в среде Ubuntu

Содержание

Настройка 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 поддержкой виртуального постового хостинга нам потребуется создать (или изменить) следующие файлы:

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.

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

из другой консоли шлем письмо