Доброго дня!
Начальство пожелало ограничить пользователей в работе с «электронкой».
Должно быть три группы пользователей: в первом случае (по умолчанию) пользователи (например занесенные в файлик) могут получать письма от кого угодно и отправлять только внутри организации;
во втором - пользователи могут получать письма от кого угодно и отправлять внутри организации и плюс еще на список определенных адресов;
в третьем - пользователи могут и получать и отправлять куда угодно.
получать письма все группы могут от кого угодно.
знаю что нужно смотреть в сторону 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.
спасибо!
Особо не вникал, но насколько я понял задачу, я бы сделал как-то так:
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_recipientssmtpd_recipient_restrictions =
....,
check_sender_access hash:/usr/local/etc/postfix/check_senders,
....local_recipients:
@enabledomain.ru OKnot_local_recipients:
petia@mail.ru OK
vasia@gmail.com OKcheck_senders:
# вторая группа
user2@enabledomain.ru local, not_local, reject # на свой домен + список ящиков
# третья группа
user3@enabledomain.ru OK # можно отправлять всем (лучше заменить OK на DUNNO, чтобы сработали остальные проверки в smtpd_recipient_restrictions)
...
# и в самом конце файла правило по умолчанию (первая группа):
@enabledomain.ru local, reject # только на свой домен
гранд мерси за подсказку!
правда не работает, может потому что я дурачок из деревни или может у меня взаимоисключающие правила в main.cf? postmap файликов делал, сам postfix перезапускал.
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
mail_owner = postfixmyhostname = 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 ESMTPdisable_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 5sendmail_path = /usr/local/sbin/sendmail
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrophtml_directory = /usr/local/share/doc/postfix
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = /usr/local/share/doc/postfixtransport_maps = mysql:/usr/local/etc/postfix/sql/transport.cf,
hash:/usr/local/etc/postfix/transportvirtual_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_mapsmessage_size_limit = 26214400
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yessmtpd_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,
permitsmtpd_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, rejectsmtpd_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,
permitsmtpd_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 = ipv4content_filter = smtp-amavis:[127.0.0.1]:10024
Как именно не работает? Что в логах?> ##Ограничения на отправку
> 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 записи, некоторые почтовики не принимают почту с таких.
> Как именно не работает? Что в логах?убрал reject в классах.
такое дело: все пользователи не описанные в check_senders (т.е. те, которые подразумеваются под первой группой) отправляют письма на любые адреса, т.е. правило "по умолчанию - только локально" не работает.
остальные ограничения работают. попробовал по переносить правило для первой группы в разные концы check_sender - тот же результат. в логах все как-будто этого правила и нет. для not_local - в логах "акцесс денайд", как и должно быть.> ЗЫ: У вашего домена нет MX записи, некоторые почтовики не принимают почту
> с таких.извиняюсь, в main.cf я указал левый домен, просто для примера.
> # и в самом конце файла правило по умолчанию (первая группа):
> @enabledomain.ru local, reject # только на свой доменТут я с синтаксисом напутал - собаку перед доменом надо убрать:
enabledomain.ru local, reject # только на свой домен
И в файле local_recipients тоже.
> Тут я с синтаксисом напутал - собаку перед доменом надо убрать:действительно, почитал http://www.postfix.org/RESTRICTION_CLASS_README.html - так и сделал. все заработало как часы.
огромное спасибо за решение и помощь, очень выручили!