Archiv: Stichwort "How To"

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.

rancid: Cisco & Co. Backup`s unter Debian

Rancid ist ein sehr nettes Linux Tool, mit dem man einfach Router und Switche sichern kann. Unter anderem werden auch Geräte von Cisco und Extreme Networks unterstützt.

Installation

Installation der benötigten Pakete.

apt-get install apache2 expect cvs gcc make libc6-dev perl telnet

Rancid Benutzer erstellen.

adduser rancid

Sourcen herunterladen, compilieren und installieren:

cd /usr/src
wget ftp://ftp.shrubbery.net/pub/rancid/rancid-2.3.2a8.tar.gz
tar xzvf rancid-2.3.2a8.tar.gz
cd rancid-2.3.2a8
./configure -prefix=/home/rancid -localstatedir=/home/rancid/var
make install
chown -R rancid:rancid /home/rancid

Konfiguration

Gruppe für die Geräte definieren.

vi /home/rancid/etc/rancid.conf
LIST_OF_GROUPS="test"

Host, Benutzername, Kennwort und ggf. das “enable” Passwort hinterlegen.

vi /home/rancid/.cloginrc
add user        *       user
add password    gw1.domain.de    password    enable_password
add password    gw2.domain.de    password    enable_password
add password    gw3.domain.de    password    enable_password
add password    192.168.10.254   password    enable_password
 
chmod 600 .cloginrc
chown rancid:rancid .cloginrc

Für die restlichen Arbeiten am besten den Benutzer wechseln.

su - rancid

Verzeichnis für die Gruppe anlegen

mkdir /home/rancid/var/test
cd /home/rancid/var/test

Geräte Datenbank aufbauen.

vi router.db
gw1.domain.de:cisco:up
gw2.domain.de:cisco:up
gw3.domain.de:cisco:up
192.168.10.254:cisco:up

Achtung: Bei verwendung von DNS Namen müssen diese zwingend aufgelöst werden können.

CVS Tree erzeugen.

/home/rancid/bin/rancid-cvs

Erster Testlauf. Danach am besten “~/var/log/” auf eventuelle Fehler prüfen.

/home/rancid/bin/rancid-run

Cron Job einrichten.

vi /etc/crontab
1 * * * * rancid /home/rancid/bin/rancid-run

Fertig.

Cisco Router: DynDNS einrichten

Wer kennt das nicht, bei jeder neuen Einwahl bekommt Ihr eine neue dynamische IP Adresse von eurem Provider zugewiesen. Um trotzdem den Zugriff auf Daten und Dienste von außen zu gewährleisten werden zwei Dinge benötigt.

Dyndns Anbieter (z.B.: www.dyndns.org)

Kostenloser Anbieter der einen statischen DNS Namen für die dynamische IP Adresse zur Verfügung stellt.

Router Anpassung

Prinzipiell funktioniert diese Konfiguration mit jeden Cisco Router ab dem Release 12.3(8).

In den “Privilege Mode” wechseln:

enable

Konfigurations Modus aktivieren:

configure terminal

Dyndns Konfiguration:

ip ddns update method dyndns
 HTTP
  add http://username:password@members.dyndns.org/nic/update?system=dyndns&hostname=host.dyndns.org&myip=<a>
 interval maximum 0 1 0 0
 
interface Dialer0
 ip ddns update hostname host.dyndns.org
 ip ddns update dyndns host members.dyndns.org

# Debugging aktivieren

debug ip ddns update

Achtung:

Beim kopieren der Befehle geht öfters mal das “?” verloren. Entsprechende Zeile am besten von Hand eingeben. Vor dem Fragezeichen einmal “STRG + V” drücken.

Xen: Umstellung von “Bridged”-Setup zu “Routed”-Setup

Bislang hatte ich auf meinem Hetzner Root-Server ein “Bridge”-Setup. Dieses habe ich jetzt auf ein “Routed”-Setup umgestallt, da Hetzner nun bald endgültig auf die neue Subnetz Allokierung umstellt und dort ein “Briged”-Setup dann nicht mehr möglich wäre.

Das “Bridge”-Setup ist auch eher für den Einsatz in einem lokalen LAN gedacht. Problem bei dieser Variante im Rechenzentrum ist, das der Switch die MAC-Adressen und IP`s der DomU`s zulassen muss. Dadurch besteht die Möglichkeit, die IP Adresse eines benachbarten Server zu übernehmen.

Zwar geht es hier um die Verwendung im Rechenzentrurm (mit öffentlichen IP`s), werde jedoch zur Veranschaulichung private Adressen nutzen.

192.168.1.0/24 (Für den Hauptserver)
192.168.2.0/24 (Zusätzliche Netz für die DomU`s)

Anpassungen – Dom0

IP-Forwarding aktivieren:

echo "1" > /proc/sys/net/ipv4/ip_forward

Proxy-APR aktivieren:

echo "1" > /proc/sys/net/ipv4/conf/default/proxy_arp

Es müssen natürlich die richtigen Netzwerk Einstellungen (IP, Netmask, …) für den Hauptserver (Dom0) gesetzt werden. Die letzte Zeile sorg dafür, das der Hauptserver noch die erste “benutzbare” IP aus dem zusätzlichen Subnetz bekommt. Diese IP wird dann später bei den DumU`s als Gateway eingetragen.

/etc/network/interfaces

auto eth0
iface eth0 inet static
	address 192.168.1.1
	broadcast 192.168.1.255
	netmask 255.255.255.0
	gateway 192.168.1.254
	pointopoint 192.168.1.254
 
	# IP aus dem zus. Subnetz mit Netzmaske
	up ip addr add 192.168.2.254/24 dev eth0

Dann noch eine Anpassung an dem Xen Script für die Interfaces.

/etc/xen/scripts/vif-common.sh

##
# ip_of interface
#
# Print the IP address currently in use at the given interface, or nothing if
# the interface is not up.
#
function ip_of()
{
	# ALT
	# ip addr show "$1" | awk "/^.*inet.*$1\$/{print \$2}" | sed -n '1 s,/.*,,p'
 
	# wird zu
	ip addr show "$1" | awk "/^.*inet.*$1\$/{print \$2}" | sed -n '2 s,/.*,,p'
}

Sehr wichtig ist auch in der Konfigurationsdatei der jeweiligen DomU die richtige IP Adresse einzutragen, da sonst beim Starten der DomU nicht die richtigen Routen angelegt werden.

/etc/xen/domu.cfg

vif = [ 'ip=192.168.2.1' ]

Anpassungen – DomU`s

Die DomU`s bekommen dann die zweite des Hauptservers als Gateway.

/etc/network/interfaces

auto eth0
iface eth0 inet static
	address  192.168.2.1
	netmask  255.255.255.0
	gateway  192.168.2.254

Schluss:

- DomU`s herunterfahren
- Dom0 neu starten
- DomU`s starten
- Fertig