| 0% spam met een challenge/response spamfilter |
|
auteur: Maurice, geplaatst: 2006-12-01, laatste update: 2006-12-01, populariteit:    6700+ |
|
Een challenge/response spam-filter is: | Wikipedia zei: a family of protocols in which one party presents a question (challenge) and another party must provide a valid answer (response) to be authenticated. |
Volledige uitleg op Wikipedia. In deze context betekent het simpelweg dat iemand die jou voor het eerst een mail stuurt zich eerst moet laten valideren.
Hoe werkt het?
In grote lijnen werkt het als volgt:
Iemand stuurt jou voor het eerst een E-mail
Deze persoon krijgt een automatisch (bounce-)mailtje terug waar hij of zij op moet antwoorden, totdat hij/zij antwoordt blijft het mailtje 'hangen' in de mail queue
Hij/zij beantwoordt het mailtje
Het eerste mailtje dat in eerste instantie tegen werd gehouden, wordt nu naar jou doorgestuurd
Het E-mail adres van de afzender wordt in een 'whitelist' geplaatst en voortaan wordt al zijn/haar mail direct doorgestuurd naar jou.
Deze werkwijze houdt praktisch alle spam tegen, omdat spammers hun mail automatisch in grote getale versturen. Een bounce mailtje dat terugkomt wordt genegeerd.
Voor en nadelen
Praktisch geen spam meer
Sommige mensen snappen de 'bounce' mail niet
Je moet een eigen mailserver draaien (in de oplossing die ik verderop beschrijf in ieder geval)
Configuratie is lasting
TMDA, een implementatie
In deze paragraaf in het kort een implementatie van een challenge/response spamfilter. Het is niet de bedoeling om een hele handleiding te schrijven maar het wijst je in de jusite richting. Er zijn meerdere oplossingen, dit is er een van.
Benodigdheden:
Eigen domeinnaam met DNS beheer
Een eigen Linux mailserver (ik gebruik Postfix als mailtransfer agent en Qpopper als POP3 programma)
TMDA als challenge/response spamfilter
Tmda-cgi als web-frontend
Mijn configuratie ziet er als volgt uit:
+----+
|mail|
+----+
|
V
+--------+ +--------+ +--------+
| | | | | |
| Mail |----->| TMDA |----->| ISP |-----> Ontvanger
| client | | SMTP | | SMTP |
| | | @ 25| | |
+--------+ +--------+ +--------+
^
| +--------+ +--------+ +--------+ +--------+
| | | | | | | | | +----+
+-----------| QPOPPER|<-----| TMDA |<-----| POSTFIX|<-----| BASEMO-|<--|mail|
| POP3 | | FILTER | | SMTP | | TIVE.NL| +----+
| @ 110| | | | @ 9925| | | @jouwdomein nl
+--------+ +--------+ +--------+ +--------+
|
Postfix draait bij mij op poort 9925 ipv poort 25 omdat mijn internetprovider (ISP) @Home poort 25 heeft dichtgezet. Basemotive.nl zorgt er voor dat de mail op een afwijkende poort wordt afgeleverd.
Voordeel van deze afwijkende poort is dat ik de TMDA SMTP-proxy 'tmda-ofmipd' op poort 25 kan laten draaien. Al mijn clients op het interne netwerk sturen mail via die proxy. Wanneer de poort al in gebruik is moet je voor tmda-ofmipd dus een andere poort verzinnen.
Voorbeelden van configuratie files
Op de site van TMDA staat uitgebreide documentatie. In deze paragraaf wat voorbeelden van configuratie files, zonder verdere uitleg.
~/.forward
~/.procmailrc
# Run the message through tmda-filter.
:0 w
| /usr/sbin/tmda/bin/tmda-filter
# Take the exit code from TMDA.
EXITCODE=$?
# TMDA takes care of final delivery
DEFAULT=/dev/null |
~/tmdarc
#
# Global TMDA settings
#
# Additional TMDA settings can be found in ~/.tmda/config
#
# We use postfix
MAIL_TRANSFER_AGENT = "postfix"
# We use - as delimiter (name-123123-bladibla(at)www(dot)jouwdomein.nl)
RECIPIENT_DELIMITER = "-"
# This URL is for web confirmation
CGI_URL = "http://www.jouwdomein.nl/cgi-bin/tmda.cgi"
# Bounce and error texts
BOUNCE_TEXT_INVALID_CONFIRMATION = "This confirmation address is invalid. Are you sending the confirmation messages from another address than the original message?"
BOUNCE_TEXT_FILTER_INCOMING = "Message rejected by recipient due to spam filtering"
BOUNCE_TEXT_NONEXISTENT_PENDING = "Your original message could not be located. Please send another (non-confirmation) message."
# Template dir (for cgi app)
TEMPLATE_DIR = "/usr/sbin/tmda/templates/"
# Hostname (for correct display in CGI scripts)
HOSTNAME = "jouwdomein.nl" |
~/.tmda/config
# -*- python -*-
# sample.config - Sample configuration file for TMDA.
#
# See http://tmda.net/config-vars.html for descriptions of all
# the available options.
#
# NOTE: ~/.tmda/config must be chmod 400 or chmod 600 !
#########################################################
# qmail/Courier required variables; required only for
# qmail/Courier users
#
# (none at this time)
#
#########################################################
#################################################################
# Non-qmail/Courier required variables; required only for
# non-qmail/Courier users
#
# Uncomment one line from each section.
#
# Please read http://tmda.net/config-vars.html for more information
# on these variables.
#################################################################
DELIVERY = "/var/mail/naam"
CONFIRM_ADDRESS = "naam(at)jouwdomein(dot)nl"
RECIPIENT_HEADER = "To"
FULLNAME = "Je volledige naam"
CONFIRM_APPEND = "/home/naam/.tmda/lists/confirmed"
BARE_APPEND = "/home/naam/.tmda/lists/auto_whitelist"
######################################################################
# No other variables are required, but you may be interested in
# further customization. See http://tmda.net/config-vars.html for
# more information on the other available configuration variables.
#
# Here are examples of some recommended configuration variables.
######################################################################
LOGFILE_DEBUG = os.path.expanduser("~/.tmda/logs/debug")
LOGFILE_INCOMING = os.path.expanduser("~/.tmda/logs/incoming")
LOGFILE_OUTGOING = os.path.expanduser("~/.tmda/logs/outgoing") |
~/.tmda/filters/incoming
### ~/.tmda/filters/incoming (first match wins) ###
# Accept all bounces (messages with an empty envelope sender)
from <> ok
# Include my blacklist and whitelist
# manual blacklist
from-file ~/.tmda/lists/blacklist drop
# manual whitelist
from-file ~/.tmda/lists/whitelist accept
# auto whitelist (recipients of sent messages)
from-file ~/.tmda/lists/auto_whitelist accept
# confirmation whitelist (senders of confirmed messages)
from-file ~/.tmda/lists/confirmed accept
# Manual accept
to prive(at)jouwdomein(dot)nl accept
# Manual bounces
to spam(at)jouwdomein(dot)nl bounce
# Razor is een tool om te checken of de ontvangen mail spam is,
# zo ja: lekker laten vallen
pipe "/usr/bin/razor-check" drop |
~/.tmda/filters/outgoing
### ~/.tmda/filters/outgoing (first match wins) ###
# Do not use ~/ directories because this script
# will be run under the tofmipd account
# Send all messages untagged and put recipient on whitelist
to * bare=append |
Nog wat tips voor postfix
/etc/postfix/main.cf
mydomain = jouwdomein.nl
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, $mydomain
# Je interne netwerk
mynetworks = 10.0.0.0/24, 127.0.0.0/8
# Allow all interfaces
inet_interfaces = all
#
# relay host is de mailserver die gebruikt wordt om mail te sturen
# dit moet mail.home.nl zijn, want dynamische mailservers staan
# in SORBS gelist!!
#
relayhost =
local_recipient_maps =
# dit zorgt er voor dat er geen users gereject worden
# (henk-123123-123123bla(at)jouwdomein(dot)nl wordt anders gereject)
recipient_delimiter = - |
Na wijziging, postfix even opnieuw starten:
| /etc/rc.d/postfix restart |
/etc/postfix/master.cf
# In mijn geval moet ik niet luisteren op poort 25 maar op 9925
# In /etc/postfix/master.cf toevoegen:
#
# lmtp unix - - n - - lmtp
#
9925 inet n - n - - smtpd -o content_filter=
#
# En smtp (1 regel) uitcommentarieren
#
|
Tags Linux  How-to`s  
 Copyright © 1999-2008 Maurice de Bijl Dit artikel is gepubliceerd op 2006-12-01
|
Reacties op dit artikel Er zijn nog geen reacties geplaatst op dit artikel. Je kunt de eerste zijn.
Reactie toevoegen Een reactie toevoegen is simpel en registratie is niet nodig!Je IP-adres wordt gelogd, maar niet gepubliceerd, alle reacties hebben een E-mail bevestiging nodig en worden stuk voor stuk gemodereerd. Misbruik wordt niet getolereerd. Naderhand wijzigen van je reactie is niet mogelijk
|  |
 |