# Exim4 + MySQL + ClamAV + SpamAssassin + IMAP + SSL/TLS Howto

## toskala

Was ist exim? Warum will ich das haben? Was sind dessen Vorteile?

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

Die Vorteile von Exim liegen meiner Auffassung nach in der Tatsache, dass Exim keinerlei externe Werkzeuge oder Plugins benötigt um mit beliebigen Datenbanken zu kommunizieren. Man kann die Abfragen direkt in der exim.conf steuern und bearbeiten, das birgt auch weniger Probleme in der Art wie ich sie oft hatte, wenn ein Gentoo update kam und irgendwas in der Kette der Plugins von Postfix schief ging.

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  :Smile: ), ich habe mich seit einigen Wochen mit Exim beschäftigt und stelle schlicht fest, dass es mir sehr gut gefällt. Fehler und Anmerkungen werde ich gerne verbessern.

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.

```
echo "mail-mta/exim mysql ssl" >> /etc/portage/package.use

emerge exim

```

Der Eine oder Andere wird vermutlich anmerken, dass es ein USE Flag für syslog support gibt. Ich mag es allerdings gerne wenn Exim in seine eigenen Logfiles schreibt, von daher habe ich das per default ausgeschaltet gelassen.

2.Amavisd-new und ClamAV installieren

Also der Amavisd-New erledigt im Prinzip das Content Filtering und die übergabe an den Virenscanner.

```
emerge mail-filter/amavisd-new

```

```
emerge app-antivirus/clamav

```

3.Courier-IMAP installieren

Der Courier-IMAP wird später pop3 und imap Postfächer zur Verfügung stellen.

```
emerge net-mail/courier-imap

```

4.SpamAssassin installieren

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.

```
emerge mail-filter/spamassassin
```

Meine SA Konfiguration ist etwas eigenwillig, ich verwende einen amd64 für dieses Setup, ich habe einige Perl Module für die SA Geschichten via g-cpan selbst nachinstalliert. Ich weiss leider nicht mehr genau welche ich alle für den SA zusätzlich installiert habe, aber diese Liste spiegelt alle meine Perlmodule wieder.

```
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

```

Also falls etwas fehlt: Eines der Dinger ist es  :Smile: 

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:

```
-- 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 */;
```

Dieses Ding könnt ihr copy und paste in eine Text Datei packen und so in euren MySQL Server schaufeln:

```
mysql -u root -p exim < exim.dump

```

Dann ist die DB mit den nötigen Tabellen erzeugt.

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 @   :Smile: )

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:

```
openssl req -x509 -newkey rsa:1024 -keyout zertifikat.key -out zertifikat.cert -days 9999 -nodes

cat zertifikat.key zertificat.cert >> zertifikat.combined
```

Die beiden dann an entsprechender Stelle der exim.conf eintragen.

Das was geändert werden muss habe ich in der exim.conf entsprechend kommentiert.

Die Datei /etc/exim/exim.conf sieht wie folgt aus:

```
######################################################################

#                    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

```

So, alles was in dem config file ist ab nach /etc/exim/exim.conf. Wenn das alles soweit geklappt hat, der delivery path auch erzeugt ist, die chowns stimmen usw. dann kann der exim gestartet werden.

```
/etc/init.d/exim start

```

Nun mal ein

```
tail -f /var/log/exim/exim_main.log

```

und eine Testmail verschicken via

```
echo "testmail" | mail -s "testmail" user@domain.de

```

(falls da steht mail command not found, muss noch das mail-client/mailx installiert werden)

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.

```
/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

```

Danach einfach den amavisd-new starten

```

/etc/init.d/amavisd start

```

Genauso den ClamAV starten

```
/etc/init.d/clamd start
```

Und dann in der DB für den Testuser opt_virscan anschalten und wieder eine Testmail versenden:

```
echo "testmail viren" | mail -s "testmail viren" user@domain.de
```

Wenn die Mail ankam, dann einfach mal die Header anschauen, wenn da drinnesteht:

```
X-Virus-Scanned: amavisd-new at hostname
```

Dann ist alles gut. Um zu testen ob der ClamAV auch wirklich anspricht, kann das Virus-Testfile von eicar.org verschickt werden, dann sollte ein Virusalert kommen usw.

9. Courier IMAP konfigurieren

Es müssen für den Courier folgende Dateien angepasst werden:

```
/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     boxname
```

```
/etc/courier/authlib/authdaemonrc

authmodulelist="authmysql"

```

dann das ding starten mittels:

```

/etc/init.d/courier-pop3d start

/etc/init.d/courier-imapd start

```

und der courier ist geritzt.

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

```
/etc/courier-imap/imapd-ssl

/etc/courier-imap/pop3d-ssl
```

und jeweils diese Zeile:

```

TLS_CERTFILE=/var/ssl/zertifikat.combined
```

anpassen, so dass sie auf das zu Beginn erzeugte kombinierte Zertifikat verweist.

Dann müssen noch die beiden ssl Varianten von Courier gestartet werden

```

/etc/init.d/courier-imapd-ssl start

/etc/init.d/courier-pop3d-ssl start

```

und fertig ist der Courier mit SSL Support.

10.Konfiguration vom SpamAssassin

