Hulpartikel overzicht

Hulpartikel

Exim antispam met spamassassin in Ubuntu en Debian

Bots en andere kwaadwillenden sturen veel spam per e-mail. Hierbij proberen ze kwetsbaarheden op servers (e.g. je VPS) uit te buiten om spam te versturen vanaf een geïnfecteerde mailserver. Het is dan ook belangrijk om naast een goede algemene beveiliging van je VPS om op je mailserver anti-spam software te gebruiken.

In deze tutorial laten wij zien hoe je op een VPS met Ubuntu of Debian op een mailserver met Exim en Dovecot gebruik maakt van SpamAssassin als spam-beveiliging.

  • Voor de stappen in deze tutorial is een VPS met Ubuntu of Debian met Exim en Dovecot nodig. Wij hebben deze stappen getest met Ubuntu 18.04 en Debian 10. In deze handleiding leggen wij uit hoe je Exim en Dovecot installeert.
     
  • Wij gaan ervan uit dat je één groot configuratiebestand gebruikt voor Exim in plaats van een gespreide configuratie.
     
  • Voer de commando's in dit artikel uit met sudo, of als root-user.

Spamassassin in het kort

Spamassassin scant mail op elementen die het herkent als mogelijke kenmerken van spam, denk hierbij aan zaken als:

  • Een kleine hoeveelheid tekst in verhouding tot het aantal afbeeldingen in een mail
  • Een onderwerp van de mail dat uit hoofdletters bestaat
  • Een ongeldig of afwezig DKIM-record (steeds meer partijen laten mail automatisch als spam tegenhouden als het geen DKIM heeft, zie ook deze handleiding)
  • etc.

Wanneer Spamassassin dit soort kenmerken ziet, geeft het een score voor dat kenmerk. De score is hoger wanneer het specifieke kenmerk vaak in spam terug komt. Spamassassin telt alle scores op en als het een vooraf ingestelde waarde bereikt, wordt de mail als spam tegengehouden.


Spamassassin installeren en configureren

 

Stap 1

Verbind met je VPS via SSH of de VPS-console in het TransIP-controlepaneel.


 

Stap 2

Installeer SpamAssassin met:

apt -y install spamassassin

 

Stap 3

Open vervolgens de configuratie van Exim (wij gaan hier uit van één overkoepelend configuratiebestand voor Exim):

nano /etc/exim4/exim4.conf.template

 

Stap 4

In deze stap voeg je enkele routers toe in de Exim-configuratie voor SpamAssassin (zie de toelichting onderaan deze stap). Zoek naar de 'userforward'-router, deze begint met de volgende code:

userforward:
  debug_print = "R: userforward for $local_part@$domain"
  driver = redirect
  domains = +local_domains
  check_local_user

Voeg onder de 'userforward'-router een anti-spam router toe. Het is belangrijk dat de anti_spam router voor de router(s) staan die de aflevering verzorgen (zie de toelichting iets verder naar onderen).

#####################################################
### anti_spam router 
#####################################################
anti_spam:
  driver = accept
  condition = ${if and { {<{$message_size}{256K}} {!def:header_X-Spam-Flag:} {!eq {$received_protocol}{spam-scanned}}} {1}{0}}
  headers_remove = X-Spam-Flag:X-Spam-Report:X-Spam-Status:X-Spam-Level:X-Spam-Checker-Version
  transport = antispam
#####################################################
### end anti_spam router
##################################################### 

Kopieer daarna de router die je gebruikt voor het afleveren van mail en geef deze de naam 'antispam_delivery'. Heb je onze Exim-handleiding gevolgd voor de installatie en configuratie van Exim? Dan kopieer je de router met de naam 'virtual_router'.

Plaats de kopie direct onder de 'anti_spam'-router en voeg daarin de volgende code toe:

condition = ${if and { {def:h_X-Spam-Flag:} {eq {$h_X-Spam-Flag:}{YES}}} }

Het resultaat ziet er dan als volgt uit:

#####################################################
### antispam_delivery router
#####################################################
antispam_delivery:
  driver = accept
  condition = ${if and { {def:h_X-Spam-Flag:} {eq {$h_X-Spam-Flag:}{YES}}} }
  require_files = +/home/vmail/$local_part@$domain/
  transport = anti_spam_delivery
#####################################################
### end antispam_delivery router
#####################################################
Toelichting

Exim gaat de geconfigureerde routers één voor één af tot het een match vindt voor een router om die te gebruiken. Door de anti_spam router na de routers die gaan over forwards/out-of-office etc en voor eventuele delivery routers (e.g. de virtual_router en localuser routers) te plaatsen, wordt alle inkomende mail eerst langs de spam_check router gestuurd, die de antispam transport gebruikt om Spamassassin de controle te laten uitvoeren. Na de spamcontrole wordt de mail doorgestuurd naar de routers die het afleveren verzorgen.

Het voordeel van deze structuur is dat Spamassassin aardig wat resources gebruikt. Voer je de SpamAssassin controle direct op inkomende mail uit in plaats van de mail apart langs een spam router/transport te halen, dan zou dat een extra aanvalspunt op je server opleveren waarbij je resources sneller overbelast worden.

