Скрипт 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"
####