So, wenn der SpamAssasssin emerged ist, dann können die configfiles editiert werden:

```
/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/bayes
```

Nun den spamd starten und dann sollte alles flutschen.

```
/etc/init.d/spamd start
```

Den Testuser in der DB noch mit opt_spamscan befähigen dass SA verwendet wird.

Jetzt 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  :Smile: .

So, nun hoffe ich, dass ich nix vergessen habe und ihr viel Spass mit Exim haben werdet.

cheerios,

toskala

----------

## slick

 *toskala wrote:*   

> 
> 
> ```
> echo mail-mta/exim mysql ssl >> /etc/portage/package.use
> 
> ...

 

Habe mir mal erlaubt im gesamten Post in den Code-Blöcken  und  durch " zu ersetzen. Ich hoffe ich habe keine übersehen. Wahrscheinlich hattest Du es in einer Office-Software vorgeschrieben und dann mit C&P eingefügt, da passiert sowas  :Wink:  Ansonsten sehr schönes HowTo.

----------

## toskala

hehe, jo in der tat, ich habs mit openoffice zusammengehackt weil das ding sonst bissl arg lang zu editieren gewesen wäre hier im forum *g*  :Smile: 

----------

## gabelhonz

Hi,

schönes Howto, allerdings hab ich da 3 Fragen:

1. Warum kein SSL oder TLS über pop3 imap und smtp ?

2. Gibt es dafür auch so ein schönes Administrationsinterface wie für qmail? (qmail-admin)

3. Was haltet ihr von qmail ?

Zudem könnte man doch auch spamassassin und clamav etc. auch an ne mysql db anbinden oder?

gruß gabelhonz

----------

## toskala

antwort:

kein ssl / tls - weil ichs noch nich fertig hab und grade vollkommen verkrankt im bett liege, muss ich dieser tage nachpflegen

ein webinterface für was? zum administrieren von konten? nein, also das hab ich zwar im sinn, aber ist ebenso noch nicht fertig

mit qmail hab ich leider bisher nur wenig zu tun gehabt, soll aber durchaus auch ein brauchbares werkzeug sein.

achja, ja, man kann SA an sql anbinden, wobei ich da aber den nutzen nich ganz sehe...

cheerios,

toskala

----------

## gabelhonz

Huhu,

danke mal für deine Antwort...

Ich habe momentan qmail+vpopmail+courier am laufen und dazu gibt es eben so ein schönes Webinterface wo du dein Konto verwalten kannst.

Dort kann man dann Forwardings, Verteiler etc einrichten, ist eben ziemlich einfach und schön. Sowas wäre auch für exim nicht schlecht, aber gibt ja immerhin phpmyadmin  :Wink: 

Werde mir exim eventuell mal anschauen und dann meine Erfahrungen einfach mal posten.

tschau und gruß

gabelhonz

----------

## xces

 *gabelhonz wrote:*   

> 2. Gibt es dafür auch so ein schönes Administrationsinterface wie für qmail? (qmail-admin)

 

vexim, OpenMailAdmin...

 *gabelhonz wrote:*   

> 3. Was haltet ihr von qmail ?

 

Abstand.

 *gabelhonz wrote:*   

> Zudem könnte man doch auch spamassassin und clamav etc. auch an ne mysql db anbinden oder?

 

Ja, wobei ich mich frage, wozu du ClamAV an eine Datenbank anbinden willst...

 *toskala wrote:*   

> achja, ja, man kann SA an sql anbinden, wobei ich da aber den nutzen nich ganz sehe...

 

Naja, z. B. benutzerspezifische White-/Blacklist sowie eigene Einstellungen und Spamregeln mit entsprechender Bewertung.

@toskala: Hat es einen Grund, dass du die Krücke amavisd-new benutzt und nicht direkt die Exiscan-ACL? Damit kann man SpamAssassin und diverse AV-Programme direkt an Exim anbinden.

----------

## toskala

 *xces wrote:*   

> @toskala: Hat es einen Grund, dass du die Krücke amavisd-new benutzt und nicht direkt die Exiscan-ACL? Damit kann man SpamAssassin und diverse AV-Programme direkt an Exim anbinden.

 

ja, weil ich mich bisher noch nie mit exiscan-acl beschäftigt habe, hab ich ins howto geschrieben. ich habe vor den näxten exim mit exiscan-acl zu betreiben damit der amavisd endlich wegkann. das ist zugegebenermaßen wirklich unschön.

hast du mir irgendwo ein schönes exiscan-acl howto?

oh, und danks für den webinterface tip  :Smile: 

----------

## xces

 *toskala wrote:*   

> hast du mir irgendwo ein schönes exiscan-acl howto?

 

Abgesehen von der offiziellen Exim-Doku (Exiscan ist seit Exim 4.5 integriert und kein Patch ist mehr nötig) ist mir nichts brauchbares bekannt. Die Beispielkonfiguration von vexim ist noch ganz nett als Basis.

----------

## toskala

perfekt, ich schaus mir an  :Smile: 

----------

## gabelhonz

Hi,

hab noch das hier gefunden:

http://duncanthrax.net/exiscan-acl/

http://www.timj.co.uk/linux/Exim-SpamAndVirusScanning.pdf

gruß

----------

## LunX

Hi,

ich wollte sowas schon länger mal selber machen und hab mir jetzt mal nur zu testzwecken nen Rechner genommen Gentoo installiert und mit dem Howto angefangen.

Bisher konnt ich dem auch ganz gut folgen leider habe ich nun einen Fehler wenn ich amavisd starte:

```
* Starting amavisd-new ...

  The value of variable $myhostname is "SERVER", but should have been

  a fully qualified domain name; perhaps uname(3) did not provide such.

  You must explicitly assign a FQDN of this host to variable $myhostname

  in amavisd.conf, or fix what uname(3) provides as a host's network nam  [ !! ]
