Our old mail system's configuration

October 16, 2007

Before I can talk about more interesting mailer things, I have to explain how our old mail system was configured.

Our old mail system makes perfect sense once you realize that it was more or less designed around the idea that nothing should ever have to be done over NFS. In order to manage this, each different sort of processing had to be done on the machine that held the relevant files; deliveries to /var/mail were done on the postbox machine, which had /var/mail on local disks, and mail for real users was handled on the user's fileserver, because only that machine could even check for a .forward (much less expand it) without NFS being involved.

So the mail flow for incoming mail went like this:

  • mail came in to the central mail machine, which expanded aliases and local mailing lists (using data files that it held on its local disk). The central mail machine was the MX target for our domains.

  • mail for users was then sent to the user's fileserver. If the user had a .forward it was expanded; otherwise the fileserver sent it to the postbox machine (and sent a copy to the 'oldmail' machine, which kept a read-only copy of the past 14 days or so of email for each user).

    Users were encouraged to have procmail and so on deliver their mail not by directly writing it to /var/mail (which would have involved NFS) but by forwarding it to the postbox machine.

  • finally, the postbox and oldmail machines actually delivered the mail to the appropriate mailspool.

Mail routing was done by rewriting the destination addresses. Partly as a result, the postbox and oldmail machines only did their delivery for addresses in magic forms; if you sent other mail to them, they passed it back to the central mail machine.

(The fileservers passed email for the outside world back to the central machine instead of trying to deliver it directly. This had both good and bad effects.)

One consequence of this design is that all of the machines involved had to NFS export things to our login and compute servers, because they all had local storage. The postbox machine had to export /var/mail, the oldmail machine had to export /var/oldmail, and the central mail machine had to export the data area for local mailing lists so people could change them.

(Conveniently, the postbox machine was also the IMAP/POP server, so that bit didn't have to worry about mailbox locking over NFS.)

There was a separate mail submission machine for outgoing user email, whether from our servers or from user PCs. It forwarded mail for local destinations to the central mail machine and otherwise sent the mail directly to the outside world.

Written on 16 October 2007.
« The arrogance of trying to design for long term storage management
Our experience with Linux's strict overcommit mode »

Page tools: View Source, Add Comment.
Search:
Login: Password:
Atom Syndication: Recent Comments.

Last modified: Tue Oct 16 23:41:11 2007
This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.