DBMAIL, MySQL, Postfix und SMTP auth unter Debian
Sodele, in diesem kleinen HowTo gehe ich auf die Basisinstallation von dbmail in Verbindung mit MySQL, Postfix und SMTP auth via SASL2 ein. Als Ausgangspunkt verwende ich eine Plain Debian Etch installation.
Nach dem durchführen der beschriebenen Schritte sollte euer System in der Lage sein, Mails mit Empfängerverifizierung zu empfangen und in der Datenbank abzulegen. Ebenso sollte der Versand (mit SMTP auth) sowie der Zugriff via POP3 und IMAP funktionieren.
Sicherlich ist dieses HowTo nicht perfekt (was bei dem Thema auch schwierig ist), aber einen guten Leitfaden sollte es dennoch bieten.
Für Fragen und Anregungen stehe ich euch gern zur Verfügung.
DBMAIL installation
Als erstes müssen die APT sourcen angepasst werden.
vi /etc/apt/sources.list
deb http://debian.nfgd.net/debian stable main
Pakelisten aktualisieren und die benötigten Pakete installieren.
apt-get update
apt-get install dbmail dbmail-mysql mysql-server postfix postfix-mysql apache2 libapache2-mod-php5 php5 php5-mysql
DBMAIL konfigurieren
Für das erste reichen folgen Einstelungen.
vi /etc/dbmail/dbmail.conf
driver = mysql authdriver = sql host = localhost sqlport = 3306 sqlsocket = /var/run/mysqld/mysqld.sock user = dbmail pass = geheim db = dbmail table_prefix = dbmail_ encoding = utf8 default_msg_encoding = utf8 EFFECTIVE_USER = dbmail EFFECTIVE_GROUP = dbmail
MySQL anpassungen
Diese anpassungen sind zwar nicht erforderlich, jedoch sinnvoll, da nicht jedesmal manuell eingestellt werden muss.
vi /etc/mysql/my.cnf
[mysqld] default-character-set = utf8 default-collation = utf8_general_ci character_set_server = utf8 collation_server = utf8_general_ci
/etc/init.d/mysql restart
Datenbank und User anlegen
Am besten via pypMyAdmin einen user „dbmail“ sowie eine gleichnamige Datenbank mit allen Rechten anlegen.
Erstellen der MySQL Tabellen.
cd /usr/share/doc/dbmail-mysql/examples/ gunzip create_tables.mysql.gz mysql -udbmail -pgeheim dbmail create_tables.mysql
Postfix konfiguration
Da Postfix standartmäsig in einem „chroot jail“ läuft, ist es wichtig den MySQL Socket dahin zu verlinken. Damit das bei jedem Start passiert, am besten in die MySQL Start Datei eintragen.
mkdir -p /var/spool/postfix/var/run/mysqld
vi /etc/mysql/debian-start
... echo "Linking mysqld.sock to the postfix-jail." rm -rf /var/spool/postfix/var/run/mysqld/mysqld.sock ln /var/run/mysqld/mysqld.sock /var/spool/postfix/var/run/mysqld/mysqld.sock exit 0
Erstellen der „recipients maps“ mit den entsprechenden MySQL Daten.
vi /etc/postfix/mysql_recipients_maps.cf
user = dbmail password = geheim hosts = localhost dbname = dbmail query = SELECT alias FROM dbmail_aliases WHERE alias='%s'
Hier kurz und knapp die wichtigsten Optionen für die main.cf.
vi /etc/postfix/main.cf
# daemon configuration command_directory = /usr/sbin daemon_directory = /usr/lib/postfix program_directory = /usr/lib/postfix # smpt-banner smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) # base myhostname = mail.domain.de myorigin = $myhostname mydomain = domain.de mydestination = localhost $myhostname $mydomain mynetworks = 192.168.1.0/24, 127.0.0.0/8 inet_interfaces = all # runtime configuration alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases biff = no append_dot_mydomain = no message_size_limit = 209715200 mailbox_size_limit = 0 recipient_delimiter = + virtual_mailbox_limit = 0 local_recipient_maps = mysql:/etc/postfix/mysql_recipients_maps.cf mailbox_transport = lmtp:[localhost]:24 # sasl smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, # reject_non_fqdn_hostname, # reject_non_fqdn_sender, # reject_non_fqdn_recipient, reject_unauth_destination, # reject_unauth_pipelining, # reject_invalid_hostname, # reject_rbl_client opm.blitzed.org, # reject_rbl_client list.dsbl.org, # reject_rbl_client bl.spamcop.net, # reject_rbl_client sbl-xbl.spamhaus.org, # check_policy_service inet:127.0.0.1:60000
Postfix SMTP via SASL2
Installieren der SASL2 Pakete.
apt-get install libsasl2 sasl2-bin libsasl2-modules-sql
Dieser Schritt ist nicht notwendig, da Postfix über die Module direkt mit dem Daemon komunizieren kann und dieser somit nicht im Hintergrund laufen muss.
To enable saslauthd, edit /etc/default/saslauthd and set START=yes
Verbindung zur Datenbank.
vi /etc/postfix/sasl/smtpd.conf
pwcheck_method: auxprop auxprop_plugin: sql sql_engine: mysql mech_list: DIGEST-MD5 CRAM-MD5 PLAIN LOGIN sql_engine: mysql sql_hostnames: localhost sql_user: dbmail sql_passwd: geheim sql_database: dbmail sql_verbose: yes sql_select: SELECT passwd FROM dbmail_users WHERE userid = '%u'
Abschließende Tests sowie Debugging
Es ist zwar nicht wirklich Linux freundlich, aber vor dem testen der konfigurationen am besten das System einmal durchbooten.
reboot
DBMAIL Dienste starten.
dbmail-pop3d dbmail-imapd
DBMAIL konfiguration auf Fehler prüfen.
dbmail-util -av Maintenance done. No errors found.
DBMAIL User „test“ mit Passwort „test“ anlegen.
dbmail-users -a test -w test
Adding INBOX for new user... ok. Done test:x:4:0:0.00:0.00:
POP3 Verbindung testen.
telnet localhost 110
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK DBMAIL pop3 server ready to rock 9c66ebc9e72e4a6de6e3496480b4c991@domain.com user test +OK Password required for test pass test +OK test has 0 messages (0 octets) quit +OK see ya later Connection closed by foreign host.
Wenn alles soweit funktioniert hat, ist das System jetzt in der Lage…
- … auf gültigen Empfänger zu prüfen.
- … mails zu empfangen.
- … POP3 und IMAP bereitstellung.
Sollte es noch Probleme geben, dann haltet euch an folgende logs.
tail -f /var/log/syslog tail -f /var/log/auth.log tail -f /var/log/dbmail/dbmail.err tail -f /var/log/dbmail/dbmail.log
Fertig.