SpamSnake · 14 min read · Dec 25, 2025

Die perfekte SpamSnake - Ubuntu Jeos 10.10 Maverick Meerkat - Seite 4

14. KAM

vi /etc/cron.daily/kam.sh

Fügen Sie den folgenden Inhalt hinzu und

chmod +x /etc/cron.daily/kam.sh
#!/bin/bash
   
 # Originalversion modifiziert von Andrew MacLachlan ([email protected])
 # Zusätzliche MailScanner-Neustarts bei anfänglichem Neustartfehler hinzugefügt
 # Skript läuft im Stillen bei normalem (erfolgreichem) Betrieb
 # UPDATEMAXDELAY auf 900 von 600 erhöht
 
 # Fügen Sie eine zufällige Verzögerung bis zu diesem Wert ein, um Virusupdates über
 # die Uhr zu verteilen. 1800 Sekunden = 30 Minuten.
 # Setzen Sie dies auf 0, um es zu deaktivieren.
 UPDATEMAXDELAY=0
 if [ -f /opt/MailScanner/var/MailScanner ] ; then
 . /opt/MailScanner/var/MailScanner
 fi
 export UPDATEMAXDELAY
 
 if [ "x$UPDATEMAXDELAY" = "x0" ]; then
 :
 else
 logger -p mail.info -t KAM.cf.sh Verzögerung des Cron-Jobs bis zu $UPDATEMAXDELAY Sekunden
 perl -e "sleep int(rand($UPDATEMAXDELAY));"
 fi
 
 # JKF Holen Sie sich KAM.cf
 #echo Holen von KAM.cf...
 cd /etc/mail/spamassassin
 rm -f KAM.cf
 wget -O KAM.cf http://www.peregrinehw.com/downloads/SpamAssassin/contrib/KAM.cf > /dev/null 2>&1
 if [ "$?" = "0" ]; then
 #echo Es wurde abgeschlossen und hat etwas abgerufen
 if ( tail -10 KAM.cf | grep -q '^#.*EOF' ); then
 # echo Es war erfolgreich, also machen Sie ein Backup
 cp -f KAM.cf KAM.cf.backup
 else
 echo FEHLER: EOF-Marker konnte nicht gefunden werden
 cp -f KAM.cf.backup KAM.cf
 fi
 else
 echo Es konnte nicht ordnungsgemäß abgeschlossen werden
 cp -f KAM.cf.backup KAM.cf
 fi
 #echo Laden von MailScanner- und SpamAssassin-Konfigurationsregeln
 /etc/init.d/mailscanner reload > /dev/null 2>&1
 if [ $? != 0 ] ; then
 echo "MailScanner-Neuladen fehlgeschlagen - Erneuter Versuch..."
 /etc/init.d/mailscanner force-reload
 if [ $? = 0 ] ; then
 echo "MailScanner-Neuladen erfolgreich."
 else
 echo "Stopping MailScanner..."
 /etc/init.d/mailscanner stop
 echo "Warten auf eine Minute..."
 perl -e "sleep 60;"
 echo "Versuche, MailScanner zu starten..."
 /etc/init.d/mailscanner start
 fi
 
 fi 

15. ScamNailer

vi /usr/sbin/update_scamnailer

und

chmod +x /usr/sbin/update_scamnailer

Hinweis: *Inhalt befindet sich in scamnailer.doc.)

Fügen Sie es zu cron hinzu:

@daily /usr/sbin/update_scamnailer &> /dev/null #Update Scamnailer

16. Firewalling der SpamSnake mit Firehol

Einführung

Firehol ist ein zustandsbehafteter iptables-Paketfilter-Firewall-Konfigurator. Es ist abstrahiert, erweiterbar, einfach und leistungsstark. Es kann jede Art von Firewall verwalten, aber am wichtigsten ist, dass es Ihnen die Mittel gibt, sie so zu konfigurieren, wie Sie es sich vorstellen.

Firehol installieren

apt-get install firehol

Firehol-Einstellungen:

vi /etc/default/firehol

und ändern Sie Folgendes:

START_FIREHOL=YES
vi /etc/firehol/firehol.conf

und fügen Sie Folgendes hinzu:

version 5
   # Akzeptiere gesamten Client-Verkehr an jedem Interface
   interface any internet
   protection strong
   server "icmp ping ICMP ssh http https telnet webmin dns dcc echo smtp" accept
 client all accept

Dies filtert alle eingehenden Verbindungen, die nicht mit den oben genannten Diensten verbunden sind. Wenn Sie weniger höflich sein möchten, können Sie sie abweisen, indem Sie Folgendes nach ‘protection strong’ hinzufügen: policy drop

vi /usr/sbin/get-iana

mit folgendem und

chmod +x /usr/sbin/get-iana
#!/bin/bash
 # $Id: get-iana.sh,v 1.13 2010/09/12 13:55:00 jcb Exp $
   #
   # $Log: get-iana.sh,v $
   # Revision 1.13 2010/09/12 13:55:00 jcb
   # Aktualisiert für das neueste IANA-Reservierungsformat.
   #
   # Revision 1.12 2008/03/17 22:08:43 ktsaou
   # Aktualisiert für das neueste IANA-Reservierungsformat.
   #
   # Revision 1.11 2007/06/13 14:40:04 ktsaou
   # * leere Protokollnachricht *
   #
   # Revision 1.10 2007/05/05 23:38:31 ktsaou
   # Unterstützung für externe Definitionen hinzugefügt von:
   #
   # RESERVED_IPS
   # PRIVATE_IPS
   # MULTICAST_IPS
   # UNROUTABLE_IPS
   #
   # in Dateien unter demselben Namen in /etc/firehol/.
   # Nur RESERVED_IPS ist obligatorisch (firehol wird sich beschweren, wenn es nicht dort ist,
   # aber es wird trotzdem ohne funktionieren), und ist auch die einzige Datei, die firehol
   # überprüft, wie alt sie ist. Wenn sie älter als 90 Tage ist, wird firehol sich erneut beschweren.
   #
   # Das bereitgestellte get-iana.sh-Skript wurde geändert, um die RESERVED_IPS-Datei zu generieren.
   # FireHOL weist den Benutzer auch an, dieses Skript zu verwenden, wenn die Datei fehlt
   # oder zu alt ist.
   #
   # Revision 1.9 2007/04/29 19:34:11 ktsaou
   # * leere Protokollnachricht *
   #
   # Revision 1.8 2005/06/02 15:48:52 ktsaou
   # Erlaubte 127.0.0.1 in RESERVED_IPS
   #
   # Revision 1.7 2005/05/08 23:27:23 ktsaou
   # Aktualisierte RESERVED_IPS auf die aktuellen IANA-Reservierungen.
   #
   # Revision 1.6 2004/01/10 18:44:39 ktsaou
   # Weiter optimiert und PRIVATE_IPS reduziert mit:
   # http://www.vergenet.net/linux/aggregate/
   #
   # Das bereitgestellte get-iana.sh verwendet .aggregate. wenn es im Pfad gefunden wird.
   # (aggregate ist der Name dieses Programms, wenn es auf Gentoo installiert ist)
   #
   # Revision 1.5 2003/08/23 23:26:50 ktsaou
   # Fehler #793889:
   # Ändern Sie #!/bin/sh in #!/bin/bash, um FireHOL auf Systemen auszuführen, bei denen
   # bash nicht mit /bin/sh verknüpft ist.
   #
   # Revision 1.4 2002/10/27 12:44:42 ktsaou
   # CVS-Test
   #
 #
   # Programm, das die IPv4-Adressraumzuweisung von IANA herunterlädt
   # und eine Liste mit allen reservierten Adressräumen erstellt.
   #
 IPV4_ADDRESS_SPACE_URL="http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.txt"
 # Das Programm wird alle Zeilen in der Datei abgleichen, die mit einer Zahl beginnen, einen Schrägstrich haben,
   # gefolgt von einer weiteren Zahl, für die das folgende Muster auch übereinstimmt
   # in denselben Zeilen
   IANA_RESERVED="(RESERVED|UNALLOCATED)"
 # welche Zeilen, die von oben übereinstimmen, ignoriert werden sollen
   # (d.h. nicht in RESERVED_IPS einbezogen werden)?
   #IANA_IGNORE="(Multicast|Private use|Loopback|Local  Identification)"
   IANA_IGNORE="Multicast"
 tempfile="/tmp/iana.$$.$RANDOM"
 AGGREGATE="`which aggregate 2>/dev/null`"
   if [ -z "${AGGREGATE}" ]
   then
   AGGREGATE="`which aggregate 2>/dev/null`"
   fi
 if [ -z "${AGGREGATE}" ]
   then
   echo >&2
   echo >&2
   echo >&2 "WARNUNG"
   echo >&2 "Bitte installieren Sie 'aggregate', um die Liste der IPs zu verkleinern."
   echo >&2
   echo >&2
   fi
 echo >&2
   echo >&2 "Abrufen des IANA IPv4-Adressraums von:"
   echo >&2 "${IPV4_ADDRESS_SPACE_URL}"
   echo >&2
 wget -O - -proxy=off "${IPV4_ADDRESS_SPACE_URL}" |\
   egrep " *[0-9]+/[0-9]+.*${IANA_RESERVED}" |\
   egrep -vi "${IANA_IGNORE}" |\
   sed -e 's:^ *\([0-9]*/[0-9]*\).*:\1:' |\
   (
 while IFS="/" read range net
   do
   if [ ! $net -eq 8 ]
   then
   echo >&2 "Kann Netzwerkmasken von $net Bits nicht verarbeiten  ($range/$net)"
   continue
   fi
 first=`echo $range | cut -d '-' -f 1`
   first=`expr $first + 0`
   last=`echo $range | cut -d '-' -f 2`
   last=`expr $last + 0`
 x=$first
   while [ ! $x -gt $last ]
   do
   # test $x -ne 127 && echo "$x.0.0.0/$net"
   echo "$x.0.0.0/$net"
   x=$[x + 1]
   done
   done
   ) | \
   (
   if [ ! -z "${AGGREGATE}" -a -x "${AGGREGATE}" ]
   then
   "${AGGREGATE}"
   else
   cat
   fi
   ) >"${tempfile}"
 echo >&2
   echo >&2
   echo >&2 "FOLGENDE RESERVIERTE IP-BEREICHE GEFUNDEN:"
   printf "RESERVED_IPS=\""
   i=0
   for x in `cat ${tempfile}`
   do
   i=$[i + 1]
   printf "${x} "
   done
   printf "\"\n"
 if [ $i -eq 0 ]
   then
   echo >&2
   echo >&2
   echo >&2 "Fehler beim Finden reservierter IPs."
   echo >&2 "Möglicherweise wurde das Dateiformat geändert oder ich kann die URL nicht abrufen."
   echo >&2
 rm -f ${tempfile}
   exit 1
   fi
   echo >&2
   echo >&2
   echo >&2 "Unterschiede zwischen der abgerufenen Liste und der in
   echo >&2 "/etc/firehol/RESERVED_IPS:"
 echo >&2 "# diff /etc/firehol/RESERVED_IPS  ${tempfile}"
   diff /etc/firehol/RESERVED_IPS ${tempfile}
 if [ $? -eq 0 ]
   then
   echo >&2
   echo >&2 "Keine Unterschiede gefunden."
   echo >&2
 rm -f ${tempfile}
   exit 0
   fi
 echo >&2
   echo >&2
   echo >&2 "Möchten Sie diese Liste in /etc/firehol/RESERVED_IPS speichern,"
   echo >&2 "damit FireHOL sie von nun an automatisch verwendet?"
   echo >&2
   while [ 1 = 1 ]
   do
   printf >&2 "ja oder nein > "
   read x
 case "${x}" in
   ja) cp -f /etc/firehol/RESERVED_IPS /etc/firehol/RESERVED_IPS.old  2>/dev/null
   cat "${tempfile}" >/etc/firehol/RESERVED_IPS || exit 1
   echo >&2 "Neue RESERVED_IPS in '/etc/firehol/RESERVED_IPS' geschrieben."
   echo "Firehol wird jetzt neu gestartet"
   sleep 3
   /etc/init.d/firehol restart
   break
   ;;
 nein)
   echo >&2 "Nichts gespeichert."
   break
   ;;
 *) echo >&2 "Kann '${x}' nicht verstehen."
   ;;
 esac
   done
 rm -f ${tempfile}
vi /usr/sbin/update-iana

mit folgendem Inhalt und

chmod +x /usr/sbin/update-iana
#!/bin/sh
 /usr/sbin/get-iana  < /etc/firehol/get-iana-answerfile
vi /etc/firehol/get-iana-answerfile

mit folgendem Inhalt:

ja

Führen Sie das Skript aus, um RESERVED_IPS zu aktualisieren:

/usr/sbin/update-iana

Jetzt ist Ihr Server so eingerichtet, dass er nur Verbindungen für die von Ihnen erlaubten Dienste akzeptiert.

Fügen Sie es zu cron hinzu:

@monthly /usr/sbin/update-iana &> /dev/null #Update firehol reservierte ips

17. Relay-Empfänger anwenden

Die folgenden Anweisungen sind für Personen gedacht, die Microsoft Exchange 2000 oder Microsoft Exchange 2003 verwenden.

Diese Seite beschreibt, wie Sie Ihr Mail-Gateway so konfigurieren, dass es regelmäßig eine Liste gültiger Empfänger-E-Mail-Adressen von Ihrem Exchange-System abruft. Dadurch können Sie Ihren Server so konfigurieren, dass er automatisch jede E-Mail ablehnt, die an ungültige Adressen gerichtet ist. Dies reduziert die Last auf Ihrem Exchange-Server, da er keine Zustellberichte mehr verarbeiten muss, und es reduziert die Last auf Ihrem Postfix-Server, da er keine Spam- und Virenscans für die Nachricht durchführen muss.

