URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 96319
[ Назад ]

Исходное сообщение
"postfix: классы пользователей, разграничение прав на smtp"

Отправлено badbug , 09-Окт-15 12:38 
Доброго дня!
Начальство пожелало ограничить пользователей в работе с «электронкой».
Должно быть три группы пользователей: в первом случае (по умолчанию) пользователи (например занесенные в файлик) могут получать письма от кого угодно и отправлять только внутри организации;
во втором - пользователи могут получать письма от кого угодно и отправлять внутри организации и плюс еще на список определенных адресов;
в третьем - пользователи могут и получать и отправлять куда угодно.
получать письма все группы могут от кого угодно.
знаю что нужно смотреть в сторону restriction classes и даже примерно представляю, как это будет выглядеть - что-то вроде:

smtp_restriction_classes=gpusers1,gpuser2,gpuser3

gpusers1=check_sender_access hash:/usr/local/etc/postfix/users1.list,reject #локально
gpusers2=check_sender_access hash:/usr/local/etc/postfix/users2.list,reject #локально и на пару адресов
gpusers3=check_sender_access hash:/usr/local/etc/postfix/users3.list,reject #полный доступ

smtpd_sender_restrictions = check_sender_access hash:/usr/local/etc/postfix/maillist
#тут список адресов для второй группы на которые можно отправлять, наверное такой:
# @enabledomain.ru user2.list

не понятно: как сделать только локальную отправку по умолчанию, каким должно быть содержимое (синтаксис) перечисленных файлов, ну и как все это правильно описать?

надеюсь получилось понятно объяснить.
postfix 2.11.3 на FreeBSD 10.1-RELEASE, пользователи в mysql.
спасибо!


Содержание

Сообщения в этом обсуждении
"postfix: классы пользователей, разграничение прав на smtp"
Отправлено Etch , 09-Окт-15 14:40 
Особо не вникал, но насколько я понял задачу, я бы сделал как-то так:

smtpd_restriction_classes = local, not_local
class local = check_recipient_access hash:/usr/local/etc/postfix/local_recipients
class not_local = check_recipient_access hash:/usr/local/etc/postfix/not_local_recipients

smtpd_recipient_restrictions =
  ....,
  check_sender_access hash:/usr/local/etc/postfix/check_senders,
  ....

local_recipients:

@enabledomain.ru    OK

not_local_recipients:

petia@mail.ru     OK
vasia@gmail.com   OK

check_senders:

# вторая группа
user2@enabledomain.ru   local, not_local, reject # на свой домен + список ящиков
# третья группа
user3@enabledomain.ru   OK # можно отправлять всем (лучше заменить OK на DUNNO, чтобы сработали остальные проверки в smtpd_recipient_restrictions)
...
# и в самом конце файла правило по умолчанию (первая группа):
@enabledomain.ru        local, reject # только на свой домен


"postfix: классы пользователей, разграничение прав на smtp"
Отправлено badbug , 14-Окт-15 12:16 
гранд мерси за подсказку!
правда не работает, может потому что я дурачок из деревни или может у меня взаимоисключающие правила в main.cf? postmap файликов делал, сам postfix перезапускал.


queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
mail_owner = postfix

myhostname = mail.up.ru
mydomain = up.ru
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
unknown_local_recipient_reject_code = 550
mynetworks = 192.168.0.0/18, 127.0.0.0/8
smtpd_banner = $myhostname ESMTP

disable_vrfy_command = yes
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         xxgdb $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop

html_directory = /usr/local/share/doc/postfix
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = /usr/local/share/doc/postfix

transport_maps = mysql:/usr/local/etc/postfix/sql/transport.cf,
    hash:/usr/local/etc/postfix/transport

virtual_mailbox_base = /var/mail/virtual
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/sql/users.cf
virtual_alias_maps = mysql:/usr/local/etc/postfix/sql/aliases.cf
virtual_uid_maps = static:125
virtual_gid_maps = static:125
relay_domains = $transport_maps
local_recipient_maps = $virtual_mailbox_maps $virtual_maps

