Poczta e-mail
Założenia- krótki wstęp
System pocztowy na
serwerze banita.pl jest "wspomagany" poprzez procmail do obsługi dodatkowych
bajerów w stylu filtrowania poczty od syfu zwanego spamem oraz do powiadamiania
o nowej poczcie na SMS/Gadu-Gadu/Winpopup i automatycznych odpowiedzi. Główne
założenia tego systemu to że każdy użytkownik oddzielnie i samodzielnie może
włączać/wyłączyć ochronę antyspamową (dlatego nie ma filtrów na poziomie MTA
czyli serwera poczty). Podobnie sprawa ma się z sprawa z pozostałymi bajerami.
Kolejne założenie że
obsługa ze strony usera ma być możliwie prosta i dlatego user uzywa tylko plików
tekstowych , które musi poprzez ftp wrzucić na swe konto (opis od strony usera
jest gdzieś tutaj na dole strony >>
Poczta). Dlaczego pliki tekstowe?
Bo nie potrafiłem wtedy wymyślić czegoś lepszego i równie prostego (obecnie w
toku prac jest zastąpienie tego pluginem do SquirrelMail.
No i ostatnia zaleta
tandemu MTA (np. Sendmail lub Postfix) plus procmail to to że jest on strasznie
uniwersalny, bo pod większość jeśli nie wszystkie uniksowe serwery poczty
można go podłączyć. Wady (bo takie też są) to wydajność ale o to się martw przy
b. dużej ilości kont.
No to jedziemy...
Może dla jednych
będzie to balanie proste ale niektóre osoby które doznają szoku jak zobaczą plik
z regułkami dla procmail + skrypty. Opis jest step-by-step (dla systemów w stylu
linux dystro RedHat, ale w większości innych tak samo) więc tylko w
większości wypadków tylko kopiować i wklejać.
Na czerwono
zaznaczyłem system antyspamowy, na zielono resztę (powiadamiania i autoresponder),
obie części działają niezależnie, wiec możesz sobie wybrać co bierzesz.
Ochrona antyspamowa
działa o bazę Polspam.org oraz system filtrowania po treści maili co się
zwie
SpamAssassin.
Z prawami root
wyedytuj plik /etc/crontab i dopisz linie
======================================
05
* * * * root /etc/mail/spamer &>/dev/null
======================================
Teraz plik /etc/mail/spamer
zawiera coś takiego:
======================================
#!/bin/bash -x
# aktualizuje baze spamerow z polsapmem
cd /etc/mail
/etc/mail/sync_web.pl
LICZNIK=`cat /etc/mail/spammers.txt |wc -l`
DATE=`/bin/date`
echo "$LICZNIK $DATE" >> /var/log/procmail/sys.log
# sortowanie bazy na maile i domeny
cat /etc/mail/spammers.txt |grep "@" |awk '{print $1}' > /etc/mail/spammers-mail.txt
cat /etc/mail/spammers.txt |grep -v "@" |awk '{print "@"$1}' > /etc/mail/spammers-domena.txt
======================================
Plik /etc/mail/sync_web.pl
o pobrania na końcu tej strony w "Mega Pack"
Plik
/etc/mail/spammers.txt czyli bazę spamerów polspam.org, do pobrania
na końcu tej strony w "Mega Pack"
Teraz tworzysz plik globalny procmaila - /etc/procmailrc,
komentarze w pliku
======================================
SHELL=/bin/bash
## autor Marcin Moczkowski (glappo@banita.pl)
# wstęp do zabawy czyli definiujemy zmienne
VERBOSE=off
#LOGFILE=/var/log/procmail/procmail.log
DATE=`/bin/date`
FROM=`formail -rzx 'To:'`
FROMDO=`formail -rzx 'To:'|awk -F@ '{print "@"$2}'`
TO=`formail -x"To:"`
# znakowanie poczty w oparciu o bazę polspam z mailami
:0 fBw
* ? grep "${FROM}" /etc/mail/spammers-mail.txt
| formail -i "X-Polspam: yes" ; \
echo "$DATE from $FROM to $TO Polspam-mail" >> /var/log/procmail/sys.log
# znakowanie poczty w oparciu o bazę polspam z domenami
:0 fBw
* ? grep "${FROMDO}" /etc/mail/spammers-domena.txt
| formail -i "X-Polspam: yes" ; \
echo "$DATE from $FROM to $TO Polspam-domena" >> /var/log/procmail/sys.log
# znakowanie poczty w oparciu o bazę maili recydiwistów wyłapanych przez
spamassasin
:0 fBw
* ? grep "${FROM}" /etc/mail/spamassassin-mail.txt
| formail -i "X-Polspam: yes" ; \
echo "$DATE from $FROM to $TO Spamassassin-mail" >> /var/log/procmail/sys.log
# teraz tutaj możesz dodać jeszcze dodatkowe
regułki antyspamowe
======================================
Teraz udajesz się na stronkę
SpamAssassin,
pobierasz program i go
instalujesz (najprościej jeśli użyjesz rpm). Tworzysz globalny plik dla tego
pogramu w /etc/mail/spamassassin/local.cf. Możesz go wygenerować na
stronie
http://www.yrex.com/spam/spamconfig.php dla wersji SpamAssassin 2.5x lub
skopiować poniższy. Czyli /etc/mail/spamassassin/local.cf
======================================
# This is the right place to customize your
installation of SpamAssassin.
# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
# tweaked.
#
###########################################################################
#
#rewrite_subject 0
#report_safe 1
# SpamAssassin config file for version 2.5x
# generated by http://www.yrex.com/spam/spamconfig.php (version 1.01)
# How many hits before a message is considered spam.
required_hits 5.0
# Whether to change the subject of suspected spam
rewrite_subject 1
# Text to prepend to subject if rewrite_subject is used
subject_tag *****SPAM*****
# Encapsulate spam in an attachment
report_safe 1
# Use terse version of the spam report
use_terse_report 1
# Enable the Bayes system
use_bayes 1
# Enable Bayes auto-learning
auto_learn 1
# Enable or disable network checks
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1
# Mail using languages used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_languages all
# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_locales all
======================================
Teraz przechodzimy do katalogu przykładowego usera czyli /home/user i
tworzymy plik .procmailrc, czyli scieżka do pliku to /home/user/.procmailrc
. Ten plik ma należeć do usera oczywiście., a w nim ma się znaleźć:
======================================
# ten plik .procmailrc zebral w calosc Marcin Moczkowski (glappo@banita.pl)
SHELL=/bin/bash
VERBOSE=off
#LOGFILE=$HOME/.procmail.log
# zmiene do powiadomień o nowej poczcie
TELEFON=`cat $HOME/sms.txt |tr -d '\r'`
UIDGG=`cat $HOME/gg.txt |tr -d '\r'`
KOMP=`cat $HOME/komp.txt |tr -d '\r'`
# sprawdzanie czy user chce filtrować pocztę
POLSPAM=`if test -e $HOME/polspam.txt ; then echo "$DEFAULT"
; else \
if test -e $HOME/mailspam.txt ; then echo "mailspam.txt" ; \
else echo "/dev/null" ; fi ; fi`
SPAMDIR=`if test -e $HOME/mailspam.txt ; then echo "mailspam.txt" ; else echo "/dev/null"
; fi`
SPAMER=`if test -e $HOME/spamer.txt ; then cat $HOME/spamer.txt |tr -d '\r' > $HOME/spamer.txt
; /
echo "$HOME/spamer.txt" ; fi`
#
SUBJECT=`formail -zxSubject:`
FROM=`formail -rt -xTo:`
BODY=`formail -c | mimecut`
# kasowanie spamu z bazy polspam
:0
* ^X-Polspam: yes
$POLSPAM
# filterek spamu w oparciu o bazę usera
:0
* ? formail -x"From" -x"From:" -x"Sender:" \
-x"Reply-To:" -x"Return-Path:" -x"To:" \
| grep -is -f $SPAMER
$SPAMDIR
# filterek spamu w oparciu o spamassassin
:0fw: spamassassin.lock
* < 256000
| spamassassin
# pomocne zmiene
TO=`formail -x"To:"`
DATE=`/bin/date`
# przesylanie syfu wyłapanego przez spamassassin na
konto spam@twoja.domena.pl
:0 c
* ^X-Spam-Status: Yes
| $SENDMAIL -oi spam@twoja.domena.pl
# kasowanie spamu złapanego przez spamassassin
:0:
* ^X-Spam-Status: Yes
$POLSPAM
# powiadamianie o nowej poczcie na sms
:0 c
* .*
| if test -e $HOME/sms.txt ; then \
sendsms $TELEFON "\"$SUBJECT\" $BODY" $FROM ; fi
# powiadamianie o nowej poczcie na Gadu-Gadu
:0 c
* .*
| if test -e $HOME/gg.txt ; then \
www2gg $UIDGG "Masz nowy mail OD: $FROM TEMAT: \"$SUBJECT\" TRESC: $BODY" ; fi
# powiadamianie o nowej poczcie na Winpopup
:0 c
* .*
| if test -e $HOME/komp.txt ; then \
echo "Masz nowy mail OD: $FROM TEMAT: $SUBJECT TRESC: $BODY" | smbclient -M "$KOMP"
; fi
# autoresponder
:0 Whc: vacation.lock
* !^FROM_DAEMON
* !^X-Loop: $LOGNAME@$HOSTNAME
| if test -e $HOME/odp.txt ; then formail -rD 8192 vacation.cache ; fi
:0 ehc
| if test -e $HOME/odp.txt ; then (formail -rA"Precedence: junk" \
-A"X-Loop: $LOGNAME@$HOSTNAME" ; cat $HOME/odp.txt \
|tr '\214\217\237\271\245\234' '¦¬Ľ±ˇ¶' ; ) | $SENDMAIL -oi -t ; fi
======================================
To teraz żeby dokończyć system antyspamowy, stwórz konto spam w systemie na
które będzie kierowana poczta wyłapana przez SpamAssassin,
w celu wyłapywania recydywistów czyli jeśli jeszcze raz ktoś zespamuje z
tego maila to już go mamy w bazie /etc/mail/spamassassin-mail.txt.Więc
teraz "specjalny"plik dla usera spam czyli plik /home/spam/.procmailrc
=======================================
# ten plik .procmailrc zebral w calosc Marcin
Moczkowski (glappo@banita.pl)
SHELL=/bin/bash
VERBOSE=off
#LOGFILE=$HOME/.procmail.log
# spam z bazy polspamu tradycyjnie tniemy
POLSPAM=`if test -e $HOME/polspam.txt ; then echo "$DEFAULT" ; else \
if test -e $HOME/mailspam.txt ; then echo "mailspam.txt" ; \
else echo "/dev/null" ; fi ; fi`
SPAMDIR=`if test -e $HOME/mailspam.txt ; then echo "mailspam.txt" ; else echo "/dev/null"
; fi`
# adres zwrotny
FROM=`formail -rtz -xTo:`
TO=`formail -x"To:"`
DATE=`/bin/date`
:0
* ^X-Polspam: yes
$POLSPAM
# dopisywanie spamerów do bazy
:0:
* ^X-Spam-Status: Yes
| echo "$DATE from $FROM to $TO Spamassassin" >> /var/log/procmail/sys.log ; \
echo "$FROM" |grep "@" |grep -v banita.pl >> /etc/mail/spamassassin-mail.txt
==================================
Ostatni etap ochrony antyspamowej to utworzenie pliku gdzie będą lądowały
logi tego co nasz filterek wyłapał, czyli utwórz plik /var/log/procmail/sys.log
do którego może zapisywać tylko user root i grupa spam do której należy tylko
user spam
========================================
Wracając do powiadamiania o nowej poczcie na SMS/Gadu-Gadu/Winpopup
i Autorespondera, do tego co wyżej było na zielono potrzebujesz paru pliczków:
- sendsms - jakiś skrypt do wysłania sms
- www2gg - sklejony w całość pliki bramki www2gg ze strony
http://gg.wha.la/ UWAGA:
musisz zarejestrować własnego usera gg i potem wyedytować plik www2gg i wpisać
go w pola
$numer_bramki = "tutaj cyferki wpisz"; $haslo_bramki = "hasło";
- smbclient - pliczek z pakietu samba czyli zapraszam na
http://samba.org/
- mimecut - pliczek czyszczący maile z m.in. tagów html
No koleś musze ci pogratulować że jakimś cudem aż tutaj dotarłeś czyli na
koniec textu.
Całość czyli wszystkie opisane pliki plus te brakujące trzy powyższe (poza
smbclient) możesz pobrać poniżej
procmail_banita.tar.gz (1,9
MB) <<< paczuszka z filterkami spamowymi i bazą polspam + powiadamianie poczcie na SMS/Gadu-Gadu/Winpopup
i Autoresponder
opisy dla userów:
Konfiguracja powiadamiania o Mailach na
SMS/ Gadu-Gadu/ Popup
Konfiguracja filtrów antyspamowych
Konfiguracja automatycznego odpowiadania na maile
Marcin Moczkowski
pytania zadawać najlepiej na forum ;-)
|