This tutorial describes how to setup a local mail server using Postfix, Dovecot And Squirrelmail in CentOS 7. Please note that I said “local mail server”. This tutorial doesn’t help you if you want to send or receive mails to outside like Gmail or yahoo. However, if you want send/receive mails to outside, you should configure the mail server with a public IP, and request your ISP to configure the MX record of your mail server in their DNS server.
I tested this setup on CentOS 64 bit server. Although, the same steps should work on RHEL and Scientific Linux 7 distributions. My test box details are given below:
- OS: CentOS 7 64bit minimal server
- IP Address: 192.168.1.150/24
- Hostname: server1.unixmen.local
Let us get started now.
Prerequisites:
1. Remove default MTA sendmail first if it’s already installed. Sendmail will not be installed by default in minimal installation, so you can skip this step.
yum remove sendmail
2. Setup DNS server and add the Mail server MX records in the forward and reverse zone files.
To install and configure DNS server, refer the following link.
And, don’t forget to ask your ISP to point your external static IP to your mail domain.
3. Add hostname entries in /etc/hosts file as shown below:
vi /etc/hosts
Add your FQDN:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.150 server1.unixmen.local server1
4. I disabled SELinux to reduce the complexity in postfix configuration.
To do that, edit:
vi /etc/sysconfig/selinux
Change SELINUX=enforcing to SELINUX=disabled.
SELINUX=disabled
5. Install EPEL Repository:
Squirrelmail webmail client is not available in CentOS official repositories. So let us enable EPEL repository.
yum install epel-release
6. Allow the Apache default port 80 through your firewall/router:
firewall-cmd --permanent --add-port=80/tcp
Restart firewall using command:
firewall-cmd --reload
Restart your server to take effect all changes.
Install Postfix
Postfix is a free open source mail transfer agent (MTA). It is fast, secure and easy to administer. It’s an alternative to Sendmail, which is the default MTA for RHEL.
Now, install Postifix using command:
yum install postfix
Configuring Postfix
Edit /etc/postfix/main.cf file:
vi /etc/postfix/main.cf
Find and edit the following lines:
## Line no 77 - Uncomment and set your mail server FQDN ## myhostname = server1.unixmen.local ## Line 85 - Uncomment and Set domain name ## mydomain = unixmen.local ## Line 101 - Uncomment ## myorigin = $mydomain ## Line 115 - Uncomment and Set ipv4 ## inet_interfaces = all ## Line 121 - Change to all ## inet_protocols = all ## Line 166 - Comment ## #mydestination = $myhostname, localhost.$mydomain, localhost, ## Line 167 - Uncomment ## mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ## Line 266 - Uncomment and add IP range ## mynetworks = 192.168.1.0/24, 127.0.0.0/8 ## Line 421 - Uncomment ## home_mailbox = Maildir/
Save and exit the file.
Start/restart Postfix service now:
systemctl enable postfix
systemctl restart postfix
Testing Postfix mail server
First, create a test user called “SK“.
useradd sk
Set the password for the user:
passwd sk
Access the server via Telnet and enter the commands manually shown in red colored text.
telnet localhost smtp
Sample output:
Trying ::1... Connected to localhost. Escape character is '^]'. 220 server1.unixmen.local ESMTP Postfix ehlo localhost ## Type this line ## 250-server1.unixmen.local 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN mail from:<sk> ## Type this - mail sender address ## 250 2.1.0 Ok rcpt to:<sk> ## Type this - mail receiver address ## 250 2.1.5 Ok data ## Type this to input body of Email ## 354 End data with <CR><LF>.<CR><LF> Welcome to unixmen mail server ## Body of the Email ## . ## Type dot (.) after composing your email ## 250 2.0.0 Ok: queued as E2B522032F93 quit ## Type quit to exit from mail ## 221 2.0.0 Bye Connection closed by foreign host.
Now navigate to the user “sk“ mail directory and check whether the new mail has been received.
ls /home/sk/Maildir/new/
Sample output:
1437722056.Vfd01I203e3e7M938078.server1.unixmen.local
Success! A new mail is received to the user “sk“.
To read the mail, enter the following command:
cat /home/sk/Maildir/new/1437722056.Vfd01I203e3e7M938078.server1.unixmen.local
Sample output:
Return-Path: <sk@unixmen.local> X-Original-To: sk Delivered-To: sk@unixmen.local Received: from localhost (localhost [IPv6:::1]) by server1.unixmen.local (Postfix) with ESMTP id E2B522032F93 for <sk>; Fri, 24 Jul 2015 12:42:36 +0530 (IST) Message-Id: <20150724071330.E2B522032F93@server1.unixmen.local> Date: Fri, 24 Jul 2015 12:42:36 +0530 (IST) From: sk@unixmen.local Welcome to unixmen mail server
Done. Postfix is working!!
Install Dovecot
Dovecot is an open source IMAP and POP3 mail server for Unix/Linux systems.
To install it, run:
yum install dovecot
Configuring Dovecot
Edit file /etc/dovecot/dovecot.conf file,
vi /etc/dovecot/dovecot.conf
Uncomment the following line:
## Line 24 - umcomment ## protocols = imap pop3 lmtp
Edit file /etc/dovecot/conf.d/10-mail.conf file
vi /etc/dovecot/conf.d/10-mail.conf
Make the changes as shown below:
## Line 24 - uncomment ## mail_location = maildir:~/Maildir
Edit /etc/dovecot/conf.d/10-auth.conf
vi /etc/dovecot/conf.d/10-auth.conf
And make the changes as shown below:
## line 10 - uncomment##
disable_plaintext_auth = yes
## Line 100 - Add the word: "login" ##
auth_mechanisms = plain login
Edit file /etc/dovecot/conf.d/10-master.conf,
vi /etc/dovecot/conf.d/10-master.conf
Make changes as shown below:
## Line 91, 92 - Uncomment and add "postfix"
#mode = 0600
user = postfix
group = postfix
[...]
Start Dovecot service:
systemctl enable dovecot
systemctl start dovecot
Testing Dovecot
It’s time to test Dovecot configuration. Enter the following command in Terminal:
telnet localhost pop3
Enter the commands manually which are marked as bold:
Trying ::1... Connected to localhost. Escape character is '^]'. +OK Dovecot ready. user sk ## Enter the mail user name ## +OK pass centos ## Enter the password ## +OK Logged in. retr 1 ## Type this command to view mail ## +OK 415 octets Return-Path: <sk@unixmen.local> X-Original-To: sk Delivered-To: sk@unixmen.local Received: from localhost (localhost [IPv6:::1]) by server1.unixmen.local (Postfix) with ESMTP id E2B522032F93 for <sk>; Fri, 24 Jul 2015 12:42:36 +0530 (IST) Message-Id: <20150724071330.E2B522032F93@server1.unixmen.local> Date: Fri, 24 Jul 2015 12:42:36 +0530 (IST) From: sk@unixmen.local Welcome to unixmen mail server . quit ## Type 'quit' to exit ## +OK Logging out. Connection closed by foreign host.
As you see in the above result, Dovecot is working!
Install Squirrelmail
Sending and receiving mails form command line is not easy all the time. It is better if we do it from a graphical console. No worries. We can easily send/receive mails using webmail client called Squirrelmail via a web browser.
Make sure that you’ve installed and enabled EPEL repository.
Then, Install Squirrelmail using the following command:
yum install squirrelmail
Configuring Squirrelmail
Navigate to /usr/share/squirrelmail/config/ directory:
cd /usr/share/squirrelmail/config/
..and run the following command to configure Squirrelmail.
./conf.pl
The following wizard will open. Enter choice “1” to set your organization details:
SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color off S Save data Q Quit Command >> 1
The following wizard will open. Enter “1” again to modify your organization details:
SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Organization Preferences 1. Organization Name : SquirrelMail 2. Organization Logo : ../images/sm_logo.png 3. Org. Logo Width/Height : (308/111) 4. Organization Title : SquirrelMail $version 5. Signout Page : 6. Top Frame : _top 7. Provider link : http://squirrelmail.org/ 8. Provider name : SquirrelMail R Return to Main Menu C Turn color off S Save data Q Quit Command >> 1
Set your Organization name and press Enter:
We have tried to make the name SquirrelMail as transparent as possible. If you set up an organization name, most places where SquirrelMail would take credit will be credited to your organization. If your Organization Name includes a '$', please precede it with a \. Other '$' will be considered the beginning of a variable that must be defined before the $org_name is printed. $version, for example, is included by default, and will print the string representing the current SquirrelMail version. [SquirrelMail]: Unixmen
Similarly, set all the details such as organization title, logo, provider name in the above wizard. Once you done, press “S” to save the changes, and press “R” to return back to your main menu:
SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Organization Preferences 1. Organization Name : Unixmen 2. Organization Logo : ../images/sm_logo.png 3. Org. Logo Width/Height : (308/111) 4. Organization Title : SquirrelMail $version 5. Signout Page : 6. Top Frame : _top 7. Provider link : http://squirrelmail.org/ 8. Provider name : Unixmen Mail R Return to Main Menu C Turn color off S Save data Q Quit Command >> S
Now, enter “2” to setup mail Server settings such as domain name and mail agent etc.:
SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color off S Save data Q Quit Command >> 2
Enter “1”, Enter your mail domain (ex. unixmen. local) and press Enter key.
SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Server Settings General ------- 1. Domain : localhost 2. Invert Time : false 3. Sendmail or SMTP : Sendmail A. Update IMAP Settings : localhost:143 (uw) B. Change Sendmail Config : /usr/sbin/sendmail R Return to Main Menu C Turn color off S Save data Q Quit Command >> 1 The domain name is the suffix at the end of all email addresses. If for example, your email address is jdoe@example.com, then your domain would be example.com. [localhost]: unixmen.local
Enter “3” and change from sendmail to Postfix MTA (i.e. SMTP):
SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Server Settings General ------- 1. Domain : unixmen.local 2. Invert Time : false 3. Sendmail or SMTP : Sendmail A. Update IMAP Settings : localhost:143 (uw) B. Change Sendmail Config : /usr/sbin/sendmail R Return to Main Menu C Turn color off S Save data Q Quit Command >> 3
Enter “2” to switch from sendmail MTA to postfix.
You now need to choose the method that you will use for sending
messages in SquirrelMail. You can either connect to an SMTP server
or use sendmail directly.
1. Sendmail
2. SMTP
Your choice [1/2] [1]: 2
Now enter “S” followed by “Q” to save and exit Squirrelmail configuration.
Create a squirrelmail vhost in apache config file:
vi /etc/httpd/conf/httpd.conf
Add the following lines at the end:
Alias /webmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes FollowSymLinks RewriteEngine On AllowOverride All DirectoryIndex index.php Order allow,deny Allow from all </Directory>
Restart the Apache service:
systemctl restart httpd
Create mail users
Create some users for testing. In my case I create two users namely “senthil“ and “kumar“.
useradd senthil
passwd senthil
useradd kumar
passwd kumar
Access Webmail
Now navigate to http://ip-address/webmail or http://domain-name/webmail from your browser.
The following screen should appear. Enter the username and password of the user which we have created earlier.
Now, you’ll be able to access the user mail box.
Compose mails
Let us compose a test mail from user “senthil“ to user“kumar“. Click on the Compose link on the top. Enter the recipient mail id (ex. kumar@unixmen.local), subject and body of the mail and click Send.
Now, log out from user “senthil“ and log in to user “kumar“ mail and check for any new mail.
Hurrah! We have got a new mail from senthil@unixmen.local mail id.
To read the mail, click on it. You’ll now be able to read, reply, delete or compose a new mail.
That’s all for now. We’ve successfully configured a local mail server that will serve in/out mails within a local area network.
Hope this tutorial will help you.
Good luck!
To setup mail server in CentOS 6.x server, refer the following link.
Reference links: