Вече има работещ сървър но проблема със спама си остава. Единия от вариантите е да се четат списъци с IP адреси които са забранени (RBLs). Проблема обаче е, че ако го няма адреса в този списък то не означава, че не генерира спам. На помощ идва SpamAssasin. Той поддържа евристични методи за анализ на заглавието и текста в тялото на писмото, филтри по Bayesian, DNS блокиращ списък и съвместни бази данни за филтриране. Той е основан на Perl скрипт. С инсталацията идва и над 60 добавки помагащи да изчистят спама. Инсталацията му е следната:
# apt-get install spamassassin -su: 101: /usr/share/bash-completion/bash_completion: Syntax error: "(" unexpected (expecting "}") dpkg: error processing package spamassassin (--configure): subprocess installed post-installation script returned error exit status 2 dpkg: dependency problems prevent configuration of sa-compile: sa-compile depends on spamassassin; however: Package spamassassin is not configured yet. dpkg: error processing package sa-compile (--configure): dependency problems - leaving unconfigured Processing triggers for libc-bin (2.24-11+deb9u4) ... Processing triggers for systemd (232-25+deb9u11) ... Errors were encountered while processing: spamassassin sa-compile E: Sub-process /usr/bin/dpkg returned an error code (1)
Това е така защото spamassassin се мъче да създаде потребител debian-spamd, който да ползва щел /bin/sh. Това няма да се получи, тъй като ние ползваме /bin/bash. Да оправим грешката:
# vipw # Търсим реда: debian-spamd:x:112:118::/var/lib/spamassassin:/bin/sh # Поправяме го на: debian-spamd:x:112:118::/var/lib/spamassassin:/bin/bash
Да поправим грешката:
# dpkg --configure -a Setting up spamassassin (3.4.2-1~deb9u1) ... Setting up sa-compile (3.4.2-1~deb9u1) ... Running sa-compile (may take a long time)
Всичко е наред, да продължим със spamass-milter
# apt-get install spamass-milter
SpamAssassin ще се стартира като демон и ще чака през цялото време за връзка с Postfix. Връзката ще работи върху milter протокол.
# postconf smtpd_milters=unix:/spamass/spamass.sock
SpamAssasin ще очаква специални променливи (макроси), затова ще се добавят и те към Postfix за да се страртират.
# postconf milter_connect_macros="i j {daemon_name} v {if_name} _"
Да настроим и SpamAssassin:
# vi /etc/default/spamassassin # Търсим реда: ENABLED=0 # Заменяме го с: ENABLED=1 # Търсим реда: OPTIONS="--create-prefs --max-children 5 --helper-home-dir" # Заменяме го с: OPTIONS="--create-prefs --max-children 5 --helper-home-dir -x -u vmail" # Търсим реда: CRON=0 # Заменяме го с: CRON=1
Допълнителните опции -x -u vmail поясняват на SpamAssasin да гледа за its Bayes database в домашната папка на vmail потребителите. За по голяма точност ще се поставят в /home/vmail/.spamassassin директорията. CRON=1 прави запис на Cron в /etc/cron.daily/spamassasin и тегли нови антиспам правила всяка вечер За да се стартира автоматично процеса spamd изпълнете:
# systemctl enable spamassassin Synchronizing state of spamassassin.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable spamassassin
SpamAssain milter се нуждае от досъпт до данните на spamd. Трябва да се дефинира потребител с права да пуска и спира демона spamd. Ще се добави потребител debian-spamd в групата spamass-milter.
# adduser spamass-milter debian-spamd Adding user `spamass-milter' to group `debian-spamd' ... Adding user spamass-milter to group debian-spamd Done.
Да проверм дали всичко е направено:
# groups debian-spamd debian-spamd : debian-spamd
Всичко е точно, да рестартираме антиспама:
# service spamassassin restart
# service spamass-milter restart
# service spamassassin status
С инсталацията на SpamAssasin идва тестово спам писмо. То се нарича
# apt-get install swaks
# swaks --to tachko@home.tlan.net --server localhost --data /usr/share/doc/spamassassin/examples/sample-spam.txt
# vi /var/log/mail.log
Jul 8 20:31:00 post dovecot: imap-login: Login: user=<tachko@home.tlan.net>, method=PLAIN, rip=::1, lip=::1, mpid=3122, secured, session=<M/G8zi6NSrAAAAAAAAAAAAAAAAAAAAAB>
Jul 8 20:31:00 post dovecot: imap(tachko@home.tlan.net): Logged out in=123 out=1194
Jul 8 20:31:00 post postfix/smtpd[3100]: connect from localhost[::1]
Jul 8 20:31:00 post postfix/smtpd[3100]: 59CCF100ACE: client=localhost[::1]
Jul 8 20:31:00 post postfix/cleanup[3103]: 59CCF100ACE: message-id=<GTUBE1.1010101@example.net>
Jul 8 20:31:00 post spamd[2971]: spamd: connection from ::1 [::1]:38232 to port 783, fd 5
Jul 8 20:31:00 post spamd[2971]: spamd: processing message <GTUBE1.1010101@example.net> for tachko:5000
Jul 8 20:31:00 post spamd[2971]: spamd: identified spam (1001.3/5.0) for tachko:5000 in 0.1 seconds, 1096 bytes.
Jul 8 20:31:00 post spamd[2971]: spamd: result: Y 1001 - ALL_TRUSTED,DATE_IN_PAST_96_XX,GTUBE,HEADER_FROM_DIFFERENT_DOMAINS scantime=0.1,size=1096,user=tachko,uid=5000,required_score=5.0,rhost=::1,raddr=::1,rport=38232,mid=<GTUBE1.1010101@example.net>,autolearn=no autolearn_force=no
Jul 8 20:31:00 post postfix/qmgr[773]: 59CCF100ACE: from=
SpamAssassin е отбелязал 1001 точки което е много. Границата е 5 и така мейла е маркиран като спам. Проверката за спам работи. Трябва писмата маркирани като спам да се поставят в папката за спам.
За целта се грижи файла /etc/dovecot/conf.d/90-sieve.conf
# vi /etc/dovecot/conf.d/90-sieve.conf # Търсим реда: #sieve_after = # Под него поставяме: sieve_after = /etc/dovecot/sieve-after
Горното действие ни заставя да създадем папката /etc/dovecot/sieve-after
# mkdir /etc/dovecot/sieve-after
Да създадем и следния файл:
# vi /etc/dovecot/sieve-after/spam-to-folder.sieve require ["fileinto","mailbox"]; if header :contains "X-Spam-Flag" "YES" { fileinto :create "INBOX.Junk"; stop; }
Ако SpamAssasin маркира заглавие като спам, то ще премести писмото в INBOX.Junk папката. Dovecot все още не знае какво да прави затова трябва да му се укаже за спама:
# sievec /etc/dovecot/sieve-after/spam-to-folder.sieve
Рестартираме Dovecot:
# service dovecot restart # service dovecot status
И отново да тестваме спама:
# swaks --to tachko@home.tlan.net --server localhost --data /usr/share/doc/spamassassin/examples/sample-spam.txt
Сега ако влезем с браузъра в пощенската кутия, ще видим, че писмото се намира в папка Спам. Готово антиспама работи.
Една благинка, Анди Олсен казва, че Dovecot е въвел функция за автоматично изтриване на съдържанието в папките Trash и Junk. Нека да се възползваме:
# vi /etc/dovecot/conf.d/15-mailboxes.conf # If you have a virtual "Flagged" mailbox: #mailbox virtual/Flagged { # special_use = \Flagged # comment = All my flagged messages #} mailbox INBOX.Junk { auto = subscribe special_use = \Junk autoexpunge = 30d } mailbox INBOX.Trash { auto = subscribe special_use = \Trash autoexpunge = 30d } # service dovecot restart
След 30-тия ден, автоматично папките Спам и Кошче ще се изпразнят.
Сега нещо важно: Понякога сървъра се пълни със страшно много спам. И тогава:
# postqueue -p Mail queue is empty
В случая няма заявки за спам, но ако имаше и то много се предлага следното:
# postsuper -d ALL И ако имаше много заявки ще върне нещо от рода: postsuper: Deleted: 11018 messages в зависимот от броя спам
След тази операция като се провери ще се получи следнот:
# postqueue -p Mail queue is empty
Всичко това чисти опашката за спам. Това е единия начин за справяне със спама. Този метод работи и то добре, при условие, че не получавате много поща. Примрно ако получавате по 100 000 писма на ден то има по добър нчин но в следващата статия.