Exim: запретить части народа слать письма в мир

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Exim: запретить части народа слать письма в мир

Непрочитанное сообщение Urgor » 2006-10-04 15:16:28

Как можно в Exim'e запретить части народа слать письма в мир, оставив возможность переписываться внутри компании? То что надо еще одну колонку добить в базу -- это я догадался :) А вот как модифицировать правила так чтоб это заработало?
Власть в руках у чужаков, и ты им платишь дань...

Хостинговая компания 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/

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

Непрочитанное сообщение dikens3 » 2006-10-04 15:30:01

В начале поставь это:

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

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

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

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

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

# Прибиваем заблокированные E-mail'ы и Домены
  deny    message       = E-Mail: "$sender_address" is blocked
          senders       = dbm*@;/usr/local/etc/exim/files/dbm/bad_emails.dbm
Сам файл у меня выглядит так:

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

ECM-2005@list.ru
renault.media@renault.com
mebel@elturista.com
info@dip.ru
*@orlando.quik.com
*@metro.quik.com
*@slo.quik.com
*@kzbz.biz
*@obravybr.com
*@mydomain.ru
Это пример, не перемудри с ним.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Непрочитанное сообщение Urgor » 2006-10-05 6:50:47

Не. Ты просто зарезал часть доменов для всех, а мне надо чтоб для части моих юзеров нельзя было слать письма в инет. Остальные же могут слать как внутри компании, так и наружу -- в инет.
Власть в руках у чужаков, и ты им платишь дань...

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

Непрочитанное сообщение Alex Keda » 2006-10-05 7:58:16

ну так добавь выше кондишен, типа если шлют из локалки - и пользователям этого сервера - allow. Тогда они до этого правила и не дойдут даже.
Ну а следующим - список тех кому нелья наружу - deny
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Непрочитанное сообщение Urgor » 2006-10-05 8:56:15

Лис, у тя в конфиге http://www.lissyara.su/?id=1175 написано:

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

# Делаем список локальных доменов. Далее этот
# список будет фигурировать в виде +local_domains
# В данном случае домены выбираются из БД MySQL. Также
# можно их просто перечислить через двоеточие. Есть интересная
# возможность, можно указать юзер@[хост] - lissyara@[222.222.4.5]
domainlist local_domains = ${lookup mysql{SELECT `domain` \
                            FROM `domain` WHERE \
                            `domain`='${domain}' AND \
                            `active`='1'}}
А где у тебя проверяется активность юзверьских аккаунтов?
Власть в руках у чужаков, и ты им платишь дань...

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

Непрочитанное сообщение Alex Keda » 2006-10-05 10:01:32

в последней строке приведёного тобою листинга :)))
Убей их всех! Бог потом рассортирует...

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

Непрочитанное сообщение dikens3 » 2006-10-05 10:22:47

Как бы сделал я:

1. Проверяем пользователя (т.е без аутентификации никому нельзя в мир ничего посылать)
2. Пропускаем всех авторизованных на наши домены и сущ. E-Mail
3. Авторизованных (пофиг даже если неавторизованы) из моего домена с E-Mail'ами (senders) прибиваем.
4. Пропускаем всех авторизованных на внешние домены и сущ. E-Mail.

можешь hosts использовать конечно, вместо аутентификации.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

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

Непрочитанное сообщение dikens3 » 2006-10-05 10:24:57

О, примерно следующее можно замутить

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

deny message "Запрещено посылать почту в мир"
        hosts     = 192.168.1.0/24
        senders = asasas@mydomain
        domain  = !local_domains
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Непрочитанное сообщение Urgor » 2006-10-05 10:53:41

lissyara писал(а):в последней строке приведёного тобою листинга :)))
И не смешно :lol:
Ксли active=0 то он все равно дает отсылать почту, и получать тоже, а это не хорошо.
dikens3 писал(а):

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

deny message "Запрещено посылать почту в мир" 
        hosts     = 192.168.1.0/24 
        senders = asasas@mydomain 
        domain  = !local_domains
Хмм. Интересная идея :) Ща попробуем :)
Власть в руках у чужаков, и ты им платишь дань...

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

Непрочитанное сообщение dikens3 » 2006-10-05 10:57:43

Urgor писал(а): Ксли active=0 то он все равно дает отсылать почту, и получать тоже
По поводу получать exim не причём, копай Курьер или что у тебя там.

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

