Hetzner - DokuWiki

DebianMailserver5
(Postfix)
(Postfixoptimierung mittels RBL)
 
(34 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
  
  
== Funktionen: ==
+
== '''Funktionen''': ==
  
 
*Virtual Domains
 
*Virtual Domains
Zeile 19: Zeile 19:
 
   spamassassin amavisd-new clamav
 
   spamassassin amavisd-new clamav
  
====Postfixadmin====
+
== '''Postfixadmin''' ==
Nun holen wir uns den aktuellen postfixadmin aus dem SVN:
+
 
 +
Nun holen wir uns den aktuellen postfixadmin aus dem SVN (für subversion: http://www.howtoforge.com/debian_subversion_websvn):
 +
 
 
   svn co https://postfixadmin.svn.sourceforge.net/svnroot/postfixadmin/trunk postfixadmin
 
   svn co https://postfixadmin.svn.sourceforge.net/svnroot/postfixadmin/trunk postfixadmin
  
Diese legen wir in /var/www/postfixadmin ab.
+
Diese legen wir in /var/www/postfixadmin ab.  
 +
 
 +
Berechtigungen ändern:
  
Berechtigungen ändern:
 
 
   cd /var/www/postfixadmin
 
   cd /var/www/postfixadmin
 
   chmod 640 *.php *.css
 
   chmod 640 *.php *.css
Zeile 40: Zeile 43:
 
   chown -R www-data:www-data /var/www/postfixadmin
 
   chown -R www-data:www-data /var/www/postfixadmin
  
Grundsätzlich kann man nun auch nach der Install Anleitung von postfixadmin weitermachen. Der Vollständigkeithalber erkläre ich es hier dennoch.
+
Grundsätzlich kann man nun auch nach der Install Anleitung von postfixadmin weitermachen. Der Vollständigkeithalber erkläre ich es hier dennoch.  
  
In der DATABASE_MYSQL.TXT liegt das Template für die Datenbank.
+
In der DATABASE_MYSQL.TXT liegt das Template für die Datenbank. Nun müssen wir hier aber ein paar Zeilen auskommentieren:  
Nun müssen wir hier aber ein paar Zeilen auskommentieren:
+
  
   # Postfix user & password
+
   # Postfix user & password
 
   INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('postfix'));
 
   INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('postfix'));
  
   # Postfix Admin user & password
+
   # Postfix Admin user & password
 
   INSERT INTO user (Host, User, Password) VALUES ('localhost','postfixadmin',password('postfixadmin'));
 
   INSERT INTO user (Host, User, Password) VALUES ('localhost','postfixadmin',password('postfixadmin'));
  
 
   #Priviledges
 
   #Priviledges
 
   INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','postfix','Y');
 
   INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','postfix','Y');
   INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES  
+
   INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES
 
   ('localhost', 'postfix', 'postfixadmin', 'Y', 'Y', 'Y', 'Y');
 
   ('localhost', 'postfix', 'postfixadmin', 'Y', 'Y', 'Y', 'Y');
  
Damit werden im MySQL dann ein user postfix und ein user postfixadmin angelegt.
+
Damit werden im MySQL dann ein user postfix und ein user postfixadmin angelegt.  
  
Nun importieren wir das ganze in MySQL
+
Nun importieren wir das ganze in MySQL  
  
   mysql -u root < DATABASE_MYSQL.TXT
+
   mysql -u root &lt; DATABASE_MYSQL.TXT
  
 +
<br> Bitte beachten das diese Vorgehensweise für die gegenwärtige SVN Version gilt (Stand 15.10.2007) evtl. ist bei neueren Versionen hier kein auskommentieren mehr nötig.
  
Bitte beachten das diese Vorgehensweise für die gegenwärtige SVN Version gilt (Stand 15.10.2007) evtl. ist bei neueren Versionen hier kein auskommentieren mehr nötig.
+
Nun ist alles importiert und wir können wenn unser Apache noch immer /var/www korrekt liest uns unter http://deineip/postfixadmin/setup.php den Status der Postfixadmin installation ansehen und unseren Superuser anlegen. Wenn das getan ist löschen wir die setup.php
  
Nun ist alles importiert und wir können wenn unser Apache noch immer /var/www korrekt liest uns unter http://deineip/postfixadmin/setup.php den Status der Postfixadmin installation ansehen und unseren Superuser anlegen.
 
Wenn das getan ist löschen wir die setup.php
 
 
   rm /var/www/postfixadmin/setup.php
 
   rm /var/www/postfixadmin/setup.php
  
Leider muss nun noch per hand in der Datei config.inc.php folgende Zeile auf "true" geändert werden:
+
Leider muss nun noch per hand in der Datei config.inc.php folgende Zeile auf "true" geändert werden:  
  
 
   $CONF['configured'] = true;
 
   $CONF['configured'] = true;
  
