Setup mail server with Postfix, Dovecot, Roundcube

postfix01

A working mail server can be configured using Postfix (MTA) with the addition of some components like Dovecot (IMAP) and Roundcube (webmail).

Combining these applications we obtain an email system with SMTP, IMAP, POP3 protocols that can be used in a corporate environment where the budget is pretty limited. This solution is based on Open Source software where no licenses need to be purchased for its use.

 

Prerequisites

To work properly, system needs to have selinux disabled.

# vi /etc/selinux/config

postfix02

 

Install Postfix

From the console, install Postfix with yum command.

# yum install postfix

postfix03

Edit configuration file /etc/postfix/main.cf and set the parameters as follow:

myhostname = hostname.domain.com 
mydomain = domain.com 
myorigin = $mydomain 
inet_interfaces = all 
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain 
mynetworks = 192.168.1.0/24, 127.0.0.0/8 
home_mailbox = Maildir/

# vi /etc/postfix/main.cf

myhostname = hostname.domain.com 
mydomain = domain.com 
myorigin = $mydomain

postfix04

inet_interfaces = all

postfix05

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

postfix06

mynetworks = 192.168.1.0/24, 127.0.0.0/8

postfix07

home_mailbox = Maildir/

postfix08

Once all the parameters have been set, set application to start during system boot and start the service.

# chkconfig postfix on
# service postfix start

postfix09

 

Testing Postfix

To check if everything works as expected, type from console the following commands to send an email:

# telnet localhost smtp

Trying ::1... 
Connected to localhost. 
Escape character is '^]'. 
220 server.domain.com ESMTP Postfix 
ehlo localhost 
250-server.domain.com 
250-PIPELINING 
250-SIZE 10240000 
250-VRFY 
250-ETRN 
250-ENHANCEDSTATUSCODES 
250-8BITMIME 
250 DSN 
mail from: username@domain.com
250 2.1.0 Ok 
rcpt to: username@domain.com
250 2.1.5 Ok 
data 
354 End data with <CR><LF>.<CR><LF> 
test
.
250 2.0.0 Ok: queued as 2C55A94 
quit
221 2.0.0 Bye 
Connection closed by foreign host.

postfix10

To check if the email has been received, have a look at the /home/username/Maildir/new directory.

# cd /home/username/Maildir/new/
# ll
# cat xxxxx.xxxxx.server.domain.com

postfix11

The email was received by the system then the mail server is working properly.

 

Install Dovecot

While Postfix acts as Mail Transfer Agent (MTA) only, in order to retrieve emails using modern tools we need to enable IMAP/POP3 protocols. Dovecot is an application that acts as a secure IMAP and POP3 server.

Use the yum command to install Dovecot.

# yum install dovecot

postfix12
Edit the configuration file /etc/dovecot/dovecot.conf to enable the needed protocols.

# vi /etc/dovecot/dovecot.conf

protocols = imap pop3 lmtp

postfix13

Then we need to specify the mail location by editing the file /etc/dovecot/conf.d/10-mail.conf.

# vi /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Maildir

postfix14
Edit the file /etc/dovecot/conf.d/10-auth.conf and set the following parameters:

# vi /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no

postfix15

auth_mechanisms = plain login

postfix16

Last file to edit /etc/dovecot/conf.d/10-master.conf.

# vi /etc/dovecot/conf.d/10-master.conf

unix_listener auth-userdb { 
    #mode = 0600 
    user = postfix 
    group = postfix 
}

postfix17

Set Dovecot to start at system boot and start the service.

# chkconfig dovecot on
# service dovecot start

postfix18

 

Testing Dovecot

To check if Dovecot is working, we test the program through the POP3 protocol.

# telnet localhost pop3

Trying ::1... 
Connected to localhost. 
Escape character is '^]'. 
+OK Dovecot ready. 
user admin 
+OK 
pass password 
+OK Logged in. 
list
+OK 1 messages: 
1 477 
. 
retr 1 
+OK 477 octets 
Return-Path: <username@domain.com> 
X-Original-To: username@domain.com 
Delivered-To: username@domain.com 
Received: from localhost (localhost [IPv6:::1]) 
by server.domain.com (Postfix) with ESMTP id 2C55A94 
for username@domain.com; Wed, 12 Jun 2013 12:22:00 +0200 (CEST) 
Message-Id: <20130207113547.117113FF18@server.domain.com> 
Date: Wed, 12 Jun 2013 12:22:00 +0200 (CEST) 
From: username@domain.com 
To: undisclosed-recipients:; 
test postfix 
. 
quit
+OK Logging out. 
Connection closed by foreign host.

postfix19

 

Install Roundcube

Roundcube is a browser-based IMAP client with an application-like user interface.

To configure the application, firstly we need to install MySQL server and Apache in the system.

# yum install mysql-server mysql-devel httpd

postfix20

Enable both MySQL and Apache to start at system boot and enable services.

# chkconfig mysqld on
# service mysqld start

# chkconfig httpd on
# service httpd start

 

Install EPEL repository

To install Roundcube with yum command, we need to install the EPEL repository in the system.

# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm

postfix21

