AllInfo
Main: Info Blog Temp Mail


unix 2011-05-29 12-57-52

Конфигурирование Postfix

Postfix - это современный, надёжный почтовый сервер, используемый многими серьёзными провайдерами. Поставляется во многих дистрибутивах Linux. Именно этот сервер и выберем для работы.
Конфигурирование Postfix.

Postfix - это современный, надёжный почтовый сервер, используемый многими серьёзными провайдерами. Поставляется во многих дистрибутивах Linux. Именно этот сервер и выберем для работы.

Кроме самого сервера, потребуются сопутствующие программы, которые должны быть в Вашем дистрибутиве. Кратко опишем их назначение.

При получении почты аутентификация используется давно, все распространённые почтовые клиенты поддерживают POP- аутентификацию. Попросту говоря для получения почты нужно ввести имя и пароль. До недавнего времени для передачи почты, аутентификации не требовалось. В настоящее время многие провайдеры вводят SMTP-аутентификацию на свои серверы (например: rambler.ru, mail.ru), это значит, что ваш почтовый клиент должен поддерживать процедуру SMTP-аутентификации, иначе он не сможет передать почту. Эти меры вызваны деятельностью спамеров.

Сервер домена rambler.ru требует SMTP-аутентификацию, поэтому локальный сервер при ретрансляции на rambler.ru должен пройти SMTP-аутентификацию как клиент. Postfix использует библиотеку Cyrus SASL для SMTP-аутентификации. В ASPLinux это три rpm-пакета: cyrus-sasl-1.5.24-25, cyrus-sasl-md5-1.5.24-25, cyrus-sasl-plain-1.5.24-25. Программа сервера Postfix входящая во многие дистрибутивы скомпиллирована с поддержкой библиотеки SASL.

Какие функции должен выполнять наш почтовый сервер для передачи почты в глобальную сеть?

1. Всю почту предназначенную не для локальной сети, передавать на внешний почтовый шлюз smtp.rambler.ru.

2. При передаче сообщений на smtp.rambler.ru, пройти процедуру аутентификации, а значит должен быть настроен как клиент SMTP-аутентификации.

3.При передаче сообщений, переписывать заголовки исходящих сообщений и конверт. Если даже аутентификация прошла успешно, сервер smtp.rambler.ru не примет сообщение от неизвестной машины gt.localdomain и незнакомого пользователя. Адресат, получив сообщение, по заголовку сможет определить обратный адрес отправителя. Многое зависит от настроек сервера провайдера, насколько строгие правила передачи почты он установил. Входящее сообщение может анализироваться и в случае несоответствия отвергаться.

4.Не пытаться пересылать сообщения немедленно, а ставить в очередь.

5.Не обращаться лишний раз к DNS .

Чтобы заставить так работать Postfix, необходимо изменить главный файл настроек /etc/postfix/main.cf.

Начнём с общих настроек, добьёмся, чтобы наш сервер принимал и передавал сообщения в локальной сети.

#INTERNET HOST AND DOMAIN NAMES

myhostname = gt.localdomain

Думаю, тут пояснения не требуются.

# RECEIVING MAIL

inet_interfaces = all

С каких интерфейсов принимается почта, возможны не принципальные варианты.

mydestination = $myhostname, localhost.$mydomain

Здесь указываются домены, для которых будет приниматься входящая почта.

# TRUST AND RELAY CONTROL

mynetworks = 192.168.1.0/24 , 127.0.0.0/8

Перечисляете локальные сети, из которых принимается и ретранслируется почта. Подставляете адрес своей локальной сети.

# ALIAS DATABASE

alias_maps = hash:/etc/postfix/aliases

Расположение файла псевдонимов. Этот файл позволяет перенаправлять почту в различные ящики. С его помощью можно создавать списки рассылки. Если хотите чтобы почта root перенаправлялась на обычную учётную запись, измените этот файл :

# CHANGE THIS LINE to an account of a HUMAN

root : alex

Так можно перенаправить почту root на имя alex .

Теперь Postfix готов для приёма и передачи сообщений внутри локальной сети. Проверить доступность сервера с клиентской машины, можно обычным клиентом telnet для Windows. Команда:

telnet gt.localdomain 25

Но предварительно отключите демона pppd, если он запущен. Зачем это нужно, я объясню позже. На экране должно появиться что-то вроде:

220 gt.localdomain ESMTP Postfix

Теперь настройте программу почтового клиента. Создайте две учётные записи: drt@gt.localdomain и bgl@gt.localdomain. Для передачи и приёма почты по POP и SMTP протоколам укажите сервер gt.localdomain. Передайте тестовое сообщение с одной записи на другую. Решить возникшие проблемы поможет анализ файла журнала /var/log/maillog. Можете предварительно очистить журнал:

cat /dev/null > /var/log/maillog

а затем переслать сообщение.

Займёмся настройкой для передачи сообщений во внешнюю сеть. Пересылка всей почты наружу, на smtp.rambler.ru:

# INTERNET OR INTRANET

