2015-02-05 13 views
-3

this 문서를 사용하여 Exim 메일 서버를 구성하려고합니다. 내 로컬 네트워크에서이 서버를 사용할 수는 있지만 인터넷에서 사용하려고하면 오류가 발생합니다. 포트 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 

수출입 로그 :

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

표준 smtp 포트 (예 : 25)에 매핑 된 도커 내부 포트 (예 : 10025)가 있지만 매핑 된 내부 포트 대신 표준 포트에서 수신 대기 중입니다. exim이 10025, 10465, 10587에서 수신 대기하도록 구성하고 동작이 변경되는지 확인합니다.

+0

실제로 반대로, OP에는 컨테이너의 25에 매핑 된 호스트의 포트 10025가 있습니다. –

+0

그럴 경우 작동하지 않을 수 있습니다. 외부의 아무도 기본 SMTP 포트 인 포트 25 대신 포트 10025로 전달하려고 시도하지 않습니다. 가장 먼저 수행해야 할 작업은 컨테이너 포트 매핑을 수정하여 내부의 청취중인 exim에 외부의 25가 매핑되도록하는 것입니다. –

0

이 고대 post에 따르면 DNS 역방향 조회에 문제가있는 것 같습니다. host_lookup을 해제 시도하고 그것이 작동하는지 확인 :

host_lookup = 0.0.0.0/0 

를 당신이 호스트에 대한 권리 도메인을 매핑하는 DNS 설정을 수정해야합니다 않으면.