Abhängigkeiten installieren

Installieren Sie das Perl-Modul Net::LDAP:

perl -MCPAN -e shell  
install Net::LDAP
vi /usr/bin/getadsmtp.pl

mit folgendem:

#!/usr/bin/perl -T -w
   # Dieses Skript wird alle SMTP-Adressen der Benutzer aus Ihrem Active Directory abrufen
   # (einschließlich primärer und sekundärer E-Mail-Adressen) und sie im
   # Format "[email protected] OK" auflisten, das Postfix mit relay_recipient_maps verwendet.
   # Stellen Sie sicher, dass Sie den Pfad zu Perl oben überprüfen.
   # Dies erfordert, dass Net::LDAP installiert ist.  Um Net::LDAP zu installieren, geben Sie in einer Shell
   # "perl -MCPAN -e shell" ein und dann "install Net::LDAP"
   use Net::LDAP;
   use Net::LDAP::Control::Paged;
   use Net::LDAP::Constant ( "LDAP_CONTROL_PAGED" );
   # Geben Sie den Pfad/Datei für die Ausgabe ein
   $VALID = "/etc/postfix/relay_recipients";
   open VALID, "> $VALID" or die "KANN $VALID NICHT ÖFFNEN $!";
   # Geben Sie die FQDN Ihrer Active Directory-Domänencontroller unten ein
   $dc1="domaincontroller1.example.com";
   $dc2="domaincontroller2.example.com";
   # Geben Sie den LDAP-Container für Ihre Benutzerbasis ein.
   # Die Syntax ist CN=Users,dc=example,dc=com
   # Dies kann gefunden werden, indem Sie die Windows 2000 Support Tools installieren
   # und dann ADSI Edit ausführen.
   # In ADSI Edit erweitern Sie die "Domain NC [domaincontroller1.example.com]" &
   # Sie sehen zum Beispiel, DC=example,DC=com (das ist Ihre Basis).
   # Der Benutzercontainer wird im rechten Bereich als
   # CN=Users angegeben, abhängig von Ihrem Schema (das ist Ihr Container).
   # Sie können dies überprüfen, indem Sie auf "Eigenschaften" Ihres Benutzers klicken
   # Ordner in ADSI Edit und den "Pfad"-Wert untersuchen, wie:
   # LDAP://domaincontroller1.example.com/CN=Users,DC=example,DC=com
   # was $hqbase="cn=Users,dc=example,dc=com" wäre
   # Hinweis:  Sie können auch einfach $hqbase="dc=example,dc=com" verwenden
   $hqbase="cn=Users,dc=example,dc=com";
   # Geben Sie den Benutzernamen & das Passwort für einen gültigen Benutzer in Ihrem Active Directory ein
   # mit dem Benutzernamen in der Form cn=username,cn=Users,dc=example,dc=com
   # Stellen Sie sicher, dass das Passwort des Benutzers nicht abläuft.  Beachten Sie, dass dieser Benutzer
   # keine speziellen Berechtigungen benötigt.
   # Sie können dies überprüfen, indem Sie auf "Eigenschaften" Ihres Benutzers in
   # ADSI Edit klicken und den "Pfad"-Wert untersuchen, wie:
   # LDAP://domaincontroller1.example.com/CN=user,CN=Users,DC=example,DC=com
   # was $user="cn=user,cn=Users,dc=example,dc=com" wäre
   # Hinweis: Sie können auch die UPN-Anmeldung verwenden: "[email protected]"
   $user="cn=user,cn=Users,dc=example,dc=com";
   $passwd="password";
   # Verbindung zu Active Directory-Domänencontrollern
   $noldapserver=0;
   $ldap = Net::LDAP->new($dc1) or
   $noldapserver=1;
   if ($noldapserver == 1)  {
   $ldap = Net::LDAP->new($dc2) or
   die "Fehler beim Verbinden mit den angegebenen Domänencontrollern $@ \n";
   }
   $mesg = $ldap->bind ( dn => $user,
   password =>$passwd);
   if ( $mesg->code()) {
   die ("Fehler:", $mesg->error_text((),"\n"));
   }
   # Wie viele LDAP-Abfrageergebnisse für jede paginierte Runde abrufen
   # Setzen Sie es auf unter 1000 für Active Directory
   $page = Net::LDAP::Control::Paged->new( size => 990 );
   @args = ( base     => $hqbase,
   # Spielen Sie damit herum, um Objekte wie Kontakte, öffentliche Ordner usw. abzurufen.
   # Ein minimaler Filter für nur Benutzer mit E-Mail wäre:
   # filter => "(&(sAMAccountName=*)(mail=*)))"
   filter => "(& (mailnickname=*) (| (&(objectCategory=person)
   (objectClass=user)(!(homeMDB=*))(!(msExchHomeServerName=*)))
   (&(objectCategory=person)(objectClass=user)(|(homeMDB=*)
   (msExchHomeServerName=*)))(&(objectCategory=person)(objectClass=contact))
   (objectCategory=group)(objectCategory=publicFolder) ))",
   control  => [ $page ],
   attrs  => "proxyAddresses",
   );
   my $cookie;
   while(1) {
   # Suche durchführen
   my $mesg = $ldap->search( @args );
   # Ergebnisse für proxyAddresses-Attribute filtern
   foreach my $entry ( $mesg->entries ) {
   my $name = $entry->get_value( "cn" );
   # LDAP-Attribute sind mehrwertig, daher müssen wir jedes einzelne drucken.
   foreach my $mail ( $entry->get_value( "proxyAddresses" ) ) {
   # Testen Sie, ob die Zeile mit einer der folgenden Zeilen beginnt:
   # proxyAddresses: [smtp|SMTP]:
   # und auch diese Startzeichenfolge verwerfen, sodass $mail nur die
   # Adresse ohne andere Zeichen ist...
   if ( $mail =~ s/^(smtp|SMTP)://gs ) {
   print VALID $mail." OK\n";
   }
   }
   }
   # Nur bei LDAP_SUCCESS fortfahren
   $mesg->code and last;
   # Cookie aus der paginierten Steuerung abrufen
   my($resp)  = $mesg->control( LDAP_CONTROL_PAGED ) or last;
   $cookie    = $resp->cookie or last;
   # Cookie in der paginierten Steuerung setzen
   $page->cookie($cookie);
   }
   if ($cookie) {
   # Wir hatten einen abnormalen Exit, also lassen Sie den Server wissen, dass wir keine weiteren möchten
   $page->cookie($cookie);
   $page->size(0);
   $ldap->search( @args );
   # Es wäre auch eine gute Idee, an dieser Stelle unglücklich zu sterben und den OP zu informieren
   die("LDAP-Abfrage nicht erfolgreich");
   }
   # Fügen Sie zusätzliche Einschränkungen, Benutzer usw. zur Ausgabedatei unten hinzu.
   #print VALID "[email protected] OK\n";
   #print VALID "[email protected] 550 Benutzer unbekannt.\n";
   #print VALID "domain3.com 550 Benutzer existiert nicht.\n";
   close VALID;

Als nächstes setzen Sie die Berechtigungen für die Datei, damit sie ausgeführt werden kann:

chmod +x /usr/bin/getadsmtp.pl

Bearbeiten Sie die Datei, um sie für Ihre spezifische Domain anzupassen. Da die Datei schreibgeschützt ist, müssen Sie :w! verwenden, um die Datei in vi zu speichern.

  1. Setzen Sie $dc1 und $dc2 auf die vollqualifizierten Domänennamen oder IP-Adressen von 2 Ihrer Domänencontroller.
  2. Setzen Sie $hqbase gleich dem LDAP-Pfad zum Container oder organisatorischen Einheit, die die E-Mail-Konten enthält, für die Sie die E-Mail-Adressen abrufen möchten.
  3. Setzen Sie $user und $passwd, um anzugeben, welches Benutzerkonto verwendet werden soll, um auf diese Informationen zuzugreifen. Dieses Konto muss nur Mitglied der Domäne sein, daher wäre es eine gute Idee, ein Konto speziell dafür einzurichten.

Versuchen Sie, das Skript auszuführen. Wenn es korrekt funktioniert, wird /etc/postfix/relay_recipients erstellt.

Beachten Sie, dass, wenn Ihr Postfix-Server durch eine Firewall von Ihren Active Directory-Controllern getrennt ist, Sie den TCP-Port 389 vom Postfix-Server zu den ADCs öffnen müssen.

getadsmtp.pl

An diesem Punkt möchten Sie möglicherweise /etc/postfix/relay_recipients bearbeiten und unerwünschte E-Mail-Adressen entfernen, da dieses Skript alles importiert.

Postmap die Datei, um die Hash-db zu erstellen

postmap /etc/postfix/relay_recipients  
postfix reload

Schließlich möchten Sie möglicherweise einen Cron-Job einrichten, um die Datei /etc/postfix/relay_recipients.db regelmäßig zu aktualisieren und zu erstellen. Sie können ein Skript namens /usr/bin/update-relay-recipients.sh einrichten: (Optional)

vi /usr/bin/update-relay-recipients.sh

mit folgendem und

chmod +x /usr/bin/update-relay_recipients.sh
#!/bin/sh
/usr/bin/getadsmtp.pl
postmap /etc/postfix/relay_recipients
postfix reload

Vergessen Sie nicht, sicherzustellen, dass Folgendes in Ihrer /etc/postfix/main.cf-Datei enthalten ist:

relay_recipient_maps = hash:/etc/postfix/relay_recipients

Fügen Sie es zu cron hinzu:

30 2 * * * /usr/bin/update-relay-recipients.sh #Synchronisieren Sie relay_recipients mit Active Directory-Adressen

:Hinweis, dass dieser Cron-Job jeden Tag um 2:30 Uhr ausgeführt wird, um die Datenbankdatei zu aktualisieren. Möglicherweise möchten Sie Ihren häufiger oder seltener ausführen, je nachdem, wie oft Sie neue E-Mail-Benutzer zu Ihrem System hinzufügen.

18. Webmin installieren (Optional):

apt-get install perl libnet-ssleay-perl libauthen-pam-perl libio-pty-perl apt-show-versions  
cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/universe/libm/libmd5-perl/libmd5-perl_2.03-1_all.deb  
dpkg -i libmd5-perl_2.03-1_all.deb  
wget http://downloads.sourceforge.net/project/webadmin/webmin/1.520/webmin_1.520_all.deb  
dpkg --install webmin_1.520_all.deb

19. Fügen Sie automatisch einen Haftungsausschluss zu ausgehenden E-Mails mit alterMIME hinzu (Optional)

Dieses Tutorial zeigt, wie man alterMIME installiert und verwendet. alterMIME ist ein Tool, das automatisch einen Haftungsausschluss zu E-Mails hinzufügen kann. In diesem Artikel werde ich erklären, wie man es als Postfix-Filter auf Ubuntu installiert.

Installieren von alterMIME:

apt-get install altermime

Als nächstes erstellen wir den Benutzerfilter mit dem Home-Verzeichnis /var/spool/filter - alterMIME wird als dieser Benutzer ausgeführt:

useradd -r -c "Postfix-Filter" -d /var/spool/filter filter  
mkdir /var/spool/filter  
chown filter:filter /var/spool/filter  
chmod 750 /var/spool/filter

Anschließend erstellen wir das Skript /etc/postfix/disclaimer, das alterMIME ausführt. Das alterMIME-Paket von Ubuntu enthält ein Beispielskript, das wir einfach nach /etc/postfix/disclaimer kopieren können:

cp /usr/share/doc/altermime/examples/postfix_filter.sh /etc/postfix/disclaimer  
chgrp filter /etc/postfix/disclaimer  
chmod 750 /etc/postfix/disclaimer