```

Ich habe versucht /etc/hosts /etc/conf.d/hostname und die amavisd.conf umzustellen leider kein Erfolg.

Gruß

Lunx

----------

## slick

Evt. hier auch interessant: Feintuning für SpamAssassin

----------

## xces

 *LunX wrote:*   

> Ich habe versucht /etc/hosts /etc/conf.d/hostname und die amavisd.conf umzustellen leider kein Erfolg.

 

Was sagt `hostname -f`? Was hast du in /etc/conf.d/domainname gesetzt?

----------

## LunX

hostname -f gibt SERVER.WORKGROUP aus in /etc/conf.d/domainname steht steht WORKGROUP.

Gruß

Lunx

----------

## xces

Dann gib das als Hostname in der amavisd.conf an.

----------

## toskala

kurze kleine anmerkung:

ich bin momentan grade sehr in arbeit vertieft und komme nicht allzuviel zum forum mitlesen grade. falls ihr also eine anmerkung habt und ich kann sie nicht direkt umsetzen, so sei es mir nachgesehen, momentan müsste ein tag 24h haben und die nacht noch dazu   :Confused: 

cheerios,

toskala

----------

## toskala

so, die sache mit dem TLS und SSL hat mir nun doch keine ruhe gelassen, hihi, ich habs dann schnell nachgepflegt. ist in den jeweiligen sektionen nachgepflegt, sprich TLS für exim beim exim teil und TLS/SSL für courier beim courier-imap teil.

oh, ich muss sagen: ich weiss nicht ob das mit den zertifikaten so funktioniert. ich habe die zertifikate zwar testweise mal so erzeugt wie ich das hingeschrieben habe, allerdings hab ich diese testzertifikate nie im einsatz gehabt. das müsstet ihr dann mal testen, da ich gekaufte ssl zertifikate benutze... aber ich denke das sollte kein problem darstellen.

cheerios,

toskala

----------

## BuLLy

@toskala:

Ich danke schon mal im voraus für das Exim Tutorial. Ich war immer auf der Suche nach einem vernünpftigen, hab aber nie eines gefunden. Ich werde deines die Tage mal ausprobieren.

gruß

BuLLy

----------

## samsonus

mal eine kleine frage, muss der courier und exim mit dem selben user laufen?

in der mysql db werden uid und gid ja eingetragen, muss ich ggf beide dienste mit demselben user laufen lassen.

bei mir laufen die dienste im mom unter verschiedenen usern. 

und das login am server schlägt  fehl, aber weiss nicht, ob es daran liegt.

----------

## equinox0r

nice nice nice ...

endlich mal was brauchbares, werd meine configdahingehend mal bearbeiten  :Smile: 

ein webinterface hab ich dann auch demnächst gemacht (inklusive anpassbarkeit an eigenes system, req: apache, mysql. php5, xml), sobald alles funktioniert melde ich mich wieder  :Smile: 

----------

## Keepoer

Sehr sehr nice. Dickes Thx!

Ich hab aber mal noch ne Frage:

Was genau passiert denn jetzt mit dem Spam? Wird der einfach nur gelöscht?

Ansonsten hab ich noch von meinem alten Exim n Transport in ein Spam-Verzeichnis (auch nur für IMAP sinnvoll).

MfG

Keep

----------

## toskala

 *samsonus wrote:*   

> mal eine kleine frage, muss der courier und exim mit dem selben user laufen?

 

hab ich mich nie drum gekümmert, sieht aber so aus als würden sie das eh schon tun...

 *samsonus wrote:*   

> in der mysql db werden uid und gid ja eingetragen, muss ich ggf beide dienste mit demselben user laufen lassen. bei mir laufen die dienste im mom unter verschiedenen usern.

 

wie lauten die user?

das uid/gid feld in der DB beinhaltet die UID für mail und die GID für mail. darunter rennt der courier und der exim unter gentoo. das ist schon sinnig dass das so ist, sonst kann die mail nicht ausgeliefert werden.

 *samsonus wrote:*   

> und das login am server schlägt  fehl, aber weiss nicht, ob es daran liegt.

 

nein, das sollte damit nix zu tun haben. authentifizierung ist erstmal unabhängig vom ausliefern der post. was sagen die logfiles?

----------

## rogge

Hallo,

wie oder wo bekomme ich die Zertifikate für TLS her? Ich kann mich

erinnern unter Debian gabs ein script namens »gencert«.

MfG rogge

----------

## toskala

du kannst dieses howto hier verfolgen, der prozess zum zertifikate erzeugen ist der selbe. alternativ wenn du ein ssl cert willst, dass nicht self-signed ist musst du das kaufen, gibts bei vielen hostern aber für wenig geld.

http://www.gentoo.org/doc/en/virt-mail-howto.xml#doc_chap5

----------

## rogge

Verdammt, da hatte ich wohl Tomaten auf den Augen. Hab ich nich gesehen da oben.

----------

## Keepoer

Hmmm,

ich kann weder Mails empfangen noch senden. Sonst funktioniert alles. Ich kann mir Mails zuschicken, die dann auch virtuell ausgeliefert werden. Also muss die MySQL-Anbindung inkl der Box laufen. Nur ich kann mich nicht anmelden.

Folgender Fehler:

```
2007-01-18 12:26:11 fixed_login authenticator failed for xxx.dip.t-dialin.net (THINKPAD) [xxx.xxx.xxx.xxx]: 535 Incorrect authentication data (set_id=mail)
```

Nun habe ich 100%tig die richtigen Daten eingegeben. Ich habe es sogar mit jeweils nur einem Buchstaben probiert. Nix!

Kann es eventuell an der falschen uid/gid liegen? Aber dann würde die Mailzustellung ja auch nicht laufen, oder?

MfG

Keep

----------

## toskala

 *Keepoer wrote:*   

> ich kann weder Mails empfangen noch senden. Sonst funktioniert alles. Ich kann mir Mails zuschicken, die dann auch virtuell ausgeliefert werden. 

 

das was du grade gesagt hast ist schon wirr, oder? mir fällt grade nicht wirklich ein wie ich dir dabei helfen könnte... von wo aus kannst du dir wie post zuschicken? was genau tut nicht?

courier-auth?

----------

## Keepoer

 *toskala wrote:*   

>  *Keepoer wrote:*   ich kann weder Mails empfangen noch senden. Sonst funktioniert alles. Ich kann mir Mails zuschicken, die dann auch virtuell ausgeliefert werden.  
> 
> das was du grade gesagt hast ist schon wirr, oder? mir fällt grade nicht wirklich ein wie ich dir dabei helfen könnte... von wo aus kannst du dir wie post zuschicken? was genau tut nicht?

 

Ja, ok, war wohl etwas übereifrig!  :Wink: 

Also folgendes geht: Mails empfangen. Sowohl über localhost als auch von weiter weg. Ebenfalls laufen tut Viren- und Spamcheck.

Nicht gehen tut: Alles, was mit Autorisierung zu tun hat - also SMTP/IMAP/POP3.

Hat er halt falsche Logindaten angegeben! Nein, habe ich nicht. Ich habe wie oben beschrieben schon alles probiert. Neben Old Password habe ich auch Encrypt probiert. Teilweise in email und boxpwd auch einfach nur "a" eingegeben. Ich bekomme weiterhin den oben genannten Fehler. Da ich ein UTF-8 System habe, habe ich auch alle Tabellen in UTF-8 eingefügt. Hilft leider auch nicht.

Ich hoffe, ich habe den Fehler jetzt besser beschrieben. Irgendwie komme er mit der Authentifizierung nicht zurecht.

MfG

Keep

----------

## toskala

dann kann das eigentlich nur an der konfiguration der courier-authlib liegen, hast du da die korrekten zugangsdaten für das mysql-query eingetragen dass in der exim DB nachkuckt?

alternativ: dreh mal das debug level von courier hoch, dann sollte es dir genauer sagen was klemmt.

----------

## Keepoer

Ok,

läuft jetzt. Ich hatte den Kernel aktualisiert und folglich neugestartet. Dann liefs auf einmal  :Exclamation:   :Question: 

Da ich den Server auch gerne als Smarthost einsetzen würde, suche ich gerade nach einer geeigneten Lösung mittels fetchmail und procmail. Nur leider will  Procmail die Mails nicht in ein Verzeichnis legen... naja, mal sehen...   :Rolling Eyes: 

----------

## teddy_doc

Hi!

Ich hatte auch das Problem, dass ich mich nicht mit meinem passwort authentifizieren konnte. Bei mir half, anstatt das passwort mit OLD_PASSWORD('passwort') mir ENCRYPT('passwort') zu setzen.

Noch eine kleine Sache:

Wer Änderungen an "/etc/courier/authlib/authdaemonrc" macht, sollte danach ein "/etc/init.d/courier-authlib stop" und ein "/etc/init.d/courier-authlib start" machen, damit die Änderungen auch übernommen werden.

----------

## equinox0r

Fettes Danke an toskala  :Smile: 

Das Howto ist super, eventuell wären noch ein paar Beispieldaten für die Datenbank toll gewesen aber da ich Dich ja im icq hab wars nicht so tragisch *g*

Ich stell die Tage mein Mailadmin-Interface auf das neue Datenbanklayout um, dann kann das jeder hier auch verwenden. Ums gleich vorweg zu sagen: Es ist nur ein bisschen php5, ein mini-Framework drumrum mit user-authentifizierung (für alle adressen) und sonst nix. Weiterhin wird ein neuer Systemuser benötigt um entsprechende verzeichnisse zu erstellen und berechtigungen zu setzen, genaueres erzähl ich dann aber noch  :Smile: 

Grüße

equinox

----------

## xces

Falls es noch jemanden interessieren sollte:

Ich habe eine kleine Anleitung zusammengehackt, wie man policyd-weight in Exim einbinden kann. Eigentlich kann man auf die gleiche Weise auch beliebige andere Policy Server in Exim einbinden. Ist vielleicht mal ganz nützlich.

Anleitung: Exim 4 and policyd-weight

Der Artikel ist in Englisch verfasst. Über Kommentare oder Hinweise auf Fehler würde ich mich natürlich freuen.  :Wink: 

----------

## Keepoer

 *xces wrote:*   

> Über Kommentare oder Hinweise auf Fehler würde ich mich natürlich freuen. 

 

Hi,

sag mal, kann es sein, dass policyd-weight unter dieser Konfig außen vor gelassen wird? Ich kann das loglevel hochdrehen und sonst was machen - bekomme aber keine Nachricht, dass policyd-weight bewegt.

----------

## xces

 *Keepoer wrote:*   

> sag mal, kann es sein, dass policyd-weight unter dieser Konfig außen vor gelassen wird? Ich kann das loglevel hochdrehen und sonst was machen - bekomme aber keine Nachricht, dass policyd-weight bewegt.

 

Was meinst du mit außen vorgelassen?

Sofern der policyd-weight läuft und die Exim-Konfiguration entsprechend angepasst wurde, wird der policyd-weight benutzt. Hast du vielleicht vergessen, die RCPT ACL anzupassen?

----------

## Keepoer

Ok,

war mein Fehler. Nur habe ich jetzt das Problem, dass exim nicht zu policyd connecten kann. Idee? Ich kann weder per Socket noch per inet.

//EDIT:

Ok, klappt jetzt. Mein Fehler. Nu stehe ich aber vor dem nächsten Problem: Wenn ich sobald ich eine Mail empfange, kommt folgende Meldung:

```
2007-03-18 14:26:11 H=fmmailgate05.web.de [217.72.192.243] Warning: policyd-weight action:

