От коллеги по цеху поступила задачка написать хитрое правило для эксима, которое разрешает авторизацию только для пользователей находящихся внутри корпоративной сети, но как обычно с одним НО — нужно разрешить авторизацию для мобильных сотрудников бегающих в «полях». От VPN коллега отказаля, мотивировав тем, что у мобильных сотрудников разношерстные девайсы вплоть до нокий с симбианом.
Поковырявшись в документации, родилось такое правило:
deny hosts = !+local_networks
!condition = ${lookup{$authenticated_id}lsearch{/etc/exim4/remote.users}{yes}{no}}
message = You are not permitted to authenticate from this address
authenticated = *
В начале конфига должна быть описанна переменная содержащая корпоративные сети:
hostlist local_networks = 192.168.1.0/24 : 192.168.88.0/24
Пример файла(/etc/exim4/remote.users) содержащего исключения — логины юзеров которым разрешено отправлять письма за пределами корпоративного сегмента:
user@mail1.net
manager@mail2.com
Очень важный момент: если у Вас логин без доменной части, то и в файле с исключениями нужно вносить логины без домена!
Олсо, для тех кто спросит: а почему не использовать acl_smtp_auth — ACL для AUTH ?
При использовании acl_smtp_auth нет возможности проверить наличие авторизовавшегося логина в файле с исключениями т.к. авторизация еще не произошла. Поэтому проверка исключения для логина уже проходит после факта авторизации в acl_smtp_rcpt по переменой $authenticated_id и писку в /etc/exim4/remote.users .