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

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

-> если отправитель размещен на нашем сервере -> захватить отправителя и получателя -> введите команду 'spfbl superwhite add "receient@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 не доставляет почту, поскольку пытается выполнить локальную доставку: локальная доставка не удалась

1 ответ

Решение

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

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"
####
Другие вопросы по тегам