Настройка почтовой системы в Linux

Дмитрий Аленичев


          
        

Аннотация

Из данного документа вы узнаете о том, как организована работа с почтой в Linux. Также вы научитесь самостоятельно настраивать почтовую систему и работать с описанными инструментами.


Введение

С каждым годом Интернет становится неотъемлемой часть жизни все большего количества людей. Одной из услуг, которые дает нам глобальная сеть, является электронная почта. Для одних это средство ведения деловой переписки, для других возможность общения с людьми, находящимися в других странах. Но, как бы то ни было, реальности нашего времени диктуют свои правила. И сегодня электронный почтовый ящик есть даже у людей, отдаленно не представляющих, как устроена работа с почтой в операционных системах, созданных для работы в сети. Я, конечно, говорю о UNIX. А, если быть точным, о Linux, как наиболее используемом на рабочих станциях представителе POSIX-совместимых систем.

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

Новые версии

Последнюю версию этого документа вы сможете найти по адресу: http://gir.nongnu.org/people/daa/texts/linuxmail.html

Благодарности

Спасибо всем, кто присылал комментарии, пожелания и вопросы.

Обратная связь

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

Авторские права

Copyright 2005 Дмитрий Аленичев.

Разрешается копирование, распространение, модификация этого документа согласно условиям лицензии GNU Free Documentation License, версии 1.1 или любой более поздней версии, опубликованной Free Software Foundation.

Почтовое сообщение

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

Почтовое сообщение состоит из заголовка (служебная информация, адрес отправителя, получателя и т. д.) и тела (текста, написанного отправителем). Заголовок отделяется от тела пустой строкой.

Попробую объяснить, что могут включать в себя заголовок и тело письма.

Заголовок письма

Здесь представлены некоторые поля заголовка. Не все поля являются обязательными для заполнения. Вам, вероятно, будет достаточно заполнить поля «To», «From» и, возможно, «Subject».

Таблица 1. Поля заголовка письма

ПолеНазначение
ToАдрес получателя. Если указано несколько адресов, то они разделяются запятыми
CcАдрес получателя копии сообщения. Если указано несколько адресов, то они разделяются запятыми. Получатели «Cc»-копии увидят адреса других получателей копии
BccАдрес получателя невидимой копии. Если указано несколько адресов, то они разделяются запятыми. Отличается от «Cc» тем, что получатели «Bcc»-копии не увидят адресов других получателей копии
FromАдрес отправителя
SubjectТема сообщения
DateДата отправления сообщения
Reply-ToАдрес для ответа
Message-IDАвтоматически генерируемая строка
ReceivedПри прохождении сообщения через каждый пункт, который необходимо пройти для доставки, вставляется данная строка, в которой указано имя пункта, время и дату получения сообщения, из какого пункта оно происходит, идентичность сообщения, какое транспортное программное обеспечение использовалось. По этим заголовкам вы сможете проследить путь сообщения
X-*Заголовки, начинающиеся с X- вы можете определять сами и заносить в них любую информацию
OrganizationНазвание организации отправителя
User-AgentMUA отправителя

Тело письма

В теле письма содержится набранный вами текст. Все вложения, которые вы определили для добавления в письмо, также будет помещены в тело.

Получение почты

Задачи программы доставки почты заключаются в следующем:

  • Получение почты с pop3-сервера;

  • Передача писем программе обработки почты;

Рассмотрим две программы данного типа: fetchmail и getmail. Они очень сильно различаются по возможностям. Fetchmail работает с большим количеством протоколов (POP2, POP3, RPOP, APOP, KPOP, IMAP4 и другие) и имеет огромное количество различных функций. Getmail, наоборот, работает только с POP3, но многим она больше нравится за свою простоту.

fetchmail

Сайт проекта: www.catb.org/~esr/fetchmail

Создайте файл ~/.fetchmailrc:

[user@machine ~/]$ touch ~/.fetchmailrc

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

[user@machine ~/]$ chmod 0600 ~/.fetchmailrc

Ниже вы найдете содержимое типичного файла конфигурации для fetchmail.

Пример 1. Пример конфигурационного файла .fetchmailrc

# .fetchmailrc - конфиг для fetchmail
# записывать лог-файл
set syslog
# общие для всех учетных записей настройки
defaults	protocol pop3,	# протокол
               	timeout 60,	# время ожидания (в секундах)
               	nokeep,		# удалять почту на сервере после получения
               	fetchall	# получать всю почту
