exim4 (настройка нескольких интерфейсов)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

tema323
Сообщения: 7
ОС: debian5

exim4

Сообщение tema323 »

Доброго времени суток! Столкнулся с такой проблемой что после установки на виртуальный сервер exim4 на ось дебиан 5.0 он слушает только один IP, у меня на сервере еще прописаны несколько IP и он их не хочет слушать, почта отправляется и принимается только на одном IP. Где то прочитал, что надо конфиг exim пересобирать по кускам, но не знаю как сделать, посоветуйте как правильно, плизз! Хотя вроде по умолчанию он должен все интерфейсы слушать, однако на деле нехочет.
Спасибо сказали:
sim1
Сообщения: 155
ОС: GNU,BSD

Re: exim4

Сообщение sim1 »

tema323 писал(а):
06.06.2009 12:01
Доброго времени суток! Столкнулся с такой проблемой что после установки на виртуальный сервер exim4 на ось дебиан 5.0 он слушает только один IP, у меня на сервере еще прописаны несколько IP и он их не хочет слушать, почта отправляется и принимается только на одном IP. Где то прочитал, что надо конфиг exim пересобирать по кускам, но не знаю как сделать, посоветуйте как правильно, плизз! Хотя вроде по умолчанию он должен все интерфейсы слушать, однако на деле нехочет.

для этого в конфиге нужно указать

Код: Выделить всё

local_interfaces = 127.0.0.1 : IP1 : IP2 : IP3

ссылка по теме http://www.exim.org/exim-html-4.40/doc/html/spec_13.html
Спасибо сказали:
tema323
Сообщения: 7
ОС: debian5

Re: exim4

Сообщение tema323 »

Спасибо конечно за ответ! Ну этот способ я уже испытывал, ни чего мне не помогло. как прослушивался один интерфейс так и прослушивается.
я делал так: прописал
local_interfaces = 127.0.0.1 : IP1 : IP2 : IP3
добавил
# listen on all all interfaces?
.ifdef MAIN_LOCAL_INTERFACES
local_interfaces = MAIN_LOCAL_INTERFACES
.endif

и все равно не помогло. Один гуру мне подсказал, что конфиг надо пересобирать полностью и при чем собирать его по кускам, как объяснил, что это особенность именно debian, но как пересобрать он не стал говорить, бизнес у него такой :-) а мне денег было жалко платить, хочу сам научиться, в гугле ни где ни чего не нашел на эту тему, может плохо искал, не знаю, но вроде много где смотрел, но ни чего не нашел. Может кто-нибудь покажет свой конфиг, у кого подобное решение работает?
Спасибо сказали:
Аватара пользователя
vlakas
Сообщения: 109
ОС: Linux Debian

Re: exim4

Сообщение vlakas »

tema323 писал(а):
06.06.2009 14:36
Спасибо конечно за ответ! Ну этот способ я уже испытывал, ни чего мне не помогло. как прослушивался один интерфейс так и прослушивается.
я делал так: прописал
local_interfaces = 127.0.0.1 : IP1 : IP2 : IP3
добавил
# listen on all all interfaces?
.ifdef MAIN_LOCAL_INTERFACES
local_interfaces = MAIN_LOCAL_INTERFACES
.endif

и все равно не помогло. Один гуру мне подсказал, что конфиг надо пересобирать полностью и при чем собирать его по кускам, как объяснил, что это особенность именно debian, но как пересобрать он не стал говорить, бизнес у него такой :-) а мне денег было жалко платить, хочу сам научиться, в гугле ни где ни чего не нашел на эту тему, может плохо искал, не знаю, но вроде много где смотрел, но ни чего не нашел. Может кто-нибудь покажет свой конфиг, у кого подобное решение работает?


Единствення особенность exim4 в Debian состоит в том, что конфиг, действительно можно расбросать по более мелким файлам, но, по-моему, не рекомендуеться так делать. Но все равно на с вашей проблемой это никак не связано, уверяю. Вышеуказанный способ должен работать (сам недавно поднимал на Debian 5). Глупое замечание, конечно, но может быть вы не перезапустили службу exim4 или не перезапустили всю ОС?

Если проблемы не в моготу:

# dpkg-reconfigure exim4-config

Желательно старые конфиги сохранить, если в них есть что-то ценное
Спасибо сказали:
sim1
Сообщения: 155
ОС: GNU,BSD

