Dit is een printer vriendelijke versie van de webpagina
http://mirror.ruwebit.net/article/177&print
1999-2008 Maurice de Bijl[Print deze pagina]



how-to's  linux
0% spam met een challenge/response spamfilter
Tools:Printer vriendelijke versieDownload artikel als PDFBookmark:Geef dit artikel een eKudo
Door Maurice op 2006-12-01 populariteit:
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

TMDA heeft ook een SMTP-proxy (genaamd 'tmda-ofmipd') die je kunt gebruiken als SMTP-server in je netwerk. Als je een mail verstuurd via die server wordt de geadresseerde automatisch toegevoegd aan de whitelist.


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.

Let op: tmda-ofmipd vereist authenticatie, dus je moet in je E-mail ook een naam en wachtwoord configureren bij de uitgaande mail


Voorbeelden van configuratie files

Op de site van TMDA staat uitgebreide documentatie. In deze paragraaf wat voorbeelden van configuratie files, zonder verdere uitleg.

~/.forward
"|/usr/bin/procmail -p"


~/.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
#

De recipient delimiter moet in TMDA en postfix gelijk zijn

Site's contents and design are copyright © 1999-2008 Maurice de Bijl - 7015 page requests
gegeneerd op Tue, 06 Jan 2009 09:32:19 CET (GMT+0100) in 255.8 msec op host turpin
bron: http://mirror.ruwebit.net/article/177&print - rev# 1:122M - [Lage bandbreedte versie]