We are happy to announce that Vesta is back under active development as of 25 February 2024. We are working on v1 candidate and expect to engage more with the community over the coming months. We are committed to open source, and we encourage contributors to help us build the future of Vesta.
Почта и смартхост на скорую руку
Почта и смартхост на скорую руку
Бывают времена, когда отправка почты с вашего сервера затруднена разными странными причинами - сложно настроить (хостнейм выбран неудачно, обратную зону не прописать) или же проблема в вашем хостинг-провайдере, который блокирует порты. Вариантов масса. Но можно попробовать использовать внешнюю почту для отправки писем с сервера. Сделать это не так уж сложно, для этого нужно лишь сделать небольшие копипасты и перезапуск службы, которая отправляет почту. Основная идея в том, что мы направляем всю нашу почту через внешний почтовый сервер.
ДИСКЛЕЙМЕР: as is, ну вы понимаете
В зависимости от операционной системы
CentOS - /etc/exim/exim.conf
или
Debian - /etc/exim4/exim4.conf.template
Ищем секцию - AUTHENTICATION CONFIGURATION - добавляем в зависимости от используемой внешней почты:
Yandex
или
Gmail
Ищем секцию - ROUTERS CONFIGURATION - добавляем в зависимости от используемой внешней почты:
Yandex
или
Gmail
Ищем секцию - TRANSPORTS CONFIGURATION - добавляем в зависимости от используемой внешней почты:
Yandex
или
Gmail
Ищем секцию - REWRITE CONFIGURATION - добавляем в зависимости от используемой внешней почты:
Yandex
или
Gmail
И перезапускаем почтовый сервер:
CentOS
Debian
ДИСКЛЕЙМЕР: as is, ну вы понимаете
В зависимости от операционной системы
CentOS - /etc/exim/exim.conf
или
Debian - /etc/exim4/exim4.conf.template
Ищем секцию - AUTHENTICATION CONFIGURATION - добавляем в зависимости от используемой внешней почты:
Yandex
Code: Select all
yandex_login:
driver = plaintext
public_name = LOGIN
hide client_send = : [email protected] : password
Gmail
Code: Select all
gmail_login:
driver = plaintext
public_name = LOGIN
hide client_send = : [email protected] : password
Yandex
Code: Select all
yandex_route:
driver = manualroute
transport = yandex_relay
route_list = * smtp.yandex.ru
Gmail
Code: Select all
gmail_route:
driver = manualroute
transport = yandex_relay
route_list = * smtp.gmail.com
Yandex
Code: Select all
yandex_relay:
driver = smtp
port = 587
hosts_require_auth = $host_address
hosts_require_tls = $host_address
Gmail
Code: Select all
gmail_relay:
driver = smtp
port = 587
hosts_require_auth = $host_address
hosts_require_tls = $host_address
Yandex
Code: Select all
*@* [email protected] Ffr
Gmail
Code: Select all
*@* [email protected] Ffr
CentOS
Code: Select all
service exim restart
Code: Select all
service exim restart
Re: Почта и смартхост на скорую руку
skurudo, спасибо Вам большое, я впервые получил письмо об удачном бекапе запущеном вручную (банально хотелось увидеть это письмо от панели).
Думаю данное решение многим поможет.
Думаю данное решение многим поможет.
Re: Почта и смартхост на скорую руку
Будем надеяться :)Mihanja80 wrote:Думаю данное решение многим поможет.
Спасибо, что предоставили площадку для этого эксперимента и написания гайда соответственно.
Re: Почта и смартхост на скорую руку
Здравствуйте, настроил, проверил, все работает, но как сделать так чтобы в письмах в поле от отображался ящик не внешней почты через, который все настроено а тот с которого отправляют с сервера? Получается все письма с сервера приходят с одного ящика, независимо с какого аккаунта и почтового домена отправляются письма. Так-же обратил внимание, что перестали приходить письма на ящики, которые на сервере, а приходят письма Mail Delivery System <ящик@gmail.com> о невозможности доставить, до этого все входящие письма на сервер приходили, не работали только исходящие, т.к. заблокирован 25 порт. Спасибо.
Re: Почта и смартхост на скорую руку
Скажу сразу, смартхост - это не очень хорошее решение. Используется оно исключительно от отчаяния, т.к. бывает перекрывают 25 порт и ничего с этим не сделать. Перейти к другому хостеру - не всегда вариант. Но это _не_ хорошее решение. Хорошее решение - это штатная отправка почты exim + DKIM + PRT/SPF/DMARC.webvp wrote:Здравствуйте, настроил, проверил, все работает, но как сделать так чтобы в письмах в поле от отображался ящик не внешней почты через, который все настроено а тот с которого отправляют с сервера? Получается все письма с сервера приходят с одного ящика, независимо с какого аккаунта и почтового домена отправляются письма. Так-же обратил внимание, что перестали приходить письма на ящики, которые на сервере, а приходят письма Mail Delivery System <ящик@gmail.com> о невозможности доставить, до этого все входящие письма на сервер приходили, не работали только исходящие, т.к. заблокирован 25 порт. Спасибо.
Так и есть, письма отправляются с одного ящика. Вы, конечно можете попробовать обмануть и добавить в поле FROM что-нибудь от себя:
Code: Select all
mail('[email protected]', 'Тема письма', 'Тело письма', 'From: [email protected]');
Code: Select all
php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f [email protected]"
Re: Почта и смартхост на скорую руку
Я так понимаю, что такое решение с закрытым 25 портом не получится реализовать или я ошибаюсь?Хорошее решение - это штатная отправка почты exim + DKIM + PRT/SPF/DMARC
Уже несколько дней мучаюсь почтой, так пока и не получилось заставить нормально работать отправку писем с сервера. Может есть еще варианта настройки? Открыт порт 2525.
Лог exim:
2015-04-19 13:03:51 1Yjm4t-0002UL-Lg <= [email protected] U=admin P=local S=615 id=[email protected]
2015-04-19 13:03:51 1Yjm4t-0002UL-Lg == [email protected] R=dnslookup T=remote_smtp defer (-53): retry time not reached for any host
Re: Почта и смартхост на скорую руку
webvp wrote:Я так понимаю, что такое решение с закрытым 25 портом не получится реализовать или я ошибаюсь?Хорошее решение - это штатная отправка почты exim + DKIM + PRT/SPF/DMARC
Уже несколько дней мучаюсь почтой, так пока и не получилось заставить нормально работать отправку писем с сервера. Может есть еще варианта настройки? Открыт порт 2525.
Лог exim:
2015-04-19 13:03:51 1Yjm4t-0002UL-Lg <= [email protected] U=admin P=local S=615 id=[email protected]
2015-04-19 13:03:51 1Yjm4t-0002UL-Lg == [email protected] R=dnslookup T=remote_smtp defer (-53): retry time not reached for any host
Получилось настроить через relay провайдера без авторизации на 25 порт, 25 порт открыт только на его релей, письма приходят от ящиков доменов сервера, внутри письма ходят, во внешний инет ходит, но появилась проблема, если в свойсвах ящика ставишь перенаправление например на другой любой ящик с сохранением или без сохранения (без разницы), то письма не доходят на перенаправляемый ящик, и сразу приходит письмо о невозможной доставке и помечаются сразу как frozen, где что подправить не могу понять вот конфиг exim:
Code: Select all
######################################################################
# #
# Exim configuration file for Vesta Control Panel #
# #
######################################################################
#SPAMASSASSIN = yes
#SPAM_SCORE = 50
#CLAMD = yes
domainlist local_domains = dsearch;/etc/exim/domains/
domainlist relay_to_domains = dsearch;/etc/exim/domains/
hostlist relay_from_hosts = 127.0.0.1 : 134.249.136.91
hostlist whitelist = net-iplsearch;/etc/exim/white-blocks.conf
hostlist spammers = net-iplsearch;/etc/exim/spam-blocks.conf
no_local_from_check
untrusted_set_sender = *
acl_smtp_connect = acl_check_spammers
acl_smtp_mail = acl_check_mail
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
acl_smtp_mime = acl_check_mime
.ifdef SPAMASSASSIN
spamd_address = 127.0.0.1 783
.endif
.ifdef CLAMD
av_scanner = clamd: /var/run/clamav/clamd.sock
.endif
tls_advertise_hosts = *
tls_certificate = /usr/local/vesta/ssl/certificate.crt
tls_privatekey = /usr/local/vesta/ssl/certificate.key
daemon_smtp_ports = 25 : 465 : 587 : 2525
tls_on_connect_ports = 465
never_users = root
host_lookup = *
rfc1413_hosts = *
rfc1413_query_timeout = 5s
ignore_bounce_errors_after = 2d
timeout_frozen_after = 7d
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_FILE = /etc/exim/domains/${lc:${domain:$h_from:}}/dkim.pem
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
######################################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
######################################################################
begin acl
acl_check_spammers:
accept hosts = +whitelist
drop message = Your host in blacklist on this server.
log_message = Host in blacklist
hosts = +spammers
accept
acl_check_mail:
deny condition = ${if eq{$sender_helo_name}{}}
message = HELO required before MAIL
drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid
condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}}
condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}}
delay = 45s
drop condition = ${if isip{$sender_helo_name}}
message = Access denied - Invalid HELO name (See RFC2821 4.1.3)
drop condition = ${if eq{[$interface_address]}{$sender_helo_name}}
message = $interface_address is _my_ address
accept
acl_check_rcpt:
accept hosts = :
deny message = Restricted characters in address
domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]
deny message = Restricted characters in address
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
require verify = sender
accept hosts = +relay_from_hosts
control = submission
accept authenticated = *
control = submission/domain=
deny message = Rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text
hosts = !+whitelist
dnslists = ${readfile {/etc/exim/dnsbl.conf}{:}}
require message = relay not permitted
domains = +local_domains : +relay_to_domains
deny message = smtp auth requried
sender_domains = +local_domains
!authenticated = *
require verify = recipient
.ifdef CLAMD
warn set acl_m0 = no
warn condition = ${if exists {/etc/exim/domains/$domain/antivirus}{yes}{no}}
set acl_m0 = yes
.endif
.ifdef SPAMASSASSIN
warn set acl_m1 = no
warn condition = ${if exists {/etc/exim/domains/$domain/antispam}{yes}{no}}
set acl_m1 = yes
.endif
accept
acl_check_data:
.ifdef CLAMD
deny message = Message contains a virus ($malware_name) and has been rejected
malware = *
condition = ${if eq{$acl_m0}{yes}{yes}{no}}
.endif
.ifdef SPAMASSASSIN
warn !authenticated = *
hosts = !+relay_from_hosts
condition = ${if < {$message_size}{100K}}
condition = ${if eq{$acl_m1}{yes}{yes}{no}}
spam = nobody:true/defer_ok
add_header = X-Spam-Score: $spam_score_int
add_header = X-Spam-Bar: $spam_bar
add_header = X-Spam-Report: $spam_report
set acl_m2 = $spam_score_int
warn condition = ${if !eq{$acl_m2}{} {yes}{no}}
condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}}
add_header = X-Spam-Status: Yes
message = SpamAssassin detected spam (from $sender_address to $recipients).
.endif
accept
acl_check_mime:
deny message = Blacklisted file extension detected
condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}}
accept
######################################################################
# AUTHENTICATION CONFIGURATION #
######################################################################
begin authenticators
dovecot_plain:
driver = dovecot
public_name = PLAIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
dovecot_login:
driver = dovecot
public_name = LOGIN
server_socket = /var/run/dovecot/auth-client
server_set_id = $auth1
######################################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
######################################################################
begin routers
smarthost:
driver = manualroute
domains = ! +local_domains
transport = remote_smtp
route_list = * smtprelay.kyivstar.ua
no_verify
no_more
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
no_more
userforward:
driver = redirect
check_local_user
file = $home/.forward
allow_filter
no_verify
no_expn
check_ancestor
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
procmail:
driver = accept
check_local_user
require_files = ${local_part}:+${home}/.procmailrc:/usr/bin/procmail
transport = procmail
no_verify
autoreplay:
driver = accept
require_files = /etc/exim/domains/$domain/autoreply.${local_part}.msg
condition = ${if exists{/etc/exim/domains/$domain/autoreply.${local_part}.msg}}{yes}{no}}
retry_use_local_part
transport = userautoreply
unseen
aliases:
driver = redirect
headers_add = X-redirected: yes
data = ${extract{1}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim/domains/$domain/aliases}}}}
require_files = /etc/exim/domains/$domain/aliases
redirect_router = dnslookup
pipe_transport = address_pipe
unseen
localuser_fwd_only:
driver = accept
transport = devnull
condition = ${if exists{/etc/exim/domains/$domain/fwd_only}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/fwd_only}{true}{false}}}}
localuser_spam:
driver = accept
transport = local_spam_delivery
condition = ${if eq {${if match{$h_X-Spam-Status:}{\N^Yes\N}{yes}{no}}} {${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}{yes}{no_such_user}}}}
localuser:
driver = accept
transport = local_delivery
condition = ${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}{true}{false}}
catchall:
driver = redirect
headers_add = X-redirected: yes
require_files = /etc/exim/domains/$domain/aliases
data = ${extract{1}{:}{${lookup{*@$domain}lsearch{/etc/exim/domains/$domain/aliases}}}}
file_transport = local_delivery
redirect_router = dnslookup
terminate_alias:
driver = accept
transport = devnull
condition = ${lookup{$local_part@$domain}lsearch{/etc/exim/domains/$domain/aliases}{true}{false}}
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
begin transports
remote_smtp:
driver = smtp
#helo_data = $sender_address_domain
dkim_domain = DKIM_DOMAIN
dkim_selector = mail
dkim_private_key = DKIM_PRIVATE_KEY
dkim_canon = relaxed
dkim_strict = 0
procmail:
driver = pipe
command = "/usr/bin/procmail -d $local_part"
return_path_add
delivery_date_add
envelope_to_add
user = $local_part
initgroups
return_output
local_delivery:
driver = appendfile
maildir_format
maildir_use_size_file
user = ${extract{2}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}
group = mail
create_directory
directory_mode = 770
mode = 660
use_lockfile = no
delivery_date_add
envelope_to_add
return_path_add
directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}/mail/$domain/$local_part"
quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}M
quota_warn_threshold = 75%
local_spam_delivery:
driver = appendfile
maildir_format
maildir_use_size_file
user = ${extract{2}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}
group = mail
create_directory
directory_mode = 770
mode = 660
use_lockfile = no
delivery_date_add
envelope_to_add
return_path_add
directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}/mail/$domain/$local_part/.Spam"
quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}M
quota_directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim/domains/$domain/passwd}}}}/mail/$domain/$local_part"
quota_warn_threshold = 75%
address_pipe:
driver = pipe
return_output
address_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
address_reply:
driver = autoreply
userautoreply:
driver = autoreply
file = /etc/exim/domains/$domain/autoreply.${local_part}.msg
from = "${local_part}@${domain}"
subject = "${if def:h_Subject: {Autoreply: ${quote:${escape:$h_Subject:}}} {Autoreply Message}}"
to = "${sender_address}"
devnull:
driver = appendfile
file = /dev/null
######################################################################
# RETRY CONFIGURATION #
######################################################################
begin retry
# Address or Domain Error Retries
# ----------------- ----- -------
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
######################################################################
# REWRITE CONFIGURATION #
######################################################################
begin rewrite
######################################################################
Re: Почта и смартхост на скорую руку
В этот момент стоит заглянуть в /var/log/exim/mainlog и поглядеть, что на самом деле происходит и почему письмо фрозится.webvp wrote:если в свойсвах ящика ставишь перенаправление например на другой любой ящик с сохранением или без сохранения (без разницы), то письма не доходят на перенаправляемый ящик
Re: Почта и смартхост на скорую руку
Лучший вариант - открытые порты.webvp wrote:Я так понимаю, что такое решение с закрытым 25 портом не получится реализовать или я ошибаюсь?
Уже несколько дней мучаюсь почтой, так пока и не получилось заставить нормально работать отправку писем с сервера.
Традиционно можно оставить только рабочие порты:
Code: Select all
daemon_smtp_ports = 25 : 465 : 587 : 2525
tls_on_connect_ports = 465
-
- Posts: 7
- Joined: Wed Jan 21, 2015 11:43 am
Re: Почта и смартхост на скорую руку
Попробовал - не взлетело:
SpoilerShow
exim -bt [email protected]
LOG: MAIN
remote host address is the local host: selfer.org (while routing <[email protected]>)
[email protected] cannot be resolved at this time: remote host address is the local host
LOG: MAIN
remote host address is the local host: selfer.org (while routing <[email protected]>)
[email protected] cannot be resolved at this time: remote host address is the local host