<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<copyright>Manuel Josupeit-Walter</copyright>
		<generator>Capits.Simple Blog</generator>
		<language>de</language>
		<lastBuildDate>Wed, 08 Sep 2010 16:55:11 +0200</lastBuildDate>
		<managingEditor>webmaster@josupeit.com (Manuel Josupeit-Walter)</managingEditor>
		<webMaster>webmaster@josupeit.com (Manuel Josupeit-Walter)</webMaster>
		<ttl>1440</ttl>
		<title>josupeit.com</title>
		<link>http://www.josupeit.com/weblog~informatik-und-technik~linux</link>
		<description>Aus dem Leben eines Homo Informaticus</description>
		<pubDate>Wed, 03 Feb 2010 17:33:08 +0100</pubDate>
		<atom:link rel="self" type="application/rss+xml" href="http://www.josupeit.com/weblog~informatik-und-technik~linux?output=rss" />
		
		<item>	
			<title>SpamAssassin anhand von IMAP Flags lernen lassen</title>
			<link>http://www.josupeit.com/weblog~informatik-und-technik~linux,spamassassin-anhand-von-imap-flags-lernen-lassen.html</link>
			<guid>http://www.josupeit.com/front_content.php?lang=1&amp;idart=90</guid>
			<pubDate>Sat, 30 Jan 2010 14:38:46 +0100</pubDate>
			<author>webmaster@josupeit.com (Manuel Josupeit-Walter)</author>
			<description><![CDATA[ <p>
			All meine eingehenden E-Mails werden direkt meinem Homeserver zugestellt. Dort wird auch ein Gro&szlig;teil an Spam gefiltert. In der Vergangenheit trainierte ich den dort laufenden SpamAssassin durch bouncen der entsprechenden Mails an spezielle E-Mail Adressen, die die Mails dann an <span class="inline_code">sa-learn</span> pipeten. Da mir das immer wieder einmal auf den Keks ging fragte ich mich, ob es nicht viel einfacher m&ouml;glich w&auml;re, Spam anhand der Thunderbird Junk-Markierung lernen zu lassen.
			</p>
			<p>
			Gl&uuml;cklicherweise bietet das IMAP4 Protokoll laut RFC 3501 die M&ouml;glichkeit, Mails mit Flags zu versehen. Von Hause aus gibt es beispielsweise Flags, wie <span class="inline_code">\Seen</span> oder <span class="inline_code">\Deleted</span>, die Kennzeichnen, ob eine Nachricht gelesen oder gel&ouml;scht wurde, jedoch erlaubt das Protokoll auch die Vergabe eigener Flags. Diese benutzerdefinierten Flags werden allerdings als Keywords bezeichnet. Thunderbird verwendet f&uuml;r die Markierung, ob eine Mail Spam oder Ham (also kein Spam) ist, die Keywords <span class="inline_code">Junk</span> und <span class="inline_code">NonJunk</span>, wobei nur Mails, die als Junk markiert wurden und explizit auf &quot;Kein Junk&quot; geklickt wurde, als <span class="inline_code">NonJunk </span>markiert werden.
			</p>
			<p>
			Nun verwende ich ein Perl-Skript, das alle 15 Minuten als Cronjob gestartet wird, mit den Benutzerdaten des Administrators zu meinem Cyrus-IMAP Server verbindet und alle Ordner aller Benutzer auf Mails durchsucht, die entsprechend gekennzeichnet wurden und den Inhalt dann an SpamAssassin &uuml;bergibt. Anschlie&szlig;end werden die Mails entsprechend als <span class="inline_code">LernedJunk</span> und <span class="inline_code">LernedNonJunk</span> gekennzeichnet. Dadurch werden automatisch alle Mails, die Thunderbird als Junk einstuft oder von Hand eingestuft werden bereits serverseitig gelernt und entsprechend stetig besser gefiltert.
			</p>
			<p>
			Dieses Skript stelle ich hiermit unter GPLv3 zur Verf&uuml;gung, vielleicht findet ja noch jemand Verwendung daf&uuml;r:<br />
			</p>
			<p class="code">
			#!/usr/bin/perl<br />
			use Mail::IMAPClient;<br />
			use MIME::Base64;<br />
			<br />
			do('/etc/bayes_learn_spam.conf')<br />
			&nbsp; or die &quot;Unable to read configuration file /etc/bayes_learn_spam.conf&quot;;<br />
			<br />
			my $imap = Mail::IMAPClient-&gt;new(<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server =&gt; $host,<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Port =&gt; $port,<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug =&gt; 0)<br />
			<br />
			&nbsp; or die &quot;Unable to connect to imap server&quot;;<br />
			<br />
			$imap-&gt;has_capability(&quot;STARTTLS&quot;) and $imap-&gt;starttls;<br />
			$imap-&gt;tag_and_run(&quot;AUTHENTICATE PLAIN &quot; . encode_base64(&quot;\0&quot; . $authuser . &quot;\0&quot; . $password))<br />
			&nbsp; or die &quot;Unable to login to imap server with user &quot; . $authuser;<br />
			<br />
			my @folders = $imap-&gt;folders<br />
			&nbsp; or die &quot;Unable to retrieve user list from imap server&quot;;<br />
			<br />
			my @users;<br />
			<br />
			foreach $folder (@folders) {<br />
			&nbsp; if ( $folder =~ /^user\..*$/i ) {<br />
			&nbsp;&nbsp;&nbsp; $folder =~ s/^user\.([^\.]*).*/\1/i;<br />
			<br />
			&nbsp;&nbsp;&nbsp; if (! grep /$folder/, @users) {<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push (@users, $folder);<br />
			&nbsp;&nbsp;&nbsp; }<br />
			&nbsp; }<br />
			}<br />
			<br />
			$imap-&gt;disconnect<br />
			&nbsp; or die &quot;Unable to close connection to imap server&quot;;<br />
			<br />
			foreach $user (@users) {<br />
			&nbsp; print &quot;Processing messages for user &quot; . $user . &quot;...\n&quot;;<br />
			&nbsp; undef($imap);<br />
			<br />
			&nbsp; my $imap = Mail::IMAPClient-&gt;new(<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server =&gt; $host,<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Port =&gt; $port,<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Uid =&gt; 0,<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Peek =&gt; 1,<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug =&gt; 0)<br />
			<br />
			&nbsp;&nbsp;&nbsp; or die &quot;Unable to connect to imap server&quot;;<br />
			<br />
			&nbsp; $imap-&gt;has_capability(&quot;STARTTLS&quot;) and $imap-&gt;starttls;<br />
			&nbsp; $imap-&gt;tag_and_run(&quot;AUTHENTICATE PLAIN &quot; . encode_base64($user . &quot;\0&quot; . $authuser . &quot;\0&quot; . $password))<br />
			&nbsp;&nbsp;&nbsp; or die &quot;Unable to do plain auth&quot;;<br />
			<br />
			&nbsp; foreach $folder ($imap-&gt;folders) {<br />
			&nbsp;&nbsp;&nbsp; print &quot;Processing folder &quot; . $folder . &quot;...\n&quot;;<br />
			&nbsp;&nbsp;&nbsp; $imap-&gt;select($folder)<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or die &quot;Unable to select imap folder &quot; . $folder . &quot; for user &quot; . $user;<br />
			<br />
			&nbsp;&nbsp;&nbsp; @spam = $imap-&gt;search(&quot;UNDELETED KEYWORD &quot; . $junktag .&nbsp;&nbsp;&nbsp; &quot; UNKEYWORD &quot; . $learnedjunktag);<br />
			&nbsp;&nbsp;&nbsp; @ham&nbsp; = $imap-&gt;search(&quot;UNDELETED KEYWORD &quot; . $nonjunktag . &quot; UNKEYWORD &quot; . $learnednonjunktag);<br />
			<br />
			&nbsp;&nbsp;&nbsp; # Process spam<br />
			&nbsp;&nbsp;&nbsp; print &quot;Learning &quot; . @spam . &quot; spam messages...\n&quot;;<br />
			&nbsp;&nbsp;&nbsp; foreach (@spam) {<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $imap-&gt;store($_, &quot;-FLAGS&quot;, $learnednonjunktag)<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or die &quot;Unable to flag message &quot; . $_ . &quot; in folder &quot; . $folder . &quot; for user &quot; . $user;<br />
			<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @msg = $imap-&gt;message_string($_)<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or die &quot;Unable to fetch spammy mail &quot; . $_ . &quot; from folder &quot; . $folder . &quot; for user &quot; . $user;<br />
			<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; open(my $sa, &quot;| &quot; . $salearn . &quot; --spam&quot;)<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or die (&quot;Unable to pipe to sa-learn&quot;);<br />
			<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print $sa @msg;<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close($sa);<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef($sa);<br />
			<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $imap-&gt;store($_, &quot;+FLAGS&quot;, $learnedjunktag)<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or die &quot;Unable to flag message &quot; . $_ . &quot; in folder &quot; . $folder . &quot; for user &quot; . $user;<br />
			&nbsp;&nbsp;&nbsp; }<br />
			<br />
			&nbsp;&nbsp;&nbsp; # Process ham<br />
			&nbsp;&nbsp;&nbsp; print &quot;Done. Learning &quot; . @ham . &quot; ham messages...\n&quot;;<br />
			&nbsp;&nbsp;&nbsp; foreach (@ham) {<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $imap-&gt;store($_, &quot;-FLAGS&quot;, $learnedjunktag)<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or die &quot;Unable to flag message &quot; . $_ . &quot; in folder &quot; . $folder . &quot; for user &quot; . $user;<br />
			<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @msg = $imap-&gt;message_string($_)<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or die &quot;Unable to fetch hammy mail &quot; . $_ . &quot; from folder &quot; . $folder . &quot; for user &quot; . $user;<br />
			<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; open(my $sa, &quot;| &quot; . $salearn . &quot; --ham&quot;)<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or die (&quot;Unable to pipe to sa-learn&quot;);<br />
			<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print $sa @msg;<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close($sa);<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; undef($sa);<br />
			<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $imap-&gt;store($_, &quot;+FLAGS&quot;, $learnednonjunktag)<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; or die &quot;Unable to flag message &quot; . $_ . &quot; in folder &quot; . $folder . &quot; for user &quot; . $user;<br />
			&nbsp;&nbsp;&nbsp; }<br />
			<br />
			&nbsp;&nbsp;&nbsp; print &quot;Done learning messages from folder &quot; . $folder . &quot;.\n&quot;;<br />
			&nbsp; }<br />
			<br />
			&nbsp; $imap-&gt;disconnect;<br />
			&nbsp; print &quot;All messages for user &quot; . $user . &quot; have been processed.\n&quot;;<br />
			} 
			</p>
			<p>
			<br />
			Die Konfiguration erfolgt &uuml;ber die Datei /etc/bayes_learn_spam.conf, die (entsprechend Zugriffsgesch&uuml;tzt) folgende Daten enth&auml;lt:
			</p>
			<p class="code">
			$host&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 'localhost';<br />
			$port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 143;<br />
			$authuser&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 'cyrus';<br />
			$password&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 'passwort';<br />
			<br />
			$salearn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = '/usr/bin/sa-learn';<br />
			<br />
			$junktag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 'Junk';<br />
			$nonjunktag&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 'NonJunk';<br />
			$learnedjunktag&nbsp;&nbsp;&nbsp; = 'LearnedJunk';<br />
			$learnednonjunktag = 'LearnedNonJunk'; 
			</p>
			<p>
			&nbsp;<br />
			Viel Spa&szlig; beim Trainieren. :-) &Uuml;brigens: Thunderbird bietet die M&ouml;glichkeit, benutzerdefinierte Schl&uuml;sselworte zu definieren und farbig hervorzuheben, so hat man immer und &uuml;berall den &Uuml;berblick, was gelernt wurde und was nicht...
			</p>
			<hr />
			<a href="front_content.php?idart=37&amp;idcat=4&amp;lang=1&amp;client=1"><img src="upload/grafiken/gplv3-88x31.gif" alt="GPLv3" align="right" height="31" width="88" /></a>
			<div class="clear">
			</div>
			 ]]></description>
		</item>
		<item>
			<title>Spamannahme verweigern mit Postfix und Postprox</title>
			<link>http://www.josupeit.com/weblog~informatik-und-technik~linux,spamannahme-verweigern-mit-postfix-und-postprox.html</link>
			<guid>http://www.josupeit.com/front_content.php?lang=1&amp;idart=84</guid>
			<pubDate>Thu, 22 Oct 2009 20:03:27 +0200</pubDate>
			<author>webmaster@josupeit.com (Manuel Josupeit-Walter)</author>
			<description><![CDATA[ <p>
			Wenn Sie einen eigenen Mailserver betreiben, haben Sie sich vielleicht auch schon gefragt wie es m&ouml;glich ist, die Annahme von Spam oder mit Viren infizierter Nachrichten direkt zu verweigern, denn jede zur&uuml;ckgewiesene Mail ist dann nicht mehr Ihr Problem, sondern das des versendenden Mailservers.
			</p>
			<p>
			Der Mail Transfer Agent (MTA) <a href="http://www.postfix.org/" target="_blank">Postfix</a> bietet hierf&uuml;r geeignete Schnittstellen an, wie z.B. sogenanntes <i>Pre-Queue Filtering</i>. Dabei wird die eingehende Mail bevor sie in die Mail-Warteschlange aufgenommen wird bereits an einen SMTP-Proxy weitergegeben, das hei&szlig;t, Postfix stellt die Mail einem anderen Mailserver zu, der idealerweise auf dem selben Host l&auml;uft. Dieser auf einen Anwendungsfall spezialisierte Mailserver ist jedoch nicht daf&uuml;r zust&auml;ndig, die Mail letztlich zuzustellen, sondern agiert als sogenannter <i>Proxy</i>. Er f&uuml;hrt auf der ihm zugestellten Mail seine &quot;Arbeit&quot; aus, wie z.B. die Untersuchung auf Spam mittels <a href="http://spamassassin.apache.org/" target="_blank">SpamAssassin</a> und gibt die Mail dann wahlweise wieder an Postfix zur&uuml;ck oder weist sie mit einem entsprechenden Statuscode ab. In letzterem Fall wird dann schlie&szlig;lich die Annahme verweigert.
			</p>
			<p>
			Der in diesem Beispiel verwendete SMTP-Proxy nennt sich <a href="http://www.ivarch.com/programs/postprox.shtml" target="_blank">postprox</a>. Postprox ist ein Programm, dass vom Standardeingabestream die eingehende E-Mail-Kommunikation erwartet und an einen anderen Server (eine weitere &quot;Instanz&quot; von Postfix) direkt weiterleitet, mit Ausnahnme des DATA Blocks (siehe auch: <a href="http://de.wikipedia.org/w/index.php?title=Simple_Mail_Transfer_Protocol&amp;oldid=64047489#Protokoll" target="_blank">Funktionsweise des SMTP-Protokolls bei Wikipedia</a>). Dieser Block wird nach Beendigung zun&auml;chst an ein &uuml;ber das Kommandozeilenargument <span class="inline_code">-c</span> angegebenes Programm weitergegeben. Der R&uuml;ckgabewert dieses Programms soll im fehlerfreien Fall 0 und im Fehlerfall 1 sein, denn basierend auf diesem R&uuml;ckgabewert wird der MTA die Mail annehmen (0) oder verweigern (1). Dabei wird der gesamte DATA Block zuvor in einer tempor&auml;ren Datei gespeichert, die das von Postprox aufgerufene Programm &uuml;ber die Umgebungsvariable <span class="inline_code">$EMAIL</span> &ouml;ffnen kann (weitere Umgebungsvariablen finden sich in der <a href="http://www.ivarch.com/programs/quickref/postprox.shtml" target="_blank">Manpage von Postprox</a>).
			</p>
			<p>
			M&ouml;chte man, wie oben angedeutet, die Nachricht mit SpamAssassins <span class="inline_code">spamc</span> untersuchen, eignet sich folgendes Skript, dass beispielsweise unter <span class="inline_code">/usr/bin/postprox_spamc_wrapper</span> gespeichert wird:
			</p>
			<p class="code">
			#!/bin/sh<br />
			SPAMC=/usr/bin/spamc<br />
			<br />
			$SPAMC -E &lt;$EMAIL &gt; $OUTFILE 2&gt;/dev/null<br />
			STATUS=$?<br />
			<br />
			if [ $STATUS -eq 1 ] ; then<br />
			&nbsp; echo 550 Message is considered to be spam 1&gt;&amp;2<br />
			&nbsp; exit 1<br />
			fi<br />
			<br />
			exit 0
			</p>
			<p>
			<br />
			Nun muss postprox in den MTA eingebunden werden. Dazu wird Postfix' Konfigurationsdatei <span class="inline_code">main.cf</span> um folgende Zeile erg&auml;nzt:
			</p>
			<p class="code">
			smtpd_proxy_filter = 127.0.0.1:10024 
			</p>
			<p>
			<br />
			Dadurch wird Postfix versuchen, eingehende Mails bereits vor der Warteschlange an den Proxy weiterzugeben, der lokal auf Port 10024 lauscht. Damit dort jedoch &uuml;berhaupt jemand lauscht, muss nun noch die Date <span class="inline_code">master.cf</span> angepasst werden:
			</p>
			<p class="code">
			[127.0.0.1]:10024 inet n &nbsp; &nbsp; n &nbsp; &nbsp; n &nbsp; &nbsp; - &nbsp; &nbsp; 20 &nbsp; &nbsp; spawn<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user=cyrus argv=/usr/lib/postfix/postprox -r -c /usr/bin/postprox_spamc_wrapper 127.0.0.1:10025
			</p>
			<p>
			<br />
			In dieser Zeile muss ggf. noch der Benutzername, sowie der Pfad zu <span class="inline_code">postprox</span> angepasst werden. Diese Zeile bewirkt, dass Postfix daf&uuml;r sorgt, dass Postprox selbst nun auf Port 10024 auf eingehende Daten wartet und diese an den SMTP-Server auf dem lokalen Port 10025 weiterleitet. Auf diesem Port muss nun Postfix selbst wieder lauschen, daf&uuml;r gen&uuml;gt folgender Eintrag in der Datei <span class="inline_code">master.cf</span>: 
			</p>
			<p class="code">
			[127.0.0.1]:10025 inet n &nbsp; &nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp; smtpd<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o smtpd_proxy_filter=<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o mynetworks=127.0.0.1/32<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o smtpd_authorized_xforward_hosts=127.0.0.1/32<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o smtpd_client_restrictions=<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o smtpd_data_restrictions=<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o smtpd_end_of_data_restrictions=<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o smtpd_helo_restrictions=<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o smtpd_recipient_restrictions=permit_mynetworks,reject_unauth_destination<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o smtpd_sender_restriction=<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o receive_override_options=no_unknown_recipient_checks
			</p>
			<p>
			<br />
			Nach einem Neustart von Postfix wird dieser nun die Mais zun&auml;chst annehmen und an Postprox weiterreichen. Postprox wird mittels SpamAssassin pr&uuml;fen, ob es sich um Spam handelt (Konfiguration von SpamAssassin beachten) und die Mail entweder zur&uuml;ckweisen oder &uuml;ber Port 10025 wieder an Postfix zur&uuml;ckgeben. Erst danach wird die Mail der Warteschlange zugef&uuml;hrt. Als Spam erkannte Mails werden so garnicht erst angenommen.
			</p>
			<p>
			Auf diesem Weg lassen sich z.B. auch durch Viren infizierte Mails mit Clam AntiVirus &uuml;berpr&uuml;fen und fr&uuml;h abweisen. Falls Sie noch weitere Ideen haben, an welche Tools Postprox den DATA Block delegieren kann, bin ich f&uuml;r Kommentare dankbar. :-) 
			</p>
			 ]]></description>
		</item>
		<item>
			<title>FPS-3003 mit &quot;alter&quot; Firmware flashen</title>
			<link>http://www.josupeit.com/weblog~informatik-und-technik~linux,fps-3003-mit-alter-firmware-flashen.html</link>
			<guid>http://www.josupeit.com/front_content.php?lang=1&amp;idart=73</guid>
			<pubDate>Wed, 07 Jan 2009 17:33:04 +0100</pubDate>
			<author>webmaster@josupeit.com (Manuel Josupeit-Walter)</author>
			<description><![CDATA[ <p>
			Vor kurzem ist leider einer der beiden USB Ports meines LevelOne Printservers FPS-3003 abgeraucht. Damit ich nur das Ger&auml;t tauschen muss und nicht noch das Netzteil, habe ich mir den selben Printserver erneut bestellt - vermeindlich den selben.
			</p>
			<p>
			Die aktuelle Version 4 des Ger&auml;ts wird n&auml;mlich mit einer v&ouml;llig anderen Firmware ausgeliefert, die direktes drucken &uuml;ber LPR Warteschlagen oder RAW Ports 9100 und 9101 nicht mehr unterst&uuml;tzt. Ausschlie&szlig;lich die Fileserver-Funktionen &uuml;ber Samba und FTP sind geblieben, alles &Uuml;brige wird durch eine neue Software ersetzt, die (ausschlie&szlig;lich unter Windows) mit den angeschlossenen Druckern verbinden kann. Die Firmware l&auml;sst sich zwar &uuml;ber die Weboberfl&auml;che updaten, allerdings kann keine Firmware f&uuml;r Ger&auml;teversion 3 installiert werden, die die gew&uuml;nschte Funktionalit&auml;t auf dem augenscheinlich baugleichen Ger&auml;t Version 4 bereitstellt.
			</p>
			<p>
			&Uuml;ber einen Umweg l&auml;sst sich dennoch die <a href="http://de.level1.com/support_download.php?searchdl=FPS-3003&amp;srch_firmware=1" target="_blank">Firmware Version 1.26</a> auf dem Ger&auml;t installieren: &uuml;ber <a href="http://de.wikipedia.org/wiki/TFTP" target="_blank">TFTP</a>. Vorraussetzung dazu ist ein entsprechender Client auf einem Host im Netzwerk. Unter Vista beispielsweise kann ein solcher &uuml;ber <i>Systemsteuerung/Programme und Funktionen/Windows-Funktionen ein- oder ausschalten</i> nachinstalliert werden, eine Installation unter Windows XP ist ebenfalls m&ouml;glich. Da TFTP ein einfaches und bekanntes Protokoll ist, gibt es aber auch f&uuml;r jede erdenkliche Linux Distribution entsprechende Clients.
			</p>
			<p>
			Nun muss der TFTP-Server des Printservers aktiviert werden. Dazu befindet sich ein Taster mit der Aufschrift <i>init</i> am Ger&auml;t, der gedr&uuml;ckt werden muss, w&auml;hrend die Stromversorgung des FPS-3003 zun&auml;chst getrennt und dann wiederhergestellt werden muss. Die blinkenden LEDs f&uuml;r beide USB-Ports signalisieren den erfolgreichen Start dieses &quot;Rettungsmodus&quot;. Alle Einstellungen gehen jedoch leider bei diesem Vorgang verloren, so auch die IP-Adressen, die in diesem Modus auch nicht via DHCP bezogen werden. Demzufolge muss der Client, von dem aus die Firmware geflasht werden soll zun&auml;chst in das selbe <a href="http://de.wikipedia.org/wiki/Subnetz" target="_blank">Subnetz</a> gebracht werden (Auslieferzustand des Printservers ist <span class="inline_code">192.168.1.10/24</span>), das hei&szlig;t, dem Host muss beispielsweise die IP-Adresse <span class="inline_code">192.168.1.1</span> und die Subnetzmaske <span class="inline_code">255.255.255.0</span> statisch zugewiesen werden, damit beide Ger&auml;te untereinander kommunizieren k&ouml;nnen.
			</p>
			<p>
			Nun muss &uuml;ber die Kommandozeile (in Windows XP und Vista erreichbar &uuml;ber <i>Start/Ausf&uuml;hren/cmd</i>) die Firmware auf das Ger&auml;t &uuml;bertragen werden. Damit dieser Vorgang erfolgreich abgeschlossen werden kann ist es n&ouml;tig, die Firmware-Datei (mit der Dateiendung .bin) in <span class="inline_code">app.bin</span> umzubenennen. Der anschlie&szlig;ende Konsolenaufruf<br />
			</p>
			<p class="code">
			tftp -i 192.168.1.10 PUT app.bin
			</p>
			<p>
			&uuml;bertr&auml;gt nun die Firmware aufs Ger&auml;t. Nun kann die Einrichtung &uuml;ber die Weboberfl&auml;che des Printservers beginnen: Viola, sogar die LPR und RAW Einstellungen lassen sich nun wieder vornehmen.
			</p>
			<p>
			Abschlie&szlig;end m&ouml;chte ich jedoch darauf aufmerksam machen, dass flashen von Hardware immer auch schief gehen und das Ger&auml;t dadurch kaputt gehen kann. Daher empfiehlt sich auch eine Sicherung der aktuellen Firmware (auch das ist sicher &uuml;ber TFTP m&ouml;glich, allerdings habe ich das nicht getestet), um den Ursprungszustand wiederherstellen zu k&ouml;nnen. Ob durch die Ersetzung der Firmware durch eine andere Version die Herstellergarantie erlischt, ist mir leider nicht bekannt. 
			</p>
			<p>
			In diesem Sinne: Viel Spa&szlig; beim flashen... 8-)
			</p>
			 ]]></description>
		</item>
	</channel>
</rss>