# специфичные для учетных записей настройки (сервер, login и пароль)
#
# Учетная запись 1
poll "pop.mailhost.ru",
	user "username",
	password "pass";
#
# Учетная запись 2
poll "mail.freemail.ru",
	user "username",
	password "pass";

Таким же образом укажите в конфиге все свои почтовые ящики.

Если вы хотите, чтобы полученная почта не передавалась локальному smtp-серверу, а сразу же сортировалась программой procmail, то, в приведенном выше примере конфигурационного файла, поставьте запятую после опции fetchall и укажите опцию mda procmail -f %F:

...
fetchall,	# получать всю почту
mda procmail -f %F
...

Этой опцией вы укажите на то, что полученную почту необходимо отдавать для обработки MDA (в данном случае это procmail), а не MTA, как это подразумевается по умолчанию.

Большой разницы между обработкой почты с помощью MTA или MDA нет, т. к. практически каждый MTA вызовет procmail для обработки почты. Однако, если вы по какой-либо причине отказались от установки smtp-сервера (например, при использовании программ типа "smtp-plugins for MUA"), то эта опция может быть полезной. Хотя я не считаю отказ от установки smtp-сервера хорошей идеей.

getmail

Создайте директорию ~/.getmail/ и файл getmailrc в ней:

[user@machine ~/]$ mkdir ~/.getmail
[user@machine ~/]$ touch ~/.getmail/getmailrc

Пример 2. Пример конфигурационного файла getmailrc

# getmailrc - конфиг для getmail
# общие для всех учетных записей настройки
[default]
message_log = "~/.getmail/log"	# путь к логу
delete = 1 			# удалять почту на сервере после получения
readall = 1 			# получать всю почту
postmaster = "| procmail"	# почту на обработку
#
# Учетная запись 1
[username_at_mailhost]
server = pop.mailhost.ru
username = username
password = "pass"
#
# Учетная запись 2
[username_at_freemail]
server = mail.freemail.ru
username = username
password = "pass"

Точно также опишите все свои почтовые ящики.

Обработка почты

Сайт проекта: www.procmail.org

Хочу заметить, что корреспонденцию предпочтительнее хранить в формате mbox. Рассмотрим небольшой пример.

Допустим, что вам нужно составить список всех e-mail адресов отправителей, взятых из заголовков писем, находящихся в вашем рабочем почтовом файле. Затем этот список необходимо отсортировать в алфавитном порядке, удалить дубликаты и записать в файл. В случае с mbox это очень просто. Достаточно всего одной строчки:

[user@machine ~/]$ cat ~/Mail/work | grep '^From: ' | sort | uniq > list

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

Procmail будет раскладывать вашу корреспонденцию по отдельным почтовым файлам. Создайте конфиг (~/.procmailrc) и лог (~/Mail/procmail.log):

[user@machine ~/]$ touch ~/.procmailrc
[user@machine ~/]$ touch ~/Mail/procmail.log

Пример 3. Пример конфигурационного файла .procmailrc

# .procmailrc - конфиг для procmail

# ----------
# Переменные
# ----------

MAILDIR=~/Mail		        # каталог с почтой
LOGFILE=~/Mail/procmail.log	# лог для записи всех операций
DEFAULT=~/Mail/mbox		# файл для не отсортированных сообщений

# ------------------------
# Правила сортировки почты
# ------------------------

# Пример: сортировка почты, приходящей на e-mail user_name@host.ru
:0
* ^To.*user_name@host.ru		# условие (To: user_name@host.ru)
host_mail				# файл host_mail в каталоге MAILDIR

# Пример: mailing-list Moscow LUG
:0
* ^To.*mlug@UnixCenter.RU		# условие (To: mlug@UnixCenter.RU)
mlug					# файл mlug в каталоге MAILDIR

# Пример: сортировка от адресатов из домена friends.org
:0
* ^From.*@friends.org			# условие (From: *@friends.org)
friends				        # файл friends в каталоге MAILDIR

# Пример: удаление писем от адресата spammer@mail.ru
:0
* ^From.*spammer@mail.ru		# условие (From: spammer@mail.ru)
/dev/null				# каталог /dev/null