2007-03-18 14:26:11 H=fmmailgate05.web.de [217.72.192.243] Warning: policyd-weight message:  unknown cache request: request=smtpd_access_policy\nEOF\n
```

Danach verabschiedet sich policyd-weight sang und klanglos. das passiert sowohl bei Exim 4.62 als auch bei 4.50. Leider kann ich keinen Fehler finden. Ich habe die Config per copy & paste übernommen und angepasst.

----------

## xces

Welche Version von policyd-weight benutzt du? Bei mir läuft die 0.1.14 beta-3 (also die aktuelle stable/devel) und die stirbt nicht nach einem Request.  :Wink: 

Man sollte vielleicht noch anmerken, dass /var/run/policyd-weight/polw.sock bzw. der in der policyd-weight Konfiguration angegebene Socket in $SPATH nur für die Abfrage des Cache Daemon zuständig ist, wie es übrigens auch in der Default-Konfiguration steht.

Der policyd-weight selbst muss über den TCP/IP-Socket angesprochen werden, der in der Konfiguration mit $TCP_PORT und $BIND_ADDRESS angegeben wird. Das sollte ich in der Anleitung vielleicht erwähnen, wobei das meiner Meinung nach aus der Anleitung von policyd-weight hervorgeht.

----------

## Keepoer

Ja, das hättest du ruhig mal angeben können. Jetzt ist mir auch klar, warum policyd-weight immer stirbt  :Wink:   :Evil or Very Mad: 

Dann kannst du auch gleich reinschreiben, dass alles <4.62 nicht läuft, denn bis dahin kann Exim nur per Socket connecten.

Damit hätten wir das jetzt. Aber das Problem besteht immer noch. Er meckert nach wie vor, dass er nicht keine Verbindung aufbauen kann. Ich habe auch absolut keine Ahnung, warum. Ich habe alles einfach wie beschrieben in die Config eingebunden. Naja, mal sehen...

----------

## xces

 *Keepoer wrote:*   

> Dann kannst du auch gleich reinschreiben, dass alles <4.62 nicht läuft, denn bis dahin kann Exim nur per Socket connecten.

 

Schreib einfach ein Feature Request an den Autor von policyd-weight. Soweit er mir mitgeteilt hat, will er den policyd-weight sowieso fit für andere MTAs als Postfix machen. Mit neueren Exim Versionen funktioniert das dann zwar, aber die Debian User sind dann halt außen vor.  :Wink: 

 *Keepoer wrote:*   

> Aber das Problem besteht immer noch. Er meckert nach wie vor, dass er nicht keine Verbindung aufbauen kann. Ich habe auch absolut keine Ahnung, warum. Ich habe alles einfach wie beschrieben in die Config eingebunden. Naja, mal sehen...

 

Was sagt das Log denn genau? Kannst du manuell (mit telnet, netcat o. ä.) eine Verbindung zum policyd-weight herstellen?

----------

## equinox0r

Houston, wir haben ein Problem..

Mein exim liefert keine Mails mehr aus, weil:

exim_main.log:

```
2007-03-23 08:12:30 1HUdws-0002ZH-8x == equinox@lichtspiele.org R=amavis_director T=amavis defer (-46): SMTP error from remote mail server after end of data: host localhost [127.0.0.1]: 451-4.5.0 Error in processing, id=24672-01, virus_scan FAILED: virus_scan: ALL VIRUS SCANNERS FAILED: ClamAV-clamscan av-scanner FAILED: /usr/bin/clamscan unexpected exit 50, output="LibClamAV Error: cli_loaddbdir(): Can't open directory /var/lib/clamav/daily.inc\n451 4.5.0 ERROR: Unable to open file or directory" at (eval 67) line 462.
```

Das Verzeichnis /var/lib/clamav/daily.inc/ gibt es, was er danach genau sucht weiss ich nicht. Das Verzeichnis gehört clamav:clamav, insofern sollte es keine Probleme geben darauf zuzugreifen.

Ausserdem habe ich den clamav auch schon neu compiliert, geholfen hats jedoch nix.

Weiss jemand wieso das hier passiert und vor allem wie ich das beheben kann?

Grüße

equinox

----------

## xces

 *equinox0r wrote:*   

> Das Verzeichnis /var/lib/clamav/daily.inc/ gibt es, was er danach genau sucht weiss ich nicht. Das Verzeichnis gehört clamav:clamav, insofern sollte es keine Probleme geben darauf zuzugreifen.

 

Der Virenscanner wird von amavisd-new aufgerufen, d. h. das Verzeichnis muss auch für den Benutzer lesbar sein, unter dem amavisd-new und damit auch clamscan läuft.

----------

## equinox0r

ok ich hab jetzt die rechte auf 755 geändert, geht also wieder. aber warum waren die rechte dann überhaupt b0rked?

----------

## patrick.cruz

Ich habe das gleiche Problem..

Ich habe es ebenfalls probiert mit der Rechtenänderung:

Ich habe die Gruppe amavis hinzugefügt

den User amavis der Gruppe amavis hinzugefügt

Und dem Ordner /var/lib/clamav mit Rechten versehen: chown -R amavis:amavis und chmod 755 /var/lib/clamav..

In meiner /var/log/mail.err schreibt er:

(!!)TROUBLE in check_mail: virus scan FAILED: virus_scan: ALL VIRUS SCANNER FAILED: ClamAV-clamscan av-scanner FAILED: /usr/bin/clamscan unexpected exit 50, output "ERROR": Can't initialize the virus database" at (eval 5 :Cool:  line 466. 

/var/log/mail.info schreibt:

...

.... mail to=user@domain.com ...... status=deferred (host 127.0.0.1[127.0.0.1] said: 451.4.5.0 Error in processing, id=....., virus_scan: ALL VIRUS SCANNERS FAILED: ClamAV-clamscan av-scanner FAILED: /usr/bin/clamscan expected exit 50, output="ERROR": Can't initialize the virus database" at (eval 5 :Cool:  line 466. (in reply to end of DATA command))

...

Hat jemand von Euch viell. einen Tipp für mich wie ich das Problem lösen könnte?

----------

## patrick.cruz

Problem scheint auch schon behoben zu sein. Ich habe nach der Postfix-konfiguration die Mailscanner amavis u. clamscan einfach über YAST de- und neuinstalliert. Jetzt scheinen alle Pfade und Berechtigungen zu passen!

----------

## equinox0r

 *patrick.cruz wrote:*   

> ...einfach über YAST de- und neuinstalliert.

 

*url im browserfenster anschau*

bist du sicher dass du im richtigen forum bist?  :Smile: 

----------

## equinox0r

 *equinox0r wrote:*   

> Houston, wir haben ein Problem..
> 
> Mein exim liefert keine Mails mehr aus, weil:
> 
> exim_main.log:
> ...

 

und nochmal..

Diesmal aber ein anderes Verzeichnis:

```
2007-04-12 08:29:55 1Hbdr8-000186-Ao == equinox@lichtspiele.org R=amavis_director T=amavis defer (-46): SMTP error from remote mail server after end of data: host localhost [127.0.0.1]: 451-4.5.0 Error in processing, id=13529-10, virus_scan FAILED: virus_scan: ALL VIRUS SCANNERS FAILED: ClamAV-clamscan av-scanner FAILED: /usr/bin/clamscan unexpected exit 50, output="LibClamAV Error: cli_loaddbdir(): Can't open directory /var/lib/clamav/main.inc\n451 4.5.0 ERROR: Unable to open file or directory" at (eval 67) line 462.
```

warum passiert sowas?

----------

## xces

Vermutlich läuft clamd bzw. freshclam bei dir unter dem falschen Benutzer. Alternativ kannst du den Benutzer, unter dem amavisd-new bei dir läuft noch in die Gruppe clamav stecken.

----------

## equinox0r

es ging nicht um user/gruppen zugehörigkeit sondern um verzeichnisrechte, die ich von 700 auf 755 ändern musste damits wieder tut. ich möchte noch dazu sagen dass ich gestern noch mails bekommen habe, ergo irgendwann mussten sich die rechte geändert haben .. und nein, in den logs steht nichts =P

----------

## xces

Schau in das Log von freshclam.

----------

## equinox0r

```
--------------------------------------

