Site icon IT Draft

Скрипты добавления доменов в белый и черный списки spamassassin

Скрипты добавления доменов в белый и черный списки

Скрипт добавления доменов из писем, перенаправленных в ham@example.com, в файл белых список адресов

[root@localhost]# cat /home/whitelist.sh
#!/bin/sh
temp=/etc/mail/spamassassin/temp_whitelist.txt
result=/etc/mail/spamassassin/whitelist.cf
catalog=/var/vmail/example.com/ham/new/

if [ `ls $catalog | wc -l` -eq 0 ]
then
    echo "Emty"
else

    for file in /var/vmail/example.com/ham/new/*
	do
	#	echo $file
	#    Вывод строки, содержащей "In-Reply.." | Оставить только e-mail                               | Убрать символы до @    | исключить          | Добавить символы перед @            >>   сохранить в файл
	    grep "In-Reply-To: " $file | grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" | awk -F'@' '{print $2}' | grep -v example.com | awk '{print "whitelist_from *@"$0}' >> $result
    done
    mv $result $temp
    awk '!($0 in a) {a[$0];print}' $temp > $result

fi

Принцип действия:
Вначале задаются переменные

- temp - временный файл
- result - конечный файл
- catalog - путь к каталогу с письмами почтового ящика

Далее идет проверка

if [ `ls $catalog | wc -l` -eq 0 ]

Если новых писем нет, скрипт заканчивает работу. Если есть, выполняется цикл.

Selectel — ведущий провайдер облачной инфраструктуры и услуг дата-центров

Компания занимает лидирующие позиции на рынке на рынке выделенных серверов и приватных облаков, и входит в топ-3 крупнейших операторов дата-центров в России.


# Вывод строки, содержащей "In-Reply.."
grep "In-Reply-To: " $file

# Оставить только e-mail
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b"

# Убрать символы до @
awk -F'@' '{print $2}'

# Исключить example.com
grep -v example.com

# Добавить символы перед @ и сохранить в результирующий файл
awk '{print "whitelist_from *@"$0}' >> $result

Аналогично, скрипт добавления доменов из писем, перенаправленных в spam@example.com, в файл черных список адресов:

[root@localhost]# cat /home/blacklist.sh
#!/bin/sh
temp=/etc/mail/spamassassin/temp_blacklist.txt
result=/etc/mail/spamassassin/blacklist.cf
catalog=/var/vmail/example.com/spam/new/

if [ `ls $catalog | wc -l` -eq 0 ]
then
    echo "Emty"
else

    for file in /var/vmail/example.com/spam/new/*
	do
	#	echo $file
	#    Вывод строки, содержащей "In-Reply.." | Оставить только e-mail                               | Убрать символы до @    | исключить          | Добавить символы перед @            >>   сохранить в файл
	    grep "In-Reply-To: " $file | grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" | awk -F'@' '{print $2}' | grep -v example.com | awk '{print "blacklist_from *@"$0}' >> $result
    done
    mv $result $temp
    awk '!($0 in a) {a[$0];print}' $temp > $result

fi

Делаем файлы исполняемыми

[root@localhost]# chmod +x /home/whitelist.sh
[root@localhost]# chmod +x /home/blacklist.sh

Добавляем в crontab задание

[root@revolution ~]# cat /var/spool/cron/root
# обучение spamassassin раз в 60 минут
*/60 * * * * /usr/bin/sa-learn --spam /var/vmail/example.com/spam/new/
*/60 * * * * /usr/bin/sa-learn --ham /var/vmail/example.com/ham/new/
# запуск скриптов сбора доменов в 0:10 и 0:11
10 0 * * * /home/whitelist.sh
11 0 * * * /home/blacklist.sh
# очистка ящиков в 0:15 и 0:17
15 0 * * * /bin/rm -rf /var/vmail/example.com/spam/new/*
17 0 * * * /bin/rm -rf /var/vmail/example.com/ham/new/*
# перезапуск сервиса spamassassin
19 0 * * * service spamassassin restart
Exit mobile version