Content
Mailrelais
Backend-Mailserver direkt per SMTP aus dem Internet erreichbar zu machen ist ein gewisses Sicherheitsrisiko. Um das Risiko zu minimieren haben wir einen Eis als Mailrelais vor unsere beiden Exchange-Server geschaltet. Das nutzen wir gleichzeitig als Vorteile aus und lassen alle Mails durch ANTISPAM auf Spammerkmale und durch CLAMAV auf Viren untersuchen. Virenmails lasse ich in einen Public-Folder auf dem Eis verschieben, SPAMs mit "*SPAM*" im Betreff kennzeichnen, so dass jeder Benutzer per Outlook-Filter selbst alle SPAMs ausfiltern kann. Außerdem filtern wir Mails mit direkt ausführbarem Attachement aus und lassen sie in einen Public-Folder "A-Block" verschieben. Statusmails des Eis fragen wir per Webmail ab, löschen so auch die Virenmails und schauen dort auch geblockte Attachments durch.
Bevor ich auf die Konfiguration eingehe noch ein kurzes Wort zur verwendeten Hardware: Die Hardware des Eis-Mailrelais ist ein P 4 mit 1700 MHz und 1 GB RAM, von dem aber nur 896 MB aufgrund der Kernelbeschränkungen genutzt werden. Die SWAP-Partition ist 2 GB groß (wird aber quasi nie genutzt). Diese Maschine reicht aus um den Mailverkehr von 250 Usern auf dem ersten und 130 Usern auf dem zweiten Exchange zu händeln. Eingebaut ist eine 20 GB IDE-Festplatte, von der aber nur 5 GB für das Filesystem und 2 GB für SWAP genutzt werden.
Da es sich um eine ziemlich statisches System handelt ist auch das Backup recht einfach: Nach jeder Konfigurationsänderung mache ich ein TAR-Backup (Achtung: Nicht gepackt!) und hole das per SCP auf meinen PC und brenne es auf einen DVD. Sollte der Server wirklich mal so abschmieren, dass ich ihn neu aufsetzen müsse ist dass in wenigen Minuten passiert. Mit einer CD eine Eis-Grundinstallation machen, die letzte DVD einlegen und mounten und dann mit TAR einfach alles wieder herstellen. Anschließend das System neu booten und das war's. Mehrfach probiert und ohne Probleme. Dauer ca. 30 Minuten.
Hier eine kurze Anleitung, um Eis als Mailrelais vor einen oder mehrere Exchange-Server zu schalten. Der Eis bildet befindet sich dabei in einer eigenen Domain (FQD). Auf die extern erreichbare IP-Adresse des Eis zeigen alle MX-Einträge der Domains, von denen Mails angenommen werden. Der erste Exchange-Server hat nur einen interne IP-Adresse (hier im Beispiel die 192.168.1.100). Ein evtl. zweiter vorhandenen Exchange-Server hat hier im Beispiel die IP 192.168.2.100.
Hier im Beispiel gibt es auf dem Eis nur einen Mailuser (postm) in der Eis-Domain. Root-Mails werden alle auf diesen User gemappt.
Alle weiten Konfigurationen sind im Konfig-File kommentiert und stehe UNTER dem jeweiligen Eintrag.
Einstellungen am Exchange: Nur das Eis-Mailrelais als Smarthost eintragen.
#------------------------------------------------------------------------------
# /etc/config.d/mail - configuration for mail services on EIS/FAIR
#------------------------------------------------------------------------------
START_MAIL='yes'
START_POP3='no'
START_IMAP='yes'
POP3IMAP_CREATE_MBX='no'
POP3IMAP_TRANSPORT='default'
POP3IMAP_IDENT_CALLBACKS='yes'
MAIL_USER_USE_MAILONLY_PASSWORDS='no'
MAIL_USER_N='1'
MAIL_USER_1_ACTIVE='yes'
MAIL_USER_1_USER='postm'
# Einziger Mailuser zur Webmail-Benutzung
MAIL_USER_1_PASS=''
#------------------------------------------------------------------------------
# imap: shared and public folders
#------------------------------------------------------------------------------
IMAP_SHARED_PUBLIC_USERGROUP=''
IMAP_SHARED_FOLDER_N='0'
IMAP_SHARED_FOLDER_1_ACTIVE='yes'
IMAP_SHARED_FOLDER_1_NAME='Family-News'
IMAP_SHARED_FOLDER_1_USERGROUP=''
IMAP_PUBLIC_FOLDER_N='2'
IMAP_PUBLIC_FOLDER_1_ACTIVE='yes'
IMAP_PUBLIC_FOLDER_1_NAME='A-Block'
# Folder für geblockte Attachments
IMAP_PUBLIC_FOLDER_1_USERGROUP=''
IMAP_PUBLIC_FOLDER_2_ACTIVE='yes'
IMAP_PUBLIC_FOLDER_2_NAME='Virenmail'
# Folder für erkannte Virenmails
IMAP_PUBLIC_FOLDER_2_USERGROUP=''
#------------------------------------------------------------------------------
# fetchmail: general settings
#------------------------------------------------------------------------------
START_FETCHMAIL='no'
# Alle weiteren Fetchmail-Einstellungen sind damit unintererssant, dürfen aber
# nicht gelöscht werden.
#------------------------------------------------------------------------------
# smtp: general settings
#------------------------------------------------------------------------------
START_SMTP='yes'
SMTP_QUALIFY_DOMAIN='domain-des-mailrelais.de'
SMTP_HOSTNAME='mail.domain-des-mailrelais.de'
SMTP_QUEUE_INTERVAL='30'
SMTP_QUEUE_OUTBOUND_MAIL='no'
SMTP_LISTEN_PORT='smtp'
SMTP_MAIL_TO_UNKNOWN_USERS='forward'
SMTP_ALLOW_EXIM_FILTERS='yes'
SMTP_CHECK_RECIPIENTS=''
SMTP_CHECK_SPOOL_SPACE=''
SMTP_CHECK_SPOOL_INODES=''
SMTP_LIMIT='20M'
# Bei uns max. Mailgröße 20 MB; sonst macht CLAMAV bzw. AntiSPAM Probleme
SMTP_REMOVE_RECEIPT_REQUEST='no'
SMTP_SERVER_TRANSPORT='default'
SMTP_IDENT_CALLBACKS='yes'
SMTP_SERVER_TLS_ADVERTISE_HOSTS=''
SMTP_SERVER_TLS_VERIFY_HOSTS=''
SMTP_SERVER_SSMTP='no'
SMTP_SERVER_SSMTP_LISTEN_PORT='ssmtp'
#------------------------------------------------------------------------------
# smtp: local domains
#------------------------------------------------------------------------------
SMTP_LOCAL_DOMAIN_N='3'
SMTP_LOCAL_DOMAIN_1='@'
SMTP_LOCAL_DOMAIN_2='localhost'
SMTP_LOCAL_DOMAIN_3='domain-des-mailrelais.de'
#------------------------------------------------------------------------------
# smtp: relay to domains
#------------------------------------------------------------------------------
SMTP_RELAY_TO_DOMAIN_N='3'
# Hier alle Domains angeben, die der Exchange annehmen soll.
SMTP_RELAY_TO_DOMAIN_1='erste-externe-domain.de'
SMTP_RELAY_TO_DOMAIN_2='zweite-externe-domain.de'
SMTP_RELAY_TO_DOMAIN_3='dritte-externe-domain.de'
#------------------------------------------------------------------------------
# smtp: relay from hosts
#------------------------------------------------------------------------------
SMTP_RELAY_FROM_HOST_N='2'
SMTP_RELAY_FROM_HOST_1='127.0.0.1'
SMTP_RELAY_FROM_HOST_2='192.168.1.100'
# IP des Exchange-Servers
#SMTP_RELAY_FROM_HOST_3='192.168.2.100'
# IP des zweiten Exchange-Servers
#------------------------------------------------------------------------------
# smtp: server authentication
#------------------------------------------------------------------------------
SMTP_AUTH_TYPE='none'
SMTP_AUTH_USER=''
SMTP_AUTH_PASS=''
#------------------------------------------------------------------------------
# smtp: smarthosts
#------------------------------------------------------------------------------
# WENN NUR EIN EXCHANGE-SERVER DURCH DAS MAILRELAIS VERSORT WIRD:
SMTP_SMARTHOST_ONE_FOR_ALL='no'
SMTP_SMARTHOST_DOMAINS='erste-externe-domain.de:zweite-externe-domain.de:dritte-externe-domain.de'
SMTP_SMARTHOST_ROUTE_TYPE='domain'
SMTP_SMARTHOST_N='1'
SMTP_SMARTHOST_1_HOST='192.168.1.100'
# IP des Exchange-Servers
SMTP_SMARTHOST_1_AUTH_TYPE='none'
SMTP_SMARTHOST_1_ADDR=''
SMTP_SMARTHOST_1_DOMAIN='*'
SMTP_SMARTHOST_1_USER=''
SMTP_SMARTHOST_1_PASS=''
SMTP_SMARTHOST_1_FORCE_AUTH='no'
SMTP_SMARTHOST_1_FORCE_TLS='no'
SMTP_SMARTHOST_1_PORT=''
# WENN MEHERE EXCHANGE-SERVER DURCH DAS MAILRELAIS VERSORT WERDEN:
#SMTP_SMARTHOST_ONE_FOR_ALL='no'
#SMTP_SMARTHOST_DOMAINS='erste-externe-domain.de:zweite-externe-domain.de:dritte-externe-domain.de'
#SMTP_SMARTHOST_ROUTE_TYPE='domain'
#SMTP_SMARTHOST_N='2'
# Anzahl der zu versorgenden Exchange-Server
#SMTP_SMARTHOST_1_HOST='192.168.1.100'
# IP des ersten Exchange-Servers
#SMTP_SMARTHOST_1_AUTH_TYPE='none'
#SMTP_SMARTHOST_1_ADDR=''
#SMTP_SMARTHOST_1_DOMAIN='erste-externe-domain.de:zweite-externe-domain.de'
# externe Domain(s) des ersten Exchange
#SMTP_SMARTHOST_1_USER=''
#SMTP_SMARTHOST_1_PASS=''
#SMTP_SMARTHOST_1_FORCE_AUTH='no'
#SMTP_SMARTHOST_1_FORCE_TLS='no'
#SMTP_SMARTHOST_1_PORT=''
#SMTP_SMARTHOST_2_HOST='192.168.2.100'
# IP des zweiten Exchange-Servers
#SMTP_SMARTHOST_2_AUTH_TYPE='none'
#SMTP_SMARTHOST_2_ADDR=''
#SMTP_SMARTHOST_2_DOMAIN='dritte-externe-domain.de'
# oder '*' für alle restlichen Domains
#SMTP_SMARTHOST_2_USER=''
#SMTP_SMARTHOST_2_PASS=''
#SMTP_SMARTHOST_2_FORCE_AUTH='no'
#SMTP_SMARTHOST_2_FORCE_TLS='no'
#SMTP_SMARTHOST_2_PORT=''
#------------------------------------------------------------------------------
# smtp: update ignore hosts file
#------------------------------------------------------------------------------
SMTP_UPDATE_IGNORE_HOSTS='no'
SMTP_UPDATE_IGNORE_HOSTS_CRON_SCHEDULE='5 1 * * 0'
#------------------------------------------------------------------------------
# smtp: aliases
#------------------------------------------------------------------------------
SMTP_ALIASES_N='1'
SMTP_ALIASES_1_DOMAIN=''
SMTP_ALIASES_1_ALIAS_N='1'
SMTP_ALIASES_1_ALIAS_1='root: postm'
# root-Mails auf User postm umleiten
#------------------------------------------------------------------------------
# smtp: outgoing addresses
#------------------------------------------------------------------------------
SMTP_OUTGOING_ADDRESSES_N='0'
SMTP_OUTGOING_ADDRESSES_1='fm: frank@domain.de'
#------------------------------------------------------------------------------
# smtp: incoming addresses
#------------------------------------------------------------------------------
SMTP_HEADER_REWRITE_N='0'
SMTP_HEADER_REWRITE_1_SOURCE='*@home.lan'
SMTP_HEADER_REWRITE_1_DESTINATION='valid@domain.de'
SMTP_HEADER_REWRITE_1_FLAGS='sF'
#------------------------------------------------------------------------------
# smtp: mailing lists
#------------------------------------------------------------------------------
SMTP_LIST_DOMAIN='home.lan'
SMTP_LIST_ERRORS='frank@home.lan'
SMTP_LIST_N='0'
SMTP_LIST_1_NAME='eisfair'
SMTP_LIST_1_USER_N='2'
SMTP_LIST_1_USER_1='frank@home.lan'
SMTP_LIST_1_USER_2='tom@home.lan'
#------------------------------------------------------------------------------
# exiscan: virus scanning
#------------------------------------------------------------------------------
START_EXISCAN='yes'
EXISCAN_CRYPT_SALT='VFaKySF1OvksVe9T'
EXISCAN_DEMIME_ENABLED='yes'
EXISCAN_DEMIME_ACTION='pass'
EXISCAN_AV_ENABLED='yes'
# Virenscanner auf dem Eis-Mailrelais?
EXISCAN_AV_ACTION='redirect virenmail@domain-des-mailrelais.de'
# Hier werden alle virenverseuchte Mails in den Public-Folder "Virenmail" verschoben
EXISCAN_AV_SUBJECT_TAG=''
EXISCAN_AV_SCANNER='auto'
EXISCAN_AV_PATH='/usr/local/bin/sweep'
EXISCAN_AV_OPTIONS='-all -archive -tnef -ss %s'
EXISCAN_AV_TRIGGER='found in'
EXISCAN_AV_DESCRIPTION="'(.*)'"
EXISCAN_AV_SOCKET='/var/run/sophie'
EXISCAN_EXTENSION_ENABLED='yes'
EXISCAN_EXTENSION_ACTION='redirect a-block@domain-des-mailrelais.de'
# Hier werden alle Mails mit ausführbaren Attachments in den Public-Folder
# "A-Block" verschoben
EXISCAN_EXTENSION_DATA='exe:com:vbs:vbe:js:jse:jr:jar:bat:shs:pif:chm:wsf:wsh:scr:dll:zl:ceo:cpl:hta:mim:bhx:b64:hqx:uu:uue:xxe'
# Attachments mit diesen Dateierweiterungen gelten als ausführbar
EXISCAN_REGEX_ENABLED='no'
EXISCAN_REGEX_ACTION='reject'
EXISCAN_REGEX_DATA='[Mm]ortage : make money'
EXISCAN_SPAMD_ENABLED='yes'
EXISCAN_SPAMD_ACTION='pass'
EXISCAN_SPAMD_HEADER_STYLE='full'
EXISCAN_SPAMD_SUBJECT_TAG='*SPAM*'
# Markiere alle erkannten SPAMs mir "*SPAM*" im Betreff
EXISCAN_SPAMD_THRESHOLD='5.0'
EXISCAN_SPAMD_ADDRESS='127.0.0.1 783'
#------------------------------------------------------------------------------
# mail: send warning if TLS certificates will become invalid
#------------------------------------------------------------------------------
MAIL_CERTS_WARNING='no'
MAIL_CERTS_WARNING_SUBJECT='TLS certificates warning'
MAIL_CERTS_WARNING_CRON_SCHEDULE='3 1 1,16 * *'
#------------------------------------------------------------------------------
# mail: send exim statistics
#------------------------------------------------------------------------------
MAIL_STATISTICS_INFOMAIL='no'
# Falls täglicher Bericht gewünscht
MAIL_STATISTICS_INFOMAIL_SUBJECT='Mailrelais statistics'
MAIL_STATISTICS_INFOMAIL_CRON_SCHEDULE='56 23 * * *'
#------------------------------------------------------------------------------
# mail: log handling
#------------------------------------------------------------------------------
# Tägliches Maillog und für einen Monat aufheben
MAIL_LOG_COUNT='31'
MAIL_LOG_INTERVAL='daily'
#------------------------------------------------------------------------------
# End
#------------------------------------------------------------------------------
Noch die relevaten Einstellungen von ANTISPAM:
#------------------------------------------------------------------------------
# /etc/config.d/antispam - configuration file for antispam
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# general settings
#------------------------------------------------------------------------------
START_ANTISPAM='yes'
ANTISPAM_ALLOWED_ADDRESSES=''
ANTISPAM_DNS_AVAILABLE='test'
ANTISPAM_ENABLE_RBL_CHECKS='yes'
ANTISPAM_MAILBOX_FILE=''
ANTISPAM_MAX_CHILDREN='10'
# Einstellung, damit ANTISPAM den Speicherverbrauch nicht zu sehr
# in die Höhe treibt.
#------------------------------------------------------------------------------
# Bayes filter settings
#------------------------------------------------------------------------------
ANTISPAM_BAYES_AUTO_LEARN='no'
ANTISPAM_BAYES_LEARN_FROM_SPAM_N='0'
ANTISPAM_BAYES_LEARN_FROM_SPAM_1=''
ANTISPAM_BAYES_LEARN_FROM_HAM_N='0'
ANTISPAM_BAYES_LEARN_FROM_HAM_1=''
ANTISPAM_BAYES_LEARN_CRON_SCHEDULE='5 3 * * 0'
#------------------------------------------------------------------------------
# white and blacklist settings
#------------------------------------------------------------------------------
ANTISPAM_AUTO_WHITELIST='yes'
ANTISPAM_AUTO_WHITELIST_FACTOR='0.5'
ANTISPAM_BLACKLIST_FROM_N='0'
ANTISPAM_BLACKLIST_FROM_1='spammer@spammers.com'
ANTISPAM_WHITELIST_FROM_N='3'
ANTISPAM_WHITELIST_FROM_1='*@erste-externe-domain.de'
ANTISPAM_WHITELIST_FROM_2='*@zweite-externe-domain.de'
ANTISPAM_WHITELIST_FROM_3='*@dritte-externe-domain.de'
#------------------------------------------------------------------------------
# send info mail
#------------------------------------------------------------------------------
ANTISPAM_INFOMAIL='no'
ANTISPAM_INFOMAIL_SUBJECT='Spam mailbox status'
ANTISPAM_INFOMAIL_BODY='Result of the spam mailbox check:\n|\nPlease delete messages after verification!'
ANTISPAM_INFOMAIL_CRON_SCHEDULE='3 7 * * *'
#------------------------------------------------------------------------------
# End
#------------------------------------------------------------------------------
Und zum Schluss noch die CLAMAV-Einstellungen:
#----------------------------------------------------------------------------
# CLAMAV
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Configuration:
#------------------------------------------------------------------------------
START_CLAMAV='yes'
#------------------------------------------------------------------------------
# Settings for automatic update
#------------------------------------------------------------------------------
CLAMAV_UPDATE_USE_REGION='yes'
CLAMAV_UPDATE_REGION='de'
CLAMAV_UPDATE_CRON_USE='yes'
CLAMAV_UPDATE_CRON_TIMES='5 */3 * * *'
# Updateversuch alle 3 Stunden
CLAMAV_UPDATE_CRON_MAIL_LEVEL='3'
# Infomieren immer per Mail über Updateversuch
#------------------------------------------------------------------------------
# Proxy Settings
#------------------------------------------------------------------------------
CLAMAV_USE_HTTP_PROXY_SERVER='no'
CLAMAV_HTTP_PROXY_SERVER='myproxy.com'
CLAMAV_HTTP_PROXY_PORT='1234'
CLAMAV_HTTP_PROXY_USERNAME='myuser'
CLAMAV_HTTP_PROXY_PASSWORD='mypassword'
#------------------------------------------------------------------------------
# Settings for update database mirror
#------------------------------------------------------------------------------
CLAMAV_DATABASE_MIRROR='database.clamav.net'
#------------------------------------------------------------------------------
# Settings for Archive Support
#------------------------------------------------------------------------------
CLAMAV_SCAN_ARCHIVE='yes'
CLAMAV_SCAN_RAR='no'
CLAMAV_SCAN_OLE2='yes'
CLAMAV_ARCHIVE_MAX_FILE_SIZE='5'
CLAMAV_ARCHIVE_MAX_RECURSIONS='2'
CLAMAV_ARCHIVE_MAX_FILES='100'
CLAMAV_ARCHIVE_LIMIT_MEMORY_USAGE='no'
CLAMAV_ARCHIVE_MAX_COMPR_RATIO='200'
CLAMAV_ARCHIVE_BLOCK_ENCRYPTED='no'
#------------------------------------------------------------------------------
# Settings for Log-file handling
#------------------------------------------------------------------------------
CLAMAV_LOG_COUNT='10'
CLAMAV_LOG_INTERVAL='weekly'
#------------------------------------------------------------------------------
# End
#------------------------------------------------------------------------------
Stefan Heidrich März 2006