Jetzt können wir unter http://deineip/postfixadmin uns mit unserem superuser einloggen und alles schön administrieren.
+
Bitte schaut euch die confif.inc.php genau durch. Hier gibt es noch einiges möglichkeiten das system abzustimmen u.a. in welchem Verzeichnisformat die mails gespeichert werden sollen. Besonders wichtig ist noch die vorbelegung für die standard aliase, das erspart hinterher eine menge arbeit.  
Grundsätzlich denke ich ist hier alles selbsterklärend. Jeder von euch angelegte User mit Mailbox kann sich auch unter dieser Adresse einloggen und zb seinen Alias oder Passwort ändern oder später auch seine Out of Office replys verwalten.
+
  
 +
Jetzt können wir unter http://deineip/postfixadmin uns mit unserem superuser einloggen und alles schön administrieren. Grundsätzlich denke ich ist hier alles selbsterklärend. Jeder von euch angelegte User mit Mailbox kann sich auch unter dieser Adresse einloggen und zb seinen Alias oder Passwort ändern oder später auch seine Out of Office replys verwalten.
  
===Postfix===
+
=='''Postfix'''==
  
 
Nun müssen wir Postfix einrichten und ihm auch sagen das er bitteschön mit postfixadmin gemeinsame Sache machen soll.
 
Nun müssen wir Postfix einrichten und ihm auch sagen das er bitteschön mit postfixadmin gemeinsame Sache machen soll.
  
Dazu müssen wir erst einmal ein paar Dateien mit folgenden Inhalten anlegen:  
+
Dazu müssen wir erst einmal ein paar Dateien mit folgenden Inhalten anlegen:
  
 
'''mysql_virtual_alias_maps.cf'''
 
'''mysql_virtual_alias_maps.cf'''
Zeile 110: Zeile 111:
 
   where_field = username
 
   where_field = username
  
 
+
 
 
''' mysql_virtual_mailbox_maps.cf'''
 
''' mysql_virtual_mailbox_maps.cf'''
 
   user = postfix
 
   user = postfix
Zeile 125: Zeile 126:
 
   addgroup --gid 1001 vmail
 
   addgroup --gid 1001 vmail
 
   adduser --uid 1001 vmail
 
   adduser --uid 1001 vmail
 +
 +
Die Emails wollen wir in /email speichern
 +
 +
  mkdir /email
 +
  chown vmail:vmail /email
  
 
Jetzt müssen wir noch sicherstellen das folgende einträge in der main.cf hinterlegt sind
 
Jetzt müssen wir noch sicherstellen das folgende einträge in der main.cf hinterlegt sind
  
 
+
'''main.cf'''
  myhostname = mail.domain.tld
+
  alias_maps = hash:/etc/aliases
+
  alias_database = hash:/etc/aliases
+
  myorigin = /etc/mailname
+
  mydestination = localhost, localhost.localdomain, localhost
+
  relayhost =
+
  mynetworks = 127.0.0.0/8
+
  mailbox_command = procmail -a "$EXTENSION"
+
  mailbox_size_limit = 0
+
 
   virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
 
   virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
 
   virtual_gid_maps = static:1001
 
   virtual_gid_maps = static:1001
Zeile 148: Zeile 145:
 
   virtual_transport = virtual
 
   virtual_transport = virtual
 
   virtual_uid_maps = static:1001
 
   virtual_uid_maps = static:1001
   # Additional for quota support
+
 
   #virtual_create_maildirsize = yes
+
 
   #virtual_mailbox_extended = yes
+
So nun sollte Postfix in der Lage sein emails anzunehmen und die gültigen adressen  hierfür in der MySQL Datenbank abzurufen.
   #virtual_mailbox_limit_maps =  
+
 
   #virtual_mailbox_limit_override = yes
+
am besten testen wir das ganze mal indem wir Postfix starten
   #virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
+
 
   #virtual_overquota_bounce = yes
+
   postfix start
 +
 
 +
und eine testmail local versenden an einen bereits per postfixadmin angelegten user
 +
  echo hello | mail -s test user@domain.tld
 +
 
 +
 
 +
Jetzt das protokoll checken ob alles passt.
 +
 
 +
Weiter gehts mit:
 +
 
 +
 
 +
== '''smtpd SASL-Authentifizierung''' ==
 +
 
 +
Um einen SMTP-Dienst auch außerhalb des sicheren LANs anbieten zu können, sollte man eine Authentifizierung durch die Clients einfordern, damit man kein offenes Relay für Spammer und anderes zwielichtiges Gesindel anbietet. Dafür wird das Simple Authentication and Security Layer (SASL)-Framework verwendet, welches z.B. über das Cyrus-Sasl-Projekt realisiert wird.
 +
 
 +
'''Achtung! Bei dieser Installation werden Benutzerpasswörter im Klartext übertragen. Man sollte also zusehen, für die Verbindung SSL-/TLS-Verschlüsselung zu verwenden.'''
 +
 
 +
