Virus en spam filtering mail server
Posted by Gert Dewit Fri, 28 Dec 2007 16:55:00 GMT
Zoals voorzien installeer ik vandaag op onze nieuwe CentOS server een betrouwbare virus- en spamfiltering mail server.Overzicht
Naar de buitenwereld toe zijn er 2 poorten beschikbaar: de standaard SMTP poort 25 waar de inkomende mail afgeleverd wordt en de standaard IMAPS poort 993 waar de mail wordt opgehaald door de gebruikers. De postfix instantie die de berichten van de buitenwereld ontvangt zorgt ervoor dat de server niet als open relay kan gebruikt worden en voert enkele rudimentaire checks uit om ongewenste mail al aan de bron weg te filteren. Daarna geeft deze de mail door aan amavis. Amavis zorgt vervolgens voor de virus- en spamfiltering door gebruik te maken van spamassassin en ClamAV. Als de mail aanvaardbaar is wordt deze via de interne Postfix instantie die op poort 10025 luistert afgeleverd in de mailbox van de gebruiker.Basis installatie
Onze nieuwe mail server gebruikt zoals gezegd postfix als MTA. Standaard wordt op CentOS echter sendmail als MTA geïnstalleerd. De gemakelijkste manier om van MTA te switchen op een RedHat gebaseerd systeem is door de system-switch-mail en de postfix packages te installeren. Door het system-switch-mail script uit te voeren en voor postfix te kiezen worden alle mail gerelateerde opdrachten via postfix uitgevoerd. De vorige keer dat ik een gelijkaardige server opgezet heb had ik de packages die niet bij de distributie zaten zelf gecompileerd en gepackaged tot installeerbare RPMs. Ondertussen is dat niet meer nodig dankzij het goede werk van de rpmforge jongens. Om de rpmforge packages te gebruiken in yum (of apt) installeer je de rpmforge-release package die bij je distributie past. Na de manuele installatie van deze package kan je de andere packages met yum installeren net zoals de packages die door je distributie aangeboden worden. Met deze yum opdracht installeren we alles wat nodig is voor onze mail server:# yum install amavisd-new clamav clamd razor-agentsAlle bijbehorende dependencies worden ook aangeboden om te installeren. Er is echter 1 package die ik wil gebruiken die noch op de distributie repositories, noch op de rpmforge repository beschikbaar is. De pyzor package installeer ik manueel nadat ik hem gedownload heb van de fedora repository. Nu alle benodigde packages geïnstalleerd zijn zorg ik via
# yum updateervoor dat de laatste versies van alle packages gebruikt worden. Op de rpmforge repository zijn namelijk oa updates van spamassassin aanwezig die nieuwe zijn dan deze van CentOS. Gezien de snelheid waarmee de spammers hun technieken evolueren is het zaak om ook de tools om de spammers te bestrijden zo recent mogelijk te houden.
Dovecot configuratie
Net na de installatie wou dovecot niet opstarten. In /var/log/maillog verscheen de boodschap:dovecot: imap-login: imap-login: error while loading shared libraries: libsepol.so.1: failed to map segment from shared object: Cannot allocate memoryEen google search leerde mij dat de standaard config van dovecot niet werkt op een x86_64 architectuur. De fix was simpelweg om in /etc/dovecot.conf deze lijn toe te voegen:
login_process_size = 64Aangezien we niet van plan zijn om een ander protocol te gebruiken dan imaps beperken we de protocols dan ook door dit aan te geven in /etc/dovecot.conf:
protocols = imapsOmdat we mailboxen in het Maildir formaat gebruiken kunnen we dat best ook zo aangeven:
mail_location = maildir:~/Maildir
ClamAV configuratie
De clamd standaard configuratie zoals ze gepackaged is door de mensen van rpmforge is bijna onmiddellijk bruikbaar. Het enige dat ik extra configureer omdat de communicatie van amavis naar clamd via een socket file verloopt is het pad naar deze socket file in /etc/clamd.conf:LocalSocket /var/run/clamav/clamd.socketAangezien de “AllowSupplementaryGroups yes” configuratie reeds gebeurd is hoeven we daar niets extras voor te doen buiten de clamav gebruiker aan de amavis groep toe te voegen:
usermod -G amavis clamav
Pyzor configuratie
Om pyzor te kunnen gebruiken als anti spam maatregel moeten we dit correct configureren voor de amavis gebruiker aangezien deze spamassassin en dus ook pyzor zal uitvoeren. De configuratie beperkt zich tot:# su - amavis $ pyzor discoverAls alles goed verlopen is bestaat er nu in de home directory van de amavis gebruiker een subdirectory .pyzor met een servers bestand erin. Of deze servers ook bereikbaar zijn kan getest worden met:
$ pyzor ping 82.94.255.100:24441 (200, 'OK')
Razor configuratie
We maken een default razor configuratie aan met:# su - amavis $ razor-admin -create $ razor-admin -registerVervolgens verlagen we de debug boodschappen door in /var/amavis/.razor/razor-agent.conf de debuglevel parameter te wijzigen in:
debuglevel = 0
Amavis configuratie
De amavis configuratie van de rpmforge package is op enkele kleine aanpassingen na perfect voor onze mail server. Tijdens de eerste weken willen we echter wat voorzichtig zijn met het klasseren van spam en willen we de spam scores goed kunnen monitoren. Daarom zorgen we ervoor dat elke boodschap een spam score header meekrijgt:$sa_tag_level_deflt = undefAangezien wij ClamAV gebruiken als virusscanner vervangen we de @av_scanners en @av_scanners_backup secties door:
@av_scanners = (
['ClamAV-clamd',
\&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.socket"],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
);
@av_scanners_backup = (
['ClamAV-clamscan', 'clamscan',
"--stdout --no-summary -r --tempdir=$TEMPBASE {}",
[0], qr/:.*\sFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
);De bestandsnaam van de socket file zoals we die in /etc/clamd.conf meegegeven hebben moet dezelfde zijn als deze die hier geconfigureerd is. Als clamd voor een onbekende reden down is of niet antwoordt, wordt de command line scanner clamscan gebruikt.
Postfix configuratie
Nu alle backend mail filtering geconfigureerd is moeten we de postfix queues configureren zoals in het overzicht beschreven is. Dit doen we door in /etc/postfix/main.cf een content filter te definiëren:content_filter = smtp-amavis:[127.0.0.1]:10024Voor de uiteindelijke afevering van de berichten hebben we nog een extra postfix instantie nodig die we in /etc/postfix/master.cf configureren:
### anti spam and anti virus smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o disable_dns_lookups=yes 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8De tweede postfix instantie die op poort 10025 luistert doet dit enkel voor localhost en aanvaardt enkel mail vanuit de zeer restrictieve mynetworks 127.0.0.1/8. De content_filter wordt leeg doorgegeven om ervoor te zorgen dat de berichten niet weer aan amavis doorgegeven worden. Het enige wat nu nog rest is de postfix instantie op poort 25 ook op de externe netwerk interface te laten luiteren want standaard is postfix op CentOS zo geconfigureerd om enkel connecties van loaclhost te aanvaarden. Als er slecht 1 externe interface aanwezig is of indien de smtpd op alle externe interfaces moet luiteren volstaat het om de actieve inet_interfaces lijn uit te commentariëren in /etc/postfix/main.cf:
#inet_interfaces = localhostDe volgende lijnen in /etc/postfix/main.cf zorgen ervoor dat de mail server niet als open relay kan gebruikt worden:
myhostname = mail.sos.be myorigin = $mydomain mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost mynetworks = 127.0.0.0/8De laatste postfix configuratie parameter die we gewijzigd hebben tov het standaard CentOS configuratie bestand zorgt ervoor dat de mail in Maildir formaat afgeleverd wordt:
home_mailbox = Maildir/

