Якщо необхідно налаштувати відправку пошти з нашого сервера через пошту для доменів від Яндекса.
Type Machine handling outgoing mail for this host (smarthost): smtp.yandex.ru:587
прописуємо пароль для ящика в файлі /etc/exim4/passwd.client:
Якщо поштовий сервер яндекс лається, що потрібно заповнене поле FROM. Прописуємо його в файлі /etc/exim4/conf.d/rewrite/00_exim4-config_header:
Тепер ви можете відправляти листи за допомогою апача (трохи пізніше опишу як налаштувати) або командою виду echo «Testing Exim» | mail -s Test [email protected]
Ну і так - не варто спамити 😉
Так само не використовуйте цей метод для тих випадків, коли доступ до сервера по ssh (або навіть по ftp в каталоги, доступні за http) мають доступ люди, які можуть почати спамити.
Як обмежити список ящиків, яким можна відправляти листи з сервера
Тепер створюємо необхідні нам файли:
У файл /etc/exim4/conf.d/router/01_exim4-outgoing-filter пишемо правила, які будуть застосовуватися до вихідної пошти:
Якщо ви все ж вибрали «Split configuration into small files: no», то ці правила потрібно вписати відразу після рядка
Це правило дозволить відправляти тільки пошту з будь-яких ящиків доменів, які перераховані у файлі /etc/exim4/allowed.domains, або ящиків, перерахованих у файлі /etc/exim4/allowed.mails. Зверніть увагу на «або» - якщо домен написаний в першому файлі, то в другому сенсі перераховувати його ящики немає сенсу. А якщо вам потрібно увімкнути надсилання тільки з одного ящика домену - то не потрібно писати його в allowed.domains, потрібно написати конкретний ящик в allowed.mails
Ящики і домени потрібно писати повністю (без регулярок, зірочок та іншого) по одному на рядок:
Перевірити можна так:
В / var / log / exim4 / mainlog у відповідь на це ви побачите щось на кшталт:
Друге правило (check_outgoing) перевіряє, що значення поля sender (він же - smtp.sender, він же - smtp.name) підходить під одне з трьох правил. Перше - sender порожній (сюди входять листи, згенеровані самим поштовим сервером - наприклад, відлупину про недоставку листів). Друге - sender збігається з шаблоном *@любойдоменизспискаallowed.domains. Третє - поле sender цілком (користувач @ домен) зазначено в allowed.mails.
Так само враховуйте, що рядок в конфіги apache2 для вхоста виду:
виставляє значення поля sender в [email protected] (при тому обійти це з самих скриптів вже не вийде, тільки через htaccess). Тому, якщо ваша CMS шле листи від ящика, відмінного від зазначеного в цьому місці - листи слати вона перестане.
У файлі конфігурації php поправимо sendmail_path.
В Debian: /etc/php5/apache2/php.ini або /etc/php4/apache2/php.ini
<в других дистрибутивах>
Правильна настройка SPF
Якщо коротко, то SPF - це спосіб боротьби зі спамом.
Ми збираємося відправляти пошту з сервера, PTR IP якого не дорівнює одній з MX-записів сервера, а так само в більшості випадків PTR IP НЕ дорівнює самому нашому домену (не завжди хостери погоджуються міняти PTR). У цьому випадку ймовірність попадання листів в спам підвищується. Але є хороший спосіб її знизити: вказати правильно запис SPF нашого домену.
SPF-запис - це звичайна запис доменної зони, що має тип TXT. Дізнатися поточне її значення для домену можна за допомогою команди host в Linux:
Видно, що PTR IP, до якого прив'язаний мій домен (IP мого сервера) - server.adminunix.ru.
v = spf1 a mx ptr ptr: example.com include: _spf.google.com
Запис вказується для вашого домену відповідним чином, який визначає власник DNS-сервера. Зазвичай сервером завідує хостер і надає можливість вносити зміни в DNS-зони через панель хостингу. Або сам по запросу в саппорт змінює запис. У зональному файлі повинна з'явитися запис виду:
adminunix.ru. TXT v = spf1 a mx ptr include: _spf.google.com
Після поновлення зони host видасть наступне:
$ Host -t TXT adminunix.ru
adminunix.ru TXT »v = spf1 a mx ptr include: _spf.google.com
bool mail (string $ to. string $ subject. string $ message [, string $ additional_headers [, string $ additional_parameters]])
Саме $ additional_parameters нас і интерисует. У нього треба передавати реального відправника:
mail ($ to, $ subject, $ message, $ additional_headers, $ additional_parameters. »[email protected]»);
Вказується відправник разом з параметром -f.
Тепер відправлені через mail () листи будуть абсолютно адекватні (за умови, що ви вказуєте всі потрібні SMTP-заголовки, на зразок "FROM:", "TO:" і т.д.).
А якщо кілька сайтів з різними IP (настройка Exim для відправки листів з різних IP)?
Ми хочемо використовувати локальний SMTP-сервер для відправки пошти з усіх сайтів на сервері. Ніяких проблем немає, якщо налаштований Exim правильно (див. Вище). Але проблема з'являється, якщо різні сайти працюють на різних IP. Ми не хочемо в пошті «палити» те, що всі наші сайти живуть на одному сервері. Але Exim за замовчуванням шле всю пошту з основного (першого) IP мережного інтерфейсу, а цей IP всім одержувачам в SMTP-заголовках "Received:" листи. Крім того, там вказується і ім'я сервера, які ми у випадку з різними сайтами на сервері вибрали нейтральними.
Щоб не «палити» IP сервера, потрібно відсилати лист на віддалений сервер з IP, рівного A-записи домену сайту. Робиться це нескладно шляхом зміни конфіга Exim. Внесемо зміни в налаштування транспорту SMTP Exim. Якщо ви вибрали монолітний конфиг, то потрібно відредагувати файл:
local_interfaces = a.a.a.a. b.b.b.b. c.c.c.c. d.d.d.d
smtp_active_hostname = $ lsearch>
smtp_banner = «$ smtp_active_hostname ESMTP $ tod_full»
Знаходимо в файлі рядок "remote_smtp:" (пошук в nano - F6). Додаємо в кінець цього блоку:
Це означає, що при відправці листа потрібно визначити домен відправника пошти (для [email protected] це adminunix.ru) і відправити пошту з IP, до якого цей домен прив'язаний. Само собою зрозуміло, що домен повинен бути прив'язаний до сервера, де встановлений Exim.
Так само потрібно створити файл в будь-якому місці файл прив'язки доменів до IP (у домену може бути кілька IP, так що просто lookup-ить його не пройде). Я вибрав для файлу місце: / etc / exim4 / domain2ip
Туди вводимо наші домени за шаблоном:
adminunix.ru: 123.123.123.123
vasya.ws: 123.123.123.124
Не забудьте дописати домен в файл в разі появи нового сайту.
До речі, рядок helo_data = «$ sender_address_domain» можна додати в файл навіть якщо у вас один IP на всі сайти. Тоді в команді HELLO SMTP-протоколу (а, отже, і в заголовках листів) буде фігурувати ваш домен.
Залишається перевірити, щоб всі ваші налаштування працювали правильно. Для цього просто відправимо лист з локального сервера через консоль.
$ Mail -a «From: [email protected]» -s Test [email protected] - [email protected]
Test
Cc:
Перевіряємо надісланий лист в ящику одержувача:
А ось текст SMTP-протоколу:
Щоб при відправці листів root'у, як це люблять робити багато утиліти (наприклад smartd), лист витрачалося не на [email protected], а на [email protected]. Я змінив / etc / aliases:
У файл /etc/exim4/conf.d/rewrite/00_exim4-config_header пишемо правила,
А для затирання Received з заголовків листів з ip серверів які Коннект до нашого почтовик треба додати ось цей рядок: