Crmgo Blog

SENDMAIL

SENDMAIL

Sendmail to jeden z najstarszych MTA (agentsów przesyłania poczty). Zadaniem Sendmaila jest odbieranie poczty od agentów pocztowych użytkowników (MUA) i przesyłanie jej do innego agenta przesyłania poczty. Sendmail może również przyjmować połączenia przychodzące z sieci i…

SENDMAIL

Sendmail - jeden z najstarszych MTA (agentów przesyłania poczty).

Zadaniem Sendmaila jest odbieranie poczty od agentów pocztowych użytkowników (MUA) i przesyłanie jej do innego agenta przesyłania poczty.

Sendmail może również przyjmować połączenia przychodzące z sieci i dostarczać pocztę do lokalnych skrzynek pocztowych użytkowników lub przekierowywać ją do innego narzędzia.

Często na forach pojawia się pytanie: „Jak skonfigurować serwer pocztowy?”. W tym artykule opisuję proces instalacji i konfiguracji serwera pocztowego Sendmail.

Zakłada się, że:

  • Adres IP serwera pocztowego to 192.168.0.10;
  • Nazwa domeny pocztowej to test.ru;
  • Nazwa domenowa serwera pocztowego to mail.test.ru.
  • Adresy, z których można wysyłać pocztę przez nasz serwer, to 192.168.0.0/24.

Należy skonfigurować serwer pocztowy tak, aby filtrować jak najwięcej niechcianej poczty (spam) oraz przeprowadzać sprawdzanie całej przychodzącej poczty pod kątem obecności wirusów.

Instalacja serwera pocztowego Sendmail

Instalacja serwera SMTP sendmail jest bardzo prostym zadaniem:

# yum install sendmail

Instalacja ochrony przed spamem milter-greylist

Użycie sarej listy pozwala blokować ponad 95% spamu na etapie połączenia, co w znacznym stopniu zmniejsza ruch przychodzący na Twój serwer pocztowy.

Zainstaluj oprogramowanie do ochrony przed spamem milter-greylist.

Użytkownicy Fedory mogą zainstalować pakiet milter-greylist z oficjalnych repozytoriów:

# yum install milter-greylist

Dla użytkowników dystrybucji RHEL i CentOS pakiet milter-greylist jest dostępny w repozytorium RPMforge.

Dla innych dystrybucji pobieramy pakiet SRPM z http://download.fedora.redhat.com, kopiujemy go do katalogu /usr/src/redhat/SOURCES/ i ponownie kompilujemy poleceniem:

# rpmbuild --rebuild milter-greylist-X.X.X.src.rpm

Zkompilowany pakiet binarny będzie znajdował się w katalogu /usr/src/redhat/RPMS/i386/ i nazywać się milter-greylist-X.X.X.rpm.

Instalujemy go:

# rpm -Uhv milter-greylist-X.X.X.rpm

Instalacja antywirusa Clamav

Zainstalujmy najlepszy obecnie darmowy antywirus, którym jest Clamav. Można go zainstalować za pomocą polecenia:

# yum install clamav*

Wprowadź zmiany w skryptach startowych:

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

Konfiguracja serwera pocztowego Sendmail

Konfiguracja Sendmail

1. Zmień plik /etc/mail/access:

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

2. W pliku /etc/mail/local-host-names określ:

mail.test.ru
localhost

3. Do pliku /etc/mail/sendmail.mc dodaj wiersze:

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 )

Zmień opcję dnl MASQUERADE_AS(mydomain.com')dnl na MASQUERADE_AS(test.ru')dnl.

Wpisz polecenie make w katalogu /etc/mail/.

To koniec konfiguracji Sendmaila.

Konfiguracja Clamav

W pliku /etc/clamd.conf wprowadź następujące zmiany:

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

Zmień uprawnienia dostępu:

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

Uruchom usługi Clamav:

# service clamd start
# service clamav-milter start

Konfiguracja szarej listy

W pliku /etc/mail/greylist.conf dodaj:

acl whitelist addr 192.168.0.0/24.

W zasadzie to wystarczy do działania.

Poniżej znajduje się lista najbardziej przydatnych opcji w pliku 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"

Uruchom usługę milter-greylist:

# service milter-greylist start

Uruchom usługę sendmail:

# service sendmail start

Jeśli masz skonfigurowaną zaporę sieciową, musisz dodać zezwalające reguły:

*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

To koniec konfiguracji serwera pocztowego!

Konfiguracja serwera DNS

Aby serwer działał poprawnie, musisz również wprowadzić zmiany w serwerze DNS. Na przykład strefa test.ru może wyglądać tak:

$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

Należy również wprowadzić zmiany w strefie odwrotnej:

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

Odbieranie poczty

Aby dostarczać pocztę, pozostaje Ci zainstalować i skonfigurować serwer POP3 lub IMAP, na przykład dovecot.

Podsumowanie

W ten sposób skonfigurowaliśmy w pełni funkcjonalny serwer pocztowy SMTP Sendmail z dodatkowymi funkcjami sprawdzania całej przychodzącej poczty pod kątem wirusów i spamu.

Autor: Denis Frołow

Uwaga: wpis mógł powstać z pomocą AI i redakcji. Odpowiedzialny: Dmytro Lomaka, Kaltenkirchen.