Setup Basic POP3/IMAP Mail Server in Centos/RHEL

Setup Basic POP3/IMAP Mail Server in Centos/RHEL

Setting up a mail server can be quite intimidating if you are linux beginner. I am posting here my simple and most basic mail server experiment which i conducted with my VPS server so that my documentation could be helpful for those who want to setup a pop3 or imap mail server..

What you Need

- Linux Server with Centos 4/5 (VPS or Dedicated)
- Apache 2 with PHP4 or later
- Postfix (SMTP server or MTA)
- Dovecot ( IMAP/POP3 server)
- Squirrelmail (A free Webmail)

We will be setting up the email server for local users where they can use webmail or outlook express to access their email. We will be setting up a simple and most basic mail server for local users.

What you should know?

Before we proceed to setup a mail server, the following 3 are most important for delivering email to destination. If you dont then most of the email origination from your server will land up on spam folders in major free email providers like hotmail or aol etc..

1. DNS Entry for your mail server with MX record
2. Setup an SPF record (see openspf.org )
3. Setup Domain Name Keys
4 . Reverse IP for your Mail Server

The most important of it setting up reverse IP for your mail server. You have to ask your hosting provider to setup a reverse IP for your mail server. Most email providers will lookup reverse dns for the emails originating from your server to distinguish from spam.

Install Postfix (SMTP Server/MTA)

Postfix is fast and popular SMTP server and widely used. Its main job is to relay mail locally or to intended destination outside the network. Some of the most popular SMTP servers are sendmail, postfix and qmail.

By default sendmail comes pre-installed with centos. We will need need to remove it and install postfix.

Code:Select all
yum remove sendmail

yum install postfix


The configuration file is located at /etc/postfix/main.cf. Edit the file and make sure you change the following lines with your domain name.

Code:Select all
myhost= mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, $mydomain



You have to be careful about $mydestination is because it restrictions receiving emails by the server pertaining to domains.

NOTE: Make sure you uncomment inet_interfaces = localhost if you are enabling all option. I often made that dreadful mistake leaving both uncommented!

Setting up SASL + TLS

We have to also setup SASL with our postfix to authenticate our users who want to send email outside of the permitted network. We dont want our mail server to be open relay and thereby restricting sending mail only to the local users. Without SASL authentication postfix will give relay access denied error if you attempt to send mail outside of the network.

Code:Select all
yum install cyrus-sasl



To enable SASL authentication open /etc/postfix/main.cf and add the following lines

Code:Select all
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth



Install Dovecot (POP3/IMAP Server)

Dovecot is a very popular POP3/IMAP server. The main difference between POP3 and IMAP is while accessing the your email with outlook if you use POP3 the mail is downloaded to your computer and deleted from the server. With IMAP the mail is retained in the server. IF any problem occurs while downloading the emails are lost with POP3. The configuration file is located at /etc/dovecot.conf

Code:Select all
yum install dovecot



Open the dovecot config file /etc/dovecot.conf and make the following changes. You may need to comment or uncomment certain lines

Code:Select all
protocols = imap imaps pop3 pop3s



Look for the line auth default and make these changes. Be careful with the lines as they are heavily commented out.

Code:Select all
auth default {
mechanisms = plain login
passdb pam {
}
userdb passwd {
}
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}


Install Squirrelmail

Squirrelmail is a free webbased email can be very handy for your users to login while they are mobile.

Code:Select all
yum install squirrelmail



To setup the squirrelmail under apache, open /etc/httpd/conf/httpd.conf and insert the following lines

Code:Select all
Alias /squirrelmail /usr/local/squirrelmail/www
<Directory /usr/local/squirrelmail/www>
Options Indexes
AllowOverride none
DirectoryIndex index.php
Order allow,deny
allow from all
</Directory>



The squirrelmail configuration utility is located in /usr/share/squirrelmail/config/conf.pl

Run the configuration utility and set the server settings to SMTP and change your domain name to example.com

Code:Select all
/usr/share/squirrelmail/config/conf.pl



Before you access squirrelmail or mail restart all the services

Code:Select all
/etc/init.d/postfix start
/etc/init.d/dovecot start
/etc/init.d/saslauthd start
service httpd restart



To access squirrelmail point your browser to http://www.domain.com/webmail and the squirrelmail test page is located athttp://domain.com/webmail/src/configtest.php

Before we login to squirrelmail, you will need to create users.

Create Local Users

Just create a localuser with adduser

Code:Select all
adduser john



and update the password of john using

Code:Select all
passwd john



Open squirrelmail and enter the username as john and the password

Using Outlook Express

To use outlook express create a mail account and try connecting to the server.

Email: john@domain.com
Incoming POP3 settings: mail.domain.com
Outgoing POP3 settings: mail.domain.com
UserName: john
Password: xxxx


NOTE: Before sending any outgoing email with outlook, make sure you tick the My server requires authentication under server settings.

FAQs

I am getting DNS error from my mail server? what entries should be made in DNS zone file?

If you are using mail.domain.com then mail should have a CNAME record in your dns zone file along with the MX record for the domain.

Code:Select all
domain.com. IN MX 1 domain.com.
mail IN CNAME domain.com.



How do i test whether mail server is working or not?

The simplest way to check for your mail server working is enter your domain in pingability.com or dnsstuff.com and check for the errors. You may also want to find if it is not open relay. Check your log file /var/log/maillog for any errors as well.

Another way to test your mail server is using telnet. You will get output like the one below.

Code:Select all
> telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.simplegerman.com ESMTP Postfix
ehlo simplegerman.com
250-mail.simplegerman.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
  • 45 Users Found This Useful
Was this answer helpful?

Related Articles

Increase PHP file Upload size in windows server 2008

The php.ini file is the default configuration file for running applications that require PHP. It...

How Do I access RDP

Remote Desktop Protocol (RDP) is a proprietary protocol developed by Microsoft, which provides a...

Update Time-Zone on OpenVZ VPS

OpenVZ will reflect the host server’s time by default, You can configure your VPS with custom...

Enable TUN/TAP in Solus VM

 TAP (as in network tap) simulates a link layer device and it operates with layer 2 packets such...

Change default RDP port in windows server 2012 R2

By default Windows machines are remotely accessible via Remote Desktop on TCP port 3389. In...