LINUX.ORG.RU
ФорумAdmin

exim4 & block by acl cable/dsl/modem


0

0

Подскажите плиз, куда смотреть.
Есть почтовый сервер на exim4, через который отправляют почту люди из офиса, из дому, откуда угодно (аутентификация, ssl, всё есть).

Однако если я логинюсь из дому, где например adsl, то при отправке письма от некоторых (мягко говоря) почтовиков получаю по морде за отправку от adsl.
Вот например у друга такая acl сработала на моё письмо:
deny condition = ${if match{$sender_host_name}{\N^[a-z\-\.]*
[0-9]{3,}.*?\
(\.cable|\.\w?dsl|\.\w?dsl-dhcp|\.(dialup|dial-up)[0-9\-\.]*|\.dyn[0-9
\-\.]*|\
\.(dial|dial-access|pool)[0-9\-\.]*|\.ppp[0-9\-\.]*|\.slip[0-9\-\.]*)\..*$\N}{1 }{0}}
log_message = Blocked by ACL (cable/dsl/modem) (1)
message = No cable/dsl/modem users, use your ISP smtp server instead\n\
Please contact postmaster\@ with any questions


т.е. в sender_host_name попадает имя хоста домашней машини.
Если бы в этой переменной было имя хоста самого мейл-сервера (откуда и отправляеться почта) - то письмо бы легко прошло.

Поэтому вопрос - подскажите пожалуйста, как правильно в даной
ситуации поступить - где-то чего-то перезаписывать на сервере в заголовке ?


и в догонку - правильно ли для решения использовать что-то из группы параметров демона -oM ?

cyclope
() автор топика
Ответ на: комментарий от cyclope

и опять в догонку - возможно перезапись HELO ?

cyclope
() автор топика

Правильная реакция - нечего пускать всякую шваль! :-)
Вряд-ли можно это победить, т.к. при соединении MTU
определяет конструкцию вида H=(hostname.dom.en)[aa.bb.cc.dd]
(причем ip-шник, откуда приконнектились, определяет сам,
а не берет из заголовка).
При правильном использовании блэклистов и проверок на разрешаемость
адресов через dns никто таких писем не примет.
Странно, что у вас разрешено коннектиться к почтовику извне,
не лучше ли для таких случаев иметь что-нибудь с web-интерфейсом,
например, SquirrelMail.

lralex
()
Ответ на: комментарий от lralex

увы. почтовик в датацентре. а все юзеры по-домам да в офисах.
у всех в почтовых клиентах выставлены ssl+авторизация (аккаунты в лдапе, но это так, не к теме). кто-то любит сандербёрд, кто-то аутглюк, а веб-морду никто не хочет (хотя траблу оно конечно решило-бы).

У меня просто какие соображения: ehlo в конечном итоге всё-равно пишет мейл-сервер и тут всё ок - принимающая сторона видит helo, 
который соответствует имени домена-отправителя. однака в Recieved:from: 
как раз и находиться тот helo, который был выставлен почтовиком клиента у себя в офисе/дома при устанолвлении соединения с моим мейл-сервером.

Т.е. если бы received: from: содержал инфу не о удалённом клиенте, а о самом мейл-шлюзе - то была бы как раз ситуация как с веб-мордой для почты, всё было бы ок.

Вот в этом плане - возможно ? 








cyclope
() автор топика

странно он у тебя работает.
сначала твой ексим должен полностью получить письмо
потом уже пересылать его конечному почтарю, подставляя в SMTP диалог, свои данные.
конфиг покажи.

chocholl ★★
()
Ответ на: комментарий от cyclope

в полях recieved: пишутся все хосты, которые прошло письмо
а у твоего почтовика точно нормальное имя в reverse зоне?

sender_host_name это не похоже на recieved

dimon555 ★★★★★
()

Проверь блок "acl_check_rcpt" на наличие подобной блокировки

cyclon ★★★★★
()

Помниться когда-то давно было модно для таких целей использовать RBL. Кроме отсутствия тормозов DNS, чем предлагаемое решение лучше?

realloc ★★★★
()
Ответ на: комментарий от realloc

реверс днс - точно в порядке. письма от самого мейсервера доходят куда угодна, в отличии от удалённых юзверей, которые иногда режуться

cyclope
() автор топика
Ответ на: комментарий от cyclope

конфиг, acl ^
begin acl

acl_local_deny_exceptions:
  accept
    hosts = ${if exists{CONFDIR/host_local_deny_exceptions}\
                 {CONFDIR/host_local_deny_exceptions}\
                 {}}
  accept
    senders = ${if exists{CONFDIR/sender_local_deny_exceptions}\
                   {CONFDIR/sender_local_deny_exceptions}\
                   {}}
  accept
    hosts = ${if exists{CONFDIR/local_host_whitelist}\
                 {CONFDIR/local_host_whitelist}\
                 {}}
  accept
    senders = ${if exists{CONFDIR/local_sender_whitelist}\
                   {CONFDIR/local_sender_whitelist}\
                   {}}

  .ifdef LOCAL_DENY_EXCEPTIONS_LOCAL_ACL_FILE
  .include LOCAL_DENY_EXCEPTIONS_LOCAL_ACL_FILE
  .endif

  .ifdef WHITELIST_LOCAL_DENY_LOCAL_ACL_FILE
  .include WHITELIST_LOCAL_DENY_LOCAL_ACL_FILE
  .endif

acl_check_auth:

accept  encrypted = *
deny    message   = TLS encryption required before AUTH

acl_check_mail:
  .ifdef CHECK_MAIL_HELO_ISSUED
  deny
    message = no HELO given before MAIL command
    condition = ${if def:sender_helo_name {no}{yes}}
  .endif

  accept

acl_check_rcpt:

accept hosts = :

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

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

accept  local_parts = postmaster
        domains = +local_domains

deny    hosts      = : *
        !verify    = recipient
        message    = User ${local_part}@${domain} not found

warn    message     = X-Broken-Reverse-DNS: No host name for for IP address $sender_host_address
        !verify     = reverse_host_lookup



cyclope
() автор топика
Ответ на: комментарий от cyclope

discard condition = ${lookup{$local_part@$domain}lsearch{EXIM_HOME/lists/discarded_recipients}{1}{0}}

drop    hosts       = wildlsearch;EXIM_HOME/lists/blocked_hosts_name
        log_message = Blocked by ACL (hosts_name)
        message     = Sorry, message was not accepted by policy reasons (probably SPAM)\n\
                      Please contact postmaster\@ with any questions

drop    hosts       = EXIM_HOME/lists/blocked_hosts_ip
        log_message = Blocked by ACL (hosts_ip)
        message     = Sorry, message was not accepted by policy reasons (probably SPAM)\n\
                      Please contact postmaster\@ with any questions

deny    condition   = ${if match{$sender_host_name}{\N^[a-z\-\.]*[0-9]{3,}.*?\
                      (\.cable|\.\w?dsl|\.\w?dsl-dhcp|\.(dialup|dial-up)[0-9\-\.]*|\.dyn[0-9\-\.]*|\
                       \.(dial|dial-access|pool)[0-9\-\.]*|\.ppp[0-9\-\.]*|\.slip[0-9\-\.]*)\..*$\N}{1}{0}}
        log_message = Blocked by ACL (cable/dsl/modem) (1)
        message     = No cable/dsl/modem users, use your ISP smtp server instead\n\
                      Please contact postmaster\@ with any questions