relayhost = smtp.rambler.ru

Локальный сервер как клиент SMTP-аутентификации:

smtp_sasl_auth_enable = yes

smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

Добавьте эти строки в конце /etc/postfix/main.cf. Не путайте директиву smtp_sasl_auth_enabled , с директивой smtpd_sasl_auth_enabled . Вторая директива разрешает аутентификацию Postfix , когда он принимает почту, а не передаёт.

Создайте текстовый файл /etc/postfix/sasl_passwd:

rambler.ru dir:pAsswordDir

Содержит сведения о домене, имени пользователя на почтовом сервере домена и пароль пользователя в открытом виде через двоеточие. Строка не должна начинаться с пробела. Сервер берёт данные не из текстового файла, а из индексированной базы. Эту базу создайте командой:

postmap /etc/postfix/sasl_passwd

Для переписывания заголовков, в секции #ADDRESS REWRITING вставьте:

sender_canonical_maps = hash:/etc/postfix/sender_canonical

Создадим текстовый файл, по содержимому которого у некоторых исходящих сообщений будут переписываться заголовки отправителей. Файл /etc/postfix/sender_canonical:

bgl@gt.localdomain buh@rambler.ru

drt@gt.localdomain dir@rambler.ru

Создадим индексированный файл:

postmap /etc/postfix/sender_canonical

В версии 2.0 , добавлена дополнительная функция, отклонение почты для неизвестных локальных пользователей, в небольшой сети использовать её нецелесообразно, можно отключить, задав строку с пустым параметром:

# REJECTING MAIL FOR UNKNOWN LOCAL USERS

local_recipient_maps =

Заставим сервер ставить в очередь сообщения для внешней сети.

Добавим строку в конец основного файла настроек:

defer_transports = smtp

Запретим ненужные обращения к службе имён. Добавим строку в конец файла настроек:

disable_dns_lookups = yes

Но это ещё не всё. Со службой имён придётся повозиться. Многие сетевые программы делают попытки разрешения имён компьютеров, которые к ним обращаются, даже если их об этом не просят. Сервер telnet при попытке подключиться к нему, начнёт обращаться к службе разрешения имён. Если запущен демон pppd и указан маршрут во внешнюю сеть, а он должен быть указан, если всё правильно настроено, то начнётся дозвон к провайдеру и соединение с сервером DNS. После ожидания ответа на запрос, сервер telnet всё же выдаст приглашение на вход, хотя и со значительной задержкой. Но ненужный звонок будет совершён. Даже если вы пропишете IP адрес клиента локальной сети в /etc/hosts и правильно зададите последовательность поиска в /etc/host.conf /etc/nsswitch.conf , сервер упорно лезет в ИНТЕРНЕТ. Наверно радикальным средством была бы перекомпилляция. Поэтому для удалённого управления компьютером, лучше использовать службу ssh . При подключении клиента, сервер не пытается разрешить имя и напрасных звонков не делает. Есть хороший клиент для Windows - PuTTY . Отлично поддерживает Linux .

Аналогично себя вёл и Postfix. Ему необходимо определить IP адрес шлюза smtp.rambler.ru. Мы сами с помощью утилиты nslookup определим его и занесём в /etc/hosts. Этот адрес может меняться, поэтому было бы разумно по чаще его обновлять, либо использовать кэширующий сервер DNS. Но сервер всё же продолжает делать попытки обращаться к службе DNS ИНТЕРНЕТА, при соединении с 25-м портом сервера. Он пытается определить имя клиентской машины локальной сети, чтобы занести в файл журнала.

Каждый почтовый сервер в процессе работы читает и записывает файлы на диск компьютера. Получив контроль над таким сервером, взломщик может изменить конфигурацию программ, обеспечивая себе базу для дальнейшего проникновения в систему. Уменьшить возможности злоумышленника можно, ограничив сферу действия сервера подмножеством файловой системы компьютера. Это подмножество файловой системы называется поддеревом chroot. Если сервер выполняется в пределах такого поддерева, то важные системные файлы будут не доступны для взломщика, даже если он сможет использовать сервер в своих целях.

Этот приём используется в сервере Postfix. Его поддерево /var/spool/postfix. Там находятся копии важных системных файлов: localtime, services, resolv.conf. Файл resolv.conf копируется скриптом инициализации при запуске. Чтобы Postfix заработал как надо, необходимо скопировать в эту же директорию файлы /etc/hosts, /etc/nsswitch.conf и /etc/host.conf. В nsswitch.conf и host.conf задаётся соответствующий порядок разрешения имён. В файл hosts заносятся адреса и имена всех компьютеров локальной сети, с которых может передаваться почта. Теперь при попытках соединения с 25-м портом сервера, обращения к DNS ИНТЕРНЕТА не происходит, даже если запущен демон pppd.

Проверим работу. Создадим тестовое сообщение и передадим его с учётной записи bgl@gt.localdomain на dir@rambler.ru. Сервер должен принять сообщение и поставить в очередь. Обращения в ИНТЕРНЕТ не должно происходить при запущенном pppd. Содержимое очереди можно проверить командой:

