Nun zuerst einmal, exim4 ist platt gesagt ein MTA, ein Mailserver ähnlich wie Postfix auch. Für Postfix gibt es ein Virtual Mail Howto auf gentoo.org was auch wunderbar funktioniert. Allerdings haben sich mir im Laufe der Zeit ein paar Ärgernisse gezeigt die mir Postfix gebracht hat, respektive Postfix in Zusammenarbeit mit Virtual Domains so dass ich mir über eine andere bessere Lösung Gedanken machte.
Exim ist ein MTA den es schon recht lange gibt und der nach näherer Betrachtung sehr gut einzubinden ist. Ich will in diesem Howto zeigen wie man folgendes realisiert:
- MTA Exim4
Virtual Domains und User in MySQL Datenbank
Courier IMAP und POP3 Dienst
Amavisd-New und Clamd als Virenscanner
SpamAssassin als Spamkiller
Achja, ich weiss dass man in Exim4 auch mit exiscan-acl ein komplettes Spam- und Virenfiltering erledigen kann. Den Exim auf exiscan-acl umzustellen werde ich später versuchen wenn ich dazu die Zeit finde, momentan ist die amavisd-new Lösung in meinem Setup vertreten. Wenn mir jemand allerdings dazu eine funktionierende Config geben kann, dann bringe ich die gerne hier im Howto unter.
Wichtig: Das hier ist ein Howto, ich erhebe keinen Anspruch darauf, dass alles funktionieren muss und ebenso kann ich Fehler machen beim Schreiben eines solchen. Ich bin ebenso (noch) kein Exim-Gott (fraglich ob ichs werde
1.exim4 installieren
Zuerst muss exim installiert werden, damit das alles glatt geht so wie wir das brauchen muss entweder mysql support in die make.conf global eingetragen oder für das exim ebuild in die package.use gesperrt werden.
Wenn das Ganze eine neue Installation ist, dann muss vorher mail-mta/ssmtp deinstalliert werden, das blocked sonst exim.
Code: Select all
echo "mail-mta/exim mysql ssl" >> /etc/portage/package.use
emerge exim
2.Amavisd-new und ClamAV installieren
Also der Amavisd-New erledigt im Prinzip das Content Filtering und die übergabe an den Virenscanner.
Code: Select all
emerge mail-filter/amavisd-new
Code: Select all
emerge app-antivirus/clamav
Der Courier-IMAP wird später pop3 und imap Postfächer zur Verfügung stellen.
Code: Select all
emerge net-mail/courier-imap
Ich spreche den SA über den spamd an. Das funktioniert bei mir erstmal soweit sehr gut, auch hier: das könnte man gut via exiscan-acl machen, aber wie erwähnt, ich hab das noch nicht getestet.
Code: Select all
emerge mail-filter/spamassassinCode: Select all
dev-perl/Net-Daemon-0.38
dev-perl/PlRPC-0.2016-r1
dev-perl/DBI-1.46
dev-perl/DBD-mysql-2.9007
dev-perl/Compress-Zlib-1.35
dev-perl/IO-Zlib-1.01
dev-perl/IO-String-1.05
dev-perl/Archive-Tar-1.26
dev-perl/HTML-Tagset-3.03-r2
dev-perl/HTML-Parser-3.46
dev-perl/Authen-SASL-2.09
dev-perl/URI-1.35
dev-perl/Crypt-SSLeay-0.51
dev-perl/libwww-perl-5.800
dev-perl/Net-SSLeay-1.25
dev-perl/IO-Socket-SSL-0.96
dev-perl/Digest-SHA1-2.10
dev-perl/Digest-HMAC-1.01-r1
dev-perl/Net-DNS-0.49
dev-perl/Digest-Nilsimsa-0.06-r1
dev-perl/Locale-gettext-1.03
dev-perl/yaml-0.36
dev-perl/module-build-0.25
dev-perl/IPC-ShareLite-0.09
dev-perl/Error-0.15-r2
dev-perl/Cache-Cache-1.03
dev-perl/Cache-Cache-1.03
dev-perl/IO-String-1.05
dev-perl/Digest-SHA1-2.10
dev-perl/Heap-0.71
dev-perl/module-build-0.25
dev-perl/TimeDate-1.16
dev-perl/TermReadKey-2.21
dev-perl/TermReadKey-2.30
dev-perl/Cache-Cache-1.04
dev-perl/DateManip-5.44
dev-perl/Carp-Clan-5.3
dev-perl/Bit-Vector-6.4
dev-perl/Date-Calc-5.4
dev-perl/Tie-IxHash-1.21-r1
dev-perl/Sys-Hostname-Long-1.4
dev-perl/Net-CIDR-Lite-0.18
dev-perl/Mail-SPF-Query-1.998
dev-perl/Unix-Syslog-0.100-r1
dev-perl/BerkeleyDB-0.27
dev-perl/Convert-ASN1-0.19
dev-perl/XML-Parser-2.34
dev-perl/perl-ldap-0.33
dev-perl/IO-stringy-2.110
dev-perl/MailTools-1.67
dev-perl/MIME-tools-5.417
dev-perl/Convert-TNEF-0.17-r2
dev-perl/Convert-UUlib-1.051
dev-perl/Archive-Zip-1.16
dev-perl/IO-Multiplex-1.08
dev-perl/net-server-0.87-r1
dev-perl/DBD-Pg-1.22
5.MySQL installieren
Falls nicht eh schon durch die Abhängigkeit bei Exim geschen, muss noch der MySQL installiert werden.
Optional wäre es gut wenn man auch gleich PHPMyAdmin installiert, das macht die Arbeit mit der Datenbank nachher schön einfach.
6.Installation der MySQL Datenbank
Wenn der MySQL Server am laufen ist, sollte man eine Datenbank erzeugen, ich nenne sie bei mir exim ihr könnt Sie gerne anders nennen.
Für die DB sollte ein zusätzlicher User erzeugt werden, der nur Rechte auf der exim db hat und sonst nirgends.
Das Layout der Exim DB sieht wie folgt aus:
Code: Select all
-- MySQL dump 10.9
--
-- Host: localhost Database: exim
-- ------------------------------------------------------
-- Server version 4.1.14-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES latin1 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `aliases`
--
DROP TABLE IF EXISTS `aliases`;
CREATE TABLE `aliases` (
`alias` varchar(50) NOT NULL default '',
`destination` varchar(100) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `aliases`
--
/*!40000 ALTER TABLE `aliases` DISABLE KEYS */;
LOCK TABLES `aliases` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `aliases` ENABLE KEYS */;
--
-- Table structure for table `blacklist`
--
DROP TABLE IF EXISTS `blacklist`;
CREATE TABLE `blacklist` (
`domain` varchar(50) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `blacklist`
--
/*!40000 ALTER TABLE `blacklist` DISABLE KEYS */;
LOCK TABLES `blacklist` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `blacklist` ENABLE KEYS */;
--
-- Table structure for table `boxauth`
--
DROP TABLE IF EXISTS `boxauth`;
CREATE TABLE `boxauth` (
`boxname` varchar(50) NOT NULL default '',
`boxpwd` varchar(20) NOT NULL default '',
`boxinfo` varchar(100) NOT NULL default '',
`uid` int(11) NOT NULL default '0',
`gid` int(11) NOT NULL default '0',
`email` varchar(100) NOT NULL default '',
PRIMARY KEY (`boxname`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `boxauth`
--
/*!40000 ALTER TABLE `boxauth` DISABLE KEYS */;
LOCK TABLES `boxauth` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `boxauth` ENABLE KEYS */;
--
-- Table structure for table `domaintable`
--
DROP TABLE IF EXISTS `domaintable`;
CREATE TABLE `domaintable` (
`domain` varchar(50) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `domaintable`
--
/*!40000 ALTER TABLE `domaintable` DISABLE KEYS */;
LOCK TABLES `domaintable` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `domaintable` ENABLE KEYS */;
--
-- Table structure for table `emailtable`
--
DROP TABLE IF EXISTS `emailtable`;
CREATE TABLE `emailtable` (
`local_part` varchar(50) NOT NULL default '',
`domain` varchar(50) NOT NULL default '',
`cc` varchar(100) default NULL,
`forward` varchar(100) default NULL,
`box` varchar(50) NOT NULL default '',
`is_away` enum('yes','no') NOT NULL default 'no',
`away_text` tinytext character set latin1 collate latin1_german1_ci,
`user` varchar(50) default NULL,
`is_enabled` enum('yes','no') NOT NULL default 'yes',
`opt_virscan` enum('yes','no') NOT NULL default 'no',
`opt_spamscan` enum('yes','no') NOT NULL default 'no',
`opt_spampurge` enum('on','off') NOT NULL default 'off'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `emailtable`
--
/*!40000 ALTER TABLE `emailtable` DISABLE KEYS */;
LOCK TABLES `emailtable` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `emailtable` ENABLE KEYS */;
--
-- Table structure for table `relaytable`
--
DROP TABLE IF EXISTS `relaytable`;
CREATE TABLE `relaytable` (
`domain` varchar(50) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `relaytable`
--
/*!40000 ALTER TABLE `relaytable` DISABLE KEYS */;
LOCK TABLES `relaytable` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `relaytable` ENABLE KEYS */;
--
-- Table structure for table `whitelist`
--
DROP TABLE IF EXISTS `whitelist`;
CREATE TABLE `whitelist` (
`domain` varchar(50) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `whitelist`
--
/*!40000 ALTER TABLE `whitelist` DISABLE KEYS */;
LOCK TABLES `whitelist` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `whitelist` ENABLE KEYS */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;Code: Select all
mysql -u root -p exim < exim.dump
Jetzt muss in die Exim DB noch ein wenig Inhalt. Das Ganze sieht so aus:
Tabelle Aliases:
Die Table ist nur für lokale Systemaliase gedacht.
Alias : Destination
root : adresse@woauchimmer.de
Tabelle Blacklist:
Domains oder Teile von Domains die dort eingetragen werden, werden direkt vom MTA abgelehnt und gar nicht erst weiter bearbeitet. Es kann folgendes eingetragen werden:
ident@domain.de
*@domain.de
Tabelle Whitelist:
Domains die hier eingetragen sind werden auf jeden Fall zugestellt, egal ob nun am SA als Spam markiert oder nicht. Folgendes kann eingetragen werden:
ident@domain.de
*@domain.de
Tabelle Boxauth:
In dieser Tabelle werden alle Authentifizierungsdaten hinterlegt.
boxname beinhaltet den namen der Mailbox (user001_domain.de) z.b.
boxpwd beinhaltet das Passwort, es sollte als Typ zum speichern OLD_PASSWORD gewählt werden.
boxinfo beinhaltet bei mir den Namen der Person der die Box gehört.
uid die uid des Users mit dem der Courier IMAP und der Exim läuft.
gid die gid des Users mit dem der Courier IMAP und der Exim läuft
email hier trage ich die Email Adresse ein, diese wird auch als Benutzername für die SMTP und IMAP/POP Authentifizierung verwendet. Hier könntet ihr auch irgendwas anderes eintragen.
Tabelle Domaintable:
Hier kommen alle Domänen rein für die der Exim zuständig sein soll.
Tabelle Emailtable:
local_part: der ident des users (das vor dem @ bei der Mailadresse)
domain: naja, die Domain (das nach dem @
dd: Wenn diese Mailadresse direkt ein Automatisches CC irgendwo anders hin bekommen soll. Das muss dann eine Mailadresse sein
forward: Wenn die Mailadresse nur ein weiterleiter ist
box: Der Mailboxname an den die Mail zugestellt wird
is_away: Yes/No, falls der User Away geschaltet ist, wird Vacation verwendet.
away_text: Naja, der Text wird verschickt wenn der User auf Away gesetzt ist
user: Hier schreibe ich noch den Realname rein.
is_enabled: naja, tut das Konto oder nicht.
opt_virscan: ClamAV nutzen oder nicht
opt_spamscan: SA nutzen oder nicht
opt_spampurge: Erkannten Spam direkt wegschmeissne oder nicht
Tabelle: Relaytable
Hier kommen alle etwaigen Relay Domains rein
So, nun muss erstmal ein User erzeugt werden anhand dessen was ich hier oben geschrieben habe. Dem Exim eine Domain zuweisen mit der er arbeiten kann und dann kanns weitergehen mit der Konfiguration von Exim.
Bei dem ersten Testaccount der angelegt wird, mal kurz opt_virscan und opt_spamscan in der DB ausschalten, dann kann besser getestet werden ob das bisherige Setup geht.
7.Konfiguration von Exim
Geschickterweise schreibt man bei Exim alles was das Teil angeht in eine einzelne Konfigurationsdatei die exim.conf.
Wer gerne TLS verwenden möchte, sollte sich entweder ein funktionierendes ssl Zertifikat kaufen (naja, vllt. bissl teuer) oder eben eines selbst erstellen, nämlich so:
Code: Select all
openssl req -x509 -newkey rsa:1024 -keyout zertifikat.key -out zertifikat.cert -days 9999 -nodes
cat zertifikat.key zertificat.cert >> zertifikat.combinedDas was geändert werden muss habe ich in der exim.conf entsprechend kommentiert.
Die Datei /etc/exim/exim.conf sieht wie folgt aus:
Code: Select all
######################################################################
# MAIN CONFIGURATION SETTINGS #
######################################################################
# MySQL defines
MYSQL_SERVER=localhost
#mysql user anpassen
MYSQL_USER=exim
#mysql passwort anpassen
MYSQL_PASSWORD=password
#mysql db anpassen
MYSQL_DB=exim
#wenn ihr an den tables nix gebaut habt müsste das so bleiben
MYSQL_EMAILTABLE=emailtable
MYSQL_DOMAINTABLE=domaintable
MYSQL_DOMAINRTABLE=relaytable
MYSQL_ALIASTABLE=aliases
MYSQL_WHITETABLE=whitelist
MYSQL_BLACKTABLE=blacklist
MYSQL_AUTHTABLE=boxauth
MYSQL_Q_ALIASES=SELECT destination FROM MYSQL_ALIASTABLE WHERE alias='${quote_mysql:$local_part}'
MYSQL_Q_ISAWAY=SELECT domain FROM MYSQL_EMAILTABLE WHERE domain='${quote_mysql:$domain}' AND local_part='${quote_mysql:$local_part}' AND is_away='yes'
MYSQL_Q_AWAYTEXT=SELECT away_text FROM MYSQL_EMAILTABLE WHERE domain='${quote_mysql:$domain}' AND local_part='${quote_mysql:$local_part}'
MYSQL_Q_FORWARD=SELECT forward FROM MYSQL_EMAILTABLE WHERE domain='${quote_mysql:$domain}' AND local_part='${quote_mysql:$local_part}' AND forward != ''
MYSQL_Q_CC=SELECT cc FROM MYSQL_EMAILTABLE WHERE domain='${quote_mysql:$domain}' AND local_part='${quote_mysql:$local_part}'
MYSQL_Q_LOCAL=SELECT domain FROM MYSQL_EMAILTABLE WHERE domain='${quote_mysql:$domain}' AND local_part='${quote_mysql:$local_part}' AND box != ''
MYSQL_Q_WCLOCAL=SELECT domain FROM MYSQL_EMAILTABLE WHERE domain='${quote_mysql:$domain}' AND local_part='*' AND forward != ''
MYSQL_Q_WCLOCFW=SELECT forward FROM MYSQL_EMAILTABLE WHERE domain='${quote_mysql:$domain}' AND local_part='*' AND forward != ''
MYSQL_Q_LDOMAIN=SELECT DISTINCT domain FROM MYSQL_DOMAINTABLE WHERE domain='$domain'
MYSQL_Q_RDOMAIN=SELECT DISTINCT domain FROM MYSQL_DOMAINRTABLE WHERE domain='$domain'
MYSQL_Q_BOXNAME=SELECT box FROM MYSQL_EMAILTABLE WHERE domain='${quote_mysql:$domain}' AND local_part='${quote_mysql:$local_part}'
MYSQL_Q_SPAMC=SELECT domain FROM MYSQL_EMAILTABLE WHERE domain='${quote_mysql:$domain}' AND local_part='${quote_mysql:$local_part}' AND opt_spamscan='yes'
MYSQL_Q_VSCAN=SELECT domain FROM MYSQL_EMAILTABLE WHERE domain='${quote_mysql:$domain}' AND local_part='${quote_mysql:$local_part}' AND opt_virscan='yes'
MYSQL_Q_SPAMPURGE=SELECT domain FROM MYSQL_EMAILTABLE WHERE domain='${quote_mysql:$domain}' AND local_part='${quote_mysql:$local_part}' AND opt_spampurge='yes'
MYSQL_Q_DISABLED=SELECT domain FROM MYSQL_EMAILTABLE WHERE domain='${quote_mysql:$domain}' AND local_part='${quote_mysql:$local_part}' AND is_enabled='no'
MYSQL_Q_WHITELIST=SELECT DISTINCT MYSQL_WHITETABLE.domain FROM MYSQL_WHITETABLE WHERE '${quote_mysql:$sender_address}' LIKE whitelist.domain
MYSQL_Q_BLACKLIST=SELECT DISTINCT MYSQL_BLACKTABLE.domain FROM MYSQL_BLACKTABLE WHERE '${quote_mysql:$sender_address}' LIKE blacklist.domain
MYSQL_Q_AUTHPWD1=SELECT email FROM MYSQL_AUTHTABLE WHERE email='$2' AND boxpwd=encrypt('$3',boxpwd)
MYSQL_Q_AUTHPWD2=SELECT email FROM MYSQL_AUTHTABLE WHERE email='$1' AND boxpwd=encrypt('$2',boxpwd)
hide mysql_servers = "MYSQL_SERVER/MYSQL_DB/MYSQL_USER/MYSQL_PASSWORD"
#hier entweder: hostname.domain.de oder einfach nur domain.de rein
primary_hostname = domain.de
domainlist local_domains = mysql;MYSQL_Q_LDOMAIN
domainlist relay_to_domains = mysql;MYSQL_Q_RDOMAIN
hostlist relay_from_hosts = 127.0.0.1
acl_smtp_rcpt = acl_check_rcpt
#hier auch nochmal die domain.de rein, das braucht man für mailx und cron...
qualify_domain = domain.de
never_users = root
trusted_users =
# ich habe hier den rfc1413 timeout auf 0 sec gestellt, sonst dauert mails versneden ewig und 3 tage...
host_lookup = *
rfc1413_hosts = *
rfc1413_query_timeout = 0s
check_spool_space = 50M
check_log_space = 20M
return_size_limit = 20k
#naja, bei mir halt 20mb... wer mehr will anpassen.
message_size_limit = 20M
ignore_bounce_errors_after = 2d
timeout_frozen_after = 7d
deliver_queue_load_max = 8
queue_only_load = 10
remote_max_parallel = 15
# wer TLS für smtp haben möchte, das folgende bitte einkommentieren und mit korrekten zertifikaten versehen
#tls_certificate = /var/ssl/tolleszertifikat.cert
#tls_privatekey = /var/ssl/tolleszertifikat.key
#tls_advertise_hosts = *
# das hier ist wichtig für den amavisd. Wenn dem howto gefolgt wird kanns so bleiben
local_interfaces = 0.0.0.0.25 : 127.0.0.1.10025
######################################################################
# ACL CONFIGURATION #
# Specifies access control lists for incoming SMTP mail #
######################################################################
begin acl
acl_check_rcpt:
accept hosts = :
deny domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]
deny domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
accept local_parts = postmaster
domains = +local_domains
require verify = sender
accept domains = +local_domains
endpass
verify = recipient
accept domains = +relay_to_domains
endpass
verify = recipient
accept hosts = +relay_from_hosts
accept authenticated = *
deny message = relay not permitted
######################################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
######################################################################
# THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT! #
# An address is passed to each router in turn until it is accepted. #
######################################################################
begin routers
fail_router:
driver = redirect
domains = ${lookup mysql {MYSQL_Q_DISABLED}{$value}}
data = ":fail:"
allow_fail
amavis_director:
driver = manualroute
condition = "${if eq {$interface_port}{25} {1}{0}}"
domains = ${lookup mysql {MYSQL_Q_VSCAN}{$value}}
transport = amavis
route_list = "* localhost byname"
self = send
dnslookup:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
blacklist_router:
driver = manualroute
senders = ${lookup mysql {MYSQL_Q_BLACKLIST}{$value}}
condition = "${if !def:h_X-Spam-Flag: {1}{0}}"
headers_add = X-Spam-Flag: YES
route_list = * localhost
self = pass
system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup mysql {MYSQL_Q_ALIASES}{$value}}
file_transport = address_file
pipe_transport = address_pipe
spamcheck_director:
driver = manualroute
domains = ${lookup mysql {MYSQL_Q_SPAMC}{$value}}
senders = ! ${lookup mysql {MYSQL_Q_WHITELIST}{$value}}
condition = ${if and { \
{!eq {$received_protocol}{spam-scanned}} \
{!eq {$received_protocol}{local}} \
} {1}{0}}
headers_remove = X-Spam-Flag
route_list = "* localhost byname"
transport = spamcheck
verify = false
spampurge_director:
driver = manualroute
domains = ${lookup mysql {MYSQL_Q_SPAMPURGE}{$value}}
condition = "${if eq{$h_X-Spam-Flag:}{YES} {1}{0}}"
route_list = "* localhost byname"
transport = devnull_transport
verify = false
vacation_director:
driver = accept
domains = ${lookup mysql {MYSQL_Q_ISAWAY}{$value}}
transport = vacation_autoreply
unseen
virtual_cc_director:
driver = redirect
data = ${lookup mysql {MYSQL_Q_CC}{$value}}
unseen
virtual_forward_director:
driver = redirect
data = ${lookup mysql {MYSQL_Q_FORWARD}{$value}}
virtual_local_mailbox:
driver = accept
domains = ${lookup mysql {MYSQL_Q_LOCAL}{$value}}
transport = virtual_local_md_delivery
virtual_wclocal_redirect:
driver = redirect
domains = ${lookup mysql {MYSQL_Q_WCLOCAL}{$value}}
data = ${lookup mysql {MYSQL_Q_WCLOCFW}{$value}}
######################################################################
# TRANSPORTS CONFIGURATION #
######################################################################
# ORDER DOES NOT MATTER #
# Only one appropriate transport is called for each delivery. #
######################################################################
begin transports
remote_smtp:
driver = smtp
devnull_delivery:
driver = appendfile
file = /dev/null
group = mail
address_pipe:
driver = pipe
return_output
address_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
address_reply:
driver = autoreply
amavis:
driver = smtp
port = 10024
allow_localhost
spamcheck:
driver = pipe
command = /usr/sbin/exim -oMr spam-scanned -bS
use_bsmtp = true
transport_filter = "/usr/bin/spamc"
home_directory = "/tmp"
current_directory = "/tmp"
user = mail
group = mail
log_output = true
return_fail_output = true
return_path_add = false
message_prefix =
message_suffix =
virtual_local_md_delivery:
driver = appendfile
#ich stopfe alle meine mail user nach /home/vmail wenn ihr das gerne nach /var/ oder sonstwohin wollt dann muss das hier angepasst werden.
directory = /home/vmail/${lookup mysql {MYSQL_Q_BOXNAME}{$value}}
maildir_format
# ich verwende mail:mail für user und gruppe. Wenn ihr hier was anderes bevorzugt, muss das auch geändert werden.
user = mail
group = mail
mode = 0660
directory_mode = 0770
vacation_autoreply:
driver = autoreply
to = ${sender_address}
from = "vacation@${domain}"
subject = "Ihre Nachricht an ${local_part}@${domain}"
text = ${lookup mysql {MYSQL_Q_AWAYTEXT}{$value}}
devnull_transport:
driver = appendfile
file = /dev/null
user = mail
######################################################################
# RETRY CONFIGURATION #
######################################################################
begin retry
# This single retry rule applies to all domains and all errors. It specifies
# retries every 15 minutes for 2 hours, then increasing retry intervals,
# starting at 1 hour and increasing each time by a factor of 1.5, up to 16
# hours, then retries every 6 hours until 4 days have passed since the first
# failed delivery.
# Domain Error Retries
# ------ ----- -------
* * F,2h,15m; G,16h,1h,1.5; F,4d,6h
######################################################################
# REWRITE CONFIGURATION #
######################################################################
# There are no rewriting specifications in this default configuration file.
begin rewrite
######################################################################
# AUTHENTICATION CONFIGURATION #
######################################################################
# There are no authenticator specifications in this default configuration file.
begin authenticators
fixed_plain:
driver = plaintext
public_name = PLAIN
server_condition = ${lookup mysql{MYSQL_Q_AUTHPWD1}{1}fail}
server_set_id = $2
fixed_login:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
server_condition = ${lookup mysql{MYSQL_Q_AUTHPWD2}{1}fail}
server_set_id = $1
######################################################################
# CONFIGURATION FOR local_scan() #
######################################################################
# If you have built Exim to include a local_scan() function that contains
# tables for private options, you can define those options here. Remember to
# uncomment the "begin" line. It is commented by default because it provokes
# an error with Exim binaries that are not built with LOCAL_SCAN_HAS_OPTIONS
# set in the Local/Makefile.
# begin local_scan
# End of Exim configuration file
Code: Select all
/etc/init.d/exim start
Code: Select all
tail -f /var/log/exim/exim_main.log
Code: Select all
echo "testmail" | mail -s "testmail" user@domain.de
So, wenn alles geklappt hat, dann sollte in dem mailpath nun ein maildir erzeugt worden sein, und die Post ist ausgeliefert.
Falls dem nicht so ist: Bitte genau das exim_main.log anschauen und kucken ob sich irgendwo ein typo eingeschlichen hat.
7.Amavisd-New Konfiguration
Amavis ist einfach zu Konfigurieren, ich habe eigentlich nur ein paar wenige Dinge geändert und auch nur das zu ändernde hier aufgeführt.
Code: Select all
/etc/amavisd.conf
# SMTP SERVER (INPUT) PROTOCOL SETTINGS (e.g. with Postfix, Exim v4, ...)
# (used when MTA is configured to pass mail to amavisd via SMTP or LMTP)
$inet_socket_port = 10024; # accept SMTP on this local TCP port
# (default is undef, i.e. Disabled)
$inet_socket_bind = '127.0.0.1'; # limit socket bind to loopback interface
# (default is '127.0.0.1')
$virus_admin = 'root@domain.de';
$final_virus_destiny = D_PASS; # (defaults to D_DISCARD)
$final_banned_destiny = D_PASS; # (defaults to D_BOUNCE)
$final_spam_destiny = D_PASS; # (defaults to D_BOUNCE)
$final_bad_header_destiny = D_PASS; # (defaults to D_PASS), D_BOUNCE suggested
Code: Select all
/etc/init.d/amavisd start
Code: Select all
/etc/init.d/clamd startCode: Select all
echo "testmail viren" | mail -s "testmail viren" user@domain.deCode: Select all
X-Virus-Scanned: amavisd-new at hostname9. Courier IMAP konfigurieren
Es müssen für den Courier folgende Dateien angepasst werden:
Code: Select all
/etc/courier/authlib/authmysqlrc
MYSQL_SERVER localhost
MYSQL_USERNAME exim
MYSQL_PASSWORD password
MYSQL_PORT 0
MYSQL_OPT 0
MYSQL_DATABASE exim
MYSQL_USER_TABLE boxauth
MYSQL_CRYPT_PWFIELD boxpwd
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD email
#hier muss ein etwaiger anderer mailpath eingetragen werden
MYSQL_HOME_FIELD '/home/vmail/'
MYSQL_MAILDIR_FIELD boxnameCode: Select all
/etc/courier/authlib/authdaemonrc
authmodulelist="authmysql"
Code: Select all
/etc/init.d/courier-pop3d start
/etc/init.d/courier-imapd start
Achja, so und wer nun gerne auch noch den Courier-IMAP und den Courier-POP3 Dienst mittels SSL und TLS beharken möchte, der tut bitte folgendes:
Die beiden Dateien editieren
Code: Select all
/etc/courier-imap/imapd-ssl
/etc/courier-imap/pop3d-sslCode: Select all
TLS_CERTFILE=/var/ssl/zertifikat.combinedDann müssen noch die beiden ssl Varianten von Courier gestartet werden
Code: Select all
/etc/init.d/courier-imapd-ssl start
/etc/init.d/courier-pop3d-ssl start
10.Konfiguration vom SpamAssassin
So, wenn der SpamAssasssin emerged ist, dann können die configfiles editiert werden:
Code: Select all
/etc/mail/spamassassin/local.cf
required_score 5.0
skip_rbl_checks 0
bayes_auto_learn 1
use_bayes 1
bayes_path /etc/mail/spamassassin/bayesCode: Select all
/etc/init.d/spamd startJetzt noch das GTUBE file von http://spamassassin.apache.org runterladen und eine Testmail verschicken. Wenn im Header nun ein SpamScore steht und die Mail als Spam erkannt wurde, dann ist alles fertig.
Alle Dienste nun noch in den default runlevel stecken so dass sie automatisch starten, und dann ists fertig
So, nun hoffe ich, dass ich nix vergessen habe und ihr viel Spass mit Exim haben werdet.
cheerios,
toskala





