Category: MTA

Setting up Sendmail on CentOS/RHEL 6.3

This article will guide you through the installation and configuration steps for Sendmail on CentOS/RHEL 6.3

1) About

The Sendmail program is a very widely used Mail Transport Agent (MTA). MTAs send mail from one machine to another. Sendmail is not a client program, which you use to read your email. Sendmail is a behind-the-scenes program which actually moves your email over networks or the Internet to where you want it to go.

How Sendmail Works

Incoming Mail
Usually each user in your home has a regular Linux account on your mail server. Mail sent to each of these users (username@xyz.com) eventually arrives at your mail server and sendmail then processes it and deposits it in the mailbox file of the user’s Linux account. Mail isn’t actually sent directly to the user’s PC. Users retrieve their mail from the mail server using client software, such as Microsoft’s Outlook or Outlook Express, that supports either the POP or IMAP mail retrieval protocols.
Linux users logged into the mail server can read their mail directly using a text-based client, such as mail, or a GUI client, such as Evolution. Linux workstation users can use the same programs to access their mail remotely.

Outgoing Mail
The process is different when sending mail via the mail server. PC and Linux workstation users configure their e-mail software to make the mail server their outbound SMTP mail server.
If the mail is destined for a local user in the “xyz.com” domain, then sendmail places the message in that person’s mailbox so that they can retrieve it using one of the methods above.
If the mail is being sent to another domain, sendmail first uses DNS to get the MX record for the other domain. It then attempts to relay the mail to the appropriate destination mail server using the Simple Mail Transport Protocol (SMTP). One of the main advantages of mail relaying is that when a PC user A sends mail to user B on the Internet, the PC of user A can delegate the SMTP processing to the mail server.

2) Prerequisite
Most important tasks in setting up DNS for your domain (xyz.com) is to use the MX record in the configuration zone file to state the hostname of the server that will handle the mail for the domain.
Install the following dependent package:

   # yum install m4 telnet mailx

3) Installation
3.1) Check if sendmail is installed or not:

   # rpm –qa | grep sendmail 


3.2) If it is not installed, then install the sendmail package using following command:

   # yum install sendmail sendmail-cf


4) Configuration
4.1) By default sendmail configuration files are located at /etc/mail.
4.2) By default sendmail listen on local interface i.e 127.0.0.1, check using this command:

   # ps -ef | grep -v grep | grep -i sendmail
   root      3595     1  0 00:20 ?        00:00:00 sendmail: accepting connections
   smmsp     3604     1  0 00:20 ?        00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue

   # netstat -an | grep :25 | grep tcp
   tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN


4.3) To configure the sendmail to listen to all interface at the host, just comment the following line in “sendmail.mc”:

   # vi /etc/mail/sendmail.mc

     From:
     DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

     To
     dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl


4.4) Now we need to build the “sendmail.cf” file using m4 macro:

   # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf


4.5) Restart Sendmail Service:

   # service sendmail restart


4.6) Check using this command:

   # netstat -an | grep :25 | grep tcp
   tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN


4.7) Adding your domain entry in “/etc/mail/local-host-names” file:
Add all domains for which you will accept mail; there should be one domain per line.
For example, if this mail server was to accept mail for the domains “xyz.com”,”xyz.co.in”

   # vi /etc/mail/local-host-names
     xyz.com
     xyz.co.in


4.8) Restart the service of sendmail and make a entry for it to start at boot time:

   # service sendmail restart
   # chkconfig sendmail on

5) Validation and Testing
5.1) Create two test user for testing purpose (that will send and receive mail):

   # useradd testuser1
   # useradd testuser2


5.2) Login as one of the user (say testuser1) and try to send mail using mail command:

   $ mail -s "Test mail from testuser1" testuser2
   Hello this is the test mail
   .
   EOT

5.3) Now we need to check the Maillog “/var/log/maillog” in case of any issue

   # tail /var/log/maillog
   Aug 19 01:07:58 server001 sendmail[4019]: r7IJalr6004019: from=testuser1@xyz.com, size=37, class=0, nrcpts=1, msgid=, proto=SMTP, daemon=MTA,   relay=localhost [127.0.0.1]
   Aug 19 01:07:58 server001 sendmail[4022]: r7IJalr6004019: to=testuser2@xyz.com, ctladdr=testuser1@xyz.com (502/503), delay=00:00:39, xdelay=00:00:00, mailer=local, pri=30438, dsn=2.0.0, stat=Sent

5.4) Once mail has been delivered successfully now we need to check if mail is delivered to user (testuser2) mailbox or not
We would see something like the following output:

   $ mail
   N  1 testuser1@xyz.com       Mon Aug 19 01:07  13/503   "Sendmail Test"

6) Firewall Rule:

6.1) Firewall port that needs to be open for sendmail daemon machine:

   # iptables -A INPUT -p tcp -m tcp –dport 25 -j ACCEPT

6.2) Save the Iptables rules and restart it.

   service iptables save
   service iptables restart


Congratulation you have successfully setup MTA service using Sendmail, now is the time to configure Dovecot service to fetch mail using your favourite MUA (Mail User Agent) like MS Outlook, Thunderbird etc.


Related Posts:
Setting up Dovecot on CentOS/RHEL 6.3