Re: exim4

Сообщение sim1 »

tema323 писал(а):
06.06.2009 14:36
Спасибо конечно за ответ! Ну этот способ я уже испытывал, ни чего мне не помогло. как прослушивался один интерфейс так и прослушивается.
я делал так: прописал
local_interfaces = 127.0.0.1 : IP1 : IP2 : IP3
добавил
# listen on all all interfaces?
.ifdef MAIN_LOCAL_INTERFACES
local_interfaces = MAIN_LOCAL_INTERFACES
.endif

хм ...
нужно написать

Код: Выделить всё

local_interfaces = 127.0.0.1 : IP1 : IP2 : IP3

где вместо IP1 : IP2 : IP3 написать свои ип адреса вместо, типа

Код: Выделить всё

local_interfaces = 127.0.0.1 : 192.168.100.1 : 192.168.110.2 : 192.168.120.3

ставите либо так либо используется то, что у вас

Код: Выделить всё

.ifdef MAIN_LOCAL_INTERFACES
local_interfaces = MAIN_LOCAL_INTERFACES
.endif

но тогда вам нужно задать или изменить макрос MAIN_LOCAL_INTERFACES для ваших нужд, типа

Код: Выделить всё

MAIN_LOCAL_INTERFACES = 127.0.0.1 : 192.168.110.1 : 192.168.100.2 : 192.168.120.3

этот макрос должен быть включен до объявления local_interfaces и, конечно же, указать свои ип адреса

Разбивать конфиг на куски или нет решаете вы однако для того, чтобы заставить его слушать несколько ИП адресов этого делать необязательно.
Спасибо сказали:
tema323
Сообщения: 7
ОС: debian5

Re: exim4

Сообщение tema323 »

ну конечно же я прописывал свои IP адреса а не тупо вставлял то что здесь написано! я конечно новичек, но не совсем тупой :-)
перепробывал все варианты ни чего не получилось. вот мой конфиг, может это разъяснит ситуацию.

Код: Выделить всё

POSTGREY_SOCKET = inet:127.0.0.1:60000
SA_ENABLE = yes
POSTGREY_SOCKET = inet:127.0.0.1:60000
log_selector =  \
        +all_parents \
        +lost_incoming_connection \
        +received_sender \
        +received_recipients \
        +tls_cipher +tls_peerdn \
        +smtp_confirmation \
        +smtp_syntax_error \
        +smtp_protocol_error

# CONFDIR=__ISP_CONFDIR__
# daemon_smtp_port = 25:465
# tls_certificate = CONFDIR/certificate.crt
# tls_privatekey = CONFDIR/certificate.key
# tls_on_connect_ports = 465

.ifdef MAILMAN_ENABLE
MAILMAN_HOME=__MAILMAN_HOME__
MAILMAN_WRAP=__MAILMAN_WRAP__
MAILMAN_USER=__MAILMAN_USER__
MAILMAN_GROUP=__MAILMAN_GROUP__
.endif

# listen on all all interfaces?
.ifdef MAIN_LOCAL_INTERFACES
local_interfaces = MAIN_LOCAL_INTERFACES
.endif

.ifndef FREEBSD
local_interfaces = 127.0.0.1 : мой IP  : мой IP : мой IP
.endif

domainlist local_domains = lsearch;/etc/exim4/domains
domainlist dummy_domains =
hostlist relay_from_hosts = 127.0.0.1 : мой IP : мой IP : мой IP

domainlist relay_to_domains = lsearch;/etc/exim4/domains
exim_user = Debian-exim
exim_group = Debian-exim

never_users = root
host_lookup = *
rfc1413_hosts = *
rfc1413_query_timeout = 0s
ignore_bounce_errors_after = 2d
timeout_frozen_after = 7d
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data

begin acl
    acl_check_rcpt:
        accept    hosts = net-lsearch;/etc/exim4/whitelist

        deny    hosts = net-lsearch;/etc/exim4/blacklist
                message = $host_data

        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
                verify        = recipient
                domains       = +local_domains

        require verify        = sender

        accept  hosts         = +relay_from_hosts
                control       = submission

        accept  authenticated = *
                condition     = ${if eq{${extract{5}{:}{${lookup{$authenticated_id}lsearch{/etc/exim4/passwd}}}}}{no} {yes}{no}}
                condition     = ${if eq{${extract{3}{:}{${lookup{${domain:$authenticated_id}}lsearch{/etc/exim4/domains}}}}}{no} {yes}{no}}
                control       = submission/domain=

        deny    message       = rejected because $sender_host_address is in a black list at $dnslist_domain\\n$dnslist_text
                dnslists      = ${readfile {/etc/exim4/dnsblists}{:}}

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

        require verify        = recipient

