2015-02-05 1 views
-3

Попытка настроить почтовый сервер exim с использованием this статьи. Я могу использовать этот сервер внутри своей локальной сети, но когда я пытаюсь использовать его из Интернета, я принимаю некоторые ошибки. Порты 10000-20000 перевести на серверную машину. Все, что я делаю внутри изображения докеры CentOS 7. Хост-машина с CentOS 7 тоже.Docker + Exim + Dovecot. Реле не разрешено

Сокращения:

  • test_domain.tk - мой тестовый домен
  • test1, test2 - пользователи тестов
  • [email protected] - тест внешней электронной почты
  • 123.456.789.876 - мой внешний ip (у меня есть маршрутизатор с NAT)
  • 10.0.7.30 - туннель докеры

Начиная докер с командой:docker run -d --name mail -h test_domain.tk -p 10025:25 -p 10587:587 -p 10465:465 -p 10143:143 -p 10993:993 mail/server:localwork start_server

start_server:

#!/bin/bash -e 
/usr/sbin/dovecot && /usr/sbin/exim -v -bdf -q30m 

/etc/exim/exim.conf: журнал

primary_hostname = test_domain.tk 

domainlist local_domains = @ : localhost : test_domain.tk 
domainlist relay_to_domains = 
hostlist relay_from_hosts = 


acl_smtp_mail = acl_check_mail 
acl_smtp_rcpt = acl_check_rcpt 
acl_smtp_data = acl_check_data 
acl_smtp_mime = acl_check_mime 


av_scanner = clamd:/var/run/clamd.exim/clamd.sock 


tls_advertise_hosts = * 

tls_certificate = /etc/ssl/default.crt 
tls_privatekey = /etc/ssl/default.key 

daemon_smtp_ports = 25 : 465 : 587 
tls_on_connect_ports = 465 

allow_domain_literals 

never_users = root 

auth_advertise_hosts = * 

rfc1413_hosts = * 
rfc1413_query_timeout = 5s 

ignore_bounce_errors_after = 2d 

timeout_frozen_after = 7d 

begin acl 

acl_check_mail: 

    deny condition = ${if eq{$sender_helo_name}{} {1}} 
     message = Nice boys say HELO first 

    warn condition = ${if eq{$sender_host_name}{} {1}} 
     set acl_m_greylistreasons = Host $sender_host_address lacks reverse DNS\n$acl_m_greylistreasons 

    accept 

acl_check_rcpt: 

    accept hosts = : 
      control = dkim_disable_verify 

    deny message  = Restricted characters in address 
      domains  = +local_domains 
      local_parts = ^[.] : ^.*[@%!/|] 

    deny message  = Restricted characters in address 
      domains  = !+local_domains 
      local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./ 

    accept local_parts = postmaster 
      domains  = +local_domains 

    require verify  = sender 

    accept hosts   = +relay_from_hosts 
      control  = submission 
      control  = dkim_disable_verify 

    accept authenticated = * 
      control  = submission 
      control  = dkim_disable_verify 

    require message = relay not permitted 
      domains = +local_domains : +relay_to_domains 

    require verify = recipient 

    accept 

acl_check_data: 

    warn condition = ${if !def:h_Message-ID: {1}} 
      set acl_m_greylistreasons = Message lacks Message-Id: header. Consult RFC2822.\n$acl_m_greylistreasons 

    accept 

acl_check_mime: 

    deny message = Blacklisted file extension detected 
     condition = ${if match \ 
         {${lc:$mime_filename}} \ 
         {\N(\.exe|\.pif|\.bat|\.scr|\.lnk|\.com)$\N} \ 
        {1}{0}} 

    accept 

begin routers 

dnslookup: 
    driver = dnslookup 
    domains = ! +local_domains 
    transport = remote_smtp 
    ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 
# if ipv6-enabled then instead use: 
# ignore_target_hosts = <; 0.0.0.0 ; 127.0.0.0/8 ; ::1 
    no_more 

system_aliases: 
    driver = redirect 
    allow_fail 
    allow_defer 
    data = ${lookup{$local_part}lsearch{/etc/aliases}} 
# user = exim 
    file_transport = address_file 
    pipe_transport = address_pipe 

userforward: 
    driver = redirect 
    check_local_user 
# local_part_suffix = +* : -* 
# local_part_suffix_optional 
    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 

localuser: 
    driver = accept 
    check_local_user 
# local_part_suffix = +* : -* 
# local_part_suffix_optional 
    transport = local_delivery 
    cannot_route_message = Unknown user 

begin transports 

remote_smtp: 
    driver = smtp 

remote_msa: 
    driver = smtp 
    port = 587 
    hosts_require_auth = * 

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 
    directory = $home/Maildir 
    maildir_format 
    maildir_use_size_file 
    delivery_date_add 
    envelope_to_add 
    return_path_add 

address_pipe: 
    driver = pipe 
    return_output 

address_file: 
    driver = appendfile 
    delivery_date_add 
    envelope_to_add 
    return_path_add 

address_reply: 
    driver = autoreply 

begin retry 

*      *   F,2h,15m; G,16h,1h,1.5; F,4d,6h 

begin rewrite 

begin authenticators 

dovecot_login: 
    driver = dovecot 
    public_name = LOGIN 
    server_socket = /var/run/dovecot/auth-client 
    server_set_id = $auth1 

dovecot_plain: 
    driver = dovecot 
    public_name = PLAIN 
    server_socket = /var/run/dovecot/auth-client 
    server_set_id = $auth1 

Exim:

8 LOG: MAIN 
    8 exim 4.84 daemon started: pid=8, -q30m, listening for SMTP on port 25 (IPv6 and IPv4) port 587 (IPv6 and IPv4) and for SMTPS on port 465 (IPv6 and IPv4) 
    16 LOG: host_lookup_failed MAIN 
    16 no host name found for IP address 123.456.789.876 
    16 LOG: MAIN REJECT 
    16 H=([10.0.7.30]) [123.456.789.876] X=SSLv3:DHE-RSA-AES128-SHA:128 F=<[email protected]_domain.tk> rejected RCPT <[email protected]>: relay not permitted 
    16 LOG: lost_incoming_connection MAIN 
    16 unexpected disconnection while reading SMTP command from ([10.0.7.30]) [123.456.789.876] 

Когда я пытаюсь подключиться из Интернета, я получил ошибку таймаута в почтовом клиенте и пустые журналы в Exim. Вероятно, это проблема работы с маршрутизатором. Как это сделать?

Задать вопрос, если вам нужно больше данных. Заранее спасибо.

ответ

0

У вас есть внутренние порты вашего докера (например, 10025), сопоставленные со стандартными портами smtp (например, 25), но у вас есть exim-прослушивание стандартных портов вместо отображаемых внутренних портов. Настройте exim для прослушивания на 10025, 10465, 10587 и посмотрите, изменилось ли поведение.

+0

Напротив, OP имеет порт 10025 на хосте, сопоставленный с 25 в контейнере. –

+0

Если это так, он никогда не сможет работать. Ничто извне не будет знать, чтобы попытаться доставить порт 10025 вместо порта 25, порт SMTP по умолчанию. Первое, что нужно сделать, - это зафиксировать его сопоставления портов контейнера, чтобы 25 на внешней стороне отображались на все, что exim слушает внутри. –

0

Кажется, что существует проблема с обратным DNS-поиском в соответствии с этим древним post. Попробуйте отключить host_lookup и посмотреть, если это работает:

host_lookup = 0.0.0.0/0 

Если это произойдет, вам придется исправить настройки DNS, чтобы отобразить правильный домен хоста.