| @@ -24,55 +24,66 @@ give your full domain without any subdomain, i.e. `lukesmith.xyz`. | |||
| - Config files that link the two above securely with native log-ins. | |||
| - **Spamassassin** to prevent spam and allow you to make custom filters. | |||
| - **OpenDKIM** to validate you so you can send to Gmail and other big sites. | |||
| - The required SSL certificates if not already present. | |||
| ## This script does _not_ | |||
| - use a SQL database or anything like that. | |||
| - set up a graphical interface for mail like Roundcube or Squirrel Mail. If you | |||
| want that, you'll have to install it yourself. I just use | |||
| [isync/msmtp/mutt-wizard](https://github.com/lukesmithxyz/mutt-wizard) to | |||
| have an offline mirror of my email setup and I recommend the same. There are | |||
| other ways of doing it though, like Thunderbird, etc. | |||
| ## Before you run this script you need... | |||
| 1. A **Debian or Ubuntu server**. I've tested this on a | |||
| [Vultr](https://www.vultr.com/?ref=8940911-8H) Debian server and one running | |||
| Ubuntu and their setup works, but I suspect other VPS hosts will have | |||
| similar/possibly identical default settings which will let you run this on | |||
| them. Note that the affiliate link there to Vultr gives you a $100 credit | |||
| for the first month to play around. | |||
| 2. **A Let's Encrypt SSL certificate for your site's `mail.` subdomain**. | |||
| 3. You need two little DNS records set on your domain registrar's site/DNS | |||
| server: (1) an **MX record** pointing to your own main domain/IP and (2) a | |||
| **CNAME record** for your `mail.` subdomain. | |||
| 4. **A Reverse DNS entry for your site.** Go to your VPS settings and add an | |||
| entry for your IPv4 Reverse DNS that goes from your IP address to | |||
| `<mail.yourdomain.com>`. If you would like IPv6, you can do the same for | |||
| that. This has been tested on Vultr, and all decent VPS hosts will have a | |||
| section on their instance settings page to add a reverse DNS PTR entry. You | |||
| can use the 'Test Email Server' or ':smtp' tool on | |||
| [mxtoolbox](https://mxtoolbox.com/SuperTool.aspx) to test if you set up a | |||
| reverse DNS correctly. This step is not required for everyone, but some big | |||
| email services like Gmail will stop emails coming from mail servers with | |||
| no/invalid rDNS lookups. This means your email will fail to even make it to | |||
| the recipients spam folder; it will never make it to them. | |||
| 5. `apt purge` all your previous (failed) attempts to install and configure a | |||
| mail server. Get rid of _all_ your system settings for Postfix, Dovecot, | |||
| OpenDKIM and everything else. This script builds off of a fresh install. | |||
| 6. Some VPS providers block mail port numbers like 25, 993 or 587 by default. | |||
| You may need to request these ports be opened to send mail successfully. | |||
| Vultr and most other VPS providers will respond immediately and open the | |||
| ports for you if you open a support ticket. | |||
| 7. If you have a firewall, you'll need to open ports on your side as well. For | |||
| example, with `ufw`, just run: `ufw allow 587` on ports 587, 993 and 25 (you | |||
| will need port 80 for Certbot too). | |||
| ## Post-install requirement! | |||
| - After the script runs, you'll have to add additional DNS TXT records which | |||
| are displayed at the end when the script is complete. They will help ensure | |||
| your mail is validated and secure. | |||
| - use a SQL database or anything like that. We keep it simple and use normal | |||
| Unix system users for accounts and passwords. | |||
| - set up a graphical web interface for mail like Roundcube or Squirrel Mail. | |||
| You are expected to use a normal mail client like Thunderbird or K-9 for | |||
| Android or good old mutt with | |||
| [mutt-wizard](https://github.com/lukesmithxyz/mutt-wizard). Note that there | |||
| is a guide for [Rainloop](https://landchad.net/rainloop/) on | |||
| [LandChad.net](https://landchad.net) for those that want such a web | |||
| interface. | |||
| ## Prerequisites for Installation | |||
| 1. Debian or Ubuntu server. I suited this script for | |||
| [Vultr](https://www.vultr.com/?ref=8940911-8H) servers originally, but it | |||
| works consistently on any normal setup. | |||
| 2. DNS records that point your domain to your server's IP (IPv4 and IPv6). | |||
| ## Mandatory Finishing Touches | |||
| ### Unblock your ports | |||
| While the script enables your mail ports on your server, it is common practice | |||
| for all VPS providers to block mail ports on their end by default. Open a help | |||
| ticket with your VPS provider asking them to open your mail ports and they will | |||
| do it in short order. | |||
| ### DNS records | |||
| At the end of the script, you will be given some DNS records to add to your DNS | |||
| server/registrar's website. These are mostly for authenticating your emails as | |||
| non-spam. The 4 records are: | |||
| 1. An MX record directing to `mail.yourdomain.tld`. | |||
| 2. A TXT record for SPF (to reduce mail spoofing). | |||
| 3. A TXT record for DMARC policies. | |||
| 4. A TXT record with your public DKIM key. This record is long and **uniquely | |||
| generated** while running `emailwiz.sh` and thus must be added after | |||
| installation. | |||
| They will look something like this: | |||
| ``` | |||
| @ MX 10 mail.example.org | |||
| mail._domainkey.example.org TXT v=DKIM1; k=rsa; p=anextremelylongsequenceoflettersandnumbersgeneratedbyopendkim | |||
| _dmarc.example.org TXT v=DMARC1; p=reject; rua=mailto:dmarc@example.org; fo=1 | |||
| example.org TXT v=spf1 mx a: -all | |||
| ``` | |||
| The script will create a file, `~/dns_emailwiz` that will list our the records | |||
| for your convenience, and also prints them at the end of the script. | |||
| ### Add a rDNS/PTR record as well! | |||
| Set a reverse DNS or PTR record to avoid getting spammed. You can do this at | |||
| your VPS provider, and should set it to `mail.yourdomain.tld`. Note that you | |||
| should set this for both IPv4 and IPv6. | |||
| ## Making new users/mail accounts | |||
| @@ -95,50 +106,30 @@ in the server, you could just install mutt, add `set spoolfile="+Inbox"` to | |||
| your `~/.muttrc` and use mutt to view and reply to mail. You'll probably want | |||
| to log in remotely though: | |||
| ## Logging in from Thunderbird or mutt (and others) remotely | |||
| ## Logging in from email clients (Thunderbird/mutt/etc) | |||
| Let's say you want to access your mail with Thunderbird or mutt or another | |||
| email program. For my domain, the server information will be as follows: | |||
| - SMTP server: `mail.lukesmith.xyz` | |||
| - SMTP port: 587 | |||
| - SMTP port: 465 | |||
| - IMAP server: `mail.lukesmith.xyz` | |||
| - IMAP port: 993 | |||
| In previous versions of emailwiz, you also had to log on with *only* your | |||
| username (i.e. `luke`) rather than your whole email address (i.e. | |||
| `luke@lukesmith.xyz`), which caused some confusion. This is no longer the | |||
| case. | |||
| ## Benefited from this? | |||
| I am always glad to hear this script is still making life easy for people! If | |||
| this script or documentation has saved you some frustration, you can donate to | |||
| support me at [lukesmith.xyz/donate](https://lukesmith.xyz/donate.html). | |||
| ## Troubleshooting -- Can't send mail? | |||
| - Always check `journalctl -xe` to see the specific problem. | |||
| - Check with your VPS host and ask them to enable mail ports. Some providers | |||
| disable them by default. It shouldn't take any time. | |||
| - Go to [this site](https://appmaildev.com/en/dkim) to test your TXT records. | |||
| If your DKIM, SPF or DMARC tests fail you probably copied in the TXT records | |||
| incorrectly. | |||
| - If everything looks good and you *can* send mail, but it still goes to Gmail | |||
| or another big provider's spam directory, your domain (especially if it's a | |||
| new one) might be on a public spam list. Check | |||
| [this site](https://mxtoolbox.com/blacklists.aspx) to see if it is. Don't | |||
| worry if you are: sometimes especially new domains are automatically assumed | |||
| to be spam temporarily. If you are blacklisted by one of these, look into it | |||
| and it will explain why and how to remove yourself. | |||
| - Check your DNS settings using [this site](https://intodns.com/), it'll report | |||
| any issues with your MX records | |||
| - Ensure that port 25 is open on your server. | |||
| [Vultr](https://www.vultr.com/docs/what-ports-are-blocked) for instance | |||
| blocks this by default, you need to open a support ticket with them to open | |||
| it. You can't send mail if 25 is blocked | |||
| ## TODO | |||
| - Fail2ban for security. | |||
| - Scripts for easier spam prevention. | |||
| I am always glad to hear this script is still making life easy for people. If | |||
| this script or documentation has saved you some frustration, donate here: | |||
| - btc: `bc1qzw6mk80t3vrp2cugmgfjqgtgzhldrqac5axfh4` | |||
| - xmr: `8A5v4Ci11Lz7BDoE2z2oPqMoNHzr5Zj8B3Q2N2qzqrUKhAKgNQYGSSaZDnBUWg6iXCiZyvC9mVCyGj5kGMJTi1zGKGM4Trm` | |||
| ## Sites for Troubleshooting | |||
| Can send or receive mail? Getting marked as spam? There are tools to double-check your DNS records and more: | |||
| - Always check `journalctl -xe` first for specific errors. | |||
| - [Check your DNS](https://intodns.com/) | |||
| - [Test your TXT records via mail](https://appmaildev.com/en/dkim) | |||
| - [Is your IP blacklisted?](https://mxtoolbox.com/blacklists.aspx) | |||
| - [mxtoolbox](https://mxtoolbox.com/SuperTool.aspx) | |||