====== Exim unter Debian 6.0 ====== Exim unter Debian 6.0 als Mailserver für mehrere Domains und Smarthost mit Authentifizierung einrichten. Quelle für virtuelle Domains, Viren- und Spam-Prüfung (Spam-Prüfung nicht verwirklicht): * http://www.pseudorandom.co.uk/2006/mailserver/ ===== Installation ===== * Paket einspielen (''exim4-daemon-heavy'' wegen Virenprüfung): # apt-get install exim4-daemon-heavy ===== Konfiguration ===== * Basis-Konfiguration durchführen: # dpkg-reconfigure exim4-config General type of mail configuration: internet site System mail name: xxx.disorganized.de IP-addresses to listen on for incoming SMTP connections: 127.0.0.1;85.214.235.82 Other destinations for which mail is accepted: xxx.stratoserver.net;xxx.disorganized.de Domains to relay mail for: Machines to relay mail for: Keep number of DNS-queries minimal (Dial-on-Demand)? No Delivery method for local mail: Maildir Split configuration into small files? Yes Root and postmaster mail recipient: ewald * Hostnamen festlegen, mit dem Exim nach außen auftreten soll: # vi /etc/exim4/conf.d/main/000_localmacros # Nach aussen als mail.disorganized.de in Erscheinung treten MAIN_HARDCODE_PRIMARY_HOSTNAME = mail.disorganized.de * Ausgehende IP-Adresse setzen: # vi /etc/exim4/conf.d/transport/30_exim4-config_remote_smtp [...] # ausgehende IP-Adresse setzen: interface = 85.214.235.82 * Konfiguration erzeugen und Exim neu starten: # update-exim4.conf # /etc/init.d/exim4 restart ===== Virtuelle Domains ===== Exim ist als Mailserver für mehrere (sogenannte virtuelle) Domains verantwortlich. Für jede Domain wird eine Alias-Datei mit den gültigen E-Mail-Adressen angelegt, wobei der Name der Alias-Datei dem Domain-Namen entspricht. Exim schaut für jeden Empfänger nach, ob eine Alias-Datei für die Empfänger-Domain existiert und ob der Name des Empfängers in der dazugehörigen Alias-Datei eingetragen ist. E-Mails können entweder an einen lokalen Benutzer zugestellt oder an externe Empfänger weiter geleitet werden. E-Mails ohne gültigen Empfänger werden schon beim ''RCPT TO'' abgewiesen. E-Mails mit fehlschlagender externer Weiterleitung bouncen. * Verzeichnis für Alias-Dateien der virtuellen Domains anlegen: # mkdir /etc/exim4/virtual * Neuen Router konfigurieren: # vi /etc/exim4/conf.d/router/250_exim4-config_vdom_aliases # Virtuelle Domains gegen Alias-Dateien in /etc/exim4/virtual aufloesen. # Format dieser Alias-Dateien: # address : username@localhost # address ist der Adressteil links vom @ der virtuellen Domain (*: Catch-All) # username ist ein lokaler Benutzer, der die Mail erhalten soll. vdom_aliases: debug_print = "R: vdom_aliases for $local_part@$domain" driver = redirect allow_defer allow_fail domains = dsearch;/etc/exim4/virtual data = ${expand:${lookup{$local_part}lsearch*@{/etc/exim4/virtual/$domain}}} retry_use_local_part pipe_transport = address_pipe file_transport = address_file no_more * Falls Suffix-Adressen gewünscht werden, ''no_more'' oben auskommentieren und folgenden Router anfügen: vdom_aliases_suffix: debug_print = "R: vdom_aliases_suffix for $local_part@$domain" driver = redirect local_part_suffix = -* local_part_suffix_optional allow_defer allow_fail domains = dsearch;/etc/exim4/virtual data = ${expand:${lookup{$local_part}lsearch*@{/etc/exim4/virtual/$domain}}} retry_use_local_part pipe_transport = address_pipe file_transport = address_file no_more * Lookup für virtuelle Domains konfigurieren, dazu '': dsearch;/etc/exim4/virtual'' hinter ''MAIN_LOCAL_DOMAINS'' anfügen: # vi /etc/exim4/conf.d/main/01_exim4-config_listmacrosdefs [...] # war: domainlist local_domains = MAIN_LOCAL_DOMAINS domainlist local_domains = MAIN_LOCAL_DOMAINS : dsearch;/etc/exim4/virtual * Konfiguration erzeugen und Exim neu starten: # update-exim4.conf # /etc/init.d/exim4 restart * Gültige E-Mail-Adressen einer virtuellen Domain konfigurieren: # vi /etc/exim4/virtual/disorganized.de hostmaster: ewald@localhost ewald: ewald@localhost weiterleitung: ewald.dieterich@gmx.de * Adressauflösung testen: # exim4 -bt hostmaster@disorganized.de [...] ewald@localhost <-- ewald@disorganized.de <-- hostmaster@disorganized.de router = local_user, transport = maildir_home ===== TLS ===== * Verzeichnis für Zertifikat und privaten Schlüssel anlegen: # mkdir /etc/exim4/ssl # chmod 750 /etc/exim4/ssl # chown root:Debian-exim /etc/exim4/ssl/ * Zertifikat und privaten Schlüssel kopieren: # cp mail.disorganized.de.cert mail.disorganized.de.key /etc/exim4/ssl # chmod 444 /etc/exim4/ssl/mail.disorganized.de.cert # chown root:Debian-exim /etc/exim4/ssl/mail.disorganized.de.cert # chmod 440 /etc/exim4/ssl/mail.disorganized.de.key # chown root:Debian-exim /etc/exim4/ssl/mail.disorganized.de.key * TLS aktivieren: # vi /etc/exim4/conf.d/main/000_localmacros # TLS MAIN_TLS_ENABLE = true MAIN_TLS_CERTIFICATE = /etc/exim4/ssl/mail.disorganized.de.cert MAIN_TLS_PRIVATEKEY = /etc/exim4/ssl/mail.disorganized.de.key MAIN_LOG_SELECTOR = +tls_cipher +tls_peerdn * Konfiguration erzeugen und Exim neu starten: # update-exim4.conf # /etc/init.d/exim4 restart * Überprüfen, ob STARTTLS zur Verfügung steht: # openssl s_client -showcerts -starttls smtp -connect localhost:25 ===== SMTP AUTH ===== * Benutzer sollen E-Mails erst nach Authentifizierung versenden können: # vi /etc/exim4/conf.d/auth/31_exim-config_auth plain_server: driver = plaintext public_name = PLAIN server_condition = "${if crypteq{$auth3}{${extract{1}{:}{${lookup{$auth2}lsearch{CONFDIR/passwd}{$value}{*:*}}}}}{1}{0}}" server_set_id = $auth2 server_prompts = : .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}} .endif login_server: driver = plaintext public_name = LOGIN server_prompts = "Username:: : Password::" server_condition = "${if crypteq{$auth2}{${extract{1}{:}{${lookup{$auth1}lsearch{CONFDIR/passwd}{$value}{*:*}}}}}{1}{0}}" server_set_id = $auth1 .ifndef AUTH_SERVER_ALLOW_NOTLS_PASSWORDS server_advertise_condition = ${if eq{$tls_cipher}{}{}{*}} .endif * Kennwort-Datei anlegen: # vi /etc/exim4/passwd # Format: # user:exim-adduser(password)[:password] * Zugriff auf Kennwort-Datei einschränken: # chmod 640 /etc/exim4/passwd # chown root:Debian-exim /etc/exim4/passwd * Benutzer und Kennwort hinzufügen: # perl /usr/share/doc/exim4-base/examples/exim-adduser User: ewald Password: geheim * Klartext-Kennwort aus ''/etc/exim4/passwd'' löschen (ich will keine Klartext-Kennwörter speichern, Challenge-Response-Verfahren funktionieren jetzt allerdings nicht mehr). * Konfiguration erzeugen und Exim neu starten: # update-exim4.conf # /etc/init.d/exim4 restart * Unverschlüsselt darf keine Authentifizierung angeboten werden: $ telnet localhost 25 [...] EHLO test [...] hier darf keine Zeile mit "250-AUTH PLAIN LOGIN" kommen QUIT * AUTH PLAIN mit verschlüsselter Verbindung testen (Benutzer: ''test'', Kennwort: ''geheim''): $ perl -MMIME::Base64 -e 'print encode_base64("\000test\000geheim")' AHRlc3QAZ2VoZWlt $ openssl s_client -starttls smtp -connect localhost:25 [...] EHLO test [...] 250-AUTH PLAIN LOGIN [...] AUTH PLAIN AHRlc3QAZ2VoZWlt 235 Authentication succeeded QUIT * AUTH LOGIN mit verschlüsselter Verbindung testen (Benutzer: ''test'', Kennwort: ''geheim''): $ perl -MMIME::Base64 -e 'print encode_base64("test")' dGVzdA== $ perl -MMIME::Base64 -e 'print encode_base64("geheim")' Z2VoZWlt $ openssl s_client -starttls smtp -connect localhost:25 [...] EHLO test [...] 250-AUTH PLAIN LOGIN [...] AUTH LOGIN 334 VXNlcm5hbWU6 dGVzdA== 334 UGFzc3dvcmQ6 Z2VoZWlt 235 Authentication succeeded QUIT [...] ===== Virenprüfung ===== * ClamAV installieren: # apt-get install clamav-daemon libclamunrar6 daemon * ClamAV-Benutzer muss Exim-Spool-Dateien lesen können, deshalb zur Mail-Gruppe hinzufügen: # adduser clamav Debian-exim # /etc/init.d/clamav-daemon restart * Virenprüfung konfigurieren. Aufgrund schlechter Erfahrungen mit Fehlalarmen werden Viren-E-Mails mit einem ''X-Virus-Status''-Header versehen und zugestellt, anstatt sie direkt zu verwerfen. # vi /etc/exim4/conf.d/main/000_localmacros # Antivirus av_scanner = clamd:/var/run/clamav/clamd.ctl CHECK_DATA_LOCAL_ACL_FILE = /etc/exim4/local_acl_check_data # vi /etc/exim4/local_acl_check_data # Diese Datei wird in /etc/exim4/conf.d/acl/40_exim4-config_check_data geladen # Aus 40_exim4-config_check_data: # # Deny if the message contains malware. Before enabling this check, you # must install a virus scanner and set the av_scanner option in the # main configuration. # # exim4-daemon-heavy must be used for this section to work. # #deny # malware = * # message = Message contains possible malware ($malware_name) warn malware = * message = X-Virus-Status: Message contains possible malware ($malware_name) #warn # message = X-Virus-Scanned: (${readsocket{/var/run/clamav/clamd.ctl}{VERSION}{2s}{}{Virus scanner not running}}) # Folgende zwei Regeln aus # # Reject messages that have serious MIME errors. # This calls the demime condition again, but it # will return cached results. # deny # message = Serious MIME defect detected ($demime_reason) # demime = * # condition = ${if >{$demime_errorlevel}{2}{1}{0}} # # Reject file extensions used by worms. # # deny # message = This domain has a policy of not accepting certain types \ # of attachments in mail as they may contain a virus. \ # \ # This mail has a file with a .$found_extension attachment and \ # is not accepted. \ # \ # If you have a legitimate need to send this attachment, send it \ # in a compressed archive, and it will then be forwarded to the \ # recipient. # demime = vbs:bat:pif:scr * Konfiguration erzeugen und Exim neu starten: # update-exim4.conf # /etc/init.d/exim4 restart * Test mit dem [[http://www.eicar.org/anti_virus_test_file.htm|Eicar Test-Virus]]: $ telnet localhost 25 [...] EHLO test [...] MAIL FROM: 250 OK RCPT TO: 250 Accepted DATA 354 Enter message, ending with "." on a line by itself Subject: Virentest X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* . 250 OK id=1NgFK6-0006MV-AH QUIT 221 mail.disorganized.de closing connection * ClamAV-Log-File überprüfen: # less /var/log/clamav/clamav.log [...] [...] /var/spool/exim4/scan/xxx.eml: Eicar-Test-Signature FOUND * Header in zugestellter Mail überprüfen: # less /home/ewald/Maildir/new/xxx [...] X-Virus-Status: Message contains possible malware (Eicar-Test-Signature) [...] ===== Sender ablehnen ===== * Prüfung des Senders während des MAIL-FROM-Kommandos konfigurieren. Dazu folgende Zeilen vor dem abschließenden ''accept'' hinzufügen: # vi /etc/exim4/conf.d/acl/30_exim4-config_check_mail [...] deny senders = /etc/exim4/deny_senders accept * Konfiguration erzeugen und Exim neu starten: # update-exim4.conf # /etc/init.d/exim4 restart * Abzulehnende Sender eintragen: # vi /etc/exim4/deny_senders sender@example.net *@sub.example.org *example.com