Hierfür muss erstmal folgendes Paket installiert werden [1]:
 +
 
 +
* sasl2-bin
 +
 
 +
Cyrus SASL bietet mehrere Arten, Authentifizierungsdienste bereitzustellen. Da man z.B. mit auxprop nicht gegen die normalen Shadow-Passwörter des Linuxsystems authentifizieren kann, wird hier die Einrichtung mit saslauthd beschrieben.
 +
 
 +
Zunächst muss die Konfigurationsdatei /etc/default/saslauthd angepasst [3] und folgendes eingetragen werden:
 +
 
 +
erstmal nur für shadow > benutzer des systems -- rest kommt :)
 +
 
 +
  START=yes
 +
  MECHANISMS="shadow"
 +
 
 +
Dann muss eine neue Datei /etc/postfix/sasl/smtpd.conf erstellt werden:
 +
 
 +
  pwcheck_method: saslauthd
 +
  mech_list: PLAIN LOGIN
 +
  saslauthd_path: /var/run/saslauthd/mux
 +
 
 +
Und die /etc/postfix/main.cf muss natürlich auch noch angepasst werden:
 +
 
 +
  smtpd_sasl_auth_enable = yes
 +
  smtpd_recipient_restrictions =
 +
      permit_mynetworks permit_sasl_authenticated reject_unauth_destination
 +
  smtpd_sasl_application_name = smtpd        # Postfix <= 2.2, Dapper
 +
   smtpd_sasl_path = smtpd                    # Postfix >= 2.3, ab Edgy
 +
  broken_sasl_auth_clients = yes
 +
 
 +
Die letzte Zeile ist notwendig, weil sonst ein paar ältere Versionen von Microsoft-Software nicht korrekt funktioniert.
 +
 
 +
Jetzt könnte eigentlich alles funktionieren, wenn es nicht noch ein Problem gäbe, nämlich die Sicherheitseinstellungen von Postfix. Postfix sperrt nämlich den smtpd standardmäßig in eine chroot-Umgebung, wo er den Sasl-Socket nicht finden kann. Es gibt mehrere Möglichkeiten, dieses Problem zu umgehen.
 +
 
 +
Methode 1: chroot abschalten
 +
 
 +
Das geht am einfachsten und ist wahrscheinlich auch am praktischsten, wenn noch andere Dienste (wie z.B. ein IMAP-Server) den saslauthd nutzen wollen. Dazu muss einfach nur in der Datei /etc/postfix/master.cf in der smtpd-Zeile ein n in die chroot-Spalte eingetragen werden:
 +
 
 +
   # service type  private unpriv  chroot  wakeup  maxproc command + args
 +
  #              (yes)  (yes)  (yes)  (never) (100)
 +
   # ==========================================================================
 +
  smtp      inet  n      -      n      -      -      smtpd
 +
 
 +
Methode 2: Socket in den chroot legen
 +
 
 +
Da Postfix seinen Prozess nach /var/spool/postfix chrooted, sucht dieser dann den Saslauthd-Socket in /var/spool/postfix/var/run/saslauthd/. Man muss also dem saslauthd befehlen, den Socket dort zu eröffnen, indem man die oben erwähnte Datei /etc/default/saslauthd um folgende Zeile ergänzt:
 +
 
 +
  PARAMS="-m /var/spool/postfix/var/run/saslauthd"
 +
 
 +
Aktivieren
 +
 
 +
Abschließend müssen Saslauthd und Postfix noch neu gestartet werden [2]:
 +
 
 +
  /etc/init.d/saslauthd restart
 +
  /etc/init.d/postfix restart
 +
 
 +
=='''Courier'''==
 +
in /etc/courier bearbeiten wir nun einige Dateien. Achtet darauf das die angegeben Zeilen überseinstimmen bzw vervollständigt diese
 +
 
 +
'''authdeamonrc'''
 +
  authmodulelist="authmysql"
 +
 
 +
'''authmysqlrc'''
 +
  MYSQL_SERVER localhost
 +
  MYSQL_USERNAME postfix
 +
  MYSQL_PASSWORD postfix
 +
  MYSQL_PORT 0
 +
  MYSQL_DATABASE postfix
 +
  MYSQL_USER_TABLE mailbox
 +
  MYSQL_CRYPT_PWFIELD password
 +
  MYSQL_UID_FIELD 1001
 +
  MYSQL_GID_FIELD 1001
 +
  MYSQL_LOGIN_FIELD username
 +
  MYSQL_HOME_FIELD "/email"
 +
  MYSQL_MAILDIR_FIELD maildir
 +
 
 +
=='''Spam Bekämpfun'''g==
 +
==='''Postgrey'''===
 +
 
 +
  apt-get install postgrey
 +
 
 +
Nun ändern wir in /etc/defaults/postgrey
 +
 
 +
diese Zeile
 +
  POSTGREY_OPTS="--inet=127.0.0.1:60000"
 +
in
 +
  POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=60 --auto-whitelist-clients=2 --max-age=365"
 +
 
 +
Dadurch werden nach 2 erfolgreichen Zustellungen im zeitraum von 365 Tagen automatisch der entsprechende Mailserver in die whitelist übernommen. Delay=60 bewirkt das der jeweilige Server für 60sekunden auf die greylist kommt. Ich setze das deshalb so da wir einige Kunden haben mit denen wir nur 1-2 mal im Jahr kontakt haben. Ist der Zeitraum für den cache zu niedrig würden diese nie whitelisted werden.
 +
 
 +
Jetzt noch in /etc/postfix/main.cf bei ''smtpd_recipient_restrictions ='' folgendes mit anfügen
 +
  check_policy_service inet:127.0.0.1:60000
 +
 
 +
Nun sicherstellen das postgrey auch läuft
 +
 
 +
  /etc/init.d/postgrey restart
 +
 
 +
==='''Amavis'''===
 +
 
 +
In der /etc/postfix/main.cf fügen wir unten folgendes an:
 +
  content_filter = amavis:[127.0.0.1]:10024
 +
   #sonst funktioniert das virtualalias nicht
 +
  #receive_override_options = no_address_mappings
 +
 
 +
In /etc/postfix/master.cf
 +
 
 +
  amavis unix - - - - 2 smtp
 +
  -o smtp_data_done_timeout=1200
 +
  -o smtp_send_xforward_command=yes
 +
 
 +
   127.0.0.1:10025 inet n - - - - smtpd
 +
    -o content_filter=
 +
    -o local_recipient_maps=
 +
    -o relay_recipient_maps=
 +
    -o smtpd_restriction_classes=
 +
    -o smtpd_client_restrictions=
 +
    -o smtpd_helo_restrictions=
 +
    -o smtpd_sender_restrictions=
 +
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
 +
    -o mynetworks=127.0.0.0/8
 +
    -o strict_rfc821_envelopes=yes
 +
    -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
 +
 
 +
Jetzt weiß Postfix was er tun muss.
 +
Nun brauchen wir nur noch Amavis selbst zu configurieren.
 +
 
 +
Hierzu editieren wir in /etc/amavis/conf.d/ erst einmal:
 +
 
 +
'''/etc/amavis/conf.d/15-av_scanners'''
 +
 
 +
und kommentieren die Zeilen aus die auf unseren jeweiligen Virenscanner zutreffen wie z.b. clamav
 +
 
 +
'''/etc/amavis/conf.d/15-content-filter-mode'''
 +
Hier müssen wir wie in der Datei beschrieben die jeweiligen Zeilen auskommentieren um den Virenscan und Spamscan überhaupt einzuschalten.
 +
 
 +
'''/etc/amavis/conf.d/20-debian_defaults'''
 +
Eigentlich soll man hier direkt nichts ändern sondern laut debian eine eigene Datei verwenden. Ich bin dazu aber zu faul und darum ändern wir sie direkt.
 +
 
 +
Ich habe bei mir folgendes eingestellt
 +
Welche Betreffänderung will ich haben?
 +
  $sa_spam_subject_tag = '***SPAM*** ';
 +
 
 +
Jede mail wird erst einemal mit dem spam info header versorgt
 +
  $sa_tag_level_deflt  = -1000;  # add spam info headers if at, or above  that level
 +
Mails die eine Bewertung über 5.0 erhalten werden als SPAM gekennzeichnet
 +
  $sa_tag2_level_deflt = 5.0; # add 'spam detected' headers at that level
 +
Höheres Scoring mehr Aktion
 +
  $sa_kill_level_deflt = 10; # triggers spam evasive actions
 +
Alles über 10 wird nicht ausgeliefert.
 +
  $sa_dsn_cutoff_level = 10;  # spam level beyond which a DSN is not sent
 +
 
 +
Nun legen wir noch fest was mit bestimmten Mails geschehen soll:
 +
 
 +
  $final_virus_destiny      = D_REJECT;  # (data not lost, see virus quarantine)
 +
  $final_banned_destiny    = D_REJECT;  # D_REJECT when front-end MTA
 +
  $final_spam_destiny      = D_PASS;
 +
  $final_bad_header_destiny = D_PASS;    # False-positive prone (for spam)
 +
 
 +
 
 +
Fertig! Grundsätzlich wird sofern ihr das Greylisting und RBL's verwendet euer Amavis nicht viel zu tun bekommen. Wir bekommen maximal auf dem info@ account pro Woche 4-5 spam nachrichten.
 +
 
 +
Achja und was gerne vergessen wird ist den amavis daemon überhaupt zu starten, also
 +
  /etc/init.d/amavis restart
 +
 
 +