.ifdef POSTGREY_SOCKET
        defer log_message = greylisted host $sender_host_address
            set acl_m0  = request=smtpd_access_policy\nprotocol_state=RCPT\nprotocol_name=${uc:$received_protocol}\nhelo_name=$sender_helo_name\nclient_address=$sender_host_address\nclient_name=$sender_host_name\nsender=$sender_address\nrecipient=$local_part@$domain\ninstance=$sender_host_address/$sender_address/$local_part@$domain\n\n
            set acl_m0  = ${sg{${readsocket{POSTGREY_SOCKET}{$acl_m0}{5s}{}{action=DUNNO}}}{action=}{}}
            message     = ${sg{$acl_m0}{^\\w+\\s*}{}}
            condition   = ${if eq{${uc:${substr{0}{5}{$acl_m0}}}}{DEFER}{true}{false}}
.endif

        accept

    acl_check_data:
        accept

begin routers
    dnslookup:
        driver = dnslookup
        domains = !+dummy_domains
        transport = remote_smtp
        ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
        self = pass
        no_more

    disabled_domains:
        driver = redirect
        condition = ${extract{3}{:}{${lookup{$domain}lsearch{/etc/exim4/domains}}}}
        allow_fail = yes
        data = :fail: Domain disabled
        no_more

    disabled_users:
        driver = redirect
        condition = ${extract{5}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/passwd}}}}
        allow_fail = yes
        data = :fail: User disabled
        no_more

    local_domains:
        driver = redirect
        data = ${quote_local_part:$local_part}@${extract{1}{:}{${lookup{$domain}lsearch{/etc/exim4/domains}}}}
        cannot_route_message = Unknown user
        no_more

.ifdef SA_ENABLE
    spamcheck_router:
        no_verify
        condition = "${if and { {!def:h_X-Spam-Flag:} {!eq {$received_protocol}{spam-scanned}}} {1}{0}}"
        driver = accept
        transport = spamcheck
.endif

    group_aliases:
        driver = redirect
        data = ${extract{1}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/aliases}}}}
        condition = ${if and{\
                        {exists{/etc/exim4/aliases}}\
                        {eq {${extract{2}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/aliases}}}}} {group} }\
                    } {yes} {no} }
        redirect_router = a_dnslookup

    aliases:
        driver = redirect
        data = ${extract{1}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/aliases}}}}
        condition = ${if exists{/etc/exim4/aliases} {yes} {no} }

    aliases_pipe:
        driver = accept
        transport = aliases_pipe
        condition = ${lookup {$local_part@$domain} lsearch {/etc/exim4/pipe-aliases} {yes} {no} }

    local_users:
        driver = redirect
        condition = ${lookup {$local_part@$domain} lsearch {/etc/exim4/passwd} {yes} {no} }
        data = $local_part@$domain
        redirect_router = autoreplay

.ifdef MAILMAN_ENABLE
    mailman:
        driver = accept
        require_files = MAILMAN_HOME/lists/$local_part/config.pck
        local_part_suffix_optional
        local_part_suffix = -bounces : -bounces+* : -confirm+* : -join : -leave : -owner : -request : -admin : -subscribe : -unsubscribe
        transport = mailman

    mailman_isp:
        driver = accept
        require_files = MAILMAN_HOME/lists/$local_part-$domain/config.pck
        local_part_suffix_optional
        local_part_suffix = -bounces : -bounces+* : -confirm+* : -join : -leave : -owner : -request : -admin : -subscribe : -unsubscribe
        transport = mailman_isp
.endif

    catchall_for_domains:
        driver = redirect
        headers_add = X-redirected: yes
        data = ${extract{2}{:}{${lookup{$domain}lsearch{/etc/exim4/domains}}}}
        file_transport = local_delivery

    unknown_users:
        driver = redirect
        allow_fail = yes
        data = :fail: Unknown user
        no_more

    autoreplay:
        driver = accept
        condition = ${if exists{${extract{4}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/passwd}}}}/message.txt} {yes} {no}}
        retry_use_local_part
        transport = address_reply
        unseen

    localuser:
        driver = accept
        transport = local_delivery

