I've got several different servers running different OS's internally and each handles e-mail for specific domains. Since I only have one public-facing IP for these, I'd like to configure my CentOS-based server in such a way that it only accepts incoming messages for specific domains from the outside world, and subsequently relays those messages to the proper internal server based on the recipient domain.

I do not want to hack up DNS to accomplish this. I know I could simply create zones on the CentOS server with MX entries that point to the proper internal addresses, but that's a bit of a kludge. I need that machine to continue using the publicly available versions of each domain's zones, so this is not an option. As a side note, all the proper MX entries already point to my public-facing IP address.

I've read a little on smart tables and it seems that only the sender's domain is inspected. I may be wrong on this so have not ruled it out.

Is such a solution possible with Sendmail? If so, what configuration options and features will allow me to do this? Samples would be much appreciated.


We do exactly this.

You need to make entries in two configuration files.

First, enter the domains you are going to relay for in /etc/mail/relay-domains, one per line. Include any variations.

Second, in /etc/mail/mailertable, you have to tell sendmail what to do with mail destined for that domain.





exampledomain.com    relay:mailboxes.exampledomain.com

Remember to run make in /etc/mail so that the changes to mailertable take effect.

Note that if you don't put an entry in mailertable for a domain, it will consult DNS and try to send to a 'better' MX; if DNS has nothing of use, it will try to deliver the mail locally (and fail, unless you've doctored /etc/mail/local-host-names).

  • Thanks. This seems to work fairly well, but only for the domains that I have separate internal DNS zones for (needed since those are maintained by Active Directory; they have internal MX records as well, which appears to be why the relay works for them). For the other domains, it is still looking up public DNS and returning an error stating "mail loops back to me (MX problem?)". If I understand this solution correctly, my relay-domains file is being checked but the mailertable doesn't seem to be. Is there another setting I need to tinker with to get it to pay attention to mailertable? Dec 14 '09 at 17:51
  • Make sure you have the "mailertable" feature in your sendmail.mc file. Also make sure that you run "make" in /etc/mail. The mailertable is a hash file, it isn't read out of the text file the way that some other options are. On my system, I see that the file 'mailertable.db' is newer than the file 'mailertable', that's how I know the make worked. Alternatively you might try using the directive "smpt:" instead of "relay:" in the mailertable file. Dec 14 '09 at 18:56
  • ...err, that's "smtp:", not "smpt:". Dec 14 '09 at 18:56
  • Yes, I am performing a make after each change to the mailertable. I've also ensured that the mailertable feature is defined and not commented out in my sendmail.mc file, and I've performed a make after my modifications to it as well. The feature line for it shows up in the resulting .cf file as well. Unfortunately, sendmail is still disregarding the mailertable. Dec 15 '09 at 9:46
  • Since this has evolved into a separate issue of sendmail not referring to mailertable as instructed, I've marked this as the answer and started a separate question here: serverfault.com/questions/94481/… Dec 15 '09 at 10:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.