message_size_limit = 26214400

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks,
        permit_sasl_authenticated,
        check_helo_access hash:/usr/local/etc/postfix/helo_access,
        reject_non_fqdn_hostname,
        reject_invalid_hostname,
        reject_unknown_hostname,
        permit

smtpd_sender_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    check_sender_access regexp:/usr/local/etc/postfix/sender_access,
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
    permit


##Ограничения на отправку
smtpd_restriction_classes = local_only, not_local
local_only = check_recipient_access hash:/usr/local/etc/postfix/local_recipients, reject
not_local = check_recipient_access hash:/usr/local/etc/postfix/not_local_recipients, reject

smtpd_recipient_restrictions =
     reject_unauth_pipelining,
     reject_non_fqdn_recipient,
     reject_unknown_recipient_domain,
     check_sender_access hash:/usr/local/etc/postfix/check_senders,
     permit_mynetworks,
     permit_sasl_authenticated,
     reject_unauth_destination,
     permit

##Конец

smtpd_client_restrictions =
     permit_mynetworks,
     reject_rbl_client bl.spamcop.net,
     permit

smtpd_etrn_restrictions = reject
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/ssl/smtpd.pem
smtpd_tls_cert_file = /etc/ssl/smtpd.pem
smtpd_tls_CAfile = /etc/ssl/smtpd.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
data_directory = /var/db/postfix
inet_protocols = ipv4

content_filter = smtp-amavis:[127.0.0.1]:10024



"postfix: классы пользователей, разграничение прав на smtp"
Отправлено Etch , 14-Окт-15 13:36 
Как именно не работает? Что в логах?

> ##Ограничения на отправку
> smtpd_restriction_classes = local_only, not_local
> local_only = check_recipient_access hash:/usr/local/etc/postfix/local_recipients,
> reject
> not_local = check_recipient_access hash:/usr/local/etc/postfix/not_local_recipients,
> reject

Если вы решили добавить reject в сам класс, тогда файл not_local_recipients должен включать и содержимое файла local_recipients. А в файле check_senders писать либо один класс, либо второй.

ЗЫ: У вашего домена нет MX записи, некоторые почтовики не принимают почту с таких.


"postfix: классы пользователей, разграничение прав на smtp"
Отправлено badbug , 14-Окт-15 18:29 
> Как именно не работает? Что в логах?

убрал reject в классах.
такое дело: все пользователи не описанные в check_senders (т.е. те, которые подразумеваются под первой группой) отправляют письма на любые адреса, т.е. правило "по умолчанию - только локально" не работает.
остальные ограничения работают. попробовал по переносить правило для первой группы в разные концы check_sender - тот же результат. в логах все как-будто этого правила и нет. для not_local - в логах "акцесс денайд", как и должно быть.

> ЗЫ: У вашего домена нет MX записи, некоторые почтовики не принимают почту
> с таких.

извиняюсь, в main.cf я указал левый домен, просто для примера.


"postfix: классы пользователей, разграничение прав на smtp"
Отправлено Etch , 14-Окт-15 21:09 
> # и в самом конце файла правило по умолчанию (первая группа):
> @enabledomain.ru        local, reject # только на свой домен

Тут я с синтаксисом напутал - собаку перед доменом надо убрать:

enabledomain.ru        local, reject # только на свой домен

И в файле local_recipients тоже.

"postfix: классы пользователей, разграничение прав на smtp"
Отправлено badbug , 15-Окт-15 06:58 
> Тут я с синтаксисом напутал - собаку перед доменом надо убрать:

действительно, почитал http://www.postfix.org/RESTRICTION_CLASS_README.html - так и сделал. все заработало как часы.
огромное спасибо за решение и помощь, очень выручили!