How To Install and Configure Postfix as a Send-Only SMTP Server on Ubuntu 18.04
The author selected the Free and Open Source Fund to receive a donation as part of the Write for DOnations program.
Introduction
Postfix is a mail transfer agent (MTA), an application used to send and receive email. It can be configured so that it can be used to send emails by local application only. This is useful in situations when you need to regularly send email notifications from your apps or simply have a lot of outbound traffic that a third-party email service provider won’t allow. It’s also a lighter alternative to running a full-blown SMTP server, while retaining the required functionality.
In this tutorial, you’ll install and configure Postfix as a send-only SMTP server. You’ll also request free TLS certificates from Let’s Encrypt for your domain and encrypt the outbound emails using them.
Prerequisites
- One Ubuntu 18.04 server set up with the Initial Server Setup with Ubuntu 18.04, including creating a sudo non-root user.
- A fully registered domain name. This tutorial will use
your_domain
throughout. You can purchase a domain name on Namecheap, get one for free on Freenom, or use the domain registrar of your choice. - An A DNS record with
your_domain
pointing to your server’s public IP address. You can follow this introduction to DigitalOcean DNS for details on how to add them.
Note: Your server’s hostname and your Droplet’s name must match your_domain
, because DigitalOcean automatically sets PTR records for the Droplet’s IP address according to its name.
You can verify the server’s hostname by typing hostname
at the command prompt. The output should match the name you gave the Droplet when it was being created.
Step 1 — Installing Postfix
In this step, you’ll install Postfix. The fastest way is to install the mailutils
package, which bundles Postfix with a few supplementary programs that you’ll use to test sending email.
First, update the package database:
Then, install Postfix by running the following command:
Near the end of the installation process, you will be presented with the Postfix configuration window:
The default option is Internet Site
. That’s the recommended option for your use case, so press TAB
, and then ENTER
. If you only see the description text, press TAB
to select OK
, then ENTER
.
If it does not show up automatically, run the following command to start it:
After that, you’ll get another configuration prompt regarding the System mail name:
The System mail name must be the same as the name you assigned to your server when you were creating it. When you’ve finished, press TAB
, followed by ENTER
.
You have now installed Postfix and are ready to start configuring it.
Step 2 — Configuring Postfix
In this step, you’ll configure Postfix to send and receive emails only from the server on which it is running on—that is, from localhost
.
For that to happen, Postfix needs to be configured to listen only on the loopback interface, the virtual network interface that the server uses to communicate internally. To make the changes, you’ll need to edit the main Postfix configuration file called main.cf
, stored under etc/postfix
.
Open it for editing using your favorite text editor:
Find the following lines:
Set the value of the inet_interfaces
setting to loopback-only
:
Another directive you’ll need to modify is mydestination
, which is used to specify the list of domains that are delivered via the local_transport
mail delivery transport. By default, the values are similar to these:
Change the line to look like this:
If your domain is actually a subdomain, and you’d want the email messages to look as if they were sent from the main domain, you can add the following line to the end of main.cf
:
The optional masquerade_domains
setting specifies for which domains the subdomain part will be stripped off in the email address.
When you are done, save and close the file.
Note: If you’re hosting multiple domains on a single server, the other domains can also be passed to Postfix using the mydestination
directive.
Then, restart Postfix by running the following command:
You’ve configured Postfix to only send emails from your server. You’ll now test it by sending an example message to an email address.
Step 3 — Testing the SMTP Server
In this step, you’ll test whether Postfix can send emails to an external email account using the mail
command, which is part of the mailutils
package that you installed in the first step.
To send a test email, run the following command:
You can change the body and the subject of the email to your liking. Remember to replace your_email_address
with a valid email address that you can access.
Now, check the email address to which you sent this message. You should see the message in your inbox. If it’s not there, check your spam folder. At this point, all emails you send are unencrypted, which makes service providers think it’s likely spam. You’ll set up encryption later, in step 5.
If you receive an error from the mail
command, or you haven’t received a message after prolonged periods of time, check that the Postfix configuration you edited is valid and that your server’s name and hostname are set to your domain.
Note that with this configuration, the address in the From
field for the test emails you send will be in the form of your_user_name@your_domain
, where your_user_name
is the username of the server user you ran the command as.
You have now sent an email from your server and verified that it’s successfully received. In the next step, you’ll set up email forwarding for root
.
Step 4 — Forwarding System Mail
In this step, you’ll set up email forwarding for user root
, so that system-generated messages sent to it on your server get forwarded to an external email address.
The /etc/aliases
file contains a list of alternate names for email recipients. Open it for editing:
In its default state, it looks like this:
The only directive present specifies that system generated emails are sent to root
.
Add the following line to the end of the file:
With this line, you specify that emails sent to root
end up being forwarded to an email address. Remember to replace your_email_address
with your personal email address. When you are done, save and close the file.
For the change to take effect, run the following command:
Running newaliases
will build up a database of aliases that the mail
command uses, which are taken from the config file you just edited.
Test that sending emails to root
works by running:
You should receive the email at your email address. If it’s not there, check your spam folder.
In this step, you have set up forwarding system-generated messages to your email address. You’ll now enable message encryption, so that all emails your server sends are immune to tampering in transit and will be viewed as more legitimate.
Step 5 — Enabling SMTP Encryption
You’ll now enable SMTP encryption by requesting a free TLS certificate from Let’s Encrypt for your domain (using Certbot) and configuring Postfix to use it when sending messages.
Ubuntu includes Certbot in their default package repository, but it may happen that it’s out of date. Instead, you’ll add the official repository by running the following command:
Press ENTER
when prompted to accept. Then, update your server’s package manager cache:
Finally, install the latest version of Certbot:
As part of the initial server setup in the prerequisites, you installed ufw
, the uncomplicated firewall. You’ll need to configure it to allow the HTTP port 80
, so that domain verification can be completed. Run the following command to enable it:
The output will look like this:
OutputRule added
Rule added (v6)
Now that the port is open, run Certbot to get a certificate:
This command orders Certbot to issue certificates with an RSA key size of 4096 bits, to run a temporary standalone web server (--standalone
) for verification, and to check via port 80
(--preferred-challenges http
). Remember to replace your_domain
with your domain before running the command, and enter your email address when prompted.
The output will be similar to this:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for `your_domain`
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2020-07-11. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
As written in the notes, your certificate and private key file were saved under /etc/letsencrypt/live/your_domain
.
Now that you have your certificate, open main.cf
for editing:
Find the following section:
Modify it to look like this, replacing your_domain
with your domain where necessary, which will update your TLS settings for Postfix:
Once you’re done, save and close the file.
Apply the changes by restarting Postfix:
Now, try sending an email again:
Then, check the email address you provided. It’s possible that you’ll see the message in your inbox immediately, because email providers are much more likely to mark unencrypted messages as spam.
You can check the technical info about the email message in your client to see that the message is indeed encrypted.
------------------------------------------------
dbsa@dbsa-X406UA:~$ ssh root@172.16.10.179
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-144-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Tue Jun 8 08:48:04 WIB 2021
System load: 1.19 Processes: 223
Usage of /: 23.5% of 98.30GB Users logged in: 0
Memory usage: 3% IP address for ens160: 172.16.10.179
Swap usage: 0%
* Super-optimized for small spaces - read how we shrank the memory
footprint of MicroK8s to make it the smallest full K8s around.
https://ubuntu.com/blog/microk8s-memory-optimisation
##########>>> Welcome to DAILY <<<##########
* Canonical Livepatch is available for installation.
- Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch
166 packages can be updated.
48 updates are security updates.
New release '20.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Last login: Tue Jun 8 08:46:48 2021 from 172.17.10.182
root@ubuntu:~# echo -e | mail -s "Tes2" harnedi@dominomail.yogya.com
root@ubuntu:~# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2021-06-08 08:48:02 WIB; 28s ago
Process: 1528 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 1528 (code=exited, status=0/SUCCESS)
Jun 08 08:48:02 ubuntu systemd[1]: Starting Postfix Mail Transport Agent...
Jun 08 08:48:02 ubuntu systemd[1]: Started Postfix Mail Transport Agent.
root@ubuntu:~# systemctl status postfix
Tidak ada komentar:
Posting Komentar