Jetzt ist das Problem mit diesem Skript, dass es nicht zwischen eingehenden und ausgehenden E-Mails unterscheidet - es fügt einfach allen E-Mails einen Haftungsausschluss hinzu. Typischerweise möchten Sie Haftungsausschlüsse nur für ausgehende E-Mails, und selbst dann nicht für alle Absenderadressen. Daher habe ich das Skript /etc/postfix/disclaimer ein wenig modifiziert - darauf kommen wir gleich zu sprechen.

Im Moment erstellen wir die Datei /etc/postfix/disclaimer_addresses, die alle Absender-E-Mail-Adressen (eine pro Zeile) enthält, für die alterMIME einen Haftungsausschluss hinzufügen soll:

vi /etc/postfix/disclaimer_addresses
[email protected]
[email protected]
[email protected]

Jetzt öffnen wir /etc/postfix/disclaimer und ändern es wie folgt (ich habe die Teile markiert, die ich geändert habe):

vi /etc/postfix/disclaimer
#!/bin/sh
# Lokalisieren Sie diese.
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
####### Geändert vom Original-Skript #######
DISCLAIMER_ADDRESSES=/etc/postfix/disclaimer_addresses
####### Geändert vom Original-Skript ENDE #######
# Exit-Codes aus 
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Aufräumen, wenn fertig oder beim Abbrechen.
trap "rm -f in.$$" 0 1 2 3 15
# Beginnen Sie mit der Verarbeitung.
cd $INSPECT_DIR || { echo $INSPECT_DIR existiert nicht; exit
$EX_TEMPFAIL; }
cat >in.$$ || { echo Kann Mail nicht in Datei speichern; exit $EX_TEMPFAIL; }
####### Geändert vom Original-Skript #######
# Erhalten Sie die Absenderadresse
from_address=`grep -m 1 "From:" in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`
if [ `grep -wi ^${from_address}$ ${DISCLAIMER_ADDRESSES}` ]; then
  /usr/bin/altermime --input=in.$$ \
                   --disclaimer=/etc/postfix/disclaimer.txt \
                   --disclaimer-html=/etc/postfix/disclaimer.txt \
                   --xheader="X-Copyrighted-Material: Bitte besuchen Sie http://www.company.com/privacy.htm" || \
                    { echo Nachrichtinhalt abgelehnt; exit $EX_UNAVAILABLE; }
fi
####### Geändert vom Original-Skript ENDE #######
$SENDMAIL "$@" 

Als nächstes benötigen wir die Textdatei /etc/postfix/disclaimer.txt, die unseren Haftungsausschlusstext enthält. Das alterMIME-Paket von Ubuntu enthält einen Beispieltext, den wir vorerst verwenden können (natürlich können Sie ihn nach Belieben ändern):

cp /usr/share/doc/altermime/examples/disclaimer.txt /etc/postfix/disclaimer.txt

Schließlich müssen wir Postfix mitteilen, dass es das Skript /etc/postfix/disclaimer verwenden soll, um Haftungsausschlüsse zu ausgehenden E-Mails hinzuzufügen. Öffnen Sie /etc/postfix/master.cf und fügen Sie -o content_filter=dfilt: zur smtp-Zeile hinzu:

vi /etc/postfix/master.cf
#
# Konfigurationsdatei des Postfix-Masterprozesses.  Für Details zum Format
# der Datei siehe die master(5)-Man-Seite (Befehl: "man 5 master").
#
# ========================================================================== 
# Diensttyp  privat unpriv  chroot  aufwachen  maxproc Befehl + Argumente
#               (ja)   (ja)   (ja)   (nie) (100)
# ========================================================================== 
smtp      inet  n       -       -       -       -       smtpd
   -o content_filter=dfilt:
[...] 

Am Ende derselben Datei fügen Sie die folgenden beiden Zeilen hinzu:

[...] 
dfilt     unix    -       n       n       -       -       pipe
    flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient} 

Starten Sie Postfix danach neu:

/etc/init.d/postfix restart

Das war’s! Jetzt sollte ein Haftungsausschluss zu ausgehenden E-Mails hinzugefügt werden, die von den in /etc/postfix/disclaimer_addresses aufgeführten Adressen gesendet werden.

20. Screenshots

Herzlichen Glückwunsch

Sie sollten jetzt eine vollständig funktionierende SpamSnake mit all den Leckereien haben :-)

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.