Введение

Довольно часто на форумах задается вопрос: "Как настроить почтовый сервер?". В данной статье я попытаюсь ответить на него в нескольких словах.

В данном документе предполагается, что ip адрес почтового сервера 192.168.0.10.

Почтовый домен имеет имя test.ru. Имя почтового сервера mail.test.ru

Адреса с которых можно отправлять почту через наш сервер 192.168.0.0/24.

Необходимо настроить почтовый сервер таким образом чтобы отсеивалось как можно больше нежелательной почты(спам) а также осуществлялась проверка всей входящей почты на предмет наличия в ней вирусов.

1. Установка

Устанавливаем нашу защиту от спама (Домашняя страница проекта http://hcpnet.free.fr/milter-greylist/).

Использование метода greylisting позволяет блокировать более 95% спама на этапе соединения, что позволяет в значительной степени уменьшить входящий Internet трафик на ваш почтовый сервер.

Для Fedora берем бинарный пакет здесь http://download.fedora.redhat.com/pub/fedora/linux/extras/5/RPMS пакет называется milter-greylist.

Для других систем берем SRPM пакет http://download.fedora.redhat.com/pub/fedora/linux/extras/5/SRPM скопируем его в каталог /usr/src/redhat/SOURCES/ и пересобираем его rpmbuild --rebuild milter-greylist-X.X.X.src.rpm собраный бинарный пакет будет находиться в каталоге /usr/src/redhat/RPMS/i386/ и называться milter-greylist-X.X.X.rpm.

Устанавливаем его

 rpm -ihv milter-greylist-X.X.X.rpm

Устанавливаем лучший бесплатный антивирус на сегодняшний день Clamav (Домашняя страница проекта www.clamav.net). Бинарные пакеты для ASPLinux можно взять на ftp сервере компании ASP по адресу ftp.asplinux.ru.

Для других систем с того же сервера возьмем SRPM пакет. В данный пакет включен патч который позволяет производить проверку rar архивов 3-ей версии и набирающих популярность архивов 7zip. Скопируем пакет в каталог /usr/src/redhat/SOURCES/. Пересобирем его rpmbuild --rebuild clamav-X.X.Xasp.src.rpm после сборки в каталоге /usr/src/redhat/RPMS/i386/ будут находиться файлы clamav-X.X.X.i386.rpm, clamav-devel-X.X.X.i386.rpm, clamav-milter-X.X.X.i386.rpm.

Установите их командой

 rpm -ihv clamav*

Внесите изменения в сценарии запуска. Выполните команды:

 chkconfig --add milter-greylist
 chkconfig --add clamd
 chkconfig --add clamav-milter
 chkconfig --add sendmail

2. Настройка

1. Sendmail В файле /etc/mail/access ставим

 localhost.localdomain           RELAY
 localhost                       RELAY
 127.0.0.1                       RELAY
 192.168.0.0/24                     RELAY

В файле /etc/mail/local-host-names ставим

 mail.test.ru
 localhost

В файле /etc/mail/sendmail.mc добавляем строки

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 )

Измените опцию dnl MASQUERADE_AS(mydomain.com')dnl на  MASQUERADE_AS(test.ru')dnl

Наберите команду make в каталоге /etc/mail. На этом настройка Sendmail закончена.

2. Настройка Clamav. В файл /etc/clamd.conf внесите следующие изменения:

 TCPSocket 3310
 TCPAddr 127.0.0.1
 ScanPE
 ScanOLE2
 ScanMail
 ScanHTML
 ScanArchive
 ScanRAR
 ArchiveMaxFileSize 10M

Выполните команду

 chmod 666 /var/log/clamav/clamd.log

Затем выполните команды

 service clamd start
 service clamav-milter start

3. Настройка Greylisting Правим /etc/mail/greylist.conf Добавляем

 acl whitelist addr 192.168.0.0/24.

В принципе этого будет достаточно для работы.

Я приведу список наиболее полезных опций в файле greylist.conf

 # Включите данную опцию для работы в режиме отладки
 # Все опции объявленные перед "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"

Запускаем командой

 service milter-greylist start

После 3 шага необходимо запустить sendmail.

Делается это так

 service sendmail start.

Если у вас настроен Firewall, то вам необходимо добавить разрешающие правила.

         *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

ВСЕ. На этом настройка почтового сервера закончена.

Для корректной работы сервера вам также необходимо внести изменения в DNS сервер. Например зона test.ru может выглядеть так:

          $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

Также необходимо внести изменения в обратную зону

          $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.

Может распространяться свободно при указании авторства.

Автор: Фролов Денис.

Articles/DenisFrolov/SendmailConfiguration (last edited 2008-05-18 11:12:51 by NikolayUlyanitsky)