Schaut euch auch in den Logs die Ausgaben vom Amavis an, dort zeigt er euch welche Entpacker er gefunden hat und welche nicht. Die dann nachinstallieren
 +
 
 +
==='''Spamassassin'''===
 +
 
 +
Tja wohl der einfachste Teil
 +
  apt-get install spamassasin
 +
 
 +
Achja und sofern ihr vorhin schon amavis restartet habt bitte nochmal wiederholen
 +
 
 +
==='''Postfixoptimierung mittels RBL'''===
 +
 
 +
Postgrey ist toll verursacht aber Traffic und auch load. Amavis erkennt mit Spamassassin vieles frisst aber auch viel ressourcen. Also warum nicht gleich bevor die Mail unser System belastet filtern?
 +
 
 +
Dafür gibts RBL und die fügen wir nun in die postfix configuration ein:
 +
 
 +
/etc/postfix/main.cf
 +
Hier haben wir ja schon das fett gedruckte eingefügt gehabt. Komplettiert es einfach wie bei mir. Die beiden auskommentierten Zeilen sind fürs Mailversenden. Leider hatte ich damals auf meiner Sargeinstallation SASL nie zum laufen bekommen und bin dann auf pop-before-smtp (was auch wunderbar nur mit IMAP funzt) umgestiegen und hab zudem unsere feste IP vom Büro generell freigeschalten.
 +
 
 +
  smtpd_recipient_restrictions =
 +
    permit_mynetworks,
 +
   # permit_sasl_authenticated,
 +
  #  check_client_access hash:/var/lib/pop-before-smtp/hosts,
 +
    reject_non_fqdn_hostname,
 +
    reject_non_fqdn_sender,
 +
    reject_non_fqdn_recipient,
 +
    reject_unauth_destination,
 +
    reject_unauth_pipelining,
 +
    reject_invalid_hostname,
 +
    reject_rbl_client list.dsbl.org,
 +
    reject_rbl_client bl.spamcop.net,
 +
    reject_rbl_client whois.rfc-ignorant.org,
 +
    reject_rbl_client ix.dnsbl.manitu.org,
 +
    '''check_policy_service inet:127.0.0.1:60000'''
 +
 
 +
Die verwendeten RBLs sind auch nur meine persönliche auswahl, viele andere admins werden evtl andere bevorzugen oder ganz ablehnen. Bei uns haben sie sich bewährt.
 +
 
 +
==Shared Folders einrichten==
 +
 
 +
==Vacation/Auto Reply einrichten==
 +
 
 +
[[Kategorie:Debian]]

Aktuelle Version vom 5. Januar 2018, 15:24 Uhr

Dieses How-to basiert auf diversen anderen How-To's mit denen ich damals meinen Mail server gebastelt habe. Leider habe ich zwischenzeitlich die Quellen dafür nicht mehr.


Inhaltsverzeichnis

Funktionen:

  • Virtual Domains
  • Spam und Virenfilter mittels Spamassassin und Amavisd-new sowie Postgrey
  • Verwaltung der Mailadressen mittels Postfixadmin
  • Auto Reply/Vacation Funktion
  • Shared Folders mit Courier
  • ....


Als erstes benötigen wir ein paar Debian Pakete

 apt-get install postfix postfix-mysql mysql-server-5.0 apache2 libapache2-mod-php5
 courier-authdeamon courier-authlib-mysql courier-imap courier-pop
 spamassassin amavisd-new clamav

Postfixadmin

Nun holen wir uns den aktuellen postfixadmin aus dem SVN (für subversion: http://www.howtoforge.com/debian_subversion_websvn):

 svn co https://postfixadmin.svn.sourceforge.net/svnroot/postfixadmin/trunk postfixadmin

Diese legen wir in /var/www/postfixadmin ab.

Berechtigungen ändern:

 cd /var/www/postfixadmin
 chmod 640 *.php *.css
 cd /var/www/postfixadmin/admin/
 chmod 640 *.php .ht*
 cd /var/www/postfixadmin/images/
 chmod 640 *.gif *.png
 cd /var/www/postfixadmin/languages/
 chmod 640 *.lang
 cd /var/www/postfixadmin/templates/
 chmod 640 *.tpl
 cd /var/www/postfixadmin/users/
 chmod 640 *.php
 chown -R www-data:www-data /var/www/postfixadmin

Grundsätzlich kann man nun auch nach der Install Anleitung von postfixadmin weitermachen. Der Vollständigkeithalber erkläre ich es hier dennoch.

In der DATABASE_MYSQL.TXT liegt das Template für die Datenbank. Nun müssen wir hier aber ein paar Zeilen auskommentieren:

 # Postfix user & password
 INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('postfix'));
 # Postfix Admin user & password
 INSERT INTO user (Host, User, Password) VALUES ('localhost','postfixadmin',password('postfixadmin'));
 #Priviledges
 INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','postfix','Y');
 INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES
 ('localhost', 'postfix', 'postfixadmin', 'Y', 'Y', 'Y', 'Y');

