Журнал LinuxFormat - перейти на главную

LXF115:Apache

Материал из Linuxformat
Перейти к: навигация, поиск
Сеть Свяжем Linux-машины и заставим их обслуживать нас


Содержание

E-mail: Получи, отсортируй и обслужи

Месяц назад мы настроили работающий web-сервер, а сейчас займемся самым важным применением сети – электронной почтой. Быть может, личный почтовый сервер – это роскошь, но он дает ряд важных преимуществ:

  • Прежде всего, доступ к почте более чем из одной точки (например, с обычного ПК и с ноутбука, или с рабочего и домашнего компьютеров) с полной синхронизацией сообщений.
  • Сбор почты с разных учетных записей (вашего провайдера, Google Mail и т.д.) в один ящик.
  • Централизованную загрузку почты для всех членов семьи и ее сортировку по разным почтовым ящикам.
  • Повышение скорости загрузки почты, так как медленная часть работы по получению информации от провайдера выполняется в фоновом режиме.
  • Последнее по порядку, но отнюдь не по важности – запуск программных фильтров спама и вирусов, чтобы отсеять мусор от нужных писем ещё до обращения к почтовой программе.

Управление почтой включает несколько аспектов: получение сообщений извне, их доставку в локальные почтовые ящики, передачу почты из локальных почтовых ящиков клиентам, предоставление доступа к этим письмам через web-интерфейс, а также получение и отправку исходящих писем от клиентов. Есть два способа получения почты: запуск полноценного почтового сервера типа Postfix с настройкой MX-записи на ваш IP-адрес, либо скачивание из внешнего почтового ящика с помощью Fetchmail.

Полный MTA (Mail Transport Agent – агент передачи почты) мы рассмотрим далее в этой серии статей. В идеале он требует интернет-соединения со статическим IP-адресом. Как известно, одно углубленное обсуждение MTA может разрастись до нескольких страниц – поэтому мы ограничимся тем, что нужно для наших уроков.

Получаем почту

Fetchmail соединяется с одним или несколькими почтовыми ящиками, загружает из них почту и доставляет ее в локальные почтовые ящики. Сперва откройте менеджер пакетов и удостоверьтесь, что Fetchmail и Procmail установлены в вашей системе. Fetchmail считывает свою конфигурацию либо из файла ~/.fetchmailrc, если выполняется от имени какого-либо пользователя, либо из файла /etc/fetchmailrc, если он запущен как системный процесс из-под init. Файл .fetchmailrc создается командой fetchmailconf с нужными параметрами. Переименуйте его в /etc/fetchmailrc, если планируете запускать Fetchmail как системный процесс. Однако файл конфигурации можно создать и вручную – он имеет приблизительно следующий вид:

 set daemon 300
 poll mail.myisp.com with proto POP3
 user ‘myispuser’ there with password ‘mypass’ is ‘myuser’
 here options keep
 mda ‘/usr/bin/procmail -d %T’

Первая строка просит Fetchmail проверять почтовые ящики каждые 300 секунд (5 минут), последняя строка указывает, как доставлять почту. По умолчанию Fetchmail пытается соединиться с локальным SMTP-сервером, но мы не будем настраивать его в этом месяце, поэтому используем для доставки почты Procmail.

Две строки в середине – это на самом деле одна строка, разбитая на две части для удобочитаемости. Она говорит Fetchmail, что надо опрашивать POP3-ящик пользователя myispuser на сервере mail.myisp.com и доставлять почту пользователю myuser на локальном компьютере. Часть options keep велит не удалять письма на сервере: ее стоит оставить, пока вы не убедитесь, что все работает нормально, а потом можно и убрать. Можно задать произвольное количество команд опроса (poll) для получения почты с различных серверов для разных пользователей. Чтобы забирать почту с учетной записи Google Mail, нужно разрешить доступ по протоколу POP3 в разделе Пересылка и POP/IMAP настроек Gmail. Для Fetchmail важен порядок следования команд в файле конфигурации. Глобальные настройки вроде Set Daemon должны идти первыми, за ними – настройки опроса серверов (poll), а уж после всех настроек серверов – параметры доставки почты.

