EXIM - отправка локальной почты в Gateway First
Мой почтовый сервер защищен от спама нашим устройством Barracuda. Я пытаюсь настроить EXIM для перенаправления ВСЕХ исходящих сообщений на сервер Barracuda, включая почту для локальных доменов. Как только сообщения отсканированы и разрешены, сервер Barracuda затем доставит локальную почту обратно на мой почтовый сервер, где конфигурация EXIM позволит их доставлять. Я полагаю, что могу добиться этого с помощью условного определения для части "domains =" в конфигурации ниже, но я не уверен в синтаксисе:
RoutetoBarracuda:
водитель = ручной маршрут
домены =?
транспорт = remote_smtp
route_list = * barracuda.mydomain.com
ignore_target_hosts = 0.0.0.0: 127.0.0.0/8
больше не надо
Могу ли я написать оператор "если / еще" для "доменов", где (на простом английском языке):
домены =! +local_domains (все, кроме локальных доменов), если отправителем является мой сервер Barracuda, иначе * (перенаправить все домены в Barracuda), если отправителем является любой другой хост / IP-адрес.
Поскольку я не могу доверять своим пользователям не спамить друг друга, желаемое действие состоит в том, чтобы EXIM перенаправлял локальную почту в локальную почту от отправителя на сервер Barracuda и узнавал, когда он возвращается, чтобы затем его можно было доставить локально.,
Я надеюсь, что этот вопрос имеет смысл. Я не уверен в синтаксисе, чтобы заставить работать выше.
Не стесняйтесь, дайте мне знать, если есть лучший способ сделать это.
3 ответа
Я вхожу из своей основной учетной записи, чтобы дать обновление. Я попробовал это, которое дало желаемые результаты
domains = ${if eq{$interface_port}{587}{*}{! +local_domains}}
Если мои клиенты настроены на отправку через порт 587, а мой Spam Gateway ретранслирует через порт 25, тогда я получу желаемый результат. Ограничение исходящего SMTP на порту 587 удаленно и 25 локально имеет смысл в любом случае, так как многие интернет-провайдеры не разрешают исходящий порт 25, если он не проходит через их SMTP-серверы.
Я обновлю эту ветку, если есть какие-то ошибки с этим методом.
Без использования acls вы можете использовать в своем роутере:
condition = ${if !eq{$sender_host_name}{barracuda_hostname}}
или же
condition = ${if !eq{$sender_host_address}{barracuda_ipaddress}}
если адрес хоста не имеет записи ptr в днс.
Я бы использовал hosts = ...
проверить в ACL (например, один определен для acl_smtp_connect
) установить переменную, такую как $acl_c_is_from_barracuda
быть yes
или же no
; также есть ACL для acl_not_smtp_start
который устанавливает ту же переменную в no
, Самый надежный чек, который у вас есть, это "вернулся ли он к нам с Барракуда"; если нет, вы хотите отправить его на барракуду. Просто убедитесь, что вы не добавляете новые IP-адреса в эти поля фильтрации без обновления Exim, иначе у вас будет петля почты.
Если вы хотите защитить от такой возможности, вы можете иметь блоки фильтров, отправляемые на порт 26 вместо 25 на вашем сервере Exim, и иметь фильтры IP, которые разрешают доступ к этому порту только из блоков фильтров, и делать set acl_c_is_from_barracuda = yes
основанный на $received_port
,
После этого вы можете вызвать первый маршрутизатор barracuda_filter
и включают в себя:
condition = ${if !bool{$acl_c_is_from_barracuda}}
Так что, если это не из барракуда, отправьте его в барракуда.
Затем последующие маршрутизаторы отправляют почту в обычном режиме.