PGSQL_PORT              5432
PGSQL_USERNAME          exim
PGSQL_PASSWORD          eximpassword
PGSQL_DATABASE          mail
PGSQL_USER_TABLE        users
PGSQL_CLEAR_PWFIELD     password
PGSQL_UID_FIELD         26
PGSQL_GID_FIELD         6
PGSQL_LOGIN_FIELD       login
PGSQL_NAME_FIELD        name
PGSQL_HOME_FIELD        '/mnt/tmp/'
PGSQL_MAILDIR_FIELD     maildir
PGSQL_QUOTA_FIELD       quota
PGSQL_WHERE_CLAUSE      status = '1'
Вот это посмотри, у меня называется status, у тебя active.

PGSQL_WHERE_CLAUSE status = '1'
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

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

Непрочитанное сообщение Alex Keda » 2006-10-05 10:59:37

Urgor писал(а):
lissyara писал(а):в последней строке приведёного тобою листинга :)))
И не смешно :lol:
Ксли active=0 то он все равно дает отсылать почту, и получать тоже, а это не хорошо.
dikens3 писал(а):

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

deny message "Запрещено посылать почту в мир" 
        hosts     = 192.168.1.0/24 
        senders = asasas@mydomain 
        domain  = !local_domains
Хмм. Интересная идея :) Ща попробуем :)
неверный ответ.
Он для этого пользователя почту не принимает.
А чтобы не отсылалось - копай авториаию .и там допиши это же...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Непрочитанное сообщение Urgor » 2006-10-05 11:44:43

Для этого домена -- да не принемает, а вот для юзера у меня принял. Поправил:

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

mysqluser:
  driver = accept
  condition = ${if eq{} {${lookup mysql{SELECT home FROM users \
                WHERE (id='${quote_mysql:$local_part@$domain}' OR \
                       id='${quote_mysql:@$domain}') AND \
                       active=1}}}{no}{yes}}
Теперь не принемает. Ок.
Власть в руках у чужаков, и ты им платишь дань...

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

Непрочитанное сообщение Alex Keda » 2006-10-05 11:45:56

:)
Просто у меня не было необходимсоти делать ограничения - поэтому этот функционал тут - на птичьих правах, для интересу :)))
Убей их всех! Бог потом рассортирует...

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

Непрочитанное сообщение dikens3 » 2006-10-05 12:33:46

lissyara писал(а): неверный ответ.
Он для этого пользователя почту не принимает.
А чтобы не отсылалось - копай авториаию .и там допиши это же...
Это почему?
Не пробовал конечно, но по логике всё путём, должно работать.

Для хостов 192.168.1.0/24, если отправитель asasas@mydomain.ru и домен получателя не у нас - идёт в лес.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Непрочитанное сообщение Urgor » 2006-10-05 13:35:39

Что-то никак не вьеду :( Написал так:

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

addresslist local_users = ${lookup mysql{SELECT id FROM users \
                                WHERE `active`='1' and `noinet`='1'}}

  deny  message = "Запрещено посылать почту в мир"
        hosts   = 192.168.0.0/24
        senders = +local_users
        domains = !local_domains
Но не работает, пропускает и все :(
Запрос в мускуле отрабатывает и выдает запрещенные ящики....
Власть в руках у чужаков, и ты им платишь дань...

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

Непрочитанное сообщение dikens3 » 2006-10-05 14:09:30

Вобщем самое разумное аутентификация млин!!!
Додумался я наконец. (Так устроен почтовый сервер вообщето..Трудные времена настали. Звёзды так сложились. :-))

Всем кому нужно писать в мир пропиши пароли в клиентах, а кому запрещено, установи какие-нибудь, пофиг. Пусть подбирают.. :-)

Получится то, что ты хочешь. Кто не аутентифицирован пишет на твой домен. :-)
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Непрочитанное сообщение Urgor » 2006-10-05 15:46:29

Если написать:

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

deny  message = "Запрещено посылать почту в мир" 
        hosts   = 192.168.0.0/24 
        senders = mymail@domain.ru 
        domains = !+local_domains
Все отлавливает и ругается. А если:

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