Так как файл конфигурации содержит пароли, он должен быть доступен для чтения только пользователю, от имени которого запускается Fetchmail, в противном случае программа завершится с ошибкой. Если вы выполняете ее как сервис, наберите следующие команды:

 chown root: /etc/fetchmailrc
 chmod 600 /etc/fetchmailrc

чтобы избежать любых возможных проблем.

Доставляем ее пользователям

Теперь Fetchmail настроен на сбор писем из почтовых ящиков и передачу их Procmail для доставки пользователям, но прежде чем запустить его, нужно убедиться, что Procmail в курсе, что делать с этими письмами. Procmail может извлекать пользовательские настройки из файла ~/.procmailrc или глобальные настройки из файла /etc/procmailrc. Если существуют оба файла, то пользовательские настройки считываются после глобальных, и каждый пользователь может отменить глобальные настройки. Подходящий файл /etc/procmailrc может содержать такие настройки:

 MAILDIR=/var/spool/mail
 DEFAULT=$MAILDIR/$LOGNAME/
 LOGFILE=/var/log/procmail
 VERBOSE=on

Первые две строки очень важны: они говорят Procmail, где хранить почту. Строка DEFAULT должна заканчиваться символом / – это сообщает Procmail, что следует использовать почтовое хранилище maildir, оно скоро понадобится нам для IMAP-сервера. Две оставшиеся строки удобны для тестирования, и настройку VERBOSE можно удалить, когда все заработает как надо. Создайте каталоги для каждого пользователя, командами

 mkdir -p /var/spool/mail/myuser
 chown myuser:mail /var/spool/mail/myuser
 chmod 770 /var/spool/mail/myuser

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

 fetchmail --daemon 0 -v -f /etc/fetchmailrc

которая запустит Fetchmail в терминале и покажет все ее действия. После этого для каждого загруженного письма в каталоге /var/spool/mail/user/new должны появиться файлы. Нажмите Ctrl+C для остановки этого процесса, затем настройте запуск Fetchmail при загрузке системы в менеджере сервисов вашего дистрибутива.

Пусть читают

Существует два способа получения почты с сервера, где бы он ни находился – у интернет-провайдера, у вас под столом или даже на вашем компьютере. Протокол POP3 позволяет соединиться с сервером и загрузить всю почту, пришедшую с момента предыдущего подключения, перенеся письма на локальный компьютер. Этот способ использовался во времена dial-up-соединений, и сейчас мы применяем его в Fetchmail, передавая почту от интернет-провайдера на наш новый сервер. К сожалению, протокол POP3 имеет ряд недостатков при работе с почтовыми клиентами. Главный из них – каждый клиент должен работать с отдельными копиями писем и может отслеживать только те сообщения, которые он загрузил. Даже если настроить свои программы так, чтобы копии писем оставались на сервере после скачивания, почтовый клиент на ноутбуке не поймет, какие из этих писем вы уже прочли и на какие ответили на настольном компьютере.

Другой протокол, IMAP, более современный: он сохраняет письма на сервере, позволяя считывать их клиентам, хотя большинство почтовых программ оставляют в кэше копию всего, что вы прочли, чтобы сэкономить на загрузке при очередном соединении. Все флаги, типа «прочитано»/«не прочитано», «важно» и т.д., хранятся на сервере и видимы всем компьютерам, используемым для чтения почты. Аналогично, если удалить спам-письмо на одном компьютере, оно исчезнет и на других. Отправленные сообщения также сохраняются на сервере, поэтому все используемые для чтения компьютеры будут синхронизированы друг с другом. Один из минусов протокола IMAP – использование сети в реальном времени, то есть медленное соединение с почтовым сервером может стать заметным тормозом вашей работы; вот еще одна хорошая причина запустить локальный почтовый сервер на Ethernet-скоростях.


