В данной статье я рассмотрю один из самых быстрых способов настройки smtp-демона для нашего вебсервера.
Если вам нужен сервер, который ещё и должен принимать почту — проходите мимо. Эта статья подойдёт для тех, кто
принимает почту гуглом или яндексом (на своём домене, само собой), но не хочет дергать их SMTP серверы, чтобы слать письма.
Внимание! Этот мануал описывает то, как настроить SMTP сервер (сервер отправки писем), отправить письмо через который можно только с того же сервера (то есть с localhost). При этом не будет требоваться никакой авторизации для «доверенных» доменов! Будьте внимательны.
lamp-server:~# aptitude install exim4
lamp-server:~# dpkg-reconfigure exim4-config
Отвечаем на вопросы:
General type of mail configuration: internet site; mail is sent and received directly using SMTP
System mail name: желательно вписываем сюда обратную зону для вашего IP интерфейса eth0. Либо просто full hostname сервера (mail.debian.pro, например)
IP-addresses to listen on for incoming SMTP connections: 127.0.0.1 (нам же не нужен open relay?)
Other destinations for which mail is accepted: вписываем через пробел домены, от имени которых нам нужно отправлять письма с этого сервера.
Domains to relay mail for: если не знаете зачем оно, то оставляйте пустое поле
Machines to relay mail for: аналогично, если не знаем — оставляем пустым
Keep number of DNS-queries minimal (Dial-on-Demand)? No
Delivery method for local mail: Maildir
Split configuration into small files? По желанию. Я ставлю No.
Ещё могут спросить, кому перенаправлять почту локального админа. Я пишу root и не парюсь.
Теперь вы можете отправлять письма при помощи апача (чуть позже опишу как настроить) или командой вида echo «Testing Exim» | mail -s Test vlad@debian.pro
Ну и да — не стоит спамить ;)
Так же не используйте этот метод для тех случаев, когда доступ к серверу по ssh (или даже по ftp в каталоги, доступные по http) имеют доступ люди, которые могут начать спамить.
(c)h ttps://debian.pro/276
Всё бы хорошо, почта шлётся, доставляется и так далее.
Огорчает, правда, то, что с нашего сервера при такой конфигурации можно отправить письмо от имени ящика.
Устраним сиё недоразумение.
Ставим exim, как описано в прошлой статье.
В конце выбираем «Split configuration into small files: yes» — так удобнее будет.
Теперь создаём необходимые нам файлы:
В файл /etc/exim4/conf.d/router/01_exim4-outgoing-filter пишем правила, которые будут применяться к исходящей почте:
driver = redirect
domains = ! +local_domains
condition = ${if !match {$header_from:}{$sender_address}}
allow_fail
data = :fail: You can not send mail from here with From: $header_from as sender: $sender_address
check_outgoing:
driver = redirect
domains = ! +local_domains
senders = ! : ! *@lsearch;/etc/exim4/allowed.domains : ! lsearch;/etc/exim4/allowed.mails
allow_fail
data = :fail: You can not send mail from this mailbox from this server.
Если вы всё же выбрали «Split configuration into small files: no», то эти правила нужно вписать сразу после строчки
в конфиге exim.
Это правило позволит отправлять только почту с любых ящиков доменов, которые перечислены в файле /etc/exim4/allowed.domains, или ящиков, перечисленных в файле /etc/exim4/allowed.mails. Обратите внимание на «или» — если домен написан в первом файле, то во втором смысле перечислять его ящики нет смысла. А если вам нужно разрешить отправку только с одного ящика домена — то не нужно писать его в allowed.domains, нужно написать конкретный ящик в allowed.mails
Ящики и домены нужно писать целиком (без регулярок, звездочек и прочего) по одному на строчку:
domain1.tld
domain2.tld
noreply@domain3.tld
robot@domain3.tld
webmaster@domain3.tld
Проверить можно так:
где noreply@somepieceofshit.com — адрес отправителя, а youremail@domain.tld — адрес получателя.
В /var/log/exim4/mainlog в ответ на это вы увидите что-то в духе:
Как работают эти правила. Для начала стоит упомянуть, что у писем есть 2 важных заголовка — smtp.sender и header From:. smtp.sender, по сути, smtp-аккаунт, с которого происходит отправка письма. Поле From может содержать произвольную чушь, в том числе и совершенно левый ящик. Например, можно отправить письмо с smtp-аккаунта blah@someshit.com, но в поле From поставить admin@gmail.com. Чтобы посмотреть, кто реально отправил письмо — нужно будет лезть в его исходники. Большинство почтовых провайдеров при несовпадении этих полей кладёт такое письмо в спам. А спамеры, в свою очередь, шлют тонны писем с несовпадающими заголовками. Кхе.
Собственно, правило check_outgoing_from_header проверяет, чтобы в заголовке From содержалось имя smtp-аккаунта. Тут стоит упомянуть, что заголовок From: в нормальном письме выглядит примерно так — «inkvizitor68sl <root@vlad.pro>» (то есть помимо ящика содержит и имя/фамилию отправителя/ник или какую-нибудь другую чушь, которую он соизволит вписать туда). Именно поэтому, полагаться здесь на точное совпадение полей нельзя.
Второе правило (check_outgoing) проверяет, что значение поля sender (он же — smtp.sender, он же — smtp.name) подходит под одно из трех правил. Первое — sender пустой (сюда входят письма, сгенерированные самим почтовым сервером — например, отлупы о недоставке писем). Второе — sender совпадает с шаблоном *@любойдоменизспискаallowed.domains. Третье — поле sender целиком (пользователь@домен) указано в allowed.mails.
Так же учитывайте, что строчка в конфиге apache2 для вхоста вида:
выставляет значения поля sender в noreply@domain.tld (при том обойти это из самих скриптов уже не получится, только через htaccess). Поэтому, если ваша CMS шлет письма от ящика, отличного от указанного в этом месте — письма слать она перестанет.
Само собой, такая защита обходится (достаточно начать рассылать спам от «доверенных» ящиков) — авторизации всё ещё не требуется. Но мы можем в любой момент выключить ящик до того момента, пока не разберемся, что послужило источником спама на сервере.
(c)h ttp://mozgovoy.in.ua/poleznoe/44-debian-exim4-nastraivaem-smtp-server-dlya-nashego-veb-servera
Коментувати