deny   condition   = ${if match{$sender_host_name}{\N^[0-9\-\.]{3,}[a-z\-\.].*?\
                      (\.cable|\.\w?dsl|\.\w?dsl-dhcp|\.(dialup|dial-up)[0-9\-\.]*|\.dyn[0-9\-\.]*|\
                       \.(dial|dial-access)[0-9\-\.]*|\.ppp[0-9\-\.]*|\.slip[0-9\-\.]*)\..*$\N}{1}{0}}
       log_message = Blocked by ACL (cable/dsl/modem) (1)
       message     = No cable/dsl/modem users, use your ISP smtp server instead\n\
                      Please contact postmaster\@ with any questions
deny    condition   = ${if match{$sender_host_name}{\N^([ax]?dsl|dialup|ppp|pool|dhcp|dial|dialpool|modemcable)\
                      [0-9\-\.]{1,}\..*$\N}{1}{0}}
        log_message = Blocked by ACL (cable/dsl/modem) (2)
        message     = No cable/dsl/modem users, use your ISP smtp server instead\n\
                      Please contact postmaster\@ with any questions

drop    condition   = ${lookup{$sender_helo_name}partial-lsearch{EXIM_HOME/lists/blocked_helo}{1}{0}}
        log_message = EHLO/HELO is blacklisted (1)
        message     = Sorry, message was not accepted by policy reasons (probably SPAM)\n\
                      Please contact postmaster\@ with any questions

drop    condition   = ${if and {{eq {$sender_helo_name}{hotmail.com}}\
                      {!match{$sender_host_name}{\N.*?\.hotmail\.com$\N}}}{1}{0}}
        log_message = EHLO/HELO is blacklisted (2)
        message     = Sorry, message was not accepted by policy reasons (probably SPAM)\n\
                      Please contact postmaster\@ with any questions

drop    hosts       = !+no_rbl: +rbl_list
        log_message = Host listed in $dnslist_domain
        message     = No cable/dsl/modem users, use your ISP smtp server instead\n\
                      Please contact postmaster\@ with any questions
        dnslists    = dul.ru

drop    hosts       = !+no_rbl: +rbl_list
        log_message = Domain $sender_address_domain listed in $dnslist_domain
        message     = Mail from domain $sender_address_domain refused\n\
                      MX of domain do not accept bounces\n\
                      This violates RFC 821/2505/2821\n\
                      See <http://www.rfc-ignorant.org> for details\n\
                      Please contact postmaster\@ with any questions
        dnslists    = dsn.rfc-ignorant.org/$sender_address_domain

deny    senders       = wildlsearch;EXIM_HOME/lists/callout_senders
        !verify       = sender/no_details/callout=20s,defer_ok
        log_message   = Forged sender
        message       = SPAM do not allowed\n\
                        Please contact postmaster\@ with any questions

warn    authenticated  = *
        message        = X-SMTP-Authenticated: User $authenticated_id authenticated \
                         from $sender_host_address by AUTH $sender_host_authenticated
accept  authenticated  = *

accept  hosts       = 192.168.0.0/24: +relay_hosts
accept  domains     = +local_domains: +virtual_domains: +relay_domains
        endpass
        verify      = recipient

require log_message = Host ${sender_fullhost} not allowed to relay
deny    message     = Host ${sender_fullhost} not allowed to relay

cyclope
() автор топика
Ответ на: комментарий от cyclope

acl_check_data:
  warn condition = ${if !def:h_Message-ID: {1}}
       hosts = +relay_hosts
       message = Message-ID: <E$message_id@$primary_hostname>
  warn  hosts = +relay_hosts
        condition = ${if !def:h_Date: {1}}
        message = Date: $tod_full

deny   condition   = ${if and {{def:h_X-Mailer:}{match {$h_X-Mailer:}{\N^$\N}}}{1}{0}}
       log_message = Empty X-Mailer
       message     = SPAM does not allowed\n\
                      Please contact postmaster\@ with any questions