Существует несколько реализаций IMAP-серверов, и, в отличие от web-серверов из предыдущей статьи, сложно рекомендовать какой-то один. Мы возьмем Dovecot (http://www.dovecot.org), потому что он отлично работает, безопасен и прост в настройке. Если вы хотите что-то другое, попробуйте Cyrus (http://asg.web.cmu.edu/cyrus/imapd) или Courier (http://www.courier-mta.org). Установите выбранную программу как обычно, с помощью менеджера пакетов.

Конфигурацию Dovecot по умолчанию нужно подправить для стандартной настройки IMAP. Если в вашем дистрибутиве нет файла конфигурации (обычно /etc/dovecot/dovecot.conf), скопируйте его из dovecot-example.conf. Откройте файл в вашем любимом текстовом редакторе от имени root, найдите секцию настроек для Mailbox Locations и Namespaces и добавьте туда строку

 mail_location = /var/spool/mail/%u

Она указывает Dovecot, где хранится почта пользователей, и этот путь должен совпадать с настройкой DEFAULT для Procmail. Затем найдите строку

#protocols imap imaps

и удалите символ # в ее начале, чтобы включить IMAP. Если нужен доступ к серверу также и по протоколу POP3, добавьте в эту строку pop3 pop3s. Варианты с ‘s’ на конце добавляют SSL-шифрование. Если Dovecot используется только внутри локальной сети и маршрутизатор не настроен на перенаправление внешних IMAP- или POP3-соединений на сервер, без IMAPS и POP3S можно обойтись. А вот если разрешены соединения извне, например, с вашего ноутбука, SSL действительно пригодится. Без SSL имя пользователя и пароль передаются открытым текстом, и их может прочесть кто угодно, имея доступ к маршрутизаторам или беспроводному эфиру между вами и сервером. Более подробно настройки SSL описаны далее в разделе «Хранить в надежном месте». Другие настройки, которые следует задать, таковы:

log_path = /var/log/dovecot
mail_privileged_group = mail
protocol pop3 {
pop3_uidl_format = %v.%u
}

Эти параметры уже есть в файле конфигурации, но они закомментированы, и часто им не присвоены значения. Первая строка включает ведение журнала (по умолчанию – в syslog), вторая задает группу, используемую для создания новых файлов (поэтому мы сделали почтовые папки доступными для записи группой mail и установили владельцем группу mail). Секция pop3 нужна только при использовании протокола POP3, она устанавливает формат записей UIDL – уникальных идентификаторов, присвоенных письмам. С их помощью почтовые клиенты могут убедиться, что не загружают одни и те же письма снова и снова, когда те остаются на сервере. Если используется протокол IMAP, который зачастую является лучшей альтернативой, об этом можно не беспокоиться. И еще одна опция, которая может пригодиться на время тестирования:

disable_plaintext_auth = no

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

Теперь можете зайти в свой менеджер сервисов и запустить Dovecot или перезапустить его, если он уже выполняется. Пока вы там, убедитесь, что Dovecot настроен на запуск при загрузке системы. Откройте свой любимый почтовый клиент, настройте учетную запись IMAP и проверьте почту. Если ее нет, загляните в файлы журналов и конфигурации на предмет ошибок и попробуйте снова.

Хранить в надежном месте

Если вы хотите разрешить доступ к серверу извне, понадобится защищенное соединение. При этом отправляемые вами данные шифруются, и для проверки того, что сервер, с которым вы соединяетесь, является именно тем, с кем вы хотите соединиться, используются сертификаты. Тогда бессильны любые потенциально опасные эксплойты типа «посредник».

Чтобы настроить Dovecot (или любой другой сервер) для работы по защищенному соединению, потребуется сертификат. Для коммерческого проекта его лучше купить в официальном центре сертификации, тогда он получит степень доверия. Если сервер лично ваш, сгодится сертификат, подписанный вами. В Dovecot есть скрипт для создания и подписи сертификата. Это файл /usr/share/doc/packages/dovecot/mkcert.sh. Для начала нужно отредактировать файл dovecot-openssl.cnf в этом каталоге и задать подходящие настройки. Параметр CN – самый важный, он должен содержать имя хоста вашего сервера. Если его нет или он не соответствует адресу, используемому почтовым клиентом, все соединения будут отклонены. Он также формирует имя сервера, видимое извне – см. раздел о виртуальных хостах в статье прошлого номера. Сохраните файл и запустите скрипт mkcert.sh, который создаст два файла в каталоге /etc/ssl/. Покончив с этим, отредактируйте файл dovecot.conf и добавьте (или раскомментируйте) строки

ssl_disable = no
ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem

Пути к файлам сертификатов могут различаться, но в некоторых дистрибутивах они хранятся в каталоге /etc/ssl/dovecot.

Когда почтовый клиент в первый раз подключается к серверу с «самоподписанным» сертификатом, запрашивается подтверждение. При выполнении этого первого запроса и подтверждении местоположения сервера важно, чтобы вы подключались к нему по локальной сети, так как это гарантирует соединение с правильным сервером.

Доставка нескольким получателям

Теперь у нас есть полнофункциональный почтовый сервер, способный загружать почту из одного или нескольких почтовых ящиков и делать ее доступной для чтения для любого почтового клиента по протоколу IMAP, где бы вы ни находились (конечно, если там есть Интернет). Сейчас сервер складывает почту из всех внешних почтовых ящиков в одну папку входящих сообщений, но Procmail умеет гораздо больше. Во-первых, рассортируем почту для разных пользователей. Если вы получаете почту на адрес anyuser@yourmaildomain.com, то, возможно, вы захотите отсортировать входящие сообщения для разных пользователей, для этого добавьте в файл /etc/procmailrc следующие строки:

 :0:
 * ^Delivered-To: user@yourmaildomain.com
 !user

Это простейший пример действия Procmail; в man можно найти еще несколько подробных примеров. Первая строка (начинается с :) запускает процедуру, а вторая (начинается с символа *) задает критерий поиска: ищутся письма, у которых поле Delivered-To соответствует конкретному пользователю. Таких строк сравнения может быть несколько, и чтобы набор команд выполнился, все условия должны быть верны. Последняя строка действия говорит Procmail, что делать с этой почтой. Символ ! в начале строки означает, что это почтовый адрес для доставки, а отсутствие символа @ указывает, что это локальный пользователь. Обратите внимание, что Procmail останавливается на первом подходящем наборе команд, который и отправляет письмо. Если ничего не найдено, письмо отправляется на адрес по умолчанию. В качестве правил сравнения можно использовать стандартные регулярные выражения egrep. Допустим, для сбора писем, отправленных на адреса john, john.smith и jsmith, подойдет следующее выражение:

 * ^Delivered-To: (john|john\.smith|jsmith)@yourmaildomain.com

Сортировка вашей почты

Определив, какому пользователю доставить письмо, Procmail ищет файл .procmailrc в его домашнем каталоге. Данный факт можно использовать для сортировки сообщений в списках рассылки по папкам, вместо того, чтобы настраивать это в каждом почтовом клиенте. Например:

 :0:
 * List-Id: geeks-anonymous
 $MAILDIR/$LOGNAME/.INBOX.Geeks\ Anonymous/

Обратите внимание на обратный слэш в имени рассылки, а также на завершающий прямой слэш, гарантирующий, что письма будут доставлены в каталог. Добавьте несколько таких строчек в ваш ~/.procmailrc, и рассылки будут сортироваться при получении. Вы даже можете организовать автоответчик, дописав в ~/.procmailrc строки

 :0 Whc: $HOME/.vacation.lock
 * $^(To: .*$LOGNAME|CC: .*$LOGNAME)
 * !^FROM_DAEMON
 * !^List-
 * !^(Mailing-List|Approved-By|BestServHost|Resent-
 (Message-ID|Sender)):
* !^Sender: (.*-errors@|owner-)
* !^X-[^:]*-List:
* !^X-(Authentication-Warning|Loop|Sent-
To|(Listprocessor|Mailman)-Version):
* !$^From +$LOGNAME(@| |$)
| /usr/bin/formail -rD 8192 $HOME/.vacation.cache
:0 ehc
| (/usr/bin/formail -rI”Precedence: junk” \
-A”X-Loop: $LOGNAME@example.com” ; \
cat $HOME/.vacation.msg ) | $SENDMAIL -t

Первый набор команд исключает сообщения рассылок и системные сообщения, и записывает письма от любого другого отправителя в файл. Второй, запускаемый только при успешном выполнении первого, отправляет сообщение. Идея кэш-файла состоит в том, что сообщение автоответчика посылается только в ответ на первое письмо каждого отправителя. Справка по программе Procmail поможет вам разобраться с остальными наборами команд.

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

Что еще можно сделать?

Мы использовали Procmail для доставки почты, но можно также передать письмо другой программе, которая обработает его, а затем вернет Procmail. Это чаще всего используется для фильтрации спама и вирусов, когда почта переходит по цепочке от SpamAssassin к ClamAV, а тот затем возвращает ее в Procmail. Поскольку две предыдущие программы пометят все подозрительные письма, можно настроить наборы команд Procmail на отправку таких сообщений в карантин или даже в /dev/null. Позже в данной серии уроков мы поговорим об этом подробнее, а также посмотрим, как установить и настроить webmail-клиент для работы с сервером Apache из предыдущей статьи и новым почтовым сервером; тогда ваша почта будет доступна из web-браузера, расположенного в любой точке земного шара. LXF

Брандмауэры и маршрутизаторы

Получение сообщений с почтового сервера вашего провайдера инициируется локально, но для подключения к вашему почтовому серверу с другого компьютера необходимо разрешение от брандмауэра. Вот список соответствия портов:

  • IMAP – 143
  • POP3 – 110
  • IMAPS – 993
  • POP3S – 995

Откройте порты, которые будут использоваться на вашем сервере. Для соединения извне также потребуется настроить маршрутизатор на перенаправление TCP-соединений к этим портам на компьютер, где запущен сервер. В данном случае следует настроить SSL (как описано в разделе «Хранить в надежном месте») и перенаправлять только пакеты с порта 995 (или 993 для POP3). Так можно проводить тестирование без SSL внутри локальной сети, но использовать хорошо защищенное соединение через Интернет.

Словарь-глоссарий

  • MTA Mail Transport Agent (или Mail Transfer Agent) – Агент Передачи Почты. Программа, передающая электронные письма от одного компьютера к другому по протоколу SMTP. Примеры – Postfix, Sendmail и Exim.
  • MDA Mail Delivery Agent – Агент Доставки Почты. Как только электронное письмо получено компьютером, эта программа доставляет его в почтовый ящик пользователя. Такое умеют и многие MTA, но на практике сообщение обычно передается отдельному MDA, например, Procmail или Maildrop.
  • MUA Mail User Agent – Почтовый Посредник Пользователя – любая клиентская программа, используемая для загрузки, хранения и чтения почтовых сообщений. Пользователи KDE лучше знакомы с KMail, а любители командной строки пользуются Mutt.
  • Демон – программа, работающая в фоновом режиме и ожидающая соединений. Обычно это серверы, и их имя файла часто заканчивается на d, например, sshd или ftpd.
  • mbox – способ хранения почтовых сообщений. В этом формате все письма хранятся в одном файле, что экономит место на диске. Однако mbox чувствителен к повреждениям, и одна ошибка может сделать нечитаемыми несколько сообщений.
  • maildir – Альтернатива mbox. Каждое сообщение хранится в отдельном файле внутри почтового каталога. Наряду с более быстрым доступом и лучшей безопасностью, этот формат позволяет создать иерархию каталогов. Maildir необходим для эффективного использования IMAP.
  • MX-запись – запись в настройках DNS-сервера, указывающая MTA, какой IP-адрес использовать при отправке почты для заданного доменного имени.
Персональные инструменты
купить
подписаться
Яндекс.Метрика