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.