Debian, exim4

Якщо необхідно налаштувати відправку пошти з нашого сервера через пошту для доменів від Яндекса.

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 серверів які Коннект до нашого почтовик треба додати ось цей рядок:

Читайте інші цікаві статті

Схожі статті

Copyright © 2024