LINUX.ORG.RU
ФорумAdmin

Вопросы по настройке Exim 4.x в DMZ


0

1

Знающие господа, подскажите такие вот моменты по Exim.

Есть у нас локалка, 192.168.168.0/24, в ней был сервер почтаря и вебсайта. Поставили мы сертифицированный фаервол Fortigate 60C, этот почтово-сайтовый сервер, как полагается, вынесли из локалки в DMZ (настроили в фаерволе NAT, проброс нужных портов).

Теперь почтарь имеет адрес 10.10.10.2, а 10.10.10.1 это DMZ интерфейс роутера. В Exim конфиге такая вот настройка

#т.е. разрешаем себя и нашу локальную сеть
hostlist relay_from_hosts = localhost:127.0.0.0/8:192.168.168.0/24

Почту из мира он принимает, с себя самого в мир отправляет, но не хочет посылать почту от клиентов из локалки в мир, выдавая 550 ошибку и возвращая письмо назад.

Получается, что все подключения (даже из локалки) приходят же из 10.10.10.1, а это наш DMZ. Если добавить 10.10.10.1 в relay_from_hosts, то получится вообще опен релей, что совсем не нужно и не хорошо.

Подскажите, как настроить то Exim когда он в DMZ, а надо слать почту от юзеров с локалки. Как в таких случаях поступают? Может я что-то упустил из виду и нужно поправить еще что-либо?


Этот хостлист у Вас объявлен.
hostlist relay_from_hosts = localhost:127.0.0.0/8:192.168.168.0/24

Однако, стесняюсь спросить: а эта строчка в acl_check_rcpt есть ?
accept hosts = +relay_from_hosts

Вы пробовали ручками проверить отсылку почты со стороны 192.168.168.0/24 ? (типа /usr/exim/bin/exim -bh 192.168.168.1)

Что пишет?

Вообще, конфиг-бы посмотреть..

braindef
()

Налицо сетевая безграмотность. Почтовик тут не при чем. Наймите специалиста.

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

строчка в acl_check_rcpt конечно есть

конфиг выглядит так (взят в свое время с лиссяры.су)

# $Cambridge: exim/exim-src/src/configure.default,v 1.10 2006/07/27 10:36:34 ph10 Exp $

######################################################################
#                    MAIN CONFIGURATION SETTINGS                     #
######################################################################

primary_hostname = example.com

hide mysql_servers = localhost/exim/exim/eximpass

domainlist local_domains = ${lookup mysql{SELECT `domain` \
                            FROM `domain` WHERE \
                            `domain`='${domain}' AND \
                            `active`='1'}}

domainlist relay_to_domains = ${lookup mysql{SELECT `domain` \
                            FROM `domain` WHERE \
                            `domain`='${domain}' AND \
                            `active`='1'}}

hostlist   relay_from_hosts = localhost:127.0.0.0/8:192.168.168.0/24
# hostlist   relay_from_hosts = localhost:127.0.0.0/8

acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data

#av_scanner = clamd:/var/run/clamav/clamd

# spamd_address = 127.0.0.1 783

qualify_domain = example.com

qualify_recipient = example.com

allow_domain_literals = false

exim_user = mailnull

exim_group = mail

never_users = root

#rfc1413_hosts = *
rfc1413_query_timeout = 0s

ignore_bounce_errors_after = 45m

timeout_frozen_after = 15d


freeze_tell = admin@example.com

helo_accept_junk_hosts = 192.168.168.0/24

auto_thaw = 1h

smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"

smtp_accept_max = 50

smtp_accept_max_per_connection = 25

smtp_connect_backlog = 30

smtp_accept_max_per_host = 100

split_spool_directory = true

remote_max_parallel = 15

return_size_limit = 70k

message_size_limit = 32M

helo_allow_chars = _

smtp_enforce_sync = true

log_selector = \
    +all_parents \
    +connection_reject \
    +incoming_interface \
    +lost_incoming_connection \
    +received_sender \
    +received_recipients \
    +smtp_confirmation \
    +smtp_syntax_error \
    +smtp_protocol_error \
    -queue_run

syslog_timestamp = no


#########################################################################3

begin acl

acl_check_rcpt:

  accept  hosts = :

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

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


#  accept  local_parts   = postmaster
#          domains       = +local_domains

#  require verify        = sender

  deny    message       = "HELO/EHLO must be SMTP RFC"
          condition     = ${if eq{$sender_helo_name}{}{yes}{no}}

  accept  authenticated = *

  deny    message       = "Your IP in HELO."
          hosts         =  *:!+relay_from_hosts
          condition     = ${if eq{$sender_helo_name}\
                          {$sender_host_address}{true}{false}}


  deny    condition     = ${if eq{$sender_helo_name}\
                          {$interface_address}{yes}{no}}
          hosts         = !127.0.0.1 : !localhost : *
          message       = "This is my IP address."

  deny    condition     = ${if match{$sender_helo_name}\
                          {\N^\d+$\N}{yes}{no}}
          hosts         = !127.0.0.1:!localhost:*
          message       = "In HELO not be only numbers."

  deny    message       = "You have a bad host."
          condition     = ${if match{$sender_host_name} \
                               {adsl|dialup|pool|peer|dhcp} \
                               {yes}{no}}
  deny    message       = "host in blacklist - $dnslist_domain \n $dnslist_text"
          dnslists      = dnsbl.burnt-tech.com : \
                          proxies.blackholes.easynet.nl : \
                          cbl.abuseat.org : \
                          bl.spamcop.net : \
                          dnsbl.njabl.org : \
                          dnsbl.sorbs.net : \
                          
  warn
        set acl_m0 = 20s
  warn
        hosts = +relay_from_hosts : 127.0.0.1
        set acl_m0 = 0s
  warn
        logwrite = Delay $acl_m0 for $sender_host_name \
	[$sender_host_address] with HELO=$sender_helo_name. Mail \
	from $sender_address to $local_part@$domain.
        delay = $acl_m0


  accept  domains       = +local_domains
          endpass
          message       = "No such user in the domain."
          verify        = recipient

  accept  domains       = +relay_to_domains
          endpass
          message       = "Route to the host is not known."
          verify        = recipient

  accept  hosts         = +relay_from_hosts

  deny    message       = "Unauthorized relaying denied."



acl_check_data:
#  deny malware = *
#  message = "In e-mail found VIRUS - $malware_name"
  accept



begin routers

dnslookup:
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
  no_more

system_aliases:
    driver      = redirect
    allow_fail
    allow_defer
    data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
           `address`='${quote_mysql:$local_part@$domain}' OR \
           `address`='${quote_mysql:@$domain}'}}

mysqluser:
  driver = accept
  condition = ${if eq{}{${lookup mysql{SELECT `maildir` FROM `mailbox` \
              WHERE `username`='${quote_mysql:$local_part@$domain}'}}}{no}{yes}}
  transport = mysql_delivery

begin transports

remote_smtp:
    driver = smtp

mysql_delivery:
    driver = appendfile
    check_string = ""
    create_directory
    delivery_date_add
    directory = ${lookup mysql{SELECT CONCAT('/var/mail/exim/', `maildir`) \
                FROM `mailbox` WHERE `username`='${local_part}@${domain}'}}
    directory_mode = 770
    envelope_to_add
    group = mail
    maildir_format
    maildir_tag = ,S=$message_size
    message_prefix = ""
    message_suffix = ""
    mode = 0600

address_file:
    driver = appendfile
    delivery_date_add
    envelope_to_add
    return_path_add

address_pipe:
  driver = pipe
  return_output

address_reply:
  driver = autoreply

begin retry

# Address or Domain  Error   Retries
# -----------------  -----   -------
*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h


begin rewrite


begin authenticators

auth_plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = ${lookup mysql{SELECT `username` FROM \
                     `mailbox` WHERE `username` = \
                     '${quote_mysql:$1}' AND `password` = \
                     '${quote_mysql:$2}'}{yes}{no}}
  server_prompts = :
  server_set_id = $2

auth_login:
  driver = plaintext
  public_name = LOGIN
  server_condition = ${lookup mysql{SELECT `username` FROM \
                     `mailbox` WHERE `username` = \
                     '${quote_mysql:$1}' AND `password` = \
                     '${quote_mysql:$2}'}{yes}{no}}
  server_prompts = Username:: : Password::
  server_set_id = $1

auth_cram_md5:
  driver = cram_md5
  public_name = CRAM-MD5
  server_secret = ${lookup mysql{SELECT `password` FROM \
                        `mailbox` WHERE `username` \
                        = '${quote_mysql:$1}'}{$value}fail}
  server_set_id = $1

# end config
zCHIP
() автор топика
Ответ на: комментарий от zCHIP

Придется тебе обучать, а это дольше, чем направить тебя одним предложением и совсем неинтересно.

sdio ★★★★★
()
Последнее исправление: sdio (всего исправлений: 1)

Сам виноват, короче.

По-запаре в попыхах не включил в клиенте проверку подлинности пользователя. И локальная сеть в конфиге эксима не нужна как бэ уже, остался один локал хост.

Усе работает, всем спасибо :)

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