How to host your own email on a $15 a month vps (Part 1)
Intro
Every now and then my paranoia will take over and I’ll have an urge to break free of all 3rd parties that I depend on for my life on the internet. The last time it struck I decided to set up my own mail server. I’m going to walk you through what I did in order to get it working
Important Acronym List (IAL)
Mail Transfer Agent: MTA This is the piece of software that handles incoming AND outgoing email. It receives email and then decides whether or not the message is for one of the users it knows about. It also decides who gets to send email and handles the delivery. In this tutorial we’re going to be using Postfix. The primary protocol that it speaks is SMTP
Internet Message Access Protocol: IMAP By default, postfix will deliver email messages to a folder on the computer it’s running on and the only way to access the messages is when you are logged into that box. Since this is kind of impractical, there are a ton of protocols that have been created to make accessing email messages on a remote server easy. We’re going to use dovecot and IMAP (the protocol) to access our messages on the server. You can also get dovecot to work with POP3, but this guide doesn’t cover getting it set up since it’s an older and less useful protocol.
What you need
- A domain
- I use namecheap, but I hear good things about hover.com
- A server
- Preferably running debian or ubuntu. It will be helpful for preventing your mail from being marked as spam if you can set the PTR / reverse DNS for this server’s IP address. Sadly, this means that you probably can’t run this on a server you have in your house. If you need a server, I recommend BuyVM since they have a $15 a year VPS that is perfectly adequate for this purpose.
- An SSL certificate
- You can get one for free from StartSSL
Directions
We’re mostly going to follow along with this guide from linode except for the bits about MySQL [1]. I don’t understand why they would use MySQL here since it’s huge overkill unless you are dealing with a very large number of users. Instead of MySQL we’re going to use sqlite since it doesn’t require any processes to be running and eating up the limited RAM available on the VPS.
You should follow the linode guide, except when they start talking about MySQL in which case you should come back here and see how to do it with SQLite. I’ve tried to match up the section/numbering so that it’s easy to figure out what to do differently.
Installing Packages
Step 3
Install these packages instead: sudo apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-sqlite sqlite
Step 4 and 5
Ignore
SQLite instead of MySQL
Creating the database
Download this empty mailbox.sqlite and put it in /etc/mailbox.sqlite or if you don’t trust me you can create you’re own with this schema:
This will create our tables
Adding data
You can add data to sqlite database with the same syntax as MySQL, but interact with the database using the sqlite
or sqlite3
command instead of mysql
Postfix
Step 8
Use the following instead of the one in the guide
We’ll be using these file names later as well
Step 11
Use this instead: nano /etc/postfix/sqlite-virtual-mailbox-domains.cf
Step 12
Step 15
You can test the set up by referencing your sqlite file instead of the mysql one. eg: postmap -q example.com sqlite:/etc/postfix/sqlite-virtual-mailbox-domains.cf
Step 16
Use this instead: nano /etc/postfix/sqlite-virtual-mailbox-maps.cf
Step 17
Step 20
Test with: postmap -q email1@example.com sqlite:/etc/postfix/sqlite-virtual-mailbox-maps.cf
Step 21
Use this instead: nano /etc/postfix/sqlite-virtual-alias-maps.cf
Step 22
Step 25
Test with: postmap -q alias@example.com sqlite:/etc/postfix/sqlite-virtual-alias-maps.cf (You get the idea at this point I hope)
Step 28
I skipped this bit entirely without any ill effects
Dovecot
Step 25 to Step 28
Please use the following as the contents of dovecot-sql.conf.ext
Conclusions
If all went well then you should be able to connect successfully to your new email server with your email client to both receive and send email! It’s amazing, I know.
In the next installment I’ll walk through the process of signing your email with DKIM so that it won’t get marked as spam by pretty much every email provider in existence
Sources
https://library.linode.com/email/postfix/postfix2.9.6-dovecot2.0.19-mysql
http://sealedabstract.com/code/nsa-proof-your-e-mail-in-2-hours/
http://blog.codinghorror.com/so-youd-like-to-send-some-email-through-code/
Notes
[1] I would have liked to reproduce most of the guide here since it IS published under a creative commons license, but it specifies no derivatives so I can’t actually modify it at all...