freshclam daemon 0.90 (OS: linux-gnu, ARCH: i386, CPU: i686)

ClamAV update process started at Thu Apr 12 08:42:32 2007

WARNING: Your ClamAV installation is OUTDATED!

WARNING: Local version: 0.90 Recommended version: 0.90.1

DON'T PANIC! Read http://www.clamav.net/support/faq

main.inc is up to date (version: 43, sigs: 104500, f-level: 14, builder: sven)

daily.inc is up to date (version: 3079, sigs: 3583, f-level: 14, builder: ccordes)

--------------------------------------

Received signal: wake up

ClamAV update process started at Thu Apr 12 10:42:33 2007

WARNING: Your ClamAV installation is OUTDATED!

WARNING: Local version: 0.90 Recommended version: 0.90.1

DON'T PANIC! Read http://www.clamav.net/support/faq

main.inc is up to date (version: 43, sigs: 104500, f-level: 14, builder: sven)

daily.inc is up to date (version: 3079, sigs: 3583, f-level: 14, builder: ccordes)

--------------------------------------
```

laut portage hab ich die aktuellste stable version (0.90) vom clamav, allerdings steht in den logs nichts davon dass der da die rechte ändert oder eine änderung der rechte für sinnvoll halten würde .. *gna*

ich lass jetzt mal ein verbose logging machen und schau wanns wieder kracht ...

----------

## b3cks

Irgendwie verstehe ich nicht, was du meinst.

ClamAV meckert rum, er sei veraltet, weil die aktuellste Version 0.90.1 ist. Im Portage hingegen ist diese Version aber noch nicht stable, sondern nur die 0.90, was logischer Weise eben zu dieser Meldung führt (außer man setzt unstable ein). Das ist normal, auch nicht weiter schlimm und steht auch alles in dem angegebenen Link. Was das nun mit irgendwelchen Rechten zu tun hat, verstehe ich nicht.

----------

## equinox0r

ich auch nicht .. die rechte des verzeichnisses main.inc und daily.inc müssen 755 sein, ändern sich aber alle paar tage/wochen auf 700.

----------

## xces

Wenn freshclam die Signaturen aktualisiert, werden die Besitzer der Dateien/des Verzeichnisses auf "DatabaseOwner" aus /etc/freshclam.conf geändert.

----------

## equinox0r

mir ist noch was zur passwortverschlüsselung in der datenbank aufgefallen...

als verschlüsselungsmethode hat OLD_PASSWORD bei mir nicht funktioniert, weiss nicht wie das bei anderen so ist, aber ich musste ENCRYPT nehmen.

nur so als hinweis  :Smile: 

----------

## gernot1310

hi hi,

ich bin mal so frei und grabe den Beitrag nochmal aus.

Erst mal ein danke für das HowTo. wirklich gut gemacht.

nach Stunden suchen im Netz bin ich auf diesen Beitrag gestoßen und nach weiteren Stunden hin und her lesen und configuriren habe ich nun den MTA so grob am laufen.

Allerdings habe ich das ganze nicht mit courier gemacht sonden für IMAP den CYRUS2.2 genommen.

Was noch nicht geht ist die smtp auth mit verschlüßeltem Password.

Leider bin nich mit Linux noch nicht so sehr vertraut und es macht schon Probleme,

wshalb ic auch noch nicht 100% durchgestiegen bin was, was ist in der config.

Die Configs stelle ich mal ein wenn alles soweit am laufen ist.

----------

## gernot1310

so ich nochmal,

habe jetzt soweit die combi Cyrus, Exim4, spamassassin, amavis fetchmail  am laufen über mysql.  bei cyrus habe ich die verschlüßelung des PW bereits  am laufen. dazu nutze ich gleich die tabelle boxauth. bei fetchmail ist es wichtig den empfänger mit der kompletten mailadresse einzutragen und zusätzlich habe ich noch am ende smtphost localhost eingetragen. damit sage ich ihm das er IPv4 nutzen soll.

wenn ich smtp auth verschlüßelt habe dann werde ich nochmal posten was ich geändert habe.

Die imapd.conf schaut bei mir so aus

```

