Exim. Помогите с ACL

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
FreePascal
сержант
Сообщения: 245
Зарегистрирован: 2006-05-14 8:50:05
Контактная информация:

Exim. Помогите с ACL

Непрочитанное сообщение FreePascal » 2007-01-07 20:42:19

Я хочю чтобы мои локальные юзера не отсылали письма без авторизации
Для етого пишу такое:

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

acl_check_mail:
        deny    sender_domains  = +local_domains
                !authenticated = *
                message         = "Вы не авторизованы"
       
        accept
Из вне все работает на УРА
Чюжое мыло:

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

pascal@XLAM4$ telnet uipanet.homeunix.org 25
Trying 82.207.127.16...
Connected to uipanet.homeunix.org.
Escape character is '^]'.
220 uipanet.homeunix.org ESMTP Exim 4.64 Sun, 07 Jan 2007 19:12:42 +0200
ehlo eswdadw
250-uipanet.homeunix.org Hello 91-40-207-82.pool.ukrtel.net [82.207.40.91]
250-SIZE 10485760
250-PIPELINING
250-AUTH PLAIN LOGIN CRAM-MD5
250-STARTTLS
250 HELP
mail from:qqq@mail.ru
250 OK
quit
Мое мыло:

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

pascal@XLAM4$ telnet uipanet.homeunix.org 25
Trying 82.207.127.16...
Connected to uipanet.homeunix.org.
Escape character is '^]'.
220 uipanet.homeunix.org ESMTP Exim 4.64 Sun, 07 Jan 2007 19:13:11 +0200
ehlo wawddawd
250-uipanet.homeunix.org Hello 91-40-207-82.pool.ukrtel.net [82.207.40.91]
250-SIZE 10485760
250-PIPELINING
250-AUTH PLAIN LOGIN CRAM-MD5
250-STARTTLS
250 HELP
mail from:pascal@uipanet.homeunix.org
550 "ВЫ не авторизованы"
^C^Cquit
quit
Но при отправки с локальной сети после "mail from:...." всегда "250 OK" в логе ето:

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

2007-01-07 19:38:23 no host name found for IP address 192.168.220.72
Соответственно по правилу "accept" оно спокойно уходит получятелю!!!!
Где я тут не прав???
Как исправить мое положение????

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
zorg
лейтенант
Сообщения: 665
Зарегистрирован: 2006-03-01 22:25:36
Откуда: Санкт-Петербург

Непрочитанное сообщение zorg » 2007-01-07 20:55:24

всего конфига не видно, но мож у тя правило по авторизации стоит после того как ты разрешил отправлять локалке?? потому они и не авторизуются? ;)
Всё дело в перце!! :)

Аватара пользователя
FreePascal
сержант
Сообщения: 245
Зарегистрирован: 2006-05-14 8:50:05
Контактная информация:

Непрочитанное сообщение FreePascal » 2007-01-07 21:01:11

Вот и конф

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

primary_hostname = uipanet.homeunix.org
# Домены, для которых принимаем почту
domainlist local_domains = ${lookup mysql{SELECT domain FROM domains WHERE domain='${domain}' AND (type='LOCAL' OR type='VIRTUAL')}}
# Домены, которым разрешено отправлять почту через данный сервер
domainlist relay_to_domains = ${lookup mysql{SELECT domain FROM domains WHERE domain='${domain}' AND type='RELAY'}}
# Включаем проверку на вирусы
hostlist   relay_from_hosts = 127.0.0.1
av_scanner = clamd:127.0.0.1 3310
# Включаем проверку по содержимому письма
acl_smtp_mail = acl_check_mail
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_virus
qualify_domain = uipanet.homeunix.org
auth_advertise_hosts = *
daemon_smtp_ports = 25 : 465
# Включаем SSL-соединение
tls_on_connect_ports = 465
tls_advertise_hosts = *
tls_certificate = /usr/local/etc/exim/ssl/mail.pem
tls_privatekey = /usr/local/etc/exim/ssl/mail.pem
# Включаем лог действий сервера
log_selector = \
    +all_parents \
    +lost_incoming_connection \
    +received_sender \
    +received_recipients \
    +smtp_confirmation \
    +smtp_syntax_error \
    +smtp_protocol_error \
    -queue_run
allow_domain_literals = false
# Запрещаем привелигированным пользователям отправлять почту через данный сервер
never_users = root:daemon:bin
# Нет, им просто запрещается отправлять почту и все
host_lookup = *
rfc1413_hosts = *
rfc1413_query_timeout = 0s
ignore_bounce_errors_after = 30m
timeout_frozen_after = 3d
freeze_tell = postmaster
auto_thaw = 1h
message_size_limit = 10M
smtp_accept_max = 50
smtp_accept_max_per_connection = 50
smtp_connect_backlog = 50
smtp_accept_max_per_host = 25
split_spool_directory = true
remote_max_parallel = 15
# Подключем базу MySQL
hide mysql_servers = localhost/mail/exim/passeximmail
# Подключаем фильтры
begin acl
acl_check_mail:
        deny    sender_domains  = +local_domains
                !authenticated = *
                verify  = recipient
                message         = "хГБЕМХРЕ бШ МЕ ЮБРНПХГНБЮМШ. бШ ГЮАШКХ КНЦХМ ХКХ ОЮПНКЭ?"
        accept
acl_check_rcpt:
#    accept     hosts = :
    deny    message       = "Недопустимые символы в адресе"
            local_parts   = ^.*[@%!/|] : ^\\.
    accept  local_parts   = postmaster
            domains       = +local_domains
            require verify        = sender
    deny    message       = HELO/EHLO required by SMTP RFC
            condition     = ${if eq{$sender_helo_name}{}{yes}{no}}
#    accept  authenticated = *
    deny     message      = "Убери нах свой IP откуда ненадо"
             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       = "Это мой IP иди в зад!!!"
#    deny    message       = Go Away! You are spammer.
#           condition     = ${if match{$sender_host_name}{bezeqint\\.net|net\\.il|dialup|dsl|pool|peer|dhcp}{yes}{no}}
    deny    message       = host is listed in $dnslist_domain
            dnslists      = sbl.spamhaus.org : \
            relays.ordb.org : \
            opm.blitzed.org : \
            proxies.blackholes.easynet.nl
    accept  domains       = +local_domains
                endpass
                    message       = unknown user
                    verify        = recipient
#    accept  domains       = +relay_to_domains
#       endpass
#           message       = unrouteable address
#           verify        = recipient
#    accept  hosts         = +relay_from_hosts
    deny        domains         = !+local_domains
                message         = "хГБЕМХРЕ бШ МЕ ЮБРНПХГНБЮМШ. бШ ГЮАШКХ КНЦХМ ХКХ ОЮПНКЭ?"
    deny    message       = relay not permitted
acl_check_virus:
    deny   message        = Messege rejected: Virus $malware_name) Found. Your message was successfully trashed.
    malware        = *
    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 recipients FROM aliases WHERE local_part='${local_part}' AND domain='${domain}'}}
    userforward:
        driver = redirect
        allow_fail
        allow_defer
        data = ${lookup mysql{SELECT recipients FROM userforward WHERE local_part='${local_part}' AND domain='${domain}'}}
    mysqluser:
        driver = accept
        condition = ${if eq{} {${lookup mysql{SELECT home FROM users WHERE id='${local_part}' AND mbox_host='${domain}' AND \
        active='Y'}}}{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(home, "/Maildir") FROM users WHERE id='${local_part}' AND mbox_host='${domain}'}}
    directory_mode = 770
    envelope_to_add
    group = mail
    maildir_format
    maildir_tag = ,S=$message_size
    message_prefix = ""
    message_suffix = ""
    mode = 0600
    quota = ${lookup mysql{SELECT quota FROM users WHERE id='${local_part}' AND mbox_host='${domain}'}{${value}M}}
    quota_size_regex = S=(\d+)$
    quota_warn_threshold = 95%
    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
*          quota
*       *       F,2h,15m; G,16h,1h,1.5; F,4d,6h
begin rewrite
# Включаем аутентификацию
begin authenticators
# Метод - Plain
auth_plain:
    driver = plaintext
    public_name = PLAIN
    server_condition = ${lookup mysql{SELECT id FROM users WHERE id = '${quote_mysql:${local_part:$2}}' AND \
    mbox_host = '${quote_mysql:${domain:$2}}' AND passwd = '${quote_mysql:$3}' AND active = 'Y'}{yes}{no}}
    server_prompts = :
    server_set_id = $2
# Метод - Login
auth_login:
    driver = plaintext
    public_name = LOGIN
    server_condition = ${lookup mysql{SELECT id FROM users WHERE id = '${quote_mysql:${local_part:$1}}' AND \
    mbox_host = '${quote_mysql:${domain:$1}}' AND passwd = '${quote_mysql:$2}' AND active = 'Y'}{yes}{no}}
    server_prompts = Username:: : Password::
    server_set_id = $1
#Метод - Cram-MD5
auth_cram_md5:
    driver = cram_md5
    public_name = CRAM-MD5
    server_secret = ${lookup mysql{SELECT passwd FROM users WHERE id = '${quote_mysql:${local_part:$1}}' AND \
    mbox_host = '${quote_mysql:${domain:$1}}' AND active = 'Y'}{$value}fail}
    server_set_id = $1


Аватара пользователя
FreePascal
сержант
Сообщения: 245
Зарегистрирован: 2006-05-14 8:50:05
Контактная информация:

Непрочитанное сообщение FreePascal » 2007-01-07 21:06:24

zorg писал(а):всего конфига не видно, но мож у тя правило по авторизации стоит после того как ты разрешил отправлять локалке?? потому они и не авторизуются? ;)
Я так думаю что он не может мой домен определить тк его нет и соответственно
правило с "deny" пропускает а разрешает все локальным по "accept"
Нужно бы еще наверное написать правило запрещающее отправку если
не определен домен ну чтото голова не варит! :cry:

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35458
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-01-07 21:09:17

как-то оно у тя странно - снаружи, своё не принимает, зато принимает всякий бред...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
FreePascal
сержант
Сообщения: 245
Зарегистрирован: 2006-05-14 8:50:05
Контактная информация:

Непрочитанное сообщение FreePascal » 2007-01-07 21:20:42

Почему бред?????
Я хочю авторизации от своих пользователей
(без авторизации от моего имени по сети можно кому хочеш отправить, даже Шефу)

Но а если я поставль авторизацию на всех кроме моего домена то как же
я тогда буду получять почту с того же самого мыло.ру, он то не прейдет
ко мне аккаунт регистрировать :D

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35458
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-01-07 21:26:23

почему снаружи почту для левых доменов принимает?
Убей их всех! Бог потом рассортирует...

Аватара пользователя
FreePascal
сержант
Сообщения: 245
Зарегистрирован: 2006-05-14 8:50:05
Контактная информация:

Непрочитанное сообщение FreePascal » 2007-01-07 21:30:08

Я наверное чегото не допонимаю :?
Как мне тогда принять почту допустим на мой почтовик pascal@uipanet.homeunix.org
от pascal@mail.ru??????

Аватара пользователя
FreePascal
сержант
Сообщения: 245
Зарегистрирован: 2006-05-14 8:50:05
Контактная информация:

Непрочитанное сообщение FreePascal » 2007-01-07 22:52:45

Реализовал пока так.

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

# Моя локалка
hostlist my_localnet = 192.168.220.0/24
и теперь acl_check_mail выглядит так:

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

acl_check_mail:
        deny    sender_domains  = !+local_domains
                !authenticated = *
                message         = "хГБЕМХРЕ бШ МЕ ЮБРНПХГНБЮМШ. бШ ГЮАШКХ КНЦХМ ХКХ ОЮПНКЭ?"
        deny    hosts           = my_localnet
                !authenticated = *
                message         = "хГБЕМХРЕ бШ МЕ ЮБРНПХГНБЮМШ. бШ ГЮАШКХ КНЦХМ ХКХ ОЮПНКЭ?"
        accept
Такая реализация мне не нравится, но пока в голову нехрена не лезит.
Может люди добрые укажут где я тут загоняюсь а Лис соизволит
направить меня на путь истенный, а то я так и не понял о чем он....

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35458
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-01-07 23:21:06

сорри - mail from: и rcpt to: спутал :)))
Убей их всех! Бог потом рассортирует...

Аватара пользователя
FreePascal
сержант
Сообщения: 245
Зарегистрирован: 2006-05-14 8:50:05
Контактная информация:

Непрочитанное сообщение FreePascal » 2007-01-07 23:22:23

Не зря говорил что чтото не нравится, нашел 2 ошибки
было так

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

acl_check_mail: 
        deny    sender_domains  = !+local_domains 
                !authenticated = * 
                message         = "хГБЕМХРЕ бШ МЕ ЮБРНПХГНБЮМШ. бШ ГЮАШКХ КНЦХМ ХКХ ОЮПНКЭ?" 
        deny    hosts           = my_localnet 
                !authenticated = * 
                message         = "хГБЕМХРЕ бШ МЕ ЮБРНПХГНБЮМШ. бШ ГЮАШКХ КНЦХМ ХКХ ОЮПНКЭ?" 
        accept
Стало так

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

acl_check_mail: 
        deny    sender_domains  = +local_domains         ##########Убрал "!"
                !authenticated = * 
                message         = "хГБЕМХРЕ бШ МЕ ЮБРНПХГНБЮМШ. бШ ГЮАШКХ КНЦХМ ХКХ ОЮПНКЭ?" 
        deny    hosts           = +my_localnet                   ##########Добавил "+"
                !authenticated = * 
                message         = "хГБЕМХРЕ бШ МЕ ЮБРНПХГНБЮМШ. бШ ГЮАШКХ КНЦХМ ХКХ ОЮПНКЭ?" 
        accept

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Непрочитанное сообщение dikens3 » 2007-01-09 12:48:38

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

hostlist         my_lan_hosts = 192.168.x.x/24

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

# Проверка получателей писем
acl_check_rcpt:

# Принимаем почту пришедшую не по TCP/IP, localhost имеется ввиду
  accept  hosts = :

# Запрещаем письма в локальной части которых содержится @; %; и т.п. для наших доменов
  deny    message       = Restricted characters in address
          domains       = +local_domains
          local_parts   = ^[.] : ^.*[@%!/|]

# проверяем недопустимые символы для внешних доменов
  deny    message       = Restricted characters in address
          domains       = !+local_domains
          local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

# Запрещаем, если невозможно проверить лок. отправителя.
  require verify        = sender

# Принимаем, если аутентифицировался, получаетель наш домен, и пользователь существует.
  accept  authenticated = *
          domains       = +local_domains
          message       = "Unknown user"
          verify        = recipient

# Проверяем, существует ли домен получателя
  deny    log_message   = Recipient verify failed
          hosts         = +my_lan_hosts
         !verify        = recipient/callout=20s,defer_ok

# Принимаем, если аутентифицировался и получаетель СУЩЕСТВУЮЩИЙ внешний домен.
  accept  authenticated = *
          domains       = !+local_domains
Проверки HELO/EHLO
БЛОКЛИСТЫ и т.п.

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

# Проверка получателя в наших доменах
  accept   domains       = +local_domains
           endpass
           message       = "Unknown user"
           verify        = recipient

# Остальных прибиваем
  deny    message       = relay not permitted
Я так реализовал.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
FreePascal
сержант
Сообщения: 245
Зарегистрирован: 2006-05-14 8:50:05
Контактная информация:

Непрочитанное сообщение FreePascal » 2007-01-09 22:44:53

# Проверка получателя в наших доменах
accept domains = +local_domains
endpass
message = "Unknown user"
verify = recipient
Вот по етим правелам будет разрешено отправка без авторизации
между моими юзерами, а я этого ох как не хочю.

З.Ы. Конечно я могу и ошибатся
я только начал разбератся
а вдруг не прав я, не судите
а на ошибку укажите!!!!!!

Аватара пользователя
Kolesnikov
рядовой
Сообщения: 42
Зарегистрирован: 2007-01-09 14:49:39
Откуда: г.Тайга

Непрочитанное сообщение Kolesnikov » 2007-01-10 5:27:36

FreePascal писал(а):
# Проверка получателя в наших доменах
accept domains = +local_domains
endpass
message = "Unknown user"
verify = recipient
Вот по етим правелам будет разрешено отправка без авторизации
между моими юзерами, а я этого ох как не хочю.
А если добавить в это правило:
hosts = !+my_lan_hosts

Аватара пользователя
FreePascal
сержант
Сообщения: 245
Зарегистрирован: 2006-05-14 8:50:05
Контактная информация:

Непрочитанное сообщение FreePascal » 2007-01-10 14:50:20

Да все, всем огромное спасибо!!!!
Проблему я же решил.
Тема закрыта.