Linux > Instalace Postfix + ClamAV + Spamassassin + Sagator + Dovecot na Fedora 8

Autor: Jan Jelínek (mailto:), Téma: Linux
Vydáno dne 23. 04. 2008 (6797 přečtení)




Aneb jak sobě mail server udělati.

Začneme odinstalací sendmailu
rpm -e sendmail
pokud se mu nechce pryč pomůže parametr
--nodeps
a pokud hlásí error: "sendmail" specifies multiple packages znamená to, že máte 64b systém a je potřeba přesněji specifikovat název balíčku
rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}n' sendmail
vrátí
sendmail-8.14.2-1.fc8.x86_64
sendmail-8.14.2-1.fc8.i386
ted víme jak se zbavit té príšery
rpm -e --nodeps sendmail-8.14.2-1.fc8.x86_64 sendmail-8.14.2-1.fc8.i386
a naistalujeme postfix
yum install postfix
a upravime soubor
vi /etc/postfix/main.cf
pro nás jsou zajímavé tyto parametry:
myhostname = host.domain.tld
mydomain = domain.tld
myorigin = $myhostname
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
        mail.$mydomain, www.$mydomain, ftp.$mydomain
mynetworks = 192.168.1.0/24, 127.0.0.0/8
home_mailbox = Maildir/
nainstalujeme antivir
yum install clamav clamav-update
v souboru
vi /etc/sysconfig/freshclam
odstraňte nebo zakomentujte řádek
#FRESHCLAM_DELAY=disabled-warn  # REMOVE ME
v souboru
vi /etc/freshclam.conf 
zakomentujte řádek
#Example
a upravte parametr kde bude uložena databáze
DatabaseDirectory /var/lib/clamav
v souboru
vi /etc/cron.d/clamav-update 
nastavte email kam budou chodit oznámení o aktualizaci databáze ClamAV a případně změňte četnost aktualizace a nechte aktualizovat databázi
/usr/bin/freshclam
Zkontrolujeme zda máme instalovaný Spamassassin
rpm -q spamassassin
pokud ne naistalujeme příkazem
yum install spamassassin
spustíme
/etc/init.d/spamassassin start
a přidáme do spuštění po startu počítače
chkconfig --level 3 spamassassin on
Instalace Sagator vytvořte soubor
sagator.repo
>> /etc/yum.repos.d/sagator.repo
a vložte do něj konfiguraci yum repository
vi /etc/yum.repos.d/sagator.repo
[sagator]
name=Fedora Core $releasever - $basearch - Sagator
baseurl=http://www.salstar.sk/pub/sagator/fedora/$releasever/$basearch
enabled=1
gpgcheck=0

[sagator-test]
name=Fedora Core $releasever - $basearch - Sagator - testing
baseurl=http://www.salstar.sk/pub/sagator/fedora/testing/$releasever/$basearch
enabled=0
gpgcheck=0
exclude=*exp*
ted je možné instalovat pomocí yum sagator a zároven jej budeme mít aktualizovaný
yum install sagator sagator-libclamav
Odzálohujte konfigaracní soubor sagatoru a použijte mojí konfiguraci, která viry tiše strká do karantény, znackuje spamy pomocí jedné spamassassin databáze, píše do subjectu mailu [Spam] a príslušný pocet *** podle hodnocení a spamy s vysokým hodnocením rovnou zahazuje.
mv /etc/sagator.conf /etc/sagator.conf.zaloha
>> /etc/sagator.conf
vi /etc/sagator.conf
--- cut ---
## Sagator unnoficial configuration file, modified by David Zejda.
## Most of original comments are deleted - please consult the sagator.conf,
## that comes with your Sagator distribution..

from avlib import *
from scanners import *
from srv import *

## Which mails are considered spam; should be the same as the
## required_hits in spamassassin config.
## Should be declared even in case you don't use the variable in
## your config - it's needed by sagator internal scanners like
## "rewrite".
SPAM_TRESHOLD=4.0

## Rewrites the name of spam to something more useful..
## Used in antispam scanner chains below..
class rewrite_name(rename):
 name='rewrite_name()';
 def scanstream(self,stream):
     level,detected,virlist=match_any.scanstream(self,stream)
     ## Clean messages leave untouched
     if not is_infected(level,detected):
       return level,detected,virlist
     ## These replace variables may be used in new virname definition..
     repl_vars={
       'VNAME': detected,
       'LEVEL': str(level),
       'STARS': '*'*int(level*SPAM_TRESHOLD),
     }
     ## The "detected" is modified, others left unchanged..
     return level,replace_tmpl(self.NEWNAME,repl_vars),virlist


## Custom definition of quarantine report message.
## Dozens of predefined replace variables may be used here..
REPORT_MSG='''
From: $FROM
To: $TO
Subject: Do vasi schranky smeroval virus $VIRNAME!
Reply-To: muj-mail@example.net

                VIRUS NALEZEN A PRESUNUT DO KARANTENY!
---------------------------------------------------------------------
   Do vasi e-mailove schranky smerovala zprava, ktera v priloze
 obsahovala virus. Nebezpecnou prilohu jsme odstranili a presunuli
do karanteny na nasem postovnim serveru. Pokud jste si jisti, ze si
prejete *nebezpecnou* prilohu dostat, prosim preposlete tuto zpravu
       na adresu jelen@jeje.cz a my vam ji zahy vratime.
---------------------------------------------------------------------
STATUS: $STATUS
ULOZENO DO KARANTENY JAKO: $QNAME
---------------------------------------------------------------------
SMTP KOMUNIKACE:
$SMTP_COMM
---------------------------------------------------------------------
HLAVICKA ZPRAVY:
$MSG_HEADER
---------------------------------------------------------------------
SKENER: $SCANNER_NAME
$SCANNER_OUTPUT
'''

## Debugging level, 0=errors only, 1=return status, init messages,
##   2=smtp server communication, 3=detailed smtp server communication,
##   4=tracebacks, 5=smtp client communication
DEBUG_LEVEL=3

## System settings - Debian standard config
CHROOT='/var/spool/vscan'
LOGFILE=CHROOT+'/var/log/sagator/sagator.log'
USER,GROUP='vscan','vscan'
SMTP_SERVER=('127.0.0.1',26)

## Classes of mails according to infection, may be used in the following
## scanner configs; unused classes are commented out.
DROP_INFECTED='.'
# DROP_SELECTED='(worm|@mm|Sobig|Klez|Bugbear|Gibe|Swen|Mimail|Sober|Bagle|Mydoom|Novarg|Lirva)'
# DROP_NOTHING='dasfadsffad'
# DROP_EVERYTHING=''

SCANNERS=[
   log(3,log.FORMAT,
       status("Virus",
           report(['root@localhost'],report.MSG_TMPL,
               quarantine('/tmp/quarantine/%Y%m','',
                   drop(DROP_INFECTED,
#                       time_limit(900,
#                           clamd(['localhost',3310]),
#                           clamd('/var/run/clamav/clamd.sock'),
#                           buffer2mbox(libclam(limits={'maxratio':9999})),
                           buffer2mbox(libclam(limits={'maxratio': 9999},db_options=libclam.CL_DB_PHISHING)),
#                       )
                   )
               )
           )

       ),
       status("Spam",
           rename('',
               cache('t',
                   spamassassind(['127.0.0.1',783])
               ) * const(0.0)
           ),

           drop('.',
               rename('$STARS',
                   cache('t')>=const(3)
               )
           ),
           deliver(
               modify_subject('[%V]',
                   rewrite_name('$VNAME $STARS',
                       cache('t')
                   )
               )
           )
       )
   )
]

SRV=[
 collector('127.0.0.1',28),
 smtpd(SCANNERS,'127.0.0.1',27)
]
--- cut --
Přidejte na konec souboru
vi /etc/postfix/main.cf
#begin: sagator
content_filter=smtp:[127.0.0.1]:27
#end: sagator
vi /etc/postfix/master.cf
#begin: sagator
127.0.0.1:26    inet n - n - 30 smtpd
 -o content_filter=
 -o myhostname=sagator.host.domain.tld
 -o local_recipient_maps=  -o relay_recipient_maps=
 -o mynetworks=127.0.0.0/8  -o mynetworks_style=host
 -o smtpd_restriction_classes=  -o smtpd_client_restrictions=
 -o smtpd_helo_restrictions=  -o smtpd_sender_restrictions=
 -o smtpd_recipient_restrictions=permit_mynetworks,reject
#end: sagator
Přesuňte adresář clamav do chrootu sagatora a vytvořte link
mkdir -p /var/spool/vscan/var/lib/
mv /var/lib/clamav /var/spool/vscan/var/lib/
ln -s /var/spool/vscan/var/lib/clamav /var/lib/clamav
Pustíme sagator a postfix a přidáme do spuštění po startu. pokud sagator beží ukončete jej
ps axf |grep sagator
29565 pts/4    S      0:02 /usr/bin/python /usr/sbin/sagator
29566 pts/4    S      0:00  _ /usr/bin/python /usr/sbin/sagator
29569 pts/4    S      0:00  _ /usr/bin/python /usr/sbin/sagator
29570 pts/4    S      0:00  _ /usr/bin/python /usr/sbin/sagator
/etc/init.d/sagator stop
a ješte jednou zkontrolujte zda neběží, případně ho zavražděte
/etc/init.d/sagator start
/etc/init.d/postfix start
chkconfig --level 3 postfix on
chkconfig --level 3 sagator on
Dejte si pozor na SELinux, pokud je zaplý a nemáte jej nakonfigurovaný může se vám objevit nepěkná hláška
fatal: bind 127.0.0.1 port 26: Permission denied
a nenaběhne vám postfix Vytvořte adresář pro databázi spamassassinu a změňte vlastníka.
mkdir /var/spool/vscan/.spamassassin
chown vscan:vscan /var/spool/vscan/.spamassassin
Já si nechávám posílat maily pro root-a na svůj email, to uděláte editací
vi /etc/aliases
najděte řádek začínající #root: a změňte
root:           muj-mail@examle.net
Nezapomeňte příkazem newaliases znovu vytvořit databázi pro postfix. Teď prišla správná chvíle na to odeslat testovací mail
echo "testovaci zprava" |mail -s 'testovaci email' root
Pokud zpráva dorazila máme hotový mailserer a můžeme zpřístupnit maily uživatelům přes POP3 a IMAP4 protokol pomocí Dovecot
yum install dovecot
Povolte protokoly které chcete provozovat
protocols = imap imaps pop3 pop3s
Pokud používáte Outlook asi budete chtít zapnout workarounds (Jak tohle přeložit?)
imap_client_workarounds = outlook-idle
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
Spusťte Dovecot a přidejte do spuštění po startu.
/etc/init.d/dovecot start
chkconfig --level 3 dovecot on
Tímto jsme zprovoznili poslední část našeho mailserveru a můžeme jít na pivo.
 
Použité zdroje
www.salstar.sk/sagator/
www.root.cz/serialy/sagator/