Server side mail filtering
- July 31, 2018
- 0
Vroeger waren mailboxen slechts enkele tientallen megabytes groot. Iedereen haalde zijn e-mails via pop3 binnen om ze lokaal te bewaren. Wilde je jouw e-mails automatisch sorteren in verschillende mappen, dan configureerde je filters in de e-mailclient. Intussen is pop3 bijna volledig verdrongen door IMAP en laat je jouw e-mailarchief gewoon op de mailserver staan. Maar wat is de beste filtermanier als je jouw eigen mailserver beheert?
Ook voor IMAP-mailboxen configureer je gewoon mailfilters in jouw mailclient als je dat wilt. Maar dat werkt alleen als je jouw e-mail steeds in dezelfde client leest. Het is immers de mailclient, bijvoorbeeld Thunderbird of Evolution, die de mailfilters uitvoert zodra je de mailbox opent. Controleer je je e-mail vanaf een andere machine, via een webmailclient of vanaf je smartphone? Dan zijn de filters niet actief en moet je alsnog handmatig sorteren. We zoeken dus een manier om onze mailfilters altijd uit te voeren, ongeacht de gebruikte mailclient. De enige oplossing daarvoor is om de filtering op de mailserver zélf uit te voeren. Gelukkig bestaat er een standaardtaal voor mailfiltering, genaamd Sieve. De meeste IMAP-servers, zoals Dovecot of Cyrus IMAP bevatten plug-ins voor Sieve-ondersteuning. Raadpleeg de documentatie van jouw IMAP-server om Sieve te activeren. Mogelijk moet je nog een extra pakket installeren om Sieve-functionaliteit toe te voegen. Voor Dovecot is dat bijvoorbeeld dovecot-sieve.
Sieve
Als Sieve in je IMAP-server is geactiveerd controleert die voor elke mailbox tijdens het mail delivery proces of er filters geconfigureerd zijn. Is dat het geval, dan voert Sieve die filters één voor één uit alvorens de e-mail in de inbox af te leveren. In zijn eenvoudigste vorm bestaan de Sieve-filters uit één tekstbestand per gebruiker op de mailserver. De syntax is vrij gemakkelijk te leren. Elke regel bestaat uit één of meerdere voorwaarden, gevolgd door één of meerdere acties. Draai je bijvoorbeeld Amavis met SpamAssassin op jouw mailserver, voeg dan zeker volgend filter toe om spam mails automatisch opzij te zetten:
if header :contains “Subject” “*****SPAM*****”
{
fileinto “INBOX/Spam”;
stop;
}
Die regel behoeft weinig uitleg: als het onderwerp van een e-mail het woord *****SPAM***** bevat, verplaatst Sieve die meteen naar de spam-map onder de inbox. Sieve is trouwens modulair opgebouwd. Afhankelijk van de gebruikte features in jouw filters, moet je bepaalde extensies activeren aan het begin van het Sieve-script. Voor bovenstaand voorbeeld heb je alleen de fileinto-extensie nodig:
require [“fileinto”];
Filters
Hierboven zagen we een erg eenvoudig voorbeeld, maar Sieve bevat nog veel meer mogelijkheden. Zo kun je filteren op elke mogelijke e-mailheader, op inhoud, grootte, datum of attachments. Behalve e-mails verplaatsen naar een specifieke map, kun je ze ook kopiëren naar een map, doorsturen of een kopie verzenden naar een ander adres, automatisch beantwoorden, verwijderen of bepaalde flags instellen (zoals gelezen of belangrijk), headers toevoegen of verwijderen, enzovoorts. Omdat Sieve modulair is opgebouwd, ondersteunt niet elke implementatie alle mogelijkheden. Voor Dovecot vind je een lijst van ondersteunde features op pigeonhole.dovecot.org en voor Cyrus IMAP op http://bit.ly/2pPs6Ct. Voor documentatie van de precieze syntax van alle Sieve-extensies verwijzen beide projecten naar de officiële RFC-bestanden. Het opstellen van Sieve-regels is in het begin vaak een kwestie van trial-and-error. Een handig hulpmiddel daarbij is sieve-test, onderdeel van dovecot-sieve. Bewaar om te beginnen een mail die je wilt filteren in een tekstbestand op jouw server. Stel vervolgens je Sieve-filter op en gebruik sieve-test om die filter uit te voeren op de bewaarde mail. Sieve-test vertelt je meteen welke acties Sieve zou uitvoeren voor die mail, zonder ze effectief uit te voeren.
ManageSieve
Als beheerder schrijf je misschien graag Sieve-scripts op je server, voor andere gebruikers is dat geen optie. Wil je hen ook de mogelijkheid geven om filters in te stellen? Installeer dan een ManageSieve-daemon op je mailserver (voor Dovecot is dat het pakket dovecot-managesieved). Die zorgt ervoor dat clients met managesieve-ondersteuning Sieve-filters op de server kunnen aanmaken. De Roundcube webmailclient bijvoorbeeld bevat een gebruiksvriendelijke interface om via managesieve-filters in te stellen. Besef wel dat niet elke client alle features toont die Sieve ondersteunt. Voor de meeste gebruikers is dit echter een prima oplossing.