Hier nun meine Notizen zur Installation eines Mail-Server.
Bekannte zu lösende Probleme wer eine Lösung hat, bitte per eine Mail an mich JensKapitza.
Postfix #
Postfix unter Debian installieren
apt-get install postfix postfix-pgsql
nichts Konfigurieren.
# die Datei main.cf
# von wo soll postfix senden
myorigin = edv-gutachten.info
# wie heist der rechner
myhostname = mail.edv-gutachten.info
# SMTP Helo
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
append_dot_mydomain = no
# postmaster = root ^^
alias_maps = hash:/etc/aliases
# TLS parameters
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls = yes
smtpd_sasl_auth_enable = yes
#plain login nur over tls
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_tls_auth_only = yes
broken_sasl_auth_clients = yes
smtpd_tls_security_level = may
smtpd_data_restrictions = reject_unauth_pipelining
smtpd_helo_required = yes
mailbox_size_limit = 0
recipient_delimiter = +
# gegen den spam
smtpd_recipient_restrictions =
# lokales netz / der server selbst
permit_mynetworks,
permit_sasl_authenticated,
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
reject_unauth_destination,
reject_rbl_client multi.uribl.com,
reject_rbl_client dul.dnsbl.sorbs.net,
reject_rbl_client proxies.blackholes.wirehub.net,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client dnsbl.njabl.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client dnsbl.sorbs.net,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client rabl.nuclearelephant.com,
reject_rbl_client psbl.surriel.com,
# postgray prüfen
check_policy_service inet:127.0.0.1:60000,
permit
smtpd_sender_restrictions =
permit_sasl_authenticated,
reject_unknown_sender_domain,
reject_authenticated_sender_login_mismatch,
reject_unauthenticated_sender_login_mismatch,
reject_sender_login_mismatch,
reject_unknown_recipient_domain,
permit
# alles über dbmail
#mailbox_transport = dbmail-deliver:
#virtual_transport = dbmail-deliver:
#default_transport = dbmail-deliver:
#relay_transport = error
# dbmail
transport_maps = hash:/etc/postfix/transport
virtual_mailbox_domains = pgsql:/etc/postfix/sql-virtual_mailbox_domains.cf
virtual_mailbox_maps = pgsql:/etc/postfix/sql-virtual_mailbox_maps.cf
# fehler werden auf hdd gespeichert
virtual_mailbox_base = /opt/vmail
# limit the spammer
smtpd_error_sleep_time = 1s
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 20
smtpd_client_message_rate_limit = 50
smtpd_client_connection_count_limit = 100
smtpd_client_connection_rate_limit = 100
smtpd_client_message_rate_limit = 30
smtpd_client_new_tls_session_rate_limit = 60
# spamfilter und virusscanner
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
# all wenn man auch ipv6 haben will
inet_protocols = ipv4
#master.cf
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - - - - smtpd
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - n 300 1 qmgr
#qmgr fifo n - - 300 1 oqmgr
tlsmgr unix - - - 1000? 1 tlsmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
trace unix - - - - 0 bounce
verify unix - - - - 1 verify
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - - - - smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay unix - - - - - smtp
-o smtp_fallback_relay=
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - - - - showq
error unix - - - - - error
retry unix - - - - - error
discard unix - - - - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - - - - lmtp
# für limt bei den spammern nötig
anvil unix - - - - 1 anvil
scache unix - - - - 1 scache
dbmail unix - n n - - pipe
flags= user=dbmail:dbmail
argv=/usr/sbin/dbmail-deliver -d ${recipient} -r ${sender}
amavis unix - - n - 5 smtp
-o smtp_data_done_timeout=1200s
-o disable_dns_lookups=yes
-o smtp_send_xforward_command=yes
#wiedereinliefern
127.0.0.1:10025 inet n - 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 receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
#sql-virtual_mailbox_domains.cf
user = dbmail
password = dbmail
# gehe über unix socket, sasl will hier kein unix: stehen haben
hosts = unix:/var/run/postgresql
dbname = dbmail
query = SELECT DISTINCT 1 FROM dbmail_aliases WHERE SUBSTRING(alias FROM POSITION('@' in alias)+1) = '%s';
#sql-virtual_mailbox_maps.cf user = dbmail password = dbmail hosts = unix:/var/run/postgresql dbname = dbmail query = SELECT DISTINCT 1 FROM dbmail_aliases WHERE alias= '%s';
Hiermit ist postfix fertig, startet noch nicht, da dbmail noch zu installieren ist.
Zuerst aber Postgesql, ich mag mysql einfach nicht und um das setup einfach zu lassen läuft postgresql auf dem server nur local und erlaubt alle Verbindungen die lokal gemacht werden, da es hier keine anderen User außer root gibt (die etwas einspielen können) brauch man nur schaun, dass postfix und dbmail auf die selbe Datenbank können.
Postgresql #
apt-get install postgresql-8.4 postgresql-client-8.4
Nun ein wenig Konfiguration
# pg_hba.conf local all postgres ident # "local" is for Unix domain socket connections only local all all trust # alles andere kann auskommentiert werden
#postgresql.conf # hier gibt es die socket information, # da postfix im chroot läuft muss hier ein wenig was angepasst werden # damit man auch über sockets reden kann. external_pid_file = '/var/spool/postfix/var/run/postgresql/8.4-main.pid' listen_addresses = 'localhost' # what IP address(es) to listen on; unix_socket_directory = '/var/spool/postfix/var/run/postgresql' # (change requires restart)
damit ist postgresql konfiguriert und man kann dbmail nun installieren.
DBmail #
# eine neue sourcelist /etc/apt/sources.list.d/dbmail.list deb http://debian.nfgd.net/debian stable main deb-src http://debian.nfgd.net/debian stable main
apt-get update && apt-get install dbmailSollte version 3.0.2 installieren
dann muss die Datenbank angelegt werden.
$ cd /usr/share/doc/dbmail/examples $ su postgres $ createuser dbmail $ createdb dbmail $ psql $ SQL> GRANT ALL ON DATABASE dbmail TO dbmail; # wieder root werden STRG-D $ gunzip create_tables.pgsql.gz $ psql -U dbmail dbmail < create_tables.pgsql
Nun sind alle Daten Tabellen da, man kann nun mit psql nachsehen ob alles da ist,
in psql einfach mal \dt eingeben und dann sehen was ausgegeben wird.
schön an postgresql ist, das der consolen client *code-completion* kennt. Nun ist alles da, und man kann einen user anlegen, für mail.
dbmail-users -a jens # hier bin ich noch dran, wie man digest-md5 unterstüzen kann. # bislang klappt es nur, wenn passwörter in plaintext gespeichert werden, # aber beim connect verschlüsselt gesentet werden (für imap) dbmail-users -c jens -w password -p plaintext dbmail-users -c jens -s jens@mail.edv-gutachter.info
Das schöne an dbmail ist dass nach einer kleine Einstellung des mx und A records im DNS auch subdomains ganz einfach einzustellen sind. für df.eu ist das
edv-gutachter.info -> IP *.edv-gutachter.info -> IP MX edv-gutachter.info -> IP MX *.edv-gutachter.info -> IP
das halt für alle domains, für die man Emails annehmen und versenden will. df.eu hat auch einen SPF Assistent, der Spammen verhindern sollte, so dass nur der eigene Mailserver mails versenden darf, die diese domain nutzen.
Da dbmail noch eine kleine Konfiguration hat,
# /etc/default/dbmail # comment out to disable the pop3 server #START_POP3D=true # comment out to disable the imapd server START_IMAPD=true # uncomment to enable the lmtpd server #START_LMTPD=true # uncomment to enable the timsieved server START_SIEVE=true # comment out to enable the stunnel SSL wrapper #START_SSL=true # specify the filename for the pem file as # it resides in /etc/ssl/certs #PEMFILE="dbmail.pem"
ich mag kein pop3 also bleibt der deamon aus.
# /etc/dbmail/dbmail.conf [DBMAIL] driver = postgresql authdriver = sql # wichtig host = localhost sqlport = # über sockel verbinden sqlsocket = /var/spool/postfix/var/run/postgresql user = dbmail # auch wenn da trust steht # ein pw will die bibliothek dennoch. # ich habe kein password dem dbmailuser zugeteilt. pass = dbmail db = dbmail table_prefix = dbmail_ encoding = utf8 default_msg_encoding = utf8 # logging kann man beeinflussen damit man alles sieht ;) # file_logging_levels = 511 # syslog_logging_levels = 511
Hier endet mein wissen, so dass ich TLS und SSL nicht über DBmail mache.
stunnel4 #
apt-get install stunnel4
#/etc/stunnel/stunnel.conf # wie in postfix ;) # irgendwo stand mal was von multi-domain certs. # muss ich aber nochmal nachsehen, evtl einfach einen globalen server für verscheidene domains cert = /etc/ssl/certs/ssl-cert-snakeoil.pem key = /etc/ssl/private/ssl-cert-snakeoil.key ; Protocol version (all, SSLv2, SSLv3, TLSv1) sslVersion = SSLv3 session = 14400 TIMEOUTidle = 14400 ; Service-level configuration ; anderes ist auskommentiert [imaps] accept = 993 connect = 143
Stunnel kümmert sich nun um die SSL Verbindung zwischen IMAP und CLient.
SASL #
Ich habe nun noch ein Problem mit sasl, postfix will nicht so reagieren wie die konsole.aber hier nun meine erkentnisse.
in rc.local ein quick fix
/etc/init.d/saslauthd stop rm -rf /var/run/saslauthd /etc/init.d/saslauthd start ln -s /var/spool/postfix/var/run/saslauthd /var/run/ /etc/init.d/dbmail restart /etc/init.d/postfix restartich linke den socked einfach vom chroot in das normale /var/run damit testsaslauthd -u jkapitza -p jens läuft.
dann kann man sasl einstellen, dass es rimap nutzt so dass der imap login ein gültiges passwort anzeigt.
# /etc/default/saslauthd
START=yes
MECHANISMS="rimap"
# imap auf loclahost
MECH_OPTIONS="localhost"
OPTIONS="-m /var/spool/postfix/var/run/saslauthd"
PWDIR="/var/spool/postfix/var/run/saslauthd"
PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"
nun muss noch postfix beigebracht werden dass es doch bitte sasl anfragt.
Hier aber meine Baustelle.
das ist keine Lösung, sondern nur eine Notiz.
# /etc/postfix/sasl/smtpd.conf log_level: 7 pwcheck_method: auxprop mech_list: CRAM-MD5 DIGEST-MD5 auxprop_plugin: sql #password_format: crypt sql_engine: pgsql sql_verbose: yes # hier darf kein unix stehen /var/log/auth.log meldet sonst ein fehler sql_hostnames: /var/run/postgresql sql_user: dbmail sql_passwd: dbmail sql_database: dbmail sql_select: select passwd from dbmail_users where userid = '%u' OR userid = '%u@%r'
# oder anderer ansat
http://www.dbmail.org/dokuwiki/doku.php/gentoo:postfix_-_sasl_tls_-_mailscanner_-_dbmail?s[]=pwcheck&s[]=method
pwcheck_method: auxprop
auxprop_plugin: sql
allowanonymouslogin: no
allowplaintext: yes
mech_list: PLAIN LOGIN
srp_mda: md5
srvtab: /dev/null
opiekeys: /dev/null
password_format: crypt
sql_user: dbmail
sql_passwd: mypassword
sql_hostnames: localhost
sql_database: dbmail
sql_select: SELECT passwd FROM dbmail_users WHERE userid = '%u@%r'
log_level: 10
sql_verbose: yes
dann aber pam nutzen!
SASLAUTHD_OPTS=""
SASLAUTHD_OPTS="${SASLAUTH_MECH} -a pam -r"
# in /etc/pam.d/smtp
# mit pam_mysql bzw. pam_pgsql?
auth sufficient pam_mysql.so user=dbmail passwd=password host=127.0.0.1 db=dbmail table=dbmail_users usercolumn=userid passwdcolumn=passwd crypt=1
account required pam_mysql.so user=dbmail passwd=password host=127.0.0.1 db=dbmail table=sbmail_users usercolumn=userid passwdcolumn=passwd crypt=1
pam #
cat /etc/pam_pgsql.conf debug=1 database = dbmail user = dbmail table = dbmail_users user_column = userid pwd_column = passwd # später auf crypt ändern pw_type=clear cat /etc/pam.d/smtp auth sufficient pam_pgsql.so verbose=1 user=dbmail passwd=secret host=/var/spool/postfix/var/run/postgresql account required pam_pgsql.so verbose=1 user=dbmail passwd=secret host=/var/spool/postfix/var/run/postgresql