# Пример: автоматическая отсылка PGP-ключа
0:
* ^Subject.*PGP				# условие (Subject: PGP)
| (formail -r ; cat ~/key.asc)	        # вывести PGP-ключ
| sendmail -t				# отправить его

На основе этого примера вы сможете написать свой конфиг. Все зависит от ваших потребностей в сортировке почты.

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

[user@machine ~/]$ cat ~/Mail/mbox | formail -s procmail

Я надеюсь вы поняли, что procmail это очень мощная программа сортировки электронной почты. Для нее можно писать правила практически неограниченной сложности. Все ваши рассылки и другая корреспонденция будут аккуратно разложены по отдельным файлам.

Просмотр и написание почты

Сайт проекта: www.mutt.org

 

All mail clients suck. This one just sucks less.

 
--Michael Elkins 

В качестве MUA я предлагаю использовать mutt. Комментарии, я думаю, излишни, т. к. это самая удобная программа для чтения и написания писем. Попробую коротко описать как ее настраивать и использовать.

Создайте файл ~/.muttrc:

[user@machine ~/]$ touch ~/.muttrc

Пример 4. Пример конфигурационного файла .muttrc

# .muttrc - конфиг для mutt

# ---------------
# Общие настройки
# ---------------

set folder=~/Mail		# каталог для почты
set alias_file=~/.mail_aliases  # файл алиасов
set arrow_cursor		# курсор в виде '->'
set attribution="%d, %n написал:"
                                # начало письма при ответе
set copy=yes			# сохранять копии исходящих писем
set edit_headers		# редактировать заголовки письма
set editor="vim"		# редактор писем
set folder_format="%t%N %-30.30f %8s"	
                                # вид списка папок
set index_format="%4C %Z %{%b %d} %-31.31F %N (%4c) %s"		
                                # вид списков писем
set mailcap_path="~/.mailcap"	# путь к .mailcap
set menu_scroll			# прокручивать список по одной строке
set mail_check=5		# интервал проверки почты
set mbox=+mbox			# файл для прочитанных сообщений
set mime_forward=ask-no		# запрашивать вид пересылаемого письма
set pager_stop 			# в конце письма не переходить на следующее
set postponed=+drafts		# черновики
set print=ask-yes		# запрос перед печатью файла
set print_command=lpr		# команда печати
set record=+sent		# куда сохранять отправленные письма
set signature="~/.signature"	# файл с подписью к сообщениям
set show_alt			# y/n вместо д/н
set send_charset="us-ascii:iso-8859-1:koi8-r:windows-1251:utf-8"
				# кодировка отправляемых писем
set visual=vim                  # редактор вызываемый по ~v

# сортировка писем при просмотре
set sort=threads
set sort_aux=reverse-date-received
set sort_browser=reverse-date

# путь к спулу почты
# procmail уже обработал почту и вы можете указать здесь файл mbox
set spoolfile='~/Mail/mbox'

# поле From заголовка отправляемых писем
set from="Your Name <user_name@host.domain>"

# собственные заголовки писем можно устанавливать с помощью my_hdr
my_hdr X-Url: http://alenitchev.nm.ru

# ------------------------------------
# Настройки просматриваемых заголовков
# ------------------------------------

ignore *
# поля которые я хочу видеть
unignore        from: subject to cc mail-followup-to \
                date x-mailer x-url user-agent reply-to

# ---------------
# Привязки клавиш
# ---------------

# клавиша <up> при просмотре письма на строку вверх
bind pager <up> previous-line
# клавиша <down> при просмотре письма на строку вниз
bind pager <down> next-line

# --------------
# Почтовые файлы 
# --------------

# перечислите все ваши почтовые файлы
mailboxes +mbox +work +friends +lists/debian +lists/mlug

# если вы подписаны на mailing-list'ы укажите их адреса
# это нужно для использования возможности list-reply (клавиша 'L')
lists mlug@unixcenter.ru debian-russian@lists.debian.org

folder-hook mlug "push ^[V"     # при открытии этих файлов нажимать 'Esc-V'
folder-hook debian "push ^[V"   # (свернуть все дискуссии)

# при открытии mlug устанавливать заголовок Reply-To
folder-hook mlug "my_hdr Reply-To: \
Moscow Linux User Group <mlug@unixcenter.ru>"

