Наверх
Дополнительные способы задания спам-комбинаций

0). Два простейший способа - с помощью классов D и C , позволяющих задать спам-слова в строке определения данного класса
Class D
LOCAL_RULESETS
HSubject:                  $>Check_Subject
D{MPat}Klez
D{MMsg}This message may contain a Klez VIRUS
SCheck_Subject
R$* ${MPat} $* $#error $: 553 ${MMsg}

Class C
LOCAL_RULESETS
HSubject:                  $>Check_Subject
C{MPat} sex girl porno
D{MMsg}This message may contain SPAM
SCheck_Subject
R$* $={MPat} $* $#error $: 553 ${MMsg}


1). C помощью класса F , позволяющего читать элементы класса из файла:
Создаем файл /etc/mail/SubjMatchReject и заполняем его spam-вариантами, причем пробелы в темах заменяем на точки, затем редактируем sendmail.mc:
LOCAL_CONFIG
F{MRej}/etc/mail/SubjMatchReject
Ksyslog syslog

LOCAL_RULESETS
HSubject: $>CheckSubject
SCheckSubject
Необязательное правило, только , если необходимо записывать в maillog темы всех писем :
R$*                        $:$(syslog subject=$1 $) $1
R$* $={MRej} $*                        $#error $: "550 I do not like this subject"
Пересобираем sendmail.cf, перезапускаем sendmail. После каждого редактирования файла /etc/mail/SubjMatchReject нужно будет перезапустить sendmail.

2).C помощью специального преобразования класса text:
LOCAL_CONFIG
# Subject list (Stop Spam by Subject)
Ksubject text -k0 -v1 -z: /etc/mail/subject (ключ -z:показывает, что пробелы в /etc/mail/subject должны быть заменены двоеточиями)
LOCAL_RULESETS
HSubject: $>CheckSubject
SCheckSubject
R$*                $: $(subject $1 $)
RREJECT               & $#error $@ 5.7.1 $: "550 Access Denied"
Пересобираем sendmail.cf, перезапускаем sendmail. После каждого редактирования файла /etc/mail/subject нужно будет перезапустить sendmail.

3). С помощью специального преобразования класса hash
3.1) Создаем файл /etc/mail/spam_subj (пробел между ключом и значением заменяем на | ):
1 2 3 4|SPAM
a b c d|SPAM
Z X C V|SPAM
1234|SPAM
3.2) Создаем базу spam_subj.db, ключ -t| указывает на замещение пробела новым разделителем (этот ключ работает только начиная с версии 8.12 ):
makemap hash -t| spam_subj <spam_subj
3.3) Редактируем sendmail.mc
LOCAL_CONFIG
Ksubj hash -f -z| /etc/mail/spam_subj
LOCAL_RULESETS
HSubject: $>CheckSubject
SCheckSubject
R$*                $: <$(subj $1 $)>
R<SPAM>                $#error $: 553 This message may contain SPAM
3.4) Пересобираем sendmail.cf, перезапускаем sendmail.
Преимущество этого способа заключается в том, что не нужно перезагружать sendmail каждый раз при редактировании файла /etc/mail/spam_subj. А минус в том, что нельзя использовать regex, а также в том, что соответствие устанавливается строго: комбинация "1 2 3 4 5" не будет заблокирована.
Проверяем работу фильтра:
/usr/sbin/sendmail -bt -Cregex.cf -d39.99 <subj1 >subj11
Входные данные и результат проверки - здесь.

4). С помощью специального преобразования класса hash, файла аccess (либо произвольного hash-файла) и тэгов.
4.1) Редактируем имеющийся файл /etc/mail/access (пробел между ключом и значением заменяем на | ):
Добавляем в него spam-темы, помечая их tag'ом Mytag:
Mytag:girl SPAM
Mytag:sex SPAM
Mytag:sale SPAM
4.2) makemap hash access < access
4.3) Редактируем sendmail.mc
LOCAL_RULESETS
HSubject: $>CheckSubject
SCheckSubject
R$*                $: <$(access Mytag: $1 $)>
R<SPAM>                $#error $: 553 This message may contain SPAM
4.4) Пересобираем sendmail.cf, перезапускаем sendmail.