- Step 1: Installing Postfix
- Step 2: Configuring Postfix
- Step 3: Testing the SMTP Server
- Step 4: Forwarding System Mail
You will need:
- One Debian 10 server, and a sudo non-root user
- A valid domain name, like
example.com, pointing to your server.
That your server’s
hostname should match your domain or subdomain. You can verify the server’s hostname by typing hostname at the command prompt. The output should match the name you gave the server when it was being created.
Step 1: Installing Postfix
In this step, you’ll learn how to install
Postfix. You will need two packages:
ailutils-common, which includes programs necessary for Postfix to function, and
First, update the package database:
sudo apt update
sudo apt install mailutils-common
sudo apt install postfix mailutils
Near the end of the installation process, you will be presented with a window that looks like the one in the image below. The default option is
Internet Site. That’s the recommended option for this tutorial, so press
After that, you’ll get another window just like the one in the next image. The System mail name should be the same as the name you assigned to the server when you were creating it. If it shows a
subdomain.example.com, change it to just
example.com. When you’ve finished, press
You now have Postfix installed and are ready to modify its configuration settings.
Step 2: Configuring Postfix
In this step, you’ll configure Postfix to process requests to send emails only from the server on which it is running, i.e. from
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 change, open the main Postfix configuration file using your favorite text editor:
sudo vi /etc/postfix/main.cf
With the file open, scroll down until you see the following section:
And Change the line that reads
inet_interfaces = all to
inet_interfaces = loopback-only:
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = loopback-only inet_protocols = all
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:
The recommended defaults for this directive are given in the code block below, so modify yours to match:
mydomain = example.com mydestination = $myhostname, localhost.$mydomain, $mydomain
Save and close the file.
Finally, restart Postfix.
sudo systemctl restart postfix
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 you installed in Step 1.
To send a test email, type:
echo "This is the body of the email" | mail -s "This is the subject line" <your_email_address>
In performing your own test(s), you may use the body and subject line text as-is, or change them to your liking. However, in place of
<your_email_address>, use a valid email address.
Now check the email address where you sent the test message. You should see the message in your
Inbox. If not, check your
Step 4: Forwarding System Mail
The last thing we want to set up is forwarding, so you’ll get emails sent to
root on the system at your personal, external email address.
To configure Postfix so that system-generated emails will be sent to your email address, you need to edit the
sudo vi /etc/aliases
The full contents of the file on a default installation of
Debian are as follows:
mailer-daemon: postmaster postmaster: root nobody: root hostmaster: root news: root www-data: root mail: root git: root nas: root mysql: root redis: root postfix: root ntp: root
postmaster: root setting ensures that system-generated emails are sent to the
root user. You want to edit these settings so these emails are rerouted to your email address. To accomplish that, edit the file so that it reads:
mailer-daemon: postmaster postmaster: root root: <your_email_address>
<your_email_address> with your personal email address. When finished, save and close the file. For the change to take effect, run the following command:
You can test that it works by sending an email to the root account using:
echo "This is the body of the email" | mail -s "This is the subject line" root