hashimapspool: 1

idlemethod: poll

lmtpsocket: /var/spool/postfix/public/lmtp

sievedir: /var/spool/sieve

configdirectory: /var/lib/cyrus

defaultdomain:domainname

notifysocket: /var/run/cyrus/socket/notify

partition-default: /var/spool/cyrus/mail 

sasl_sql_usessl: 0                                                                

popminpoll: 1

allowplaintext: no

#virtdomains: userid

loginrealms: DOMAINNAME

newsspool: /var/spool/news

admins: cyrus

sasl_sql_engine: mysql

idlesocket: /var/run/cyrus/socket/idle

autocreatequota_units: 1

sasl_sql_verbose: yes        

syslog_prefix: cyrus

sasl_auto_transition: no

lmtp_downcase_rcpt: yes

sieveusehomedir: false

   

umask: 077

sasl_mech_list: PLAIN CRAM-MD5 DIGEST-MD5

sasl_pwcheck_method: auxprop

sasl_auxprop_plugin: sql sasldb

sasl_sql_hostnames: localhost

sasl_sql_database: datenbankname

sasl_sql_user: datenbankuser

sasl_sql_passwd: passwort

sasl_sql_select: SELECT boxpwd FROM boxauth WHERE boxname='%u'

```

und die exim4 config schaut so aus  habe ein paar sachen mit ###### wo ich geändert habe

ziemlich weit unten habe ich das cram_md5 noch reingemacht für die veschlüßelung des SMTP pw aber das funzt noch net

```