# Same routers without autoreplay

    a_dnslookup:
        driver = dnslookup
        domains = !+dummy_domains
        transport = remote_smtp
        ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
        self = pass
        no_more

    a_disabled_domains:
        driver = redirect
        condition = ${extract{3}{:}{${lookup{$domain}lsearch{/etc/exim4/domains}}}}
        allow_fail = yes
        data = :fail: Domain disabled
        no_more

    a_disabled_users:
        driver = redirect
        condition = ${extract{5}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/passwd}}}}
        allow_fail = yes
        data = :fail: User disabled
        no_more

    a_local_domains:
        driver = redirect
        data = ${quote_local_part:$local_part}@${extract{1}{:}{${lookup{$domain}lsearch{/etc/exim4/domains}}}}
        cannot_route_message = Unknown user
        redirect_router = a_dnslookup
        no_more

    a_aliases:
        driver = redirect
        data = ${extract{1}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/aliases}}}}
        condition = ${if exists{/etc/exim4/aliases} {yes} {no} }
        redirect_router = a_dnslookup

    a_aliases_pipe:
        driver = accept
        transport = aliases_pipe
        condition = ${lookup {$local_part@$domain} lsearch {/etc/exim4/pipe-aliases} {yes} {no} }

    a_local_users:
        driver = accept
        transport = local_delivery
        condition = ${lookup {$local_part@$domain} lsearch {/etc/exim4/passwd} {yes} {no} }

.ifdef MAILMAN_ENABLE
    a_mailman:
        driver = accept
        require_files = MAILMAN_HOME/lists/$local_part/config.pck
        local_part_suffix_optional
        local_part_suffix = -bounces : -bounces+* : -confirm+* : -join : -leave : -owner : -request : -admin : -subscribe : -unsubscribe
        transport = mailman

    a_mailman_isp:
        driver = accept
        require_files = MAILMAN_HOME/lists/$local_part-$domain/config.pck
        local_part_suffix_optional
        local_part_suffix = -bounces : -bounces+* : -confirm+* : -join : -leave : -owner : -request : -admin : -subscribe : -unsubscribe
        transport = mailman_isp
.endif

    a_catchall_for_domains:
        driver = redirect
        headers_add = X-redirected: yes
        data = ${extract{2}{:}{${lookup{$domain}lsearch{/etc/exim4/domains}}}}
        file_transport = local_delivery
        redirect_router = a_dnslookup

begin transports
    remote_smtp:
        driver = smtp

    local_delivery:
        driver = appendfile
        file = ${extract{4}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/passwd}}}}/mbox
        delivery_date_add
        envelope_to_add
        return_path_add
        mode = 0660
        quota = ${extract{3}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/passwd}}}}M
        quota_warn_threshold = 75%
        use_lockfile = no
        no_mode_fail_narrower
        user = ${extract{1}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/passwd}}}}
        group = ${extract{2}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/passwd}}}}

    address_pipe:
        driver = pipe
        return_output

    aliases_pipe:
        driver = pipe
        command = ${extract{1}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/pipe-aliases}}}}
        use_shell

    address_reply:
        driver = autoreply
        headers = ${readfile{${extract{4}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/passwd}}}}/message.txt}}
        to = $sender_address

.ifdef MAILMAN_ENABLE
    mailman_isp:
        driver = pipe
        command = MAILMAN_WRAP '${if def:local_part_suffix {${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}} {post}}' $local_part-$domain
        current_directory = MAILMAN_HOME
        home_directory = MAILMAN_HOME
        user = MAILMAN_USER
        group = MAILMAN_GROUP

    mailman:
        driver = pipe
        command = MAILMAN_WRAP '${if def:local_part_suffix {${sg{$local_part_suffix}{-(\\w+)(\\+.*)?}{\$1}}} {post}}' $local_part
        current_directory = MAILMAN_HOME
        home_directory = MAILMAN_HOME
        user = MAILMAN_USER
        group = MAILMAN_GROUP
.endif

.ifdef SA_ENABLE
    spamcheck:
        debug_print = "T: spamassassin_pipe for $local_part@$domain"
        driver = pipe
        command = /usr/sbin/exim4 -oMr spam-scanned -bS
        use_bsmtp
        transport_filter = /usr/bin/spamc
        home_directory = "/tmp"
        current_directory = "/tmp"
        user = Debian-exim
        group = Debian-exim
        return_fail_output
        message_prefix =
        message_suffix =
