Sendmail is one of the oldest MTAs (Mail Transfer Agents).
Sendmail's function is to receive mail from user mail agents (MUA) and forward it to another mail transfer agent.
Sendmail can also accept incoming network connections and deliver mail to local user mailboxes or redirect it to another utility.
It is quite common to see the question on forums: "How to configure a mail server?". In this article, I describe the process of installing and configuring the Sendmail mail server.
It is assumed that:
- The IP address of the mail server is 192.168.0.10;
- The mail domain name is test.ru;
- The domain name of the mail server is mail.test.ru.
- Addresses from which mail can be sent through our server are 192.168.0.0/24.
The mail server must be configured to filter out as much unwanted mail (spam) as possible, as well as to check all incoming mail for the presence of viruses.
Installing the Sendmail mail server
Installing the sendmail SMTP server is a very simple task:
# yum install sendmail
Installing spam protection milter-greylist
Using greylisting allows blocking more than 95% of spam at the connection stage, which significantly reduces incoming traffic to your mail server.
Install the spam protection software milter-greylist.
Fedora users can install the milter-greylist package from official repositories:
# yum install milter-greylist
For users of RHEL and CentOS distributions, the milter-greylist package is available in the RPMforge repository.
For other distributions, take the SRPM package from http://download.fedora.redhat.com, copy it to the /usr/src/redhat/SOURCES/ directory, and rebuild it using the command:
# rpmbuild --rebuild milter-greylist-X.X.X.src.rpm
The built binary package will be located in the /usr/src/redhat/RPMS/i386/ directory and named milter-greylist-X.X.X.rpm.
Install it:
# rpm -Uhv milter-greylist-X.X.X.rpm
Installing Clamav antivirus
Let's install the best free antivirus available today, which is Clamav. You can install it using the command:
# yum install clamav*
Make changes to the startup scripts:
# chkconfig --add milter-greylist # chkconfig --add clamd # chkconfig --add clamav-milter # chkconfig --add sendmail
Configuring the Sendmail mail server
Configuring Sendmail
1. Modify the /etc/mail/access file:
localhost.localdomain RELAY localhost RELAY 127.0.0.1 RELAY 192.168.0.0/24 RELAY
2. In the /etc/mail/local-host-names file, specify:
mail.test.ru localhost
3. Add the following lines to the /etc/mail/sendmail.mc file:
define(`confMAX_RCPTS_PER_MESSAGE', `10')dnl # Кол-во получателей для каждого письма не более 10
define(`confMAX_MESSAGE_SIZE', `5242880')dnl # Максимальный размер письма 5 МБ
# Добавляем Clamav-milter
INPUT_MAIL_FILTER(`clmilter',`S=local:/var/run/clamav/clamav-milter.sock,F=, T=S:4m;R:4m')dnl
define(`confINPUT_MAIL_FILTERS', `clmilter')
FEATURE(`milter-greylist')dnl # Добавляем greylist-milter
define(`confSMTP_LOGIN_MSG', `$b')dnl # Убираем банер sendmail
dnl # Черные списки
FEATURE(`dnsbl', `bl.spamcop.net', `"Spam blocked see: ?"$&{client_addr}')dnl
FEATURE(`dnsbl', `xbl.spamhaus.org', `You are trying to send spam - see
FEATURE(`dnsbl', `sbl.spamhaus.org', `You are trying to send spam - see
FEATURE(`dnsbl', `cbl.abuseat.org', `Rejected - see
FEATURE(`dnsbl', `relays.ordb.org', `Rejected - see
FEATURE(`dnsbl', `list.dsbl.org', `Rejected - see
FEATURE(`dnsbl', `dnsbl.njabl.org',`Кejected - see )
Change the dnl MASQUERADE_AS(mydomain.com')dnl option to MASQUERADE_AS(test.ru')dnl.
Run the make command in the /etc/mail/ directory.
This completes the Sendmail configuration.
Configuring Clamav
Make the following changes to the /etc/clamd.conf file:
TCPSocket 3310 TCPAddr 127.0.0.1 ScanPE ScanOLE2 ScanMail ScanHTML ScanArchive ScanRAR ArchiveMaxFileSize 10M
Change permissions:
# chmod 666 /var/log/clamav/clamd.log
Start the Clamav services:
# service clamd start # service clamav-milter start
Configuring greylisting
Add the following to the /etc/mail/greylist.conf file:
acl whitelist addr 192.168.0.0/24.
In principle, this will be sufficient for operation.
I will provide a list of the most useful options in the greylist.conf file:
# Включите данную опцию для работы в режиме отладки
# Все опции объявленные перед "verbose" не будут обработаны в режиме отладки
# Данная опция может быть заменена аргументом "-v" в командной строке
# verbose
# Если вы работаете с несколькими записями MX опишите каждую из них записью
# peer для включения greylisting синхронизации между MX записями.
# peer 192.0.2.17
# peer 192.0.2.18
# Вы можете указать свой локальный адрес или порт для
# синхронизации данных между MX.
# Указав значение '*' в адресе вы даете возможность синхронизироваться любому адресу.
# syncaddr *
# syncaddr * port 7689
# syncaddr 192.0.2.2
# syncaddr 192.0.2.2 port 9785
# syncaddr 2001:db8::1:c3b5:123
# syncaddr 2001:db8::1:c3b5:123 port 1234
# Данная опция включает greylisting для вашего MTA (Mail Transfer Agent)
# Это очень плохая идея:данная опция никогда не должна быть включена.
acl whitelist addr 127.0.0.0/8
# Если вы используете IPv6, включите данный параметр
# acl whitelist addr ::1/128
# Если вы не желаете использовать greylisting для своих клиентов,
# вы можете указывать блоки IP-адресов для которых не будет
# выполняться фильтрация. Для примера если вы используете 192.0.2.0/16
acl whitelist addr 192.0.2.0/16
# Также имеется возможность внести в "белый" список компьютер, для
# которого не будет выполняться greylisting по его имени в DNS.
# acl whitelist domain example.net
# Вы можете указать фильтру greylisting отправителей для который не нужно
# выполнять фильтрацию. Это не очень хорошая идея, так как адрес
# отправителя достаточно легко подделать
# acl whitelist from friendly@example.com
# Некоторые из ваших пользователей не хотят чтобы их почта подвергалась обработке greylisting.
# Для них укажите опцию:
# acl whitelist rcpt John.Doe@example.net
# Также существует возможность с помощью регулярных выражений указать список
# получателей почты для которых не нужно выполнять greylisting.
# Регулярное выражение должно быть заключено в символы (/).
# acl whitelist rcpt /.*@example\.net/
# Данная опция говорит greylisting добавлять поля X-Greylist
# в заголовки писем. По умолчанию данная опция установлена в значение
# all - что указывает на необходимость добавлять подробную информацию в заголовки.
# Другие возможные значения параметра: none, delays и nodelays.
# report all
# Указывает greylisting с какой периодичностью делать запись dump файла
# (0 после каждого изменения -1 никогда)
# dumpfreq 10m
# Указывает период, в течении которого необходимо хранить информацию
# о процессе greylisting в базе.
# timeout 5d
# Не использовать макрос ${greylist} для базы access sendmail-а
# noaccessdb
# Указывает на необходимость использования расширенных регулярных выражений
# вместо базовых регулярных выражений
# extendedregex
# Как долго клиент должен ждать перед тем как получит возможность
# послать успешное сообщение. По умолчанию 1 час.
# Данная опция может быть заменена с помощью ключа командной строки "-w greylist_delay"
# greylist 1h
# Определяет интервал времени, на который необходимо заносить прошедших проверку в "белый" писок
# (установите в 0 для отключение автоматического занесения в
# "белый" список). По умолчанию интервал 3 дня.
# Данная опция может быть заменена с помощью ключа командной строки "-a autowhite_delay"
# autowhite 3d
# Задает сетевую маску для использования при проверке IPv4 адресов в greylisting.
# Данная опция может быть заменена с помощью ключа командной строки "-L cidrmask"
# subnetmatch /24
# Задает сетевую маску для использования при проверке IPv6 адресов в greylisting.
# Данная опция может быть заменена с помощью ключа командной строки "-M prefixlen"
# subnetmatch6 /64
# Клиенты успешно прошедшие SMTP AUTH не проверяются grelisting.
# Включите данную опцию для проверки greylisting этих клиентов.
# Данная опция может быть заменена с помощью ключа командной строки -A
# noauth
# Если вы собрали milter-greylist с поддержкой технологии
# SPF (Sender Policy Framework), тогда отправители
# поддерживающие технологию SPF не обрабатываются greylisting.
# Раскоментируйте данную строку для проверки SPF отправителей.
# Подробнее о SPF на сайте
# Данная опция может быть заменена с помощью ключа командной строки -S
# nospf
# Включите данную опцию если вы не хотите чтобы milter-greylist выполнялся как фоновый процесс
# Данная опция может быть заменена с помощью ключа командной строки -D
# nodetach
# Включите данный параметр если вы не хотите чтобы milter-greylist говорил клиентам
# на какой срок они попали в greylisting.
# Данная опция может быть заменена с помощью ключа командной строки -q
# quiet
# Определяет в каком файле milter-greylist будет хранить PID своего процесса
# Данная опция может быть заменена с помощью ключа командной строки -P pidfile
# pidfile "/var/run/milter-greylist.pid"
# Указывает имя сокета для коммуникации с sendmail.
# Данная опция может быть заменена с помощью ключа командной строки -p socket
# socket "/var/milter-greylist/milter-greylist.sock"
# Указывает расположение файла dump-а (базы greylisting).
# Данная опция может быть заменена с помощью ключа командной строки -d dumpfile
# dumpfile "/var/milter-greylist/greylist.db"
# Указывает имя пользователя под которым будет работать greylisting.
# Данная опция может быть заменена с помощью ключа командной строки -u username
# user "smmsp"
Start the milter-greylist service:
# service milter-greylist start
Start the sendmail service:
# service sendmail start
If you have a firewall configured, you need to add allow rules:
*filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT DROP [0:0] -A INPUT -i eth0 -d 192.168.0.10/32 -p tcp --dport 25 -j ACCEPT -A OUTPUT -o eth0 -s 192.168.0.10/32 -p tcp --sport 25 -j ACCEPT -A INPUT -i eth0 -d 192.168.0.10/32 -p tcp --sport 25 -j ACCEPT -A OUTPUT -o eth0 -s 192.168.0.10/32 -p tcp --dport 25 -j ACCEPT
This completes the mail server configuration!
Configuring the DNS server
For the server to work correctly, you also need to make changes to the DNS server. For example, the test.ru zone might look like this:
$TTL 86400
@ IN SOA ns.test.ru. admin.test.ru. (
2006092901 ; serial
7200 ; refresh
3600 ; retry
604800 ; expire
86400 ; default_ttl
)
IN NS ns.test.ru.
IN NS ns.test2.ru.
IN MX 10 mail.test.ru.
localhost IN A 127.0.0.1
mail IN A 192.168.0.10
You also need to make changes to the reverse zone:
$TTL 86400
@ IN SOA ns.test.ru. admin.test.ru. (
2006092901 ; serial
7200 ; refresh
3600 ; retry
604800 ; expire
86400 ; default_ttl
)
@ IN NS ns.test.ru.
@ IN NS ns.test2.ru.
10 IN PTR mail.test.ru.
Receiving Mail
To deliver mail, you only need to install and configure a POP3 or IMAP server, such as dovecot.
Conclusion
Thus, we have configured a fully functional Sendmail SMTP server with additional features for scanning all incoming mail for viruses and spam.
Author: Denis Frolov