######################################################################

#                    MAIN CONFIGURATION SETTINGS                     #

######################################################################

# MySQL defines

MYSQL_SERVER=localhost

#mysql user anpassen

MYSQL_USER=DB USER

#mysql passwort anpassen

MYSQL_PASSWORD=DB PASS

#mysql db anpassen

MYSQL_DB=DB NAME

#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)

#MYSQL_Q_AUTHPWD1=SELECT email FROM MYSQL_AUTHTABLE WHERE email='$2' AND boxpwd=('$3')

#MYSQL_Q_AUTHPWD2=SELECT email FROM MYSQL_AUTHTABLE WHERE email='$1' AND boxpwd=('$2')

######hier mußte ich etwas die abfrage ändern

MYSQL_Q_AUTHPWD1=SELECT boxpwd=ENCRYPT('$3') FROM MYSQL_AUTHTABLE WHERE boxname='$2'

MYSQL_Q_AUTHPWD2=SELECT boxpwd=ENCRYPT('$2') FROM MYSQL_AUTHTABLE WHERE boxname='$1'

hide mysql_servers = "MYSQL_SERVER/MYSQL_DB/MYSQL_USER/MYSQL_PASSWORD"

#hier entweder: hostname.domain.de oder einfach nur domain.de rein

primary_hostname = DOMAINNAME