.endif


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

begin rewrite
.ifdef MAILMAN_ENABLE
    \N^(.*<)?([^<]*)@([^>]*).*$\N   "${if exists{MAILMAN_HOME/lists/${sg{$2}{-$3.*}{-$3}}/config.pck} {${sg{$0} {-$3} {}}} {$0} }" S
    \N^(.*<)?([^<]*)@([^>]*).*$\N   "${if exists{MAILMAN_HOME/lists/${sg{$2}{-$3.*}{-$3}}/config.pck} {${sg{$0} {-$3} {}}} {$0} }"
.endif

begin authenticators


cram:
  driver = cram_md5
  public_name = CRAM-MD5
  server_secret = ${extract {6} {:} {${lookup{$1}lsearch{/etc/exim4/passwd}}}}
  server_set_id = $1


plain:
  driver = plaintext
  public_name = PLAIN
  server_prompts = :
  server_condition = ${if and{{!eq{$3}{}} {eq {$3} {${extract {6} {:} {${lookup{$2}lsearch{/etc/exim4/passwd}}}}}}} {yes} {no} }
  server_set_id = $2

login:
  driver = plaintext
  public_name = LOGIN
  server_prompts = "Username:: : Password::"
  server_condition = ${if and{{!eq{$2}{}} {eq {$2} {${extract {6} {:} {${lookup{$1}lsearch{/etc/exim4/passwd}}}}}}} {yes} {no} }
  server_set_id = $1
Спасибо сказали:
tema323
Сообщения: 7
ОС: debian5

Re: exim4

Сообщение tema323 »

проверяю по команде telnet мой.домен 25 выдает ошибка соединения с SMTP 10061 т.е. получается что вроде как сервис не запущен или не работает
Спасибо сказали:
sim1
Сообщения: 155
ОС: GNU,BSD

Re: exim4

Сообщение sim1 »

tema323 писал(а):
07.06.2009 20:50
проверяю по команде telnet мой.домен 25 выдает ошибка соединения с SMTP 10061 т.е. получается что вроде как сервис не запущен или не работает

выложите логи запуска exima-a
Спасибо сказали:
tema323
Сообщения: 7
ОС: debian5

Re: exim4

Сообщение tema323 »

подскажите в каком файле логи exim? просто их там много разных и с названием log или подобного не нашел
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: exim4

Сообщение Frank »

По-моему, вам будет проще запустить от рута dpkg-reconfigure exim4-config и правильно ответить на задаваемые вопросы.
Изображение
Спасибо сказали:
tema323
Сообщения: 7
ОС: debian5

Re: exim4

Сообщение tema323 »

нет не проще, dpkg-reconfigure exim4-config затрет все настройки, а мне этого не надо, там много почтовых доменов с настройками
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: exim4

Сообщение Frank »

По идее, ничего затирать не должно, изменения вносятся (если я ничего не путаю) в /etc/exim4/update-exim4.conf.conf который не является конфигом, а инклудится при сборке самого конфига из этого файла и /etc/exim4/exim4.conf.template или файлов из /etc/exim4/conf.d/ (в зависимостри от настройки dc_use_split_config).
Конечно, не помешает на всякий пожарный забэкапить конфиги на случай если я не прав :)
P.S. у меня интерфейсы прописаны через точку с запятой, а не через двоеточие. Впрочем, как надо писать говорится в dpkg-reconfigure exim4-config
Изображение
Спасибо сказали:
tema323
Сообщения: 7
ОС: debian5

Re: exim4

Сообщение tema323 »

Показать сможешь свой конфиг? я гляну, сравню тогда что с чем и попробую исправить, может что-нибудь получится
Спасибо сказали:
sim1
Сообщения: 155
ОС: GNU,BSD

Re: exim4

Сообщение sim1 »

логи exima можно посмотреть в файле /var/log/maillog - если настроено через syslog и указан именно этот путь
либо в конфиг добавить строчку

Код: Выделить всё

log_file_path = /var/log/exim_log

либо запустить exim в режиме отладки вот так вот

Код: Выделить всё

exim -bd -d+all

тогда все будет сыпаться на терминал
Спасибо сказали: