Итак, в прошлый раз мы настроили антивирус ClamAV для работы с Postfix. Пора теперь побороть и спам на наших почтовых серверах.

Для начала, нам нужно установить Spamassassin.

yum install spamassassin

Далее нам нужно немного исправить конфиг /etc/mail/spamassassin/local.cf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 # Количество очков когда письмо считается спамом
 required_hits           4.0 # 4 - это ну очень уж жестоко, кстати
 
 # Небольшой текст, который мы добавим в письмо в тему. 
 # Теперь по слову SPAM пользователи могут настроить фильтр
 # для отправки этого добра сразу в корзинку
 rewrite_header Subject  [*****SPAM*****]
 
 # Можно спам убрать вообще в прикрепленный файл. Но стоит ли...
 report_safe             0
 
 # Включить Bayes
 use_bayes               1
 
 # Включить автообучение Bayes
 bayes_auto_learn        1
 bayes_path              /home/spamd/
 bayes_file_mode         0666
 
 # Включить или нет сетевые проверки
 skip_rbl_checks         0
 use_razor2              0
 use_dcc                 0
 use_pyzor               0
 
 # И белый список ну очень важных персон
 whitelist_from          *@xyz.xx

Теперь надо запустить антиспам:

1
 /etc/init.d/spamassassin restart

И проверяем с помощью команды netstat -antpu | grep spam

1
 TCP        0      0 127.0.0.1:783               0.0.0.0:*                   LISTEN      20622/spamd.pid

Отлично, антиспам готов работать от зари до зари. Осталось только намекнуть Postfix, чтобы он не брезговал помощью такого важного друга. Для этого просто откроем файл /etc/postfix/master.cf и немного изменим его (к лучшему!):

Дня начала найдите строчку (почти в самом верху), которая начинается на smtp. Например, такую:

1
smtp      inet  -       -       n       -       -       smtpd

И измените её до такого состояния:

1
2
smtp      inet  n       -       n       -       -       smtpd
    -o content_filter=spamfilter:dummy

Обратите внимание, что не только добавилась вторая строчка, но и символ n после слова inet.

Теперь стоит перейти в конец файла, чтобы еще немного поизуродовать его. Например, добавить такие следующие строки:

1
2
3
 #welcome spam
 spamfilter unix - n n - - pipe
   flags=Rq user=spamfilter argv=/usr/local/bin/spamfilter -f ${sender} -- ${recipient}

И к тому же создаём файл /usr/local/bin/spamfilter следующего содержания:

1
2
3
 #!/bin/bash
 /usr/bin/spamc | /usr/sbin/sendmail.postfix -i "$@"
 exit $?

Сохраняем и перезапускаем нашего Франкенштейна:

1
 /etc/init.d/postfix restart

Теперь, как только спам будет поступать, в логах можно будет увидеть следующее:

1
 Nov 23 14:47:24 domain spamd[20625]: spamd: result: . 3 - HTML_MESSAGE...... и т.д.

Тест на спам

Отправляем на тестируемые сервер письмо с таким текстом:

1
 XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Должно получить как минимум 1000 очков и получить гордый титул SPAM

Отправляем СПАМ с определёнными баллами на спам-ящик

Итак, у нас стоит spamassassin и периодически пользователи получают ненужную корреспонденцию. Средствами Postfix мы будем отправлять спам с 12 баллами и выше на отдельный спам-ящик. Вроде как и пользователи не будут получать ненужное и, при необходимости, можно найти очередное “важное” письмо.

  • Создаём ящик для спама. Например, spam@wikiadmin.net
  • В main.cf постфикса добавим
1
 header_checks = regexp:/etc/postfix/header_checks
  • В файл /etc/postfix/header_checks добавим строчку:
1
/^X-Spam-Level:.*\*{12,}.*/ REDIRECT spam@wikiadmin.net

То есть тут СПАМ, получивший 12 баллов и выше, будет отправлен в спам-ящик, а не пользователю. Конечно же, не стоит забывать чистить эту кучу раз в некоторое время.

  • Перезапускаем postfix
1
 /etc/init.d/postfix restart
  • Эксперимента ради отправьте себе тест на спам (указанный выше) и посмотрите, что будет в логах. Postfix должен будет отправить письмо в spam@wikiadmin.net