addresslist local_users = ${lookup mysql{SELECT id FROM users \ 
                                WHERE `active`='1' and `noinet`='1'}} 

  deny  message = "Запрещено посылать почту в мир" 
        hosts   = 192.168.0.0/24 
        senders = +local_users 
        domains = !+local_domains
Не ловит :twisted: В доке сказано:

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

senders = +my_list
  senders = *@+my_list

In the first one, my_list is a named address list, whereas in the second example it is a named domain list.
И если ввести запрос в мускуле он нормально выдает список запрещенных адресов... мдя. Можно как-нить поглядеть что попадает в этот список у Exim'а?
Власть в руках у чужаков, и ты им платишь дань...

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

Непрочитанное сообщение Alex Keda » 2006-10-05 16:06:59

отладку включи. тогда запросы показываются.
http://www.lissyara.su/?id=1205
Убей их всех! Бог потом рассортирует...

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

Непрочитанное сообщение dikens3 » 2006-10-05 16:07:08

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

logwrite   = Это сообщение пишется в лог экзима
Думаю так :-)
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Непрочитанное сообщение Urgor » 2006-10-06 7:04:02

Вот что попало в лог:

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

86283 processing "deny"
86283 check hosts = 192.168.0.0/24
86283 host in "192.168.0.0/24"? yes (matched "192.168.0.0/24")
86283 check senders = ${lookup mysql{SELECT id FROM users WHERE noinet = 1 }}
86283 search_open: mysql "NULL"
86283   cached open
86283 search_find: file="NULL"
86283   key="SELECT id FROM users WHERE noinet = 1 " partial=-1 affix=NULL starflags=0
86283 LRU list:
86283 internal_search_find: file="NULL"
86283   type=mysql key="SELECT id FROM users WHERE noinet = 1 "
86283 database lookup required for SELECT id FROM users WHERE noinet = 1
86283 MYSQL query: SELECT id FROM users WHERE noinet = 1
86283 MYSQL using cached connection for localhost/exim/exim
86283 lookup yielded: admin@mbfkk.spb.ru
86283 device@mbfkk.spb.ru
86283 faxmaster@mbfkk.spb.ru
86283 fax@mbfkk.spb.ru
86283 address match: subject=admin@mbfkk.spb.ru pattern=admin@mbfkk.spb.ru
86283 device@mbfkk.spb.ru
86283 faxmaster@mbfkk.spb.ru
86283 fax@mbfkk.spb.ru
86283 admin@mbfkk.spb.ru in "admin@mbfkk.spb.ru
86283 device@mbfkk.spb.ru
86283 faxmaster@mbfkk.spb.ru
86283 fax@mbfkk.spb.ru"? no (end of list)
86283 deny: condition test failed
Есть мысли как это поправить?
Власть в руках у чужаков, и ты им платишь дань...

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Непрочитанное сообщение Urgor » 2006-10-06 9:20:53

Странно. Такое чувство что списки адресов не работают. :? Покурив доки переписал правило так:

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

  deny   message        = Sorry. Sender Access Limited.
         hosts          = +relay_from_hosts
         domains        = !+local_domains
         senders        = ${lookup mysql{SELECT id FROM users \
                                    WHERE `id`='${quote_mysql:$sender_address}' \
                                         and `noinet`='1'}}
Заработало! :P В логе же видим:

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

90068 processing "deny"
90068 check hosts = +relay_from_hosts
90068 cached yes match for +relay_from_hosts
90068 cached lookup data = NULL
90068 host in "+relay_from_hosts"? yes (matched "+relay_from_hosts" - cached)
90068 check domains = !+local_domains
90068 search_open: mysql "NULL"
90068   cached open
90068 search_find: file="NULL"
90068   key="SELECT domainname FROM domains WHERE domainname='mail.ru' AND (type='LOCAL' OR type='VIRTUAL') AND `active`='1'" partial=-1 affix=NULL starflags=0
90068 LRU list:
90068 internal_search_find: file="NULL"
90068   type=mysql key="SELECT domainname FROM domains WHERE domainname='mail.ru' AND (type='LOCAL' OR type='VIRTUAL') AND `active`='1'"
90068 cached data used for lookup of SELECT domainname FROM domains WHERE domainname='mail.ru' AND (type='LOCAL' OR type='VIRTUAL') AND `active`='1'
90068 lookup failed
90068 mail.ru in ""? no (end of list)
90068 mail.ru in "!+local_domains"? yes (end of list)
90068 check senders = ${lookup mysql{SELECT id FROM users WHERE `id`='${quote_mysql:$sender_address}' and `noinet`='1'}}
90068 search_open: mysql "NULL"
90068   cached open
90068 search_find: file="NULL"
90068   key="SELECT id FROM users WHERE `id`='admin@mbfkk.spb.ru' and `noinet`='1'" partial=-1 affix=NULL starflags=0
90068 LRU list:
90068 internal_search_find: file="NULL"
90068   type=mysql key="SELECT id FROM users WHERE `id`='admin@mbfkk.spb.ru' and `noinet`='1'"
90068 database lookup required for SELECT id FROM users WHERE `id`='admin@mbfkk.spb.ru' and `noinet`='1'
90068 MYSQL query: SELECT id FROM users WHERE `id`='admin@mbfkk.spb.ru' and `noinet`='1'
90068 MYSQL using cached connection for localhost/exim/exim
90068 lookup yielded: admin@mbfkk.spb.ru
90068 address match: subject=admin@mbfkk.spb.ru pattern=admin@mbfkk.spb.ru
90068 mbfkk.spb.ru in "mbfkk.spb.ru"? yes (matched "mbfkk.spb.ru")
90068 admin@mbfkk.spb.ru in "admin@mbfkk.spb.ru"? yes (matched "admin@mbfkk.spb.ru")
90068 deny: condition test succeeded
90068 SMTP>> 550 Sorry. Sender Access Limited.
90068 LOG: MAIN REJECT
90068   H=(URGOR2) [192.168.0.37] F=<admin@mbfkk.spb.ru> rejected RCPT <xxxxx@mail.ru>: Sorry. Sender Access Limited.
Т.е. он сначала сравнивает домен, а потом полностью мыло??? Гм. Понял лишь то, что нифига не понял :(
Власть в руках у чужаков, и ты им платишь дань...

qwertykma
мл. сержант
Сообщения: 93
Зарегистрирован: 2009-06-19 13:14:04
Откуда: почти С-Пб

Re:

Непрочитанное сообщение qwertykma » 2010-02-08 16:26:12

Urgor писал(а):Странно. Такое чувство что списки адресов не работают. :? Покурив доки переписал правило так:

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

  deny   message        = Sorry. Sender Access Limited.
         hosts          = +relay_from_hosts
         domains        = !+local_domains
         senders        = ${lookup mysql{SELECT id FROM users \
                                    WHERE `id`='${quote_mysql:$sender_address}' \
                                         and `noinet`='1'}}
Заработало! :P В логе же видим:

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

90068 processing "deny"
([/quote]
Все работает, спасибо Вам! М.б. поместить это в "полезные скрипты"?

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Re: Re:

Непрочитанное сообщение Urgor » 2010-02-09 7:49:44

qwertykma писал(а):Все работает, спасибо Вам! М.б. поместить это в "полезные скрипты"?
По этому правилу чел отправлять в нет письма не сможет, но сможет получать из инета. Плюс не проверяется аутентификация, т.е. если юзер Петя в заголовках письма укажет что он юзер Вася и васе можно слать в нет, письмо пройдет.
Власть в руках у чужаков, и ты им платишь дань...

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

Re: Re:

Непрочитанное сообщение dikens3 » 2010-02-09 9:34:12

Urgor писал(а):
qwertykma писал(а):Все работает, спасибо Вам! М.б. поместить это в "полезные скрипты"?
По этому правилу чел отправлять в нет письма не сможет, но сможет получать из инета. Плюс не проверяется аутентификация, т.е. если юзер Петя в заголовках письма укажет что он юзер Вася и васе можно слать в нет, письмо пройдет.
В полезные скрипты загляни.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
Urgor
лейтенант
Сообщения: 669
Зарегистрирован: 2006-03-14 16:30:18
Откуда: Гилея (СПб)
Контактная информация:

Re: Re:

Непрочитанное сообщение Urgor » 2010-02-09 10:00:36

dikens3 писал(а):В полезные скрипты загляни.
Ты это мне? Так года два как уже решили с тобой в другой теме =) Все тип-топ работает. Но вот коллегу предупредить стоило...
Власть в руках у чужаков, и ты им платишь дань...