Назад | Перейти на главную страницу

Сценарий exim для вывода отправителя и получателя

У нас есть система защиты от спама, которая иногда дает ложные срабатывания. При получении отчета мы проверяем и заносим в белый список ошибочно сработавшие домены или IP-адреса. Однако я хотел бы автоматизировать это, создав сценарий, который будет делать следующее, когда кто-то с нашего сервера отправляет сообщение:

-> если отправитель размещен на нашем сервере -> возьмите отправителя и получателя -> введите команду 'spfbl superwhite add "recipient@domain.tld> sender@domain.tld"'.

Очень важно, чтобы система фильтровала только отправителей, размещенных на наших серверах cPanel (поэтому мы можем использовать файл / etc / localdomains) .. но я понятия не имею, как это начать.

У кого-нибудь есть идеи?

Очень признателен.

ОБНОВИТЬ

Мне удалось это сделать с помощью скрипта, предоставленного kondybas, с некоторыми изменениями:

Section: PREROUTERS
whitelister:
  driver    = accept
  domains    = !+local_domains
  condition = ${if match_domain{$sender_address_domain}{+local_domains}}
  transport = whlist
no_more

-

Section: TRANSPORTSTART
whlist:
  driver  = pipe
  command = /var/spool/exim/autoWH $local_part@$domain 

И файл / var / spool / exim / autoWH:

#!/bin/sh

# Debug:
echo "Args recebidos: \$1 = $1" >> /var/spool/exim/log-transport.log

# Magica:
/var/spool/exim/spfbl.sh white sender $1
####

Все в папке, принадлежащей exim, поэтому у меня нет проблем с разрешениями.

Упс .. проблема: используя эти параметры, exim не доставляет почту, поскольку пытается сделать локальную доставку: локальная доставка не удалась

Просто добавьте роутер и транспорт вот так:

begin routers
whitelister:
  driver    = accept
  domain    = !+local_domains
  condition = ${if inlist{$sender_address_domain}{+local_domains}}
  transport = whlist
  unseen

и транспорт:

begin transports
whlist:
  driver  = pipe
  command = spfbl superwhite add "$address_data > $sender_address_data"

ОБНОВИТЬ

Лучшим подходом является вызов сценария оболочки вместо прямого вызова служебной программы. По крайней мере, вы не перезагрузили exim каждый раз, когда вы изменяете скрипт:

begin transports
whlist:
  driver  = pipe
  command = /path/to/script $address_data $sender_address_data

Тогда сценарий должен быть таким:

#!/bin/sh

# Debugging info:
echo "Received args are: \$1 = $1 and \$2 = $2" >> /path/to/transport.log

# The magic:
/path/to/spfbl superwhite add "$1 > $2"
####