Once EPEL repo has been installed, use yum to install Roundcube.

# yum install roundcubemail

postfix22

 

Configure MySQL

To define the database used by the application, we need to access MySQL configuration.

# mysql -u root -p

mysql> create database roundcube; 
mysql> create user roundcube; 
mysql> GRANT ALL PRIVILEGES ON roundcube.* TO roundcube@localhost IDENTIFIED BY 'password'; 
mysql> flush privileges; 
mysql> use roundcube; 
mysql> source /usr/share/doc/roundcubemail-0.8.6/SQL/mysql.initial.sql 
mysql> quit

postfix23

Edit configuration file /etc/roundcubemail/db.inc.php to set the parameters to access the database.

# vi /etc/roundcubemail/db.inc.php

$rcmail_config['db_dsnw'] = 'mysql://roundcube:password@localhost/roundcube';

postfix24

Edit the file /etc/roundcubemail/main.inc.php to set the hostname chosen to perform the login.

# vi /etc/roundcubemail/main.inc.php

$rcmail_config['default_host'] = 'localhost';

postfix25

To make the system accessible outside the server, edit the file /etc/httpd/conf.d/roundcubemail.conf and set the correct parameter.

# vi /etc/httpd/conf.d/roundcubemail.conf

Allow from all

postfix26

Edit the /etc/php.ini file and set the time zone.

postfix27

Because the log could report errors related to encryption, set the correct encryption parameter.

# vi /etc/php.d/mcrypt.ini

extension=mcrypt.so

postfix28

Restart Apache.

# service httpd restart

 

Testing Roundcube

Access Roundcube typing from your browser the address:

http://IP_address/roundcubemail

Enter your credential then click Login.

postfix29

The main screen appears showing the email received when Postfix was previously tested.

postfix30

 

Install Postfix Admin

To make Postfix administration easier, the Postfix admin is a web-based tool used to manage mailboxes, virtual domains and aliases.

If not already present in the system, install the PHP component needed by the application.

# yum install php-imap

Access MySQL and create the database used by Postfix Admin.

# mysql -u root -p

mysql> create database postfixadmin; 
mysql> grant all privileges on postfixadmin.* to postfixadmin@'localhost' identified by 'password'; 
mysql> flush privileges; 
mysql> quit

postfix31

Using the wget command, download the latest release of the application.

# wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.6/postfixadmin-2.3.6.tar.gz

postfix32

Extract the content and move the directory to /var/www/html folder.

# tar -vxzf postfixadmin-2.3.6.tar.gz
# mv postfixadmin-2.3.6 /var/www/html/postfixadmin

postfix33postfix36

Edit the configuration file /var/www/html/postfixadmin/config.inc.php to enable the application and set the password.

# vi /var/www/html/postfixadmin/config.inc.php

$CONF['configured'] = true; 
$CONF['setup_password'] = 'password';

postfix34

Set the correct parameters to access the database previously created.

$CONF['database_type'] = 'mysqli'; 
$CONF['database_host'] = 'localhost'; 
$CONF['database_user'] = 'postfixadmin'; 
$CONF['database_password'] = 'password'; 
$CONF['database_name'] = 'postfixadmin';

postfix35

Add the following line to allow the creation of the administration password.

$CONF['setup_password'] = '8abd38580e77ebf7010eb60b95eb4fad:0bd829114d9efc4bc35c7e42cf7d3507dad8b837';

postfix36

Restart Apache.

# service httpd restart

To execute the Postfix Admin Setup Checker, type in your browser the address:

http://IP_address/postfixadmin/setup.php

postfix37

Change the setup password.

postfix38

Create the Superadmin account by filling the fields at the bottom of the screen. Click Add Admin.

postfix39

The Superadmin account is then created.

postfix40

To access the Administration interface, type in your browser the address:

http://IP_address/postfixadmin

postfix41

The Postfix Admin main screen.

postfix42

 

Sending emails through a relay

If the corporate network has an antispam system to check inbound and outbound emails, Postfix needs to be configured in order to relay the emails to the antispam.

To allow the correct emails flow, set the relayhost field with the address of the antispam system.

# vi /etc/postfix/main.cf

relayhost= lx-antispam02.nolabnoparty.local

postfix43

The mail server is now up and running with the basic functions to properly manage email messages.

mail server 1

21 Comments

  1. Jose Aragonese 12/09/2013
  2. taoufik 11/10/2013
  3. passerby 22/10/2013
  4. Deepak 08/11/2013
  5. william munger 10/11/2013
  6. Javed Sheikh 24/12/2013
  7. Peter Kangunga 26/01/2014
    • Rhega 23/02/2014
      • soheil 09/03/2014
  8. Ramesh 02/05/2014
  9. ronane 17/05/2014
  10. poulim 01/07/2014
    • Paolo Valsecchi 02/07/2014
  11. vikash 08/07/2014
    • Paolo Valsecchi 08/07/2014
  12. River Woo 01/08/2014
  13. sanjay 16/08/2014
    • felix 07/11/2014
  14. oaram 23/08/2014
    • shiva 18/12/2014
  15. ricardo 13/01/2015