{"id":2901,"date":"2023-07-17T18:52:36","date_gmt":"2023-07-17T16:52:36","guid":{"rendered":"http:\/\/fliegerhorst.dyndns.org\/?p=2901"},"modified":"2023-07-21T15:28:30","modified_gmt":"2023-07-21T13:28:30","slug":"spamassassin","status":"publish","type":"post","link":"https:\/\/fliegerhorst.dyndns.org\/index.php\/2023\/07\/17\/spamassassin\/","title":{"rendered":"Spamassassin"},"content":{"rendered":"\n<p>Spamassassin ist ein Mailfilter der Spam aus den eingehenden Emails aussortiert. Die Installation ist nicht ganz trivial. Leider ist der Installationsvorgang auf der Spasassin Homepage nur schlecht beschrieben. Es git im Grunde nur sehr wenige Step-by-Step Anleitungen daf\u00fcr. Ich habe mich f\u00fcr eine Konfiguration des Spamassassin als sogenannter Milter entschieden. <br>Das Kofferwort Milter setzt sich aus den Worten Mail und Filter zusammen. Milter-Programme erhalten von Postfix Voll-Zugriff auf eine E-Mail und d\u00fcrfen diese auswerten und sogar inhaltlich ver\u00e4ndern.<br>Der entscheidende Vorteil ist jedoch: Eine E-Mail wird hierf\u00fcr zuerst an das entsprechende Milter-Programm \u00fcbergeben, <strong>bevor<\/strong> sie in die Warteschlange eingereiht wird (Pre-Queue-Filtering). Das erlaubt eine Zur\u00fcckweisung der EMail bevor diese Postfix erreicht. Denn wurde eine EMail bereits durch Postfix angenommen kann diese nicht mehr (wirklich) abgelehnt werden wenn man den Double-Bounce-Effekt vermeiden will dass EMails zweimal abgewiesen werden.<br>Der Daemon <strong>spamass-milter<\/strong> wird durch das postfix &#8217;smtp&#8216;-binary aufgerufen. Dieses wiederum startet bei jeder EMail das <strong>spamc<\/strong> binary welches die EMail letztendlich zum <strong>spamd<\/strong> (den &#8218;daemonized&#8216; Spamassassin) schiebt. <\/p>\n\n\n\n<p>Voraussetzung daf\u00fcr ist nat\u00fcrlich ein fertig konfigurierter und voll funktionsf\u00e4higer <code>Postfix<\/code> Mail MTA.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installation<\/h2>\n\n\n\n<p>Zur Installation mu\u00df man die Pakete <code>spamassassin<\/code>, und <code>spamass-milter<\/code> installieren. Dabei werden die Pakete <code>spamc<\/code> und auch <code>sa-compile<\/code> automatisch mitinstalliert.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;liquibyte&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">root@fliegerhost:\/# apt-get update\n\nroot@fliegerhost:\/# apt-get install spamassassin spamass-milter<\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Konfiguration<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c4nderungen in Postfix<\/h4>\n\n\n\n<p>F\u00fcr Postfix sind nur wenige \u00c4nderungen notwendig. Eigentlich mu\u00df man Postfix nur mit dem Parameter <code>smtpd_milters<\/code> sagen wo dieser den Pfad zum Socket des MILTER-Daemons f\u00fcr per SMTP eingehende E-Mails findet. Der Pfad wird relativ zur <code>chroot<\/code> Umgebung der Postfix-Installation angegeben. Das chroot von Postfix ist in <code>\/var\/spool\/postfix<\/code> zu finden.<br>Der andere Parameter <code>milter_rcpt_macros<\/code> verdeckt nur eine Warnung die bei jedem Empfang einer EMail auftaucht und k\u00f6nnte auch weggelassen werden.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;file&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;liquibyte&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\"># +++++++++++++++++++++++++++ Spamassassin Milter +++++++++++++++++++++++++++++++++++\nsmtpd_milters = unix:\/spamass\/spamass.sock\n\n# die default macros werden um &quot;{b}&quot; erweitert um eine Warnung des milter zu vermeiden\nmilter_rcpt_macros = i {rcpt_addr} {rcpt_host} {rcpt_mailer} {b}<\/pre><\/div>\n\n\n\n<p>Das war es auch schon. Nicht vergessen den Postfix Dienst neu zu starten:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;liquibyte&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">root@fliegerhost:\/# service postfix restart<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c4nderungen im Spamassassin<\/h4>\n\n\n\n<p>Im wesentlichen werden die Spamassassin Einstellungen in der Datei <code>\/etc\/spamassassin\/local.cf <\/code>get\u00e4tigt. Die Einstellungen sind nat\u00fcrlich Geschmackssache. Wichtig ist nur die Einstellung <code>trusted_networks<\/code> die besagt dass EMails aus dem internen Netz nicht auf Spam getestet werden sollen. Auch sollte die Einstellung <code>required_score<\/code> mit Bedacht gew\u00e4hlt werden, denn eine zu geringe Einstellung erkennt zu viele gewollte EMails als Spam und eine zu hohe Einstellung l\u00e4sst zu viel Spam durch. Ich habe mit dem Spam Score &#8218;5&#8216; die besten Erfahrungen gemacht. <br>Wenn man den Bayes Algorithmus benutzen m\u00f6chte, was ich ausdr\u00fccklich empfehle, dann mu\u00df man die Bayes Konfigurationen auch alle einschalten. Alle anderen Einstellungen kann man so lassen wie sie in der Original Datei zu finden sind.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;file&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;liquibyte&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;\/etc\/spamassassin\/local.cf&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">#   Add *****SPAM***** to the Subject header of spam e-mails\n#\nrewrite_header Subject *****SPAM*****\n\n\n#   Save spam messages as a message\/rfc822 MIME attachment instead of\n#   modifying the original message (0: off, 2: use text\/plain instead)\n#\nreport_safe 0\n\n\n#   Set which networks or hosts are considered 'trusted' by your mail\n#   server (i.e. not spammers)\n#\ntrusted_networks 192.168.2.\n\n\n#   Set file-locking method (flock is not safe over NFS, but is faster)\n#\n# lock_method flock\n\n\n#   Set the threshold at which a message is considered spam (default: 5.0)\n#\nrequired_score 5.0\n\n#   Use Bayesian classifier (default: 1)\n#\nuse_bayes 1\nuse_bayes_rules 1\n\n#   Bayesian classifier auto-learning (default: 1)\n#\nbayes_auto_learn 1<\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">\u00c4nderungen in Spamassassin Milter<\/h4>\n\n\n\n<p>Auch hier ist im Grunde nur eine \u00c4nderung in der Datei <code>\/etc\/default\/spamass-milter<\/code> notwendig. Zun\u00e4chst stellen wir sicher dass die folgende Konfiguration so gesetzt ist:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;file&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;liquibyte&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;\/etc\/default\/spamass-milter&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">######################################\n# If \/usr\/sbin\/postfix is executable, the following are set by\n# default. You can override them by uncommenting and changing them\n# here.\n######################################\nSOCKET=&quot;\/var\/spool\/postfix\/spamass\/spamass.sock&quot;\nSOCKETOWNER=&quot;postfix:postfix&quot;\nSOCKETMODE=&quot;0660&quot;\n######################################<\/pre><\/div>\n\n\n\n<p>Das sind die Einstellungen f\u00fcr den Socket den wir oben in der Postfix Konfiguration gesetzt haben, denn der Milter mu\u00df ja wissen wo er den UNIX-Socket finden kann.<\/p>\n\n\n\n<p>Als n\u00e4chstes m\u00fcssen wir in derselben Datei die OPTIONS einstellen. Im WWW gibt es dazu mehrere Ansichten. Ich habe die besten Erfahrungen mit diesen gemacht:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:&quot;file&quot;,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;liquibyte&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;\/etc\/default\/spamass-milter&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">#       - &quot;-u debian-spamd&quot;: Hat die Mail mehrere Addressaten wird 'spamassassin' als User f\u00fcr den Check benutzt\n#               Der User 'debian-spamd' hat das Home normalerweise in '\/var\/lib\/spamassassin'\n#       - &quot;-i 127.0.0.1&quot;: akzeptiere nur connections von 127.0.0.1 (localhost)\n#       - &quot;-I&quot;: leite nur Mails an spamd weiter die sich \u00fcber den SMTP AUTH authentifiziert haben\n#               Das verhindert den Check von ausgehenden Mails\n#       - &quot;-r 5&quot;: Default Spam-Score Schwelle 5 (Bewerte mails mit Spam-Score &gt;5 als Spam)\n#       - &quot;--&quot;: Nachfolgende Optionen sind f\u00fcr den aufgerufenen Daemon (hier spamd)\n#       - &quot;-d 127.0.0.1&quot;: Sende Anfrage an Spamd nur \u00fcber IPv4 127.0.0.1 (verhindert IPv6 Zugriff auf ::1)\n#       - &quot;-s 10485760&quot;: Checke nur Emails mit einer Gr\u00f6\u00dfe bis zu 10MB\nOPTIONS=&quot;-u debian-spamd -i 127.0.0.1 -I -r 5 -- -d 127.0.0.1 -s 10485760&quot;<\/pre><\/div>\n\n\n\n<p>Hinweise zu den OPTIONS:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>\"-u debian_spamd\"<\/code> : Spamassassin benutzt f\u00fcr die Mailfilterung einen sogenannten Bayes Algorithmus. Dieser Algorithmus wird mit jeder eingehenden EMail f\u00fcr den entsprechenden Mail Empf\u00e4nger (dem Nutzer) trainiert und in einer kleinen Datenbank bespeichert. Durch dieses Training wird Spamassassin immer besser Spam von gewollten EMails (Ham) zu unterscheiden. Diese Datenbank wird allerdings f\u00fcr jeden Nutzer einzeln im HOME des Nutzers (z.B. <code>\/home\/Nutzer\/.spamassassin<\/code>) angelegt. <br>Aber was ist wenn eine Email eintrifft die mehrere Nutzer auf demselbsen Server erreichen soll? Hier kann es passieren dass die Datenbanken der unterschiedlichen Nutzer wiederspr\u00fcchlich sind und Spamassassin nicht wei\u00df wie es sich verhalten soll (Spam? Oder doch kein Spam?). In diesem Fall wird normalerweise der Nutzer &#8217;spamassassin&#8216; genutzt der daf\u00fcr angelegt werden mu\u00df. Alternativ kann man aber auch einen bereits vorhandenen Nutzer w\u00e4hlen. Hier ist das der Nutzer <code>debian_spamd<\/code> der sein HOME Verzeichnis in <code>\/var\/lib\/spamassassin\/.spamassassin<\/code> hat.<\/li>\n\n\n\n<li><code>\"-I\"<\/code> : Dieser Parameter ist sehr wichtig denn der verhindert den Test auf Spam f\u00fcr ausgehende EMails, denn ausgehende EMails melden sich ja nicht \u00fcber den SMTP AUTH Mechanismus an, jedoch eingehende schon.<\/li>\n\n\n\n<li><code>\"-d 127.0.0.1\"<\/code> &#8211; Wenn man diesen Parameter wegl\u00e4sst stellt man fest dass <code>spamc<\/code> immer zuerst versucht die Email \u00fcber IPv6 &#8218;::1&#8216; an den <code>spamd<\/code> zuzustellen. Die erzeugt im Log-File immer eine unsch\u00f6ne Warnmeldung bei jeder einzelnen EMail. Dies kann man mit dem Parameter &#8218;-d 127.0.0.1&#8216; ausschalten. Dies verhindert den IPv6 Zugriff und es wird sofort der IPv4 Verbindungsversuch gestartet.<\/li>\n<\/ul>\n\n\n\n<p>Alle anderen Parameter sind, denke ich, ausreichend erkl\u00e4rt.<\/p>\n\n\n\n<p>Das war es auch schon. Nicht vergessen die Dienste <code>spamassassin<\/code> und <code>spamass-milter<\/code> neu zu starten:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;liquibyte&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">root@fliegerhost:\/# service spamassassin restart\nroot@fliegerhost:\/# service spamass-milter restart<\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">&#8218;Spam&#8216; und &#8218;Ham&#8216; anlernen<\/h2>\n\n\n\n<p>Auf der Seite http:\/\/untroubled.org\/spam\/ werden regelm\u00e4ssig Spam EMails ver\u00f6ffentlicht mit denen man den Mailfilter Spamassassin anlernen kann. Dazu packt man einfach die entsprechenden *.7z Dateien in ein tempo\u00e4res Verzeichnis aus und lernt die EMails mit dem folgenden Befehl sowohl f\u00fcr den Nutzer spamassassin als auch f\u00fcr jeden beliebigen nat\u00fcrlichen Nutzer an:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;liquibyte&quot;,&quot;lineNumbers&quot;:false,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">root@fliegerhost:\/# sa-learn --dbpath \/var\/lib\/spamassassin\/.spamassassin --progress --spam \/tmp\/&lt;Pfad_zu_Spam&gt;\nroot@fliegerhost:\/# sa-learn --dbpath \/home\/&lt;Nutzer&gt;\/.spamassassin --progress --spam \/tmp\/&lt;Pfad_zu_Spam&gt;<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Spamassassin ist ein Mailfilter der Spam aus den eingehenden Emails aussortiert. Die Installation ist nicht ganz trivial. Leider ist der Installationsvorgang auf der Spasassin Homepage nur schlecht beschrieben. Es git im Grunde nur sehr wenige Step-by-Step Anleitungen daf\u00fcr. Ich habe mich f\u00fcr eine Konfiguration des Spamassassin als sogenannter Milter entschieden. Das Kofferwort Milter setzt sich[&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3032,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"zakra_general_container_width":0,"zakra_general_content_width":0,"zakra_general_sidebar_width":0,"zakra_sticky_header":"customizer","zakra_header_main_area":true,"zakra_site_logo_width":0,"zakra_header_top_enabled":"customizer","zakra_header_top_style":"customizer","zakra_primary_menu_item_style":"customizer","zakra_page_header_text_color":"","zakra_page_header_layout":"customizer","zakra_page_title_bg":"","zakra_footer_widgets_bg_image":0,"zakra_page_title_bg_repeat":"customizer","zakra_page_title_bg_position":"customizer","zakra_page_title_bg_size":"customizer","zakra_page_title_bg_attachment":"customizer","zakra_breadcrumbs_enabled":"customizer","zakra_breadcrumbs_text_color":"","zakra_breadcrumbs_separator_color":"","zakra_breadcrumbs_link_color":"","zakra_breadcrumbs_link_hover_color":"","zakra_page_title_bg_image":0,"zakra_footer_widgets_enabled":"customizer","zakra_footer_column_layout_1_style":"customizer","zakra_footer_widgets_bg":"","zakra_footer_widgets_bg_repeat":"customizer","zakra_footer_widgets_bg_position":"customizer","zakra_footer_widgets_bg_size":"customizer","zakra_footer_widgets_bg_attachment":"customizer","zakra_footer_bar_enabled":"customizer","zakra_footer_bar_style":"customizer","zakra_page_container_layout":"customizer","zakra_page_sidebar_layout":"customizer","zakra_remove_content_margin":false,"zakra_sidebar":"customizer","zakra_transparent_header":"customizer","zakra_logo":0,"zakra_main_header_style":"default","zakra_menu_item_color":"","zakra_menu_item_hover_color":"","zakra_menu_item_active_color":"","zakra_menu_active_style":"","zakra_page_header":true,"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[13],"class_list":["post-2901","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server","tag-linux"],"_links":{"self":[{"href":"https:\/\/fliegerhorst.dyndns.org\/index.php\/wp-json\/wp\/v2\/posts\/2901","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fliegerhorst.dyndns.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fliegerhorst.dyndns.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fliegerhorst.dyndns.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fliegerhorst.dyndns.org\/index.php\/wp-json\/wp\/v2\/comments?post=2901"}],"version-history":[{"count":0,"href":"https:\/\/fliegerhorst.dyndns.org\/index.php\/wp-json\/wp\/v2\/posts\/2901\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fliegerhorst.dyndns.org\/index.php\/wp-json\/wp\/v2\/media\/3032"}],"wp:attachment":[{"href":"https:\/\/fliegerhorst.dyndns.org\/index.php\/wp-json\/wp\/v2\/media?parent=2901"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fliegerhorst.dyndns.org\/index.php\/wp-json\/wp\/v2\/categories?post=2901"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fliegerhorst.dyndns.org\/index.php\/wp-json\/wp\/v2\/tags?post=2901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}