mailq

Удаляется сообщение:

postsuper -d номер_сообщения

Номер сообщения определяется командой mailq. В дальнейшем, в планировщике поставим задание на периодическую передачу всех сообщений из очереди в ИНТЕРНЕТ.

Конфигурирование fetchmail.

При организации работы локального сервера мы должны не только отправлять, но и принимать почту из ИНТЕРНЕТА. Конфигурирование и отладка fetchmail много проще Postfix. Создайте файл /etc/fetchmailrc , с правами на чтение и запись только пользователя root. Вот его текст:

set postmaster "root"

set logfile "/var/log/fetchmail.log"

poll pop3.rambler.ru proto pop3 user buh pass buhgalter , is bgl here smtphost gt.localdomain

poll pop3.rambler.ru proto pop3 user dir pass pAsswordDir , is drt here smtphost gt.localdomain

Параметр set postmaster указывает программе sendmail, чтобы все нераспознанные сообщения направлялись пользователю root. Вторая строка указывает расположение журнального файла, на первых порах он может быть важен для диагностики проблем.

Важно понимать, что fetchmail опрашивает POP - сервер провайдера, извлекает почту, устанавливает соединение с локальным сервером Postfix по протоколу SMTP и загружает в него почту. Поэтому для нормальной работы fetchmail, Postfix должен тоже работать. Необходимо знать имя POP сервера своего провайдера. В третьей строке даётся команда опросить сервер pop3.rambler.ru, используя протокол pop3, почтовый ящик пользователя dir с паролем director и загрузить на машину gt.localdomain в ящик пользователя drt. Если у пользователя несколько внешних почтовых ящиков, то можно забирать с них почту и загружать в единственный, локальный почтовый ящик.

Комплексная настройка почтовых служб.

Опишем органиацию работы почтового шлюза, без доступа к WWW. Такое решение делает доставку службы более надёжной.

Как уже ранее замечалось, почтовый сервер ставит в очередь сообщения для внешней сети. Необходимо периодически передавать накопленную почту в интернет и загружать входящую почту. Ранее описывалась настройка соединения по запросу. Если работа с WWW не нужна, то для почтовой службы целесообразней использовать обычное подключение. Как только запускается служба pppd , происходит дозвон и соединение. Затем загружаются почтовые сообщения на локальный сервер из серверов интернета и пересылаются накопленные в очереди локального сервера. Когда эти операции закончатся, соединение разрывается. Содержимое файла /etc/ppp/options для этого случая:

connect /etc/ppp/redialer

lock

defaultroute

/dev/modem

idle 180

crtscts

debug

name "yourname"

Для решения этой задачи нужно создать скрипт /etc/ppp/ip-up.local и задать право на выполнение. Он автоматически запускается при установке соединения по IP протоколу. Точнее, запускается скрипт /etc/ppp/ip-up , а уже из него вызывается ip-up.local . Вставим в него команды для обмена накопившейся почтой и разрыва соединения. Ниже приведён полный текст:

#!/bin/bash

# echo "запускаю доставку почты из сервера провайдера"

/usr/bin/fetchmail -t 20 -a -v -f /etc/fetchmailrc

# очищать очередь пока не опустеет

while mailq | grep -v 'Mail queue is empty$' > /dev/null 2>&1

do

/usr/sbin/sendmail -q

sleep 5

done

# echo "закончил доставку, разрываю соединение"

/usr/bin/killall pppd > /dev/null 2>&1

exit 0

Команда /usr/bin/fetchmail -t 20 -a -v -f /etc/fetchmailrc запукает доставку входящей почты. Условием выхода из цикла является сообщение команды mailq . Для правильной работы, точно задайте строку, с единственным пробелом между словами. С интервалом в 5 секунд передаётся накопленная почта в очереди. Соединение по запросу больше подходит для работы по HTTP и FTP протоколам, интерактивно открывается соединение и автоматически закрывается.

Пошлите тестовое сообщение с учётной записи bgl@gt.localdomain на dir@rambler.ru. Посмотрите состояние очереди с сообщениями. Удалите символы комментариев со строк с командами echo в тексте скрипта, для наблюдения хода выполнения. Запустите pppd и посмотрите состояние очереди. Почтовые сообщения иногда задерживаются на серверах провайдеров при сбоях и перегрузке. Подождав некоторое время, опять запустим команду pppd, чтобы получить посланное ранее сообщение. Почтовым клиентом получим наше тестовое сообщение с локального сервера с учётной записи drt@gt.localdomain.

Чтобы получать и передавать почту каждые полчаса с 8 утра до 18 вечера, добавим в файл /etc/crontab строку:

0,30 8-18 * * * root /usr/sbin/pppd

Планировщик cron должен быть запущен.

автор Иван Иванов
www.linux.ru/articles/server2/

13.58.77.98 / 2024-04-28_13-53-18 UTC.