hab mir gedacht, ich stelle hier mal meine Postfix-Config vor. Einerseits um anderen die Moeglichkeit zu geben, sich Impressionen zu holen, andererseits natuerlich auch, um selber noch Impressionen und Verbesserungsvorschlaege zu bekommen, die Config ist mit Sicherheit nicht optimal.
Ich habe zwei Mailserver, wovon der zweite nur als Backupmailserver fungiert. Die User koennen per SMTP-Auth Mails ueber den primaeren Mailserver versenden. Domains, Mailboxen, Mailboxpasswoerter und Aliase kommen direkt aus einer MySQL-Datenbank, die ich mit Postfixadmin2 verwalte. Auf dem Backupmailserver laeuft kein MySQL. Als POP3/IMAP-Server verwende ich uebrigens Courier (der auch seine Daten aus der MySQL-Datenbank holt). Im DNS ist der primaere Mailserver mit einer hoeheren Prioritaet eingetragen als der Backupmailserver (der primaere Mailserver ist gleichzeitig primaerer DNS-Server, der Backupmailserver fungiert als Backup-DNS-Server).
Eingesetzte Distribution/Versionen: Debian 3.0, Postfix 2.1.3 und MySQL 4.0
Fuer SMTP-Auth benoetigt man SASL2, leider habe ich keine Ahnung, welche Pakete das genau sind, da ich monatelang rumprobiert habe, bis das alles endlich so lief wie ich das heute hier vorstelle.
mailserver-domain.tld = Domain der beiden Mailserver
mailserver = Hostname des primaeren Mailservers
backupmailserver = Hostname des Backupmailservers
mailserverip = IP-Adresse des primaeren Mailservers
backupmailserverip = IP-Adresse des Backupmailservers
domain1.tld, domain2.tld, domain3.tld usw = Domains, die mailtechnisch von den Mailservern verwaltet/bearbeitet werden
Primaerer Mailserver:
main.cf:
Code: Select all
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix
smtpd_banner = $myhostname ESMTP
setgid_group = postdrop
biff = no
append_dot_mydomain = no
mydomain = mailserver-domain.tld
myhostname = mail.mailserver-domain.tld
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, mailserver, mailserver.$mydomain, localhost, localhost.$mydomain
permit_mx_backup_networks = mailserverip/32, backupmailserverip/32
relayhost =
mynetworks = 127.0.0.0/8, mailserverip/32
inet_interfaces = 127.0.0.1, mailserverip
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
virtual_maps = hash:/etc/postfix/virtual
mail_owner = postfix
header_checks = pcre:/etc/postfix/header_checks
body_checks = pcre:/etc/postfix/body_checks
mime_header_checks = regexp:/etc/postfix/mime_header_checks
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:104
virtual_mailbox_base = /var/spool/mail/virtual
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit = 51200000
virtual_transport = virtual
virtual_uid_maps = static:104
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_client_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_rbl_client relays.ordb.org,
reject_rbl_client list.dsbl.org
smtpd_sender_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_sender
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
permit_mx_backup,
reject_unknown_recipient_domain,
reject_unauth_destination
Code: Select all
smtp inet n - n - - smtpd
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - - 300 1 qmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
smtp unix - - - - - smtp
relay unix - - - - - smtp
showq unix n - - - - showq
error unix - - - - - error
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
cyrus unix - n n - - pipe
flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -m "${extension}" ${user}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -d -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
# only used by postfix-tls
trace unix - - - - 0 bounce
verify unix - - - - 1 verify
Code: Select all
user = mysqluser
password = mysqlpassword
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
Code: Select all
user = mysqluser
password = mysqlpassword
hosts = localhost
dbname = localhost
table = domain
select_field = description
where_field = domain
Code: Select all
user = mysqluser
password = mysqlpassword
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
Code: Select all
sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sql
sql_engine: mysql
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5
sql_user: mysqluser
sql_passwd: mysqlpassword
sql_database: postfix
sql_statement: SELECT password FROM mailbox WHERE username='%u@%r'
sql_verbose: yes
Code: Select all
CREATE TABLE `alias` (
`address` varchar(255) NOT NULL default '',
`goto` text NOT NULL,
`domain` varchar(255) NOT NULL default '',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
`active` tinyint(4) NOT NULL default '1',
PRIMARY KEY (`address`),
KEY `address` (`address`)
) TYPE=MyISAM COMMENT='Virtual Aliases - mysql_virtual_alias_maps';
CREATE TABLE `domain` (
`domain` varchar(255) NOT NULL default '',
`description` varchar(255) NOT NULL default '',
`aliases` int(10) NOT NULL default '-1',
`mailboxes` int(10) NOT NULL default '-1',
`maxquota` int(10) NOT NULL default '-1',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
`active` tinyint(4) NOT NULL default '1',
PRIMARY KEY (`domain`),
KEY `domain` (`domain`)
) TYPE=MyISAM COMMENT='Virtual Domains - mysql_virtual_domains_maps';
CREATE TABLE `mailbox` (
`username` varchar(255) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
`name` varchar(255) NOT NULL default '',
`maildir` varchar(255) NOT NULL default '',
`quota` int(10) NOT NULL default '-1',
`domain` varchar(255) NOT NULL default '',
`created` datetime NOT NULL default '0000-00-00 00:00:00',
`modified` datetime NOT NULL default '0000-00-00 00:00:00',
`active` tinyint(4) NOT NULL default '1',
PRIMARY KEY (`username`),
KEY `username` (`username`)
) TYPE=MyISAM COMMENT='Virtual Mailboxes - mysql_virtual_mailbox_maps';
main.cf:
Code: Select all
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix
smtpd_banner = $myhostname ESMTP
setgid_group = postdrop
biff = no
append_dot_mydomain = no
mydomain = mailserver-domain.tld
myhostname = mail2.mailserver-domain.tld
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, backupmailserver, backupmailserver.$mydomain, localhost, localhost.$mydomain
relay_domains = $mydestination, domain1.tld, domain2.tld, domain3.tld domain4.tld
permit_mx_backup_networks = mailserverip/32, backupmailserverip/32
relayhost =
mynetworks = 127.0.0.0/8, backupmailserverip/32
inet_interfaces = 127.0.0.1, backupmailserverip
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
virtual_maps = hash:/etc/postfix/virtual
mail_owner = postfix
smtpd_sasl_auth_enable = no
smtpd_sasl_local_domain = backupmailserver
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_client_restrictions =
permit_mynetworks,
reject_rbl_client relays.ordb.org,
reject_rbl_client list.dsbl.org
smtpd_sender_restrictions =
permit_mynetworks,
reject_non_fqdn_sender
smtpd_recipient_restrictions =
permit_mynetworks
permit_mx_backup,
reject_unauth_destination
Code: Select all
smtp inet n - - - - smtpd
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - - 300 1 qmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
smtp unix - - - - - smtp
relay unix - - - - - smtp
showq unix n - - - - showq
error unix - - - - - error
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
cyrus unix - n n - - pipe
flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -m "${extension}" ${user}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -d -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
# only used by postfix-tls
trace unix - - - - 0 bounce
verify unix - - - - 1 verify
Soweit zu den Config-Files, ich hoffe, ich hab nichts vergessen.
Sicher sollte die Config auf jeden Fall sein, zumindest ergab langes Suchen bei Google und hier im Forum, dass die Optionen so ok sein sollten, ausserdem war ein Open-Relay-Test erfolgreich (also negativ).
Was ich nicht verstehe: Vor dem Upgrade auf 2.1.x hatte ich auf dem Backupmailserver unter smtpd_recipient_restrictions nur folgendes stehen:
Code: Select all
permit_mx_backup,
reject
Vielleicht habt Ihr mir ja noch ein paar Finetuning Tips. Falls nicht, vielleicht hilft mein Post ein paar Leuten weiter... :-)
Viele Gruesse,
Roi