Hello guys! I was asked how to configure multiple domains on a Microsoft Exchange server. The reception is very easy: Add the new domain name to your Exchange server and configure your POPcon to collect the mails or configure the MX DNS entry of this domain to your fixed WAN IP. But what about sending different mail domains over different smarthosts? This feature is not included in the Exchange server and can only added via third-party tools. And i thought “Isn’t it possible to do it with tiny postfix server?” (I’ve never configured a postfix server and I have only a few linux knowledge ^^). So ok, let’s start with our experiment.
I installed Debian with Gnome in my VMware Workstation environment and installed postfix. Open Terminal and change to root user:
su - apt-get update apt-get install postfix
after this you can edit your configuration and add your provider smarthosts. Open the main.cf file with nano:
nano /etc/postfix/main.cf
When the setup wizards starts, choose “no configuration” we want to do it by our own ;) This is my whole configuration (bold lines were very relevant while troubleshooting ^^):
# See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtp_tls_security_level = may smtp_tls_policy_maps = hash:/etc/postfix/tls_policy # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for # information on enabling SSL in the smtp client. smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination myhostname = debian alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases mydestination = debian, localhost.localdomain, , localhost #relayhost = sender_dependent_relayhost_maps = hash:/etc/postfix/relayhost_maps smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_password smtp_sasl_security_options = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.10.10.0/24 192.168.0.0/16 mailbox_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 message_size_limit = 0 virtual_mailbox_limit = 0 recipient_delimiter = + inet_interfaces = all
I allowed the complete internal network. You should only add your server in “mynetworks”. After this we need to create the list relayhosts and the logins. Create/open the relayhost_maps file in the postfix folder:
nano /etc/postfix/relayhost_maps @networkguy.de [smtp.strato.de] @gmx.de [mail.gmx.net]:587
this smarthosts need login data, so create/open a file called “sasl_password”:
nano /etc/postfix/sasl_password smtp.strato.de michel[put in the "at"-symbol here]networkguy.de:MySuperPassword [mail.gmx.net]:587 xxx[put in the "at"-symbol here]gmx.de:MySuperPassword
I also needed to create the tls_policy file because the SMTP server from GMX only allows encrypted communication:
nano /etc/postfix/tls_policy mail.gmx.net:587 encrypt
save the files with Ctrl+O and exit the texteditor nano. Now we need to convert this files to a binary database format:
postmap /etc/postfix/relayhost_maps postmap /etc/postfix/sasl_passwd postmap /etc/postfix/tls_policy
reload the postfix server:
service postfix restart
at this point, we can test the postfix server. Open the live log on the debian server:
tail -f /var/log/mail.log
I’m using the windows tool SendSMTP from John Buoro, VirtualObjectives to test the mailing. Configure the IP address of your debian server in the settings:
and write a test mail:
If you look at the log file, you can see if your test runs well:
Jul 25 13:28:38 debian postfix/smtpd[1555]: connect from unknown[192.168.88.1] Jul 25 13:28:38 debian postfix/smtpd[1555]: 492E161710: client=unknown[192.168.88.1] Jul 25 13:28:38 debian postfix/cleanup[1558]: 492E161710: message-id=<> Jul 25 13:28:38 debian postfix/qmgr[1500]: 492E161710: from=<xxx[at-symbol]gmx.de>, size=466, nrcpt=1 (queue active) Jul 25 13:28:38 debian postfix/smtpd[1555]: disconnect from unknown[192.168.88.1] Jul 25 13:28:38 debian postfix/smtp[1559]: 492E161710: to=<michel[at-symbol]networkguy.de>, relay=mail.gmx.net[212.227.17.168]:587, delay=0.58, delays=0.08/0.05/0.35/0.1, dsn=2.0.0, status=sent (250 Requested mail action okay, completed: id=0LguAU-1duRFo272k-00oJ8q) Jul 25 13:28:38 debian postfix/qmgr[1500]: 492E161710: removed
aaaaaaaaand I got the mail:
Maybe you will have problems with SSL ports and authentication. Check the postfix logs and correct your “relayhost_maps”, “sasl_passwd” and “tls_policy” file. Don’t forget to delete (rm filename.db) the .db-files and postmap again. You can also install this on your Raspberry Pi if you want. I think this is a very nice service to relay from different mail domains without buying a third-party-tool. In your Exchange server, change your send connector for “*” to the debian server.
You need help with your postfix server or Debian installation? Feel free to write in the comments below.