deny   condition   = ${if and {{def:h_X-MSMail-Priority:}{!def:h_X-MimeOLE:}\
                     {!match{$h_X-Mailer:}{\N^Microsoft Outlook.*$\N}}}{1}{0}}
       condition   = ${if and {{def:h_X-MSMail-Priority:}\
                     {!match{$h_X-Mailer:}{\N^Microsoft\ Internet\ Mail\ 4\.70\.11(55|61)$\N}}}{1}{0}}
       log_message = Fake X-Mailer (X-MSMail-Priority (1))
       message     = SPAM does not allowed\n\
                     Please contact postmaster\@ with any questions

deny   condition   = ${if and {{!def:h_X-MimeOLE:}{def:h_X-MSMail-Priority:}\
                     {match{$h_X-Mailer:}{\N^Microsoft Outlook.*$\N}}}{1}{0}}
       log_message = Fake X-Mailer (X-MSMail-Priority (2))
       message     = SPAM does not allowed\n\
                     Please contact postmaster\@ with any questions

deny   condition   = ${if and {{def:h_X-MSMail-Priority:}{match{$h_X-Mailer:}{\N^The Bat!.8$\N}}}{1}{0}}
       log_message = Fake X-Mailer (1)
       message     = SPAM does not allowed\n\
                     Please contact postmaster\@ with any questions

deny   condition   = ${if and {{!def:h_X-MimeOLE:}{!match {$h_X-Mailer:}\
                      {\N^Microsoft Outlook Express Macintosh Edition.*$\N}}\
                      {match {$h_X-Mailer:}{\N^Microsoft Outlook.*$\N}}}{1}{0}}
       log_message = Fake X-Mailer (2)
       message     = SPAM does not allowed\n\
                     Please contact postmaster\@ with any questions

deny   condition   = ${if match {$h_X-Mailer:}{\N^Outlook.*$\N}{1}{0}}
       log_message = Fake X-Mailer (3)
       message     = SPAM does not allowed\n\
                     Please contact postmaster\@ with any questions

deny   condition   = ${if match {$h_X-Mailer:}{\N^OutLook Express\N}{1}{0}}
       log_message = Fake X-Mailer (4)
       message     = SPAM does not allowed\n\
                     Please contact postmaster\@ with any questions

deny   demime = scr:vbs:bat:lnk:pif
       log_message = An Unwanted ext ($found_extension)
       message = This message contains an unwanted file extension ($found_extension)\n\
                 Please contact postmaster\@ with any questions




warn    spam           = nobody:true
                condition      = ${if <{$message_size}{400k}{1}{0}}
        message        = X-Spam-Score: $spam_score ($spam_bar)

warn    spam               = nobody:true
                condition      = ${if <{$message_size}{400k}{1}{0}}
                message            = X-Spam-Report: $spam_report

deny    spam           = nobody:true
        condition      = ${if >= {$spam_score_int}{52}{1}{0}}
        message        = This message scored $spam_score spam points\n\
                         Please contact postmaster\@ with any questions

accept

accept

Аутентификация:
#cram_md5:
#  driver = cram_md5
#  public_name = CRAM-MD5
#  server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}
#  server_secret = ${lookup{$1}lsearch{EXIM_HOME/auth/users}{$value}fail}
#  server_set_id = $1

login_server:
  driver = plaintext
  public_name = LOGIN
  server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}
  server_condition = AUTH_LOGIN_LDAP_QUERY
  server_set_id=$1
  server_prompts = "Username:: : Password::"

plain_server:
  driver = plaintext
  public_name = PLAIN
  server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}
  server_condition = AUTH_PLAIN_LDAP_QUERY
  server_set_id=$2
  server_prompts = :

cyclope
() автор топика
Ответ на: комментарий от cyclope

>acl_check_rcpt:
>accept authenticated = *


accept authenticated = *
надо выше добавить правил, которые запрещают пересылку писем с левыми днс именами

p.s. а на кой хер это проверка в rcpt, разве не нужно разрешить relay для всех аутентифицированных, а весь остальной релей порезать?

dimon555 ★★★★★
()
Ответ на: комментарий от dimon555

дык собсно остальные и режуться, без аутентификации не отправишь

cyclope
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.