У нас есть система защиты от спама, которая иногда дает ложные срабатывания. При получении отчета мы проверяем и заносим в белый список ошибочно сработавшие домены или 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"
####