domainlist local_domains = mysql;MYSQL_Q_LDOMAIN

domainlist relay_to_domains = mysql;MYSQL_Q_RDOMAIN

hostlist   relay_from_hosts =192.168.1.0/24 : 127.0.0.1 : ::::1

acl_smtp_rcpt = acl_check_rcpt

#hier auch nochmal die domain.de rein, das braucht man für mailx und cron...

qualify_domain = DOMAINNAME

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 geändert

  transport = local_delivery_cyrus

virtual_wclocal_redirect:

  driver = redirect

  domains = ${lookup mysql {MYSQL_Q_WCLOCAL}{$value}}

  data = ${lookup mysql {MYSQL_Q_WCLOCFW}{$value}}

########neu dazu für cyrus

local_user:

  debug_print = "R: local_user for $local_part@$domain"

  driver = accept

  domains = ${lookup mysql {MYSQL_Q_LOCAL}{$value}}

  check_local_user

  local_parts = ! root

  transport = local_delivery_cyrus #########

  cannot_route_message = Unknown user

mail4root:

  debug_print = "R: mail4root for $local_part@$domain"

  driver = redirect

  domains = +local_domains

  data = /var/mail/mail

  file_transport = address_file

  local_parts = root

  user = mail ##oder was immer

  group = mail

     

######################################################################

#                      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 = /var/spool/cyrus/mail/${lookup mysql {MYSQL_Q_BOXNAME}{$value}}

  directory = /var/spool/cyrus/mail ###########

  maildir_format

# ich verwende mail:mail für user und gruppe. Wenn ihr hier was anderes bevorzugt, muss das auch geändert werden.

  user = Debian-exim

  group = mail

  mode = 0660

  directory_mode = 0770

######### das ist auch dazu gekommen für cyrus

local_delivery_cyrus:

    transport_filter = /usr/bin/tr -d '\000'

    driver = lmtp

    socket =/var/run/cyrus/socket/lmtp

    batch_max = 100

    

group = mail

    user = Debian-exim

    #command = "/usr/sbin/cyrdeliver -a -m $local_part"

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

cram_md5:                                                              

     driver = cram_md5                                                    

     public_name = CRAM-MD5                                               

     client_name = "${lookup mysql{MYSQL_Q_BOXNAME}{$value}}"                                            

     client_secret = "${lookup mysql{MYSQL_Q_AUTHPWD1}{1}fail}" 

######################################################################

#                   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 

```

----------

## gernot1310

so ich nochmal,

nach ein wenig hin und herbasteln habe ich es nun geschaft das auch ds SMTP passwort verschlüßelt übertragen wird.  das ganze habe ich mit Thunderbird getestet.

in der Exim4.conf habe ich noch folgendes geändert

```

MYSQL_Q_AUTHPWD2=SELECT boxpwd FROM boxauth WHERE boxname='$1' AND  boxpwd='$2' 

```

und unten habe ich noch 

```

auth_cram:

  driver = cram_md5

  public_name = CRAM-MD5

  client_name =  $1

  client_secret = ${lookup mysql {MYSQL_Q_AUTHPWD2}{1}fail}

```

eingebaut.

da einige mailclienten verschlüßelt vielleicht net könen habe ich auch PLAIN gelassen.

das wäre dann oben 

```
MYSQL_Q_AUTHPWD1=SELECT boxpwd=ENCRYPT('$3') FROM MYSQL_AUTHTABLE WHERE boxname='$2'
```

und unten

```

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_AUTHPWD1}{1}fail}

  server_set_id = $2

```

jetzt könnte man noch TLS einbauen  :Smile: 

gruß gernot

----------

## gernot1310

und nochmal kurz. eine sache ist mir gerade noch aufgefallen. verschlüßeltes pw geht nur wenn plain auskommentiert ist. dasran werde ich die tage mal arbeiten warum das so ist.

----------