Damit werden im MySQL dann ein user postfix und ein user postfixadmin angelegt.

Nun importieren wir das ganze in MySQL

 mysql -u root < DATABASE_MYSQL.TXT


Bitte beachten das diese Vorgehensweise für die gegenwärtige SVN Version gilt (Stand 15.10.2007) evtl. ist bei neueren Versionen hier kein auskommentieren mehr nötig.

Nun ist alles importiert und wir können wenn unser Apache noch immer /var/www korrekt liest uns unter http://deineip/postfixadmin/setup.php den Status der Postfixadmin installation ansehen und unseren Superuser anlegen. Wenn das getan ist löschen wir die setup.php

 rm /var/www/postfixadmin/setup.php

Leider muss nun noch per hand in der Datei config.inc.php folgende Zeile auf "true" geändert werden:

 $CONF['configured'] = true;

Bitte schaut euch die confif.inc.php genau durch. Hier gibt es noch einiges möglichkeiten das system abzustimmen u.a. in welchem Verzeichnisformat die mails gespeichert werden sollen. Besonders wichtig ist noch die vorbelegung für die standard aliase, das erspart hinterher eine menge arbeit.

Jetzt können wir unter http://deineip/postfixadmin uns mit unserem superuser einloggen und alles schön administrieren. Grundsätzlich denke ich ist hier alles selbsterklärend. Jeder von euch angelegte User mit Mailbox kann sich auch unter dieser Adresse einloggen und zb seinen Alias oder Passwort ändern oder später auch seine Out of Office replys verwalten.

Postfix

Nun müssen wir Postfix einrichten und ihm auch sagen das er bitteschön mit postfixadmin gemeinsame Sache machen soll.

Dazu müssen wir erst einmal ein paar Dateien mit folgenden Inhalten anlegen:

mysql_virtual_alias_maps.cf

 user = postfix
 password = postfix
 hosts = 127.0.0.1
 dbname = postfix
 table = alias
 select_field = goto
 where_field = address

mysql_virtual_domains_maps.cf

 user = postfix
 password = postfix
 hosts = 127.0.0.1
 dbname = postfix
 table = domain
 select_field = domain
 where_field = domain

mysql_virtual_mailbox_limit_maps.cf

 user = postfix
 password = postfix
 hosts = 127.0.0.1
 dbname = postfix
 table = mailbox
 select_field = quota
 where_field = username


mysql_virtual_mailbox_maps.cf

 user = postfix
 password = postfix
 hosts = 127.0.0.1
 dbname = postfix
 table = mailbox
 select_field = maildir
 where_field = username

Für das speichern der Mails benötigen wir einen seperaten User und Gruppe . Hierfür nehmen wir vmail für username und gruppe und eine statische id von 1001

 addgroup --gid 1001 vmail
 adduser --uid 1001 vmail

Die Emails wollen wir in /email speichern

 mkdir /email
 chown vmail:vmail /email

Jetzt müssen wir noch sicherstellen das folgende einträge in der main.cf hinterlegt sind

main.cf

 virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
 virtual_gid_maps = static:1001
 #hier geben wir das Verzeichnis an in dem wir die emails ablegen wollen
 virtual_mailbox_base = /email
 virtual_mailbox_domains =  mysql:/etc/postfix/mysql_virtual_domains_maps.cf
 virtual_mailbox_limit = 512000000
 virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
 virtual_minimum_uid = 1001
 virtual_transport = virtual
 virtual_uid_maps = static:1001


So nun sollte Postfix in der Lage sein emails anzunehmen und die gültigen adressen hierfür in der MySQL Datenbank abzurufen.

am besten testen wir das ganze mal indem wir Postfix starten

 postfix start

und eine testmail local versenden an einen bereits per postfixadmin angelegten user

 echo hello | mail -s test user@domain.tld


Jetzt das protokoll checken ob alles passt.

Weiter gehts mit:


smtpd SASL-Authentifizierung

Um einen SMTP-Dienst auch außerhalb des sicheren LANs anbieten zu können, sollte man eine Authentifizierung durch die Clients einfordern, damit man kein offenes Relay für Spammer und anderes zwielichtiges Gesindel anbietet. Dafür wird das Simple Authentication and Security Layer (SASL)-Framework verwendet, welches z.B. über das Cyrus-Sasl-Projekt realisiert wird.

Achtung! Bei dieser Installation werden Benutzerpasswörter im Klartext übertragen. Man sollte also zusehen, für die Verbindung SSL-/TLS-Verschlüsselung zu verwenden.

Hierfür muss erstmal folgendes Paket installiert werden [1]:

  • sasl2-bin

Cyrus SASL bietet mehrere Arten, Authentifizierungsdienste bereitzustellen. Da man z.B. mit auxprop nicht gegen die normalen Shadow-Passwörter des Linuxsystems authentifizieren kann, wird hier die Einrichtung mit saslauthd beschrieben.

Zunächst muss die Konfigurationsdatei /etc/default/saslauthd angepasst [3] und folgendes eingetragen werden:

erstmal nur für shadow > benutzer des systems -- rest kommt :)

 START=yes
 MECHANISMS="shadow"

Dann muss eine neue Datei /etc/postfix/sasl/smtpd.conf erstellt werden:

 pwcheck_method: saslauthd
 mech_list: PLAIN LOGIN
 saslauthd_path: /var/run/saslauthd/mux

Und die /etc/postfix/main.cf muss natürlich auch noch angepasst werden:

 smtpd_sasl_auth_enable = yes
 smtpd_recipient_restrictions =
      permit_mynetworks permit_sasl_authenticated reject_unauth_destination
 smtpd_sasl_application_name = smtpd        # Postfix <= 2.2, Dapper
 smtpd_sasl_path = smtpd                    # Postfix >= 2.3, ab Edgy
 broken_sasl_auth_clients = yes

Die letzte Zeile ist notwendig, weil sonst ein paar ältere Versionen von Microsoft-Software nicht korrekt funktioniert.

Jetzt könnte eigentlich alles funktionieren, wenn es nicht noch ein Problem gäbe, nämlich die Sicherheitseinstellungen von Postfix. Postfix sperrt nämlich den smtpd standardmäßig in eine chroot-Umgebung, wo er den Sasl-Socket nicht finden kann. Es gibt mehrere Möglichkeiten, dieses Problem zu umgehen.

Methode 1: chroot abschalten

Das geht am einfachsten und ist wahrscheinlich auch am praktischsten, wenn noch andere Dienste (wie z.B. ein IMAP-Server) den saslauthd nutzen wollen. Dazu muss einfach nur in der Datei /etc/postfix/master.cf in der smtpd-Zeile ein n in die chroot-Spalte eingetragen werden:

 # service type  private unpriv  chroot  wakeup  maxproc command + args
 #               (yes)   (yes)   (yes)   (never) (100)
 # ==========================================================================
 smtp      inet  n       -       n       -       -       smtpd

Methode 2: Socket in den chroot legen

Da Postfix seinen Prozess nach /var/spool/postfix chrooted, sucht dieser dann den Saslauthd-Socket in /var/spool/postfix/var/run/saslauthd/. Man muss also dem saslauthd befehlen, den Socket dort zu eröffnen, indem man die oben erwähnte Datei /etc/default/saslauthd um folgende Zeile ergänzt:

 PARAMS="-m /var/spool/postfix/var/run/saslauthd"

Aktivieren

Abschließend müssen Saslauthd und Postfix noch neu gestartet werden [2]:

 /etc/init.d/saslauthd restart
 /etc/init.d/postfix restart

Courier

in /etc/courier bearbeiten wir nun einige Dateien. Achtet darauf das die angegeben Zeilen überseinstimmen bzw vervollständigt diese

authdeamonrc

 authmodulelist="authmysql"

authmysqlrc

 MYSQL_SERVER localhost
 MYSQL_USERNAME postfix
 MYSQL_PASSWORD postfix
 MYSQL_PORT 0
 MYSQL_DATABASE postfix
 MYSQL_USER_TABLE mailbox
 MYSQL_CRYPT_PWFIELD password
 MYSQL_UID_FIELD 1001
 MYSQL_GID_FIELD 1001
 MYSQL_LOGIN_FIELD username
 MYSQL_HOME_FIELD "/email"
 MYSQL_MAILDIR_FIELD maildir

Spam Bekämpfung

Postgrey

 apt-get install postgrey

Nun ändern wir in /etc/defaults/postgrey

diese Zeile

 POSTGREY_OPTS="--inet=127.0.0.1:60000"

in

 POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=60 --auto-whitelist-clients=2 --max-age=365"

Dadurch werden nach 2 erfolgreichen Zustellungen im zeitraum von 365 Tagen automatisch der entsprechende Mailserver in die whitelist übernommen. Delay=60 bewirkt das der jeweilige Server für 60sekunden auf die greylist kommt. Ich setze das deshalb so da wir einige Kunden haben mit denen wir nur 1-2 mal im Jahr kontakt haben. Ist der Zeitraum für den cache zu niedrig würden diese nie whitelisted werden.

Jetzt noch in /etc/postfix/main.cf bei smtpd_recipient_restrictions = folgendes mit anfügen

 check_policy_service inet:127.0.0.1:60000

Nun sicherstellen das postgrey auch läuft

 /etc/init.d/postgrey restart

Amavis