anti_spam

  • condition= ${if etc: scant alle mail van 256k en kleiner (je kunt dit ook aanpassen naar bijvoorbeeld 512k) die nog niet gescand zijn door SpamAssassin.
  • driver=accept: als aan de gestelde condities wordt voldaan, wordt de transport antispam gebruikt.
  • headers_remove etc: verwijdert alle X-Spam-* headers uit de inkomende mail. Die moeten namelijk nog toegevoegd worden maar kunnen al aanwezig zijn als een malafide partij probeert je spambeveiliging te misleiden.

antispam_delivery

Deze router werkt hetzelfde als de reguliere 'virtual-router'-router, met een toevoeging:

condition = ${if and { {def:h_X-Spam-etc: zorgt ervoor dat als de mail is gecontroleerd op spam, deze wordt geleverd aan de anti_spam_delivery transport.


 

Stap 5

Naast deze nieuwe routers heb je ook nieuwe transports nodig voor het leveren van de mail. Scroll door naar de 'TRANSPORTS CONFIGURATION' en voeg onderstaande transport toe op een willekeurige plek, bijvoorbeeld boven of onder de 'local_delivery'-transport:

#####################################################
### antispam transport 
#####################################################
antispam:
  driver = pipe
  command = /usr/sbin/exim -oMr spam-scanned -bS
  use_bsmtp
  transport_filter = /usr/bin/spamc -u $local_part@$domain
  home_directory = /tmp
  current_directory = /tmp
#####################################################
### end antispam transport
#####################################################

Kopieer daarna de transport die je gebruikt voor het afleveren van mail en geef deze de naam 'anti_spam_delivery'. Heb je onze Exim-handleiding gevolgd voor de installatie en configuratie van Exim? Dan kopieer je de transport met de naam 'virtual_delivery'.

Het resultaat ziet er als volgt uit:

#####################################################
### anti_spam_delivery transport
#####################################################
anti_spam_delivery:
  driver = appendfile
  directory = /home/vmail/$local_part@$domain/.SPAM/
  maildir_format
  delivery_date_add
  envelope_to_add
  return_path_add
  user = vmail
  group = vmail
  mode = 0660
  mode_fail_narrower = false
#####################################################
### end anti_spam_delivery transport
#####################################################
Toelichting
De antispam-transport gebruikt een driver van het type 'pipe', waardoor deze afgeleverd kan worden aan een commando. In dit geval gaat het om commando onder 'command =' waarmee de spamcontrole wordt uitgevoerd en het aanvullende spamfilter dat daarbij gebruikt wordt via het spamc-commando.
De anti_spam_delivery-transport werkt verder hetzelfde als de virtual_transport.

 

Stap 6

Standaard staat SpamAssassin ingesteld om bij een score van 5 mail als spam tegen te houden (zie 'Spamassassin in het kort'). Dit is een behoorlijk stricte controle die tot de nodige false positives kan leiden. Wij zien dit bijvoorbeeld vaker terug wanneer oudere mailsoftware gebruikt wordt om mails te versturen. Oude software bevat vaak fouten in de opmaak van de mails, waardoor die als spam kan worden aangemerkt.

Wij raden dan ook aan om een waarde van 7 tot 10 te gebruiken in plaats van 5. Je past dit aan in het volgende bestand:

nano /etc/spamassassin/local.cf

Pas de waarde van de required_score aan naar de gewenste waarde en verwijder de comment #, bijvoorbeeld:

required_score 8.0

Voeg op een lege plek in het bestand de code hieronder toe. Hiermee voeg je extra headers toe aan mail (een voorbeeld staat in het uitklapelement), waardoor het eenvoudiger wordt om te troubleshooten wanneer een mail ten onrechte wordt tegengehouden.

report_safe 0
add_header all Report _REPORT_
add_header spam Flag _YESNOCAPS_
add_header all Status _YESNO_, score=_SCORE_ required=_REQD_ tests=_TESTS_ autolearn=_AUTOLEARN_ version=_VERSION_
add_header all Level _STARS(*)_
add_header all Checker-Version SpamAssassin _VERSION_ (_SUBVERSION_) on _HOSTNAME_

Sla daarna je wijzigingen op en sluit het bestand (ctrl + x > y > enter).

Individuele Spamassassin-regels vind je in de bestanden in /usr/share/spamassassin. De inhoud van deze bestanden valt buiten de scope van deze handleiding.


 

Stap 7

Herstart tot slot Spamassassin en Exim:

update-exim4.conf
systemctl restart spamassassin
systemctl restart exim4

 

Daarmee zijn we aan het eind van deze tutorial gekomen. Er zijn echter nog aanvullende controles die je kunt uitvoeren om te kijken of mail spam is: blacklist-controle. Hoe je blacklist-controle inschakelt leggen wij in deze tutorial uit.

Mocht je aan de hand van deze handleiding nog vragen hebben, aarzel dan niet om onze supportafdeling te benaderen. Je kunt hen bereiken via de knop 'Neem contact op' onderaan deze pagina.

Wil je deze handleiding met andere gebruikers bespreken, laat dan vooral een bericht achter onder 'Reacties'.

Probeer BladeVPS een maand gratis

Maak van jouw volgende website of applicatie een succes op BladeVPS PureSSD. Probeer direct of een self-managed VPS iets voor jou is; de eerste maand krijg je van ons :-)!

Start nu je gratis maand

Heb je ook een goed idee?

Stuur jouw idee in! Met genoeg stemmen komt jouw idee op onze wishlist!

Heeft dit artikel je geholpen?

Maak een account aan of log in om een beoordeling achter te laten.

Reacties

Maak een account aan of log in om een reactie te plaatsen.

Kom je er niet uit?

Ontvang persoonlijke hulp van onze supporters

Neem contact op