# при открытии debian устанавливать заголовок Reply-To
folder-hook debian "my_hdr Reply-To: \
Debian <debian-russian@lists.debian.org>"

# Aliases.
# Очень удобное средство - укажите здесь псевдонимы и e-mail'ы
# получателей. Для написания письма можно будет использовать
# команду mutt alias_name. E-mail, соответствующий
# alias_name будет подставлен в поле From.
alias mlug Moscow Linux User Group <mlug@unixcenter.ru>
alias support TechSupport <support@hostname.ru>

В директории /etc находится файл Muttrc. Он может послужить вам хорошим примером конфигурационного файла для mutt.

Создайте файлы ~/.mailcap и ~/.signature:

[user@machine ~/]$ touch ~/.mailcap
[user@machine ~/]$ touch ~/.signature

Файл ~/.mailcap необходим для обработки MIME-типов. Приведу небольшой пример, чтобы продемонстрировать структуру этого файла.

Пример 5. Пример конфигурационного файла .mailcap

# .mailcap - обработка MIME-типов в mutt
image/*; ee %s
audio/mod; mikmod %s
text/html; links -g %s
application/pdf; xpdf %s

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

Итак, после окончания настройки, запускайте:

[user@machine ~/]$ mutt

Перед собой вы увидите список писем из файла mbox (~/Mail/mbox).

Ниже вы найдете таблицы с описанием основных клавиш.

Таблица 2. Клавиши mutt. Главное окно.

КлавишаОписание
HomeПерейти к первому сообщению
EndПерейти к последнему сообщению
PageUpПерейти вверх на один экран
PageDownПерейти вниз на один экран
ВверхПерейти к предыдущему сообщению
ВнизПерейти к следующему сообщению
EnterЧтение письма
cОткрыть почтовый файл. Внизу экрана вы увидите предложение ввести имя файла. Нажатием Tab или ? вы откроете меню выбора файла.
mНаписать новое письмо
rОтветить на текущее сообщение
fПереслать текущее сообщение
dУдалить текущее сообщение
CКопировать текущее сообщение в другой файл
LList-reply. Ответ на сообщение в mail-list
qВыйти из программы
?Просмотр справки

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

Таблица 3. Клавиши mutt. Создание сообщения.

КлавишаОписание
cАдресаты CC
bАдресаты BCC
sРедактирование поля Subject
rРедактирование поля Reply-To
aПрикрепить файл в виде вложения
eВернуться к редактированию сообщения
CКопировать сообщение в файл
qОтложить сообщение
yОтправить сообщение
?Просмотр справки

Таблица 4. Клавиши mutt. Чтение сообщения.

КлавишаОписание
ВверхПрокрутка письма вверх на одну строчку
ВнизПрокрутка письма вниз на одну строчку
qЗакончить чтение
?Просмотр справки

Запустите mutt с опцией -y, чтобы увидеть список из файлов указанных в конфиге (mailboxes +mbox +work +friends). Запуск с опцией -f filename откроет указанный почтовый файл.

Отправка почты

У вас есть выбор: отправлять в помощью своего (локального) smtp-сервера или использовать какой-нибудь внешний сервер (например, провайдера). В первой версии этого руководства я рекомендовал отправлять почту с помощью smtp-сервера, поставляемого с дистрибутивом, но в этом случае вам придется позаботиться о его безопасности. Намного меньше хлопот будет при отправке через внешний сервер, но удобнее использовать хорошо настроенный локальный сервер.

Я рассмотрю четыре программы этого типа и расскажу о настройке каждой из них.

Имя машины

Перед настройкой smtp-сервера убедитесь, что у вас правильно установлено имя компьютера. Для установки имени:

  • Укажите полное имя машины в /etc/sysconfig/network (HOSTNAME=«yourhostname.yourdomainname»)

  • Запишите имя машины (без имени домена!) в /etc/HOSTNAME

  • Добавьте новое имя в /etc/hosts:

    127.0.0.1	localhost	yourhostname.yourdomainname
    

Sendmail

Сайт проекта: www.sendmail.org

На данный момент sendmail является smtp-сервером по умолчанию во многих дистрибутивах Linux. Этот сервер довольно громоздкий и сложный в настройке. Его можно использовать как для самостоятельной отправки писем, так и для отправки писем через другой почтовый сервер. Сразу же после установки sendmail уже можно использовать, но для пересылки писем через внешний сервер необходимо настроить smarthost.

Настройка smarthost

Откройте /etc/sendmail.cf и найдите в начале файла строки:

# "Smart" relay host (may be null)
DS

Вот после этого DS и запишите в квадратных скобках имя smtp-сервера. Должно получиться вот так:

# "Smart" relay host (may be null)
DS[smtp.server.ru]

Теперь письма будут отправляться через указанный smtp-сервер.

Ограничение доступа

Для ограничения доступа к вашему smtp-серверу определенного набора доменов вы можете использовать следующую последовательность действий. Добавьте в файл /etc/mail/access имя домена и тип ограничения:

spamers.localdomain	550 Spam is bad!
dial-up_hosts.domain	REJECT
adsl_hosts.domain	REJECT

Чтобы изменения вступили в силу, необходимо обновить файл /etc/mail/access.db:

[root@machine ~/]# /usr/sbin/makemap hash /etc/mail/access.db < \
/etc/mail/access

...и перезапустить sendmail:

[root@machine ~/]# /etc/rc.d/init.d/sendmail restart
Управление почтовой очередью

Почтовая очередь хранится в директории /var/spool/mqueue. Для просмотра почтовых сообщений, находящихся в очереди, а так же их состояния вы можете воспользоваться программой mailq:

[user@machine ~/]$ mailq
                /var/spool/mqueue (1 request)
----Q-ID---- --Size-- -----Q-Time----- ---------Sender/Recipient---------
j1RIZop10488       59 Sun Feb 27 21:35 alenitchev
                 (host map: lookup (fake.net): deferred)
                                       fake@fake.net

Как видно из приведенного выше примера, адрес хоста fake.net не найден.

Для немедленной обработки почтовой очереди предназначена программа runq.

Exim

Сайт проекта: www.exim.org

Exim является smtp-сервером по умолчанию для Debian GNU/Linux. Программа очень удобная и настроить ее не сложно.

Вы можете настроить exim во время этапа базовой настройки Debian или сделать это в любое время с помощью программы eximconfig. Рассмотрим конфигурацию для отправки почты через smarthost.

Выберите пункт «mail sent by smarthost; received via SMTP or fetchmail», введите почтовое имя машины и настройте параметры, связанные с приемом почты от других компьютеров, по своему усмотрению. Наконец, введите имя сервера, выступающего в роли smarthost.

Теперь вам нужно настроить перезапись адреса. Добавьте в файл /etc/exim/exim.conf, секцию «REWRITE CONFIGURATION»:

*@localhost       ${lookup{$1}lsearch{/etc/email-addresses}\
                                                {$value}fail} Ffsr

Для окончания настройки перезаписи адреса добавьте в файл /etc/email-addresses записи для пользователей:

root: alenitchev@nm.ru
dmitri: alenitchev@nm.ru
alenitchev: alenitchev@users.sourceforge.net

Esmtp и Msmtp

В этом разделе описаны программы не являющиеся stmp-серверами, но тем не менее позволяющие отправлять почту. Такой тип программ называется «smtp-plugins for MUA», то есть надстройка над MUA, позволяющая отсылать корреспонденцию через внешний smtp-сервер. Эти программы просты в настройке и удобны в использовании.

Esmtp

Сайт проекта: esmtp.sourceforge.net

Создайте файл ~/.esmtprc:

[user@machine ~/]$ touch ~/.esmtprc

Пример 6. Пример конфигурационного файла .esmtprc

# .esmtprc - конфиг для esmtp
#
hostname = smtp.mail_host.ru:25
username = "user_name"
password = "password"

В ~/.muttrc необходимо добавить следующую строчку:

set sendmail="esmtp -v"
Msmtp

Сайт проекта: msmtp.sourceforge.net

Создайте файл ~/.msmtprc:

[user@machine ~/]$ touch ~/.msmtprc

Пример 7. Пример конфигурационного файла .msmtprc

# .msmtprc - конфиг для msmtp

# ---------------------------
# Учетная запись по умолчанию
# ---------------------------

account default
host smtp.work_host.ru		# smtp-сервер
from login@work_host.ru		# e-mail
user login			# логин
password pass			# пароль

# ------------------------
# Локальная учетная запись
# ------------------------
account local			# имя учетной записи
host localhost			# используется локальный smtp-сервер
from user_name@hostname.ru	# e-mail

# ---------------------------------------------------------------
# Учетная запись провайдера с аутентификацией CRAM-MD5. Порт 2500
# ---------------------------------------------------------------

account provider		# имя учетной записи
host mail.super_provider.ru	# smtp-сервер
port 2500			# порт
from login@super_provider.ru	# e-mail
auth cram-md5			# аутентификация CRAM-MD5
user login			# логин
password "pass"			# пароль

В ~/.muttrc необходимо добавить следующую строчку:

set sendmail="msmtp"

Эти программы позволят вам отправлять почту через внешний smtp-сервер, не забивая себе голову проблемами администрирования почтового сервера.

Другие программы

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

Адресная книга

Сайт проекта: abook.sourceforge.net

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

Запускайте abook:

[user@machine ~/]$ abook

Разобраться в интерфейсе этой программы не составит труда.

Приведу пример добавления записи. Нажимайте клавишу a и вводите имя. Открывается окно просмотра и редактирования записи. Клавиши 2, 3, 4, 5 служат для добавления к записи e-mail адресов. С помощью клавиш Влево, Вправо вы можете перемещаться между разделами «CONTACT», «ADDRESS», «PHONE», «OTHER». Окончив редактирование записи нажатием на клавишу Enter возвращайтесь к списку записей. Для написания письма выбранному адресату предназначена клавиша m. Если вы хотите написать письмо на несколько адресов сразу, то выделите нужные записи нажатием пробела и нажмите m. В abook, также как и в mutt, имеется встроенная справка - ?.

Записи вашей адресной книги хранятся в файле .abook.addressbook, а настройки программы - в .abookrc.

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

[user@machine ~/]$ abook --convert abook .abook.addressbook html \
addressbook.html

Синтаксис этой команды:

abook --convert ФорматВходногоФайла ВходнойФайл ФорматВыходногоФайла \
ВыходнойФайл

Поддерживаемые форматы входного файла:

Таблица 5. Форматы входного файла

ИмяОписание
abookродной формат программы abook
ldifадресная книга ldif / Netscape
pineадресная книга pine
csvcomma separated values

Поддерживаемые форматы выходного файла:

Таблица 6. Форматы выходного файла

ИмяОписание
abookродной формат программы abook
muttmutt alias
htmlHTML-файл
pineадресная книга pine
gcrdадресная книга GnomeCard (VCard)
csvcomma separated values
elmelm alias
textтекст

Шифрование писем

Сайт проекта: gnupg.org

Для начала вам необходимо запустить gpg без ключей для создания каталога ~/.gnupg в котором будут храниться различные конфигурационные файлы:

[user@machine ~/]$ gpg
gpg: /home/alenitchev/.gnupg: directory created
gpg: /home/alenitchev/.gnupg/options: new options file created
gpg: you have to start GnuPG again, so it can read the new options file

Теперь вы можете создать пару ключей (public и secret) для шифрования писем и файлов:

[user@machine ~/]$ gpg --gen-key

Вам будет необходимо ответить на несколько вопросов. На этом этапе затруднений у вас возникнуть не должно. Отмечу лишь, что в качестве ключевой фразы (passphrase) необходимо выбрать что-нибудь посложнее. После окончания генерации ключа вы можете использовать GnuPG.

Экспорт открытого ключа

Экспортировать свой открытый ключ вы можете следующим образом:

[user@machine ~/]$ gpg --export -a Dmitri Alenitchev > gpg-public-key.asc

Этой командой вы экспортируете открытый ключ пользователя Dmitri Alenitchev и перенаправите вывод в файл gpg-public-key.asc.

Импорт открытого ключа

Импортировать чей-нибудь открытый ключ позволяет команда:

[user@machine ~/]$ gpg --import gpg-public-key.asc

Например:

[user@machine ~/]$ gpg --import friend-key.asc
gpg: key 8421F11C: public key imported
gpg: Total number processed: 1
gpg:               imported: 1

[user@machine ~/]$ gpg --list-keys
/home/alenitchev/.gnupg/pubring.gpg
------------------------
pub  1024D/F18D5DDB 2004-12-11 Dmitri Alenitchev <alenitchev@nm.ru>
sub  2048g/8E70D455 2004-12-11 [expires: 2005-12-11]

pub  1024D/8421F12C 1997-10-05 My Friend <friend@host.domain>
sub  2048g/5E985ED4 1997-10-05

Справку о других командах вы можете получить, запустив gpg с опцией --help

Перед тем, как отправить кому-нибудь зашифрованное письмо вам необходимо импортировать public key адресата!

GnuPG + mutt

Теперь пора поговорить об использовании GnuPG при отправке и получении почты. Создавайте новое письмо в mutt, перед отправкой нажимайте клавишу p. Внизу экрана вы увидите приглашение:

(e)шифр, (s)подпись, (a)подпись как, (b)оба, (f)отказаться?

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

Защита от спама

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

Добавление адресов в «черный» или «белый» список

Для начала напишем скрипт, который будет извлекать почтовый адрес из поля From в заголовке письма.

#!/usr/bin/perl -wn
unless (/\</) { print; } else { print /<([^>]+)/, "\n"; }

Назовите его listadd, поместите в директорию /usr/local/bin и выполните команду:

[root@machine ~/]# chmod +x /usr/local/bin/listadd

Добавьте к вашему ~/.muttrc следующие строки:

# ---------- Add to black/white list ---------- #
# Для добавления адресата из режима списка писем
macro index \eb '| formail -x From: | listadd >> ~/Mail/blacklist'
macro index \ew '| formail -x From: | listadd >> ~/Mail/whitelist'
# Для добавления адресата из режима чтения письма
macro pager \eb '| formail -x From: | listadd >> ~/Mail/blacklist'
macro pager \ew '| formail -x From: | listadd >> ~/Mail/whitelist'
# ---------- Add to black/white list ---------- #

Теперь при чтении писем в mutt вам достаточно нажать Esc-b для добавления отправителя к «черному» списку и Esc-w для добавления к «белому». Не добавляйте mail-листы в «белый» список, т. к. в сообщения из «белого» списка будут складываться в ваш default-почтовый файл.

Фильтрация

Теперь поговорим собственно о защите, то есть о фильтрации. Вам придется дополнить ваш ~/.procmailrc новыми правилами. Для начала добавьте следующую строку к вашим переменным:

SPAM=/home/user_name/Mail/spam		# Файл для писем со спамом

Далее добавьте следующие правила перед всеми вашими персональными правилами сортировки.

# ---------- Spam Filters ---------- #

# -----------------------
# "Белый"/"Черный" список
# -----------------------

# Если отправитель в "белом" списке, то в $DEFAULT.
:0:
* ? formail -x"From" -x"From:" -x"Sender:" \
	-x"Reply-To:" -x"Return-Path:" -x"To:" \
	| egrep -is -f $MAILDIR/whitelist
$DEFAULT

# Если отправитель в "черном" списке, то в /dev/null
:0:
* ? formail -x"From" -x"From:" -x"Sender:" \
	-x"Reply-To:" -x"Return-Path:" -x"To:" \
	| egrep -is -f $MAILDIR/blacklist
/dev/null

Эффективной практикой борьбы со спамом является фильтрация писем с заголовками вроде «X-Spam-Status: Yes», «X-Spam-Level: 15».

# --------------
# Спам-заголовки
# --------------

# Письма с заголовками X-Advertisement
:0:
* ^X-Advertisement:.*
$SPAM

# Письма с установленным заголовком X-Spam-Status
:0:
* ^X-Spam-Status: Yes
$SPAM

# Письма с заголовком X-Spam-Level равным 15 или выше
:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
$SPAM

# Нет получателя
:0:
* To:[ ]*$
$SPAM

# Пустое поле To:
:0:
* !^To: .*
$SPAM

# ---------- Spam Filters ---------- #

Замечание: Письма, отправитель которых указан в файле blacklist будут утеряны навсегда (отправлены в /dev/null). Если вас это не устраивает, то замените /dev/null на $SPAM или какой-нибудь другой файл.

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

Не забывайте просматривать ваш файл $SPAM, постоянно пополняйте ваши файлы с «белым» и «черным» списком и забудьте о проблеме спама!

Заключение

Мы настроили систему для работы с почтой. Не правда ли, это было совсем не сложно?

Если у вас что-нибудь не получилось, то вы можете задать вопрос в форум, посвященный Linux, или в тематический mail-list.

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