In der /etc/postfix/main.cf fügen wir unten folgendes an:

 content_filter = amavis:[127.0.0.1]:10024
 #sonst funktioniert das virtualalias nicht
 #receive_override_options = no_address_mappings

In /etc/postfix/master.cf

 amavis unix - - - - 2 smtp
  -o smtp_data_done_timeout=1200
  -o smtp_send_xforward_command=yes
 127.0.0.1:10025 inet n - - - - smtpd
    -o content_filter=
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_client_restrictions=
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks=127.0.0.0/8
    -o strict_rfc821_envelopes=yes
    -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

Jetzt weiß Postfix was er tun muss. Nun brauchen wir nur noch Amavis selbst zu configurieren.

Hierzu editieren wir in /etc/amavis/conf.d/ erst einmal:

/etc/amavis/conf.d/15-av_scanners

und kommentieren die Zeilen aus die auf unseren jeweiligen Virenscanner zutreffen wie z.b. clamav

/etc/amavis/conf.d/15-content-filter-mode Hier müssen wir wie in der Datei beschrieben die jeweiligen Zeilen auskommentieren um den Virenscan und Spamscan überhaupt einzuschalten.

/etc/amavis/conf.d/20-debian_defaults Eigentlich soll man hier direkt nichts ändern sondern laut debian eine eigene Datei verwenden. Ich bin dazu aber zu faul und darum ändern wir sie direkt.

Ich habe bei mir folgendes eingestellt Welche Betreffänderung will ich haben?

 $sa_spam_subject_tag = '***SPAM*** ';

Jede mail wird erst einemal mit dem spam info header versorgt

 $sa_tag_level_deflt  = -1000;  # add spam info headers if at, or above   that level

Mails die eine Bewertung über 5.0 erhalten werden als SPAM gekennzeichnet

 $sa_tag2_level_deflt = 5.0; # add 'spam detected' headers at that level

Höheres Scoring mehr Aktion

 $sa_kill_level_deflt = 10; # triggers spam evasive actions

Alles über 10 wird nicht ausgeliefert.

 $sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent

Nun legen wir noch fest was mit bestimmten Mails geschehen soll:

 $final_virus_destiny      = D_REJECT;  # (data not lost, see virus quarantine)
 $final_banned_destiny     = D_REJECT;   # D_REJECT when front-end MTA
 $final_spam_destiny       = D_PASS;
 $final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)


Fertig! Grundsätzlich wird sofern ihr das Greylisting und RBL's verwendet euer Amavis nicht viel zu tun bekommen. Wir bekommen maximal auf dem info@ account pro Woche 4-5 spam nachrichten.

Achja und was gerne vergessen wird ist den amavis daemon überhaupt zu starten, also

 /etc/init.d/amavis restart

Schaut euch auch in den Logs die Ausgaben vom Amavis an, dort zeigt er euch welche Entpacker er gefunden hat und welche nicht. Die dann nachinstallieren

Spamassassin

Tja wohl der einfachste Teil

 apt-get install spamassasin

Achja und sofern ihr vorhin schon amavis restartet habt bitte nochmal wiederholen

Postfixoptimierung mittels RBL

Postgrey ist toll verursacht aber Traffic und auch load. Amavis erkennt mit Spamassassin vieles frisst aber auch viel ressourcen. Also warum nicht gleich bevor die Mail unser System belastet filtern?

Dafür gibts RBL und die fügen wir nun in die postfix configuration ein:

/etc/postfix/main.cf Hier haben wir ja schon das fett gedruckte eingefügt gehabt. Komplettiert es einfach wie bei mir. Die beiden auskommentierten Zeilen sind fürs Mailversenden. Leider hatte ich damals auf meiner Sargeinstallation SASL nie zum laufen bekommen und bin dann auf pop-before-smtp (was auch wunderbar nur mit IMAP funzt) umgestiegen und hab zudem unsere feste IP vom Büro generell freigeschalten.

 smtpd_recipient_restrictions =
   permit_mynetworks,
 #  permit_sasl_authenticated,
 #  check_client_access hash:/var/lib/pop-before-smtp/hosts,
   reject_non_fqdn_hostname,
   reject_non_fqdn_sender,
   reject_non_fqdn_recipient,
   reject_unauth_destination,
   reject_unauth_pipelining,
   reject_invalid_hostname,
   reject_rbl_client list.dsbl.org,
   reject_rbl_client bl.spamcop.net,
   reject_rbl_client whois.rfc-ignorant.org,
   reject_rbl_client ix.dnsbl.manitu.org,
   check_policy_service inet:127.0.0.1:60000

Die verwendeten RBLs sind auch nur meine persönliche auswahl, viele andere admins werden evtl andere bevorzugen oder ganz ablehnen. Bei uns haben sie sich bewährt.

Shared Folders einrichten

Vacation/Auto Reply einrichten



© 2019. Hetzner Online GmbH. Alle Rechte vorbehalten.