Работа с почтой в Linux в автономном режиме

Gunther Voet

     [email protected]
   

Перевод: Александр Ермолаев, SWSoft Pte Ltd.

v1.3.3, 4 June 1998

Используйте вашу почтовую систему в автономном режиме, получите почту для нескольких пользователей, имея только один почтовый ящик, без круглосуточного подключения к сети. Если вы не можете платить за постоянное круглосуточное подключение к сети, а пользователи хотят получать почту, используя ваш почтовый ящик; и вы не хотите платить за несколько почтовых ящиков вашему провайдеру, то используйте эту систему, имея только один почтовый адрес для нескольких почтовых ящиков ваших пользователей. Он будет круглосуточно доступен на сервере, где на вашу учетную запись будет приходить почта. Разд. 1.2


Содержание
1. Примечания автора (предисловие)
1.1. Ответственность
1.2. Copyrights
1.3. Авторские права
1.4. Отзывы
1.5. Распространение
1.6. Изменения
1.7. Что я использовал?
1.8. Благодарности...
2. Предварительный выбор
2.1. Предисловие и описание
2.2. Пункты, представляющие интерес ...
2.3. Вещи, которые вы должны знать
2.4. Имеются два разных способа ...
3. Требования
3.1. Компьютер
3.2. Дополнительная учетная запись на вашем компьютере
3.3. Fetchmail
3.4. Procmail
3.5. Почтовая учетная запись
3.5.1. DNS запись (MX)
3.5.2. Перенаправление на вашу учетную запись
4. Я меня все есть, что теперь?
4.1. Создание файла .fetchmailrc
4.2. Создание файла .procmailrc
4.2.1. для способа A
4.2.2. для способа B
4.3. файл "nosuchuser"
4.4. файлы "crontab"
4.4.1. checkformail
4.4.2. crontab
4.5. На сайте администратора
4.5.1. (старый sendmail) Добавьте некоторые строки в файл sendmail.cf
4.5.2. (новый sendmail) Добавьте некоторые строки в файл sendmail.cf
4.5.3. (новый sendmail) отредактируйте файл /etc/sendmail.cw (или /ваш_каталог/sendmail.cw)
4.5.4. создание файла /etc/maildomains
4.5.5. пусть работает !
5. Автоматизация
5.1. "Каркас (скелет)"
5.1.1. Файл .procmailrc-header (заголовок)
5.1.2. Файл .procmailrc-footer (конец)
5.2. Скрипт addmail
6. Помогите!
6.1. Скрипт автоматизации не работает:
6.2. Что вы подразумеваете под "анонимным mailserver'ом"?
6.3. Моя кошка сдохла
6.4. Моя собака сдохла
6.5. Linux?
6.6. Вы можете мне помочь, обнаружить почтовую учетную запись?
6.7. Почему, когда я позже делаю некоторые добавления, они оказываются удаленными ?
6.8. Как я могу получить "домен" ?
6.9. Почему вы так "криво" используете это?
6.10. Файл "nosuchuser"?
6.11. Мои пользователи могут писать/посылать почту тоже?
6.12. Необходимо ли каждому пользователю иметь возможность входа в мою систему?
6.13. скелет?
6.14. Addmail?
6.15. Почему ты такой жестокий?
6.16. Разве вы не получали жалоб на свой чрезмерный язык?
6.17. Почему этот howto больше всех отличается от остальных?
6.18. Локально мои домены работают, но удаленно нет
7. Конец

1. Примечания автора (предисловие)

В этой главе я хочу только защитить себя от любых неприятностей и претензий - так как даже я могу ошибаться ... Если у вас появятся любые вопросы или предложения, которые вы хотели бы добавить в этот faq, или если вы найдете какие-то ошибки, то взгляните в главу "Отзывы" этого HOWTO ...

Нужно знать, что все имена файлов здесь обозначены следующим образом:

"(*** <file>*** text ***) .procmailrc"

Это означает, что файл, называемый ".procmailrc", содержит текст. Переменная text может быть кодом. Строка показывает вам, какое имя файла используется. Имя файла без указания пути означает, что оно может быть изменено/выбрано вами (в большинстве случаев эти файлы находятся в домашнем каталоге пользователя для почты, напр. /home/mailer).


1.1. Ответственность

Ни автор, ни распространители этого HOWTO не отвечают за физический, финансовый и моральный ущерб, понесенный вследствие использования информации этого документа. Информация этого документа содержит лучшее из моих знаний и опыта, но я мог сделать ошибки. Любые торговые марки принадлежат их владельцам (я не использую здесь коммерческие вещи, но ЕСЛИ я соберусь добавить сюда какой-то текст, то не буду изменять эту оговорку).


1.2. Copyrights

This document and contents are Copyright (c)1997-98 by Gunther Voet. Unauthorized (re)production in any form is explicitly allowed and even strongly encouraged as long you don't change the contents of it without contacting the author (Gunther Voet). If you quote the document as whole or a part of it, there needs to be a Copyright "hint" or link to the derived work. "The HOWTO documents are copyrighted by their respective authors". The "HOWTO copyright" will discuss what can be done and what cannot be done with this document. If it is used in a commercial way, the author should been noticed for such distributions. Exceptions on this copyright may be granted under certain conditions with a written letter or e-mail to the author. For more info about the standard HOWTO disclaimer, please contact [email protected].

*PLEASE* *IF* you are going to make a system based on this HOWTO, then PLEASE give me the copyright :) heh ... - i am not that cruel :)). I mean by a system "a package" - NOT the mailsystem itself - altough it is some appreciative thingy i would be included :)) i can always use one email address more for more flaming :)) (just kiddin').


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

Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу


1.4. Отзывы

Если у вас появятся вопросы, исправления, комментарии (кроме откровенного ругательства :)) пишите на [email protected] или на [email protected], и я внесу исправления, добавлю комментарии и предложения в следующую версию. Если вы публикуете этот документ на коммерческой основе, то можете послать мне копию. По поводу претензий: послайте их мне, но письма попадут в /dev/null ...


1.5. Распространение

Последнюю версию этого документа можно взять по адресу:

http://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/Offline-Mailing

-и-

http://tuc.ml.org/om/

(также проверьте http://tuc.ml.org)

tuc.ml.org может быть отключен на момент написания!


1.6. Изменения

v1.0.0 Предварительный выпуск, внутреннее тестирование, мы попробовали его прежде, чем передать вам :) v1.1.0 Исправлены некоторые ошибки, исправлено несколько небольших ошибок ... v1.2.0 Исправлены граматические ошибки, добавлен раздел "Что я использовал", добавлен адрес сервера Sunsite. v1.3.0 Добавлен "virtual mail support" для администраторов, новый сайт и адрес электронной почты, благодарности... v1.3.1 Текст конвертирован в SGML и уточнены некоторые незначительные подробности. v1.3.2 Исправлены большие ошибки (имя файла .fetchmailrc на .procmailrc) и т.д. ... (спасибо Tetsu Isaji) Добавлена поддержка для "нового" sendmail, v8.8.0+ исправлено несколько незначительных ошибок, обновил свою систему (YAY!), скоро выйдет японская версия, местонахождение документа будет указано, когда станет известно ... (спасибо Tetsu Isaji). v1.3.3 Добавлена поддержка CC, изменен e-mail на [email protected].


1.7. Что я использовал?

Я использовал Linux 2.0.30, Pentium-166, ATI pci-mach64 card, Accelerated-X (Metro) и соединение с моим провайдером (в настоящее время ibmnet) через ppp, используя модем ZyXEL 28k8, и иногда Bausch 28k8.

Сейчас я обновил ядро до Linux 2.0.33, установил модем USRobotics, система все еще работает, поскольку должна работать :) (каждый должен обновить свой linux, как только выйдет патч :) поверьте мне :) вы можете сэкономить много времени и обнаружить ошибки :)


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

  • Fred'у, durban.hebel.net (за предоставление страниц)

  • Lifesaver'у, parkside.net (за предоставление новых страниц, за помощь по этому faq'у, с тех пор это все работает и там и здесь ... посетите его кибер-кафе ... слышал, что они готовят классный кофе :))

  • Администраторам сервера lodus.net за продолжение этого проекта

  • Сейчас мне нужен новый сервер, с тех пор,как lodus.net был продан :(


2. Предварительный выбор

Хорошо, как эта система работает ? Что вы можете сделать с ней ? Так или иначе, что это такое ? и ... - я имел обыкновение читать это ??? ... на все вопросы - есть ответы ...


2.1. Предисловие и описание

Этот HOWTO предназначен для всех пользователей и серверов (linux), не имеющих постоянного подключения к Интернет ... У вас есть группа пользователей или организация, и вы желаете, чтобы все ваши пользователи имели адрес, по которому можно с ними связаться (e-mail), но вы не хотите платить за круглосуточное прямое подключение или за почтовые учетные записи... Или у вас есть внутренняя сеть - с сервером, использующим маскарадинг, и вы хотите, чтобы у всех ваших пользователей был e-mail, тогда можно использовать этот способ, чтобы сделать это. Лично я использую этот способ, чтобы у моих пользователей или членов группы была почта без круглосуточного подключения; т.к. наша группа некоммерческая - и у нас нет денег, чтобы платить за прямое подключение, с мгновенным доступом к электронной почте, и за разные ip адреса. Каждый получает адрес электронной почты, даже без доступа к интернету. Те, кто имеет доступ к интернету, могут получать почту на свой персональный адрес - через систему, описанную ниже. Ваши пользователи могут посылать почту, как они делали до этого, т.к. ваша система поддерживает передачу почты пользователей. Единственная вещь, которая должна быть изменена для пользователей - это то, что они добавляют свой адрес электронной почты (описывается ниже): 1 способ - в поле subject, 2 способ - в строке заголовка - "to:".


2.2. Пункты, представляющие интерес ...

  • Есть организация, для каждого в ней имеется адрес электронной почты, таким образом с ними можно контактировать.

  • Служба анонимной почты. Никто не сможет прочитать ваш "файл конфигурации почтовой системы" - никто не узнает, куда почта отсылается/пересылается.

  • Группа, которая не получает достаточно денег (не смейтесь), или работает бесплатно, а также если вы не ХОТИТЕ тратить на интернет деньги (хе-хе), но все же хотите дать каждому адрес электронной почты.

  • Сеть с маскарадингом - с сервером, соединенным с интернетом, необходимо использовать такую сеть, чтобы дать возможность пользователям иметь почту.

  • Вы хотите поместить некоторые "автоматически отправляемые" документы - как у меня сделано с моим HOWTO, статистикой и т.п. ... например, "[email protected]" или "[email protected]".

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

  • Я использовал способ "B", было около 300 почтовых учетных записей - с сайтом; на 80486DX4-100 обработка занимала 1 минуту.


2.3. Вещи, которые вы должны знать

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

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

  • Потребуются некоторые усилия, чтобы организовывать, обрабатывать сообщения, и добавлять новых пользователей ... вам будет необходимо работать с этим! - это не происходит автоматически. (хотя, я сделал это полуавтоматически на моем сервере :), вы можете тоже попробовать).

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

  • Вся почта будет передаваться за раз, таким образом, последнее полученное сообщение будет послано получателю последним. "Первым вошел - первым вышел (FIFO)".

  • В первом способе (to:) нет проверки имени пользователя, но во втором (более дешевом) способе - пользователи не могут использовать строку subject, т.к. она будет задействована, чтобы послать почту получателю. Многие пользователи забывают использовать "subject" ... - они должны это точно знать.

  • Если вы получаете почту, (например 4 раза в день) - убедитесь, что она будет забираться регулярно, каждые 6 часов. Тогда процесс будет проходить более плавно.

  • Вы МОЖЕТЕ использовать эту систему и в онлайновом режиме :), так как почта будет забираться каждые XX минут. Но если вы в онлайне - зачем использовать другой сервер ?


2.4. Имеются два разных способа ...

  1. Способ 'A' - назовем его "(m(A))". Почтовая система будет обращаться к заголовку письма и смотреть строку "to:" Это - лучший путь, так как это "настоящий почтовый адрес". Вы будете нуждаться в другой учетной записи на некотором сервере *И* вам будет нужен DNS (MX) вход (например, ваш собственный домен). Если системный администратор согласится помочь вам с этим, тогда не будет проблем! Системный администратор должен перенаправлять ВСЮ посланную почту на ваш почтовый домен (MX) -> на вашу учетную запись. Ему понадобится некоторое время, чтобы сделать это :) так будьте с ним любезны :)) Спасибо моему сисадмину (Fred), я получил свой почтовый домен. DNS вход может кое-чего стоить, и вы должны решить, брать его или нет.

  2. Способ 'B' - назовем его "(m(B))". Почтовая система будет обращаться к строке subject и отправлять сообщения пользователю, обозначенному в этой строке. Если пользователь не найден, система будет отсылать почту назад. Вам будет нужен pop сервер с одной пользовательской учетной записью, и не будет нужен собственный DNS, не надо быть любезным с вашим сисадмином, который назначает почтовый адрес :). Вы можете использовать общедоступный почтовый сервер, а также ваш собственный или некий частный почтовый сервер. Для этого можно даже жертвовать собственным почтовым адресом :). Сначала я использовал первый способ, который работал больше года ... Я знаю, что это плохо, но не заставляю вас идти этим путем, так что не ругайте МЕНЯ - т.к. я только предлагаю некоторые решения проблем с почтой :) - вы можете использовать способ A.


3. Требования

Хорошо, вам нужен компьютер с Linux'ом, с соединением с Интернет! - вам вероятно нужен модем, правильно? Телефонная линия или любой другой способ соединения с сервером. Вы должны также иметь несколько программ типа Fetchmail, Procmail, дополнительную учетную запись и почтовую учетную запись, или DNS с почтовой учетной записью.


3.1. Компьютер

Может быть любой ... даже 8086 ... - но предпочтительней - 80386 :). Чем быстрее машина, тем быстрее выполняются на ней программы.


3.2. Дополнительная учетная запись на вашем компьютере

Вам нужно создать дополнительную учетную запись на компьютере. Я использовал в качестве примера (в этом HOWTO) "mailservice". Это может быть также "mailserver" или "mailtousers" - это только несколько разных имен, которые вы можете использовать.

! Создание не требует наличия прав root'а !

Вся почта для пользователей будет отправляться, при помощи этой учетной записи, на ваш компьютер или к пользователям не вашей системы ;). Только создайте ее как обычный пользователь. Вам нужно проверить все под этой учетной записью, а почтовый "администратор" может использовать эту учетную запись, чтобы управлять почтой, даже без прав root'а .. так - хорошая защита!


3.3. Fetchmail

Я использовал версию 1.9 patch level 9 ... Я нашел ее на сайте sunsite.unc.edu, и использую только эту программу для забора почты в моих примерах - если вы хотите использовать другую, то вам выбирать! Вы можете узнать о дополнительных возможностях, прочитав man Fetchmail :). Вам нужно инсталлировать ее, будучи root'ом - так как я знаю, что это будет работать наверняка :)))


3.4. Procmail

Я использовал версию 3.10 - опять же найденную на sunsite.unc.edu, и мне нравится он, как лучший агент доставки почты ... Лучше использовать его, чем "оригинальный" mda. ... То же самое, что и выше - procmail может устанавливаться под root'ом или под обычным пользователем, но :) лучше устанавливать под root'ом - т.к. я знаю, что это будет работать наверняка.


3.5. Почтовая учетная запись

Вам обязательно нужно иметь почтовую учетную запись, через которую можно работать с вашей почтой. Сервер должен поддерживать протокол POP. Вы должны иметь возможность работать с этим сервером, когда захотите (чтобы пользователи на нем могли посылать почту круглосуточно). Это может быть бесплатный почтовый сервис, а может быть коммерческий - иметь почтовую учетную запись на нем более, чем достаточно. По способу B (с использованием поля subject) вам не нужно чего-то больше, по способу A (с использованием строки to:) вам необходимы некоторые настройки - это будет описано.


3.5.1. DNS запись (MX)

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


3.5.2. Перенаправление на вашу учетную запись

Системный администратор должен отправлять *ВСЮ* почту вашего домена на ВАШУ учетную запись ... - это просто для него, когда он знает, как это сделать .. иначе ему необходимо прочитать руководство по sendmail (или qmail). Вы будете получать почту на вашу учетную запись и фильтровать в своем домене.


4. Я меня все есть, что теперь?

Сейчас создайте дополнительную учетную запись - вы получите почтовый адрес, и/или DNS запись и перенаправление на вашу учетную запись на сервере... Также установите программы Procmail и Fetchmail.

  1. Вам нужно создать файл .procmailrc, который будет содержать информацию о "доставке почты" вашим пользователям.

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

  3. Для лучшей работы :) можно использовать crontab для проверки почты каждые XX минут, если у вас есть доступ к интернет.


4.1. Создание файла .fetchmailrc

Вам будет нужно создать файл .fetchmailrc, который будет содержать информацию (имя пользователя и пароль, а также агент доставки почты (mda), чтобы ее обрабатывать). Здесь дан пример файла ...

"(*** < file >*** text ***) .fetchmailrc"

server my.mail.server.com
proto pop3
user myaccountthere
pass deepestsecrets
flush
mda /usr/bin/procmail

Этот файл будет использоваться для того, чтобы забрать вашу почту. Пожалуйста, протестируйте его, используя программу fetchmail "fetchmail -vv" - и посмотрите, правильно ли приходит ваша почта... Возможно возникнут некоторые ошибки - т.к. управляющий файл procmail еще не создан. Вы можете подождать с тестированием до того, как создадите файл procmailrc, но я предупреждаю, если имеются проблемы, то они могут возникнуть из-за этого файла :). Это потребует создания собственной учетной записи пользователя - в моем случае, это "mailservice". Необходимо, чтобы читать файл мог только владелец, но не группа или кто-либо другой - этот файл содержит пароль. (используйте chmod 600 .fetchmailrc).


4.2. Создание файла .procmailrc

Этот управляющий файл будет пересылать всю почту пользователям, указанным в нем. Как описано выше, имеется два способа - 1), использующий строку заголовка "to:", и 2), использующий поле "subject". Файл будет содержать имя пользователя, которому надо отправлять сообщения. Все знаки "#" означают комментарий и абсолютно не нужны, когда это не требуется - они приведены только для того, чтобы вы знали, что я делал ... - вы также, с помощью chmod, должны установить на файл права (600), чтобы группа и остальные не знали о частных адресах эх :) ... Требуется также принадлежность этого файла пользователю (например, "mailservice") :)). Файл "nosuchuser" отсылает письмо назад автору - если пользователь не найден в файле procmailrc ... - это делается для того, чтобы автор письма знал, что письмо не дошло до получателя.


4.2.1. для способа A

"(*** < file > *** text ***) .procmailrc"

# эта строка только для отладочных целей ! удалите по этическим соображениям
# - т.к. вы можете читать всю почту, проходящую через ваш почтовый сервер ...
# - вся почта будет скопирована в файл "passtrough" до того, как
# попадет к пользователям ... здесь вы можете смотреть, что пошло не так ...
:0 c
        passtrough

# почта с заголовком "to: [email protected]" будет отправлена прямо
# ко мне, другая почта будет пропущена через эту проверку ...
:0
* ^To:.*[email protected]
! freaker

# почта для [email protected] будет отправлена к root'у ... и также к postmaster'у!
:0
* ^To:.*[email protected]
! root

:0
* ^To:.*[email protected]
! postmaster


# почта для [email protected] будет отправлена к barbara И будет
# отправлена на ее собственный почтовый адрес !

:0 c
* ^To:.*[email protected]
! [email protected]

:0
* ^To:.*[email protected]
! barbara

# почта для [email protected] и [email protected] will будет отправлена к johnny

:0
* (^To:.*[email protected])|(^To:.*[email protected])
! johnny

# почта для [email protected] и все точные копии будут отправлены к hans'у

:0
* (^To:.*[email protected])|(^CC:.*[email protected])
! hans

# эти строки будут возвращать почту отправителю - когда она не дойдет
# до кого-то из вышеупомянутых пользователей ...
# содержимое файла "nosuchuser" будет отправлено в теле письма ...
# знайте ! вам нужно сделать такой файл ! - файл содержит текст
# "Пользователь, которого вы ищете не на этом сервере, не найден.
# Пожалуйста, попробуйте снова, это мог быть пользователь, которого сейчас нет".
#
:0
  |(/usr/bin/formail -r -k \
     -A"X-loop: [email protected] "| \
       /usr/bin/gawk '{print }\
       /^/ &!HEADER \
         { system("/bin/cat nosuchuser"); \
         print"--" ;\
         HEADER=1 }' ) |\
         /usr/bin/sendmail -t


exit


4.2.2. для способа B

"(*** < file > *** text ***) .procmailrc"

# эта строка только для отладочных целей ! удалите ее из этических соображений
# - т.к. вы можете читать всю почту,  проходящую через ваш почтовый сервер ...
# - вся почта будет скопирована в файл "passtrough" до того, как
# попадет к пользователям ... здесь вы можете смотреть, что пошло не так ...
:0 c
        passtrough

# почта с заголовком "to: [email protected]" будет отправлена прямо
# ко мне, другая почта будет пропущена через эту проверку ...
:0
* ^To:.*[email protected]
! freaker

# почта для [email protected] будет отправлена к root'у
:0
* ^Subject:.root
! root

# почта для [email protected] будет отправлена к barbara ...
:0
* ^Subject:.barbara
! barbara

# вся почта для "subject: paul" на его внешний почтовый адрес.
:0
* ^Subject:.paul
! [email protected]

# вся почта для "subject: john" будет отправлена на его учетную запись на вашем сервере
# и копия на его персональный почтовый адрес ...
:0 c
* ^Subject:.john
! [email protected]

:0
* ^Subject:.john
! john

# Вся почта от ibm, с их обновлениями и информацией, будет отправлена к freaker'у,
# поскольку он будет управлять почтовым сервисом, и
# т.к. ibm не хочет, чтобы ей присылали уведомление, если письмо не дошло - об этом смотрите ниже!!
# ... это также необходимо, если ваш провайдер посылает вам письма с новостями и т.д. ...
:0
* ^From:.*[email protected]
! freaker

# Все сообщения от демона будут отброшены, в моем случае, будут
# сохранены в файл ... (используйте /dev/null, чтобы удалить их)
:0
* ^FROM_DAEMON
throwaway

# эти строки будут возвращать почту отправителю - когда она не дойдет
# до кого-то из вышеупомянутых пользователей ...
# содержимое файла "nosuchuser" будет отправлено в теле письма ...
# знайте ! вам нужно сделать такой файл ! - файл содержит текст
# "Пользователь не найден в поле subject, пожалуйста, используйте  "Subject: user",
# чтобы послать письмо для user, например, "subject: freaker" пошлет
# почту для freaker." Файл может быть длинный, а может и короткий :) ...
# "[email protected]" будет предотвращать циклирование между вашим сервером и
# другим сервером - для него требуется иметь ТОЧНЫЙ адрес электронной почты !.
# Иначе вы можете создать бесконечный цикл с сервером, который посылает почту
# на "ваш email" с темой письма типа "don't spend 500$
# at your ..." и т.п. ...
:0
  |(/usr/bin/formail -r -k \
     -A"X-loop: [email protected] "| \
       /usr/bin/gawk '{print }\
       /^/ &!HEADER \
         { system("/bin/cat nosuchuser"); \
         print"--" ;\
         HEADER=1 }' ) |\
         /usr/bin/sendmail -t

exit




4.3. файл "nosuchuser"

"(*** < file > *** text ***) nosuchuser"

Пользователь, с которым Вы хотите связаться,
не зарегистрирован в этой системе.

Пожалуйста, используйте строку subject с именем получателя
- например, "subject: freaker" посылает почту freaker'у,
зарегистрированному в этой системе.


4.4. файлы "crontab"

Если вы не знаете, как работает crontab :), лучше почитать руководство :) ... Вам нужно создать файл "checkmail", который будет смотреть, если есть соединение с Интернет... - я использую ppp соединение :), Ниже приведен пример того, как, используя cron, проверять каждые 10 минут, имеется ли соединение ppp, и если оно есть, доставлять почту.


4.4.1. checkformail

Файл .checkformail будет вызываться (он должен быть исполняемым) - и будет проверять, есть ли ppp соединение. Если оно есть, то будет производиться доставка почты. Crontab будет использовать этот файл, если вы используете файл cronentry (см. ниже) ... the .checkformail file will be called (needs to be executable as well) - and will look if the ppp link is up. If it is up - then it will fetch for mail. Crontab will use this file when you are using the below cronentry ...

"(*** < file > *** code ***) .checkformail"

#!/bin/sh
#

        cd /home/mailservice

        if [ -f /var/run/ppp0.pid ]; then
        /usr/local/bin/fetchmail -s > /dev/null 2>&
        fi


4.4.2. crontab

Файл cronentry должен быть загружен в crontab. В результате этого, каждые 10 минут будет запускаться .checkformail. Он не будет посылать никакую почту и никакую информацию на экран - т.к. я все переадресовываю на устройство null.

"(*** < file > *** text ***) cronentry"

0,10,20,30,40,50 * * * *  /home/mailservice/.checkformail 1> /dev/null 2> /dev/null


4.5. На сайте администратора

При использовании способа "A" необходимо сделать следующее ... на администраторском сайте вся почта для вашего домена должна идти на одного пользователя. Это довольно просто, и как только вы сделали - это будет работать.

Это возможно только при использовании более-менее новой версии sendmail; старый sendmail, скорее всего, работать не будет. Почитайте в руководстве о том, как заставить работать перенаправление почты.


4.5.1. (старый sendmail) Добавьте некоторые строки в файл sendmail.cf

Добавте следующие строки в ваш файл /etc/sendmail.cf, таким образом будет прочитан файл доменов .

"(*** < file > *** add ***) /etc/sendmail.cf"

# База данных обработаных доменов

Kmaildomains btree /etc/maildomains.db

# Добавте эти строки *В* Ruleset 98 !

R$+ < @ $+  . >		$: $1 < @ $2 > .
R$+ < @ $+ > $*		$: $(maildomains $1@$2 $: $1 < @ $2 > $3 $)
R$+ < @ $+ > $*		$: $(maildomains $2 $: $1 < # $2 > $3 $)
R$+ < @ $* > .		$: $1 < @ $2 . >


4.5.2. (новый sendmail) Добавьте некоторые строки в файл sendmail.cf

Это работает с более новой программой sendmail (проверено с sendmail версий 8.8.7, 8.8.8). Игнорируйте способ A и добавьте следующие строки ...

"(*** < file > *** add ***) /etc/sendmail.cf"

# База данных обработаных доменов

Fw/etc/sendmail.cw
Kvirtuser btree /etc/maildomains.db

*OR*

Fw/yourhomedir/sendmail.cw
Kvirtuser btree /yourhomedir/maildomains.db


4.5.3. (новый sendmail) отредактируйте файл /etc/sendmail.cw (или /ваш_каталог/sendmail.cw)

Если ваш файл sendmail.cw расположен в другом месте, то замените "/etc/sendmail.cw" на "/ваш_каталог/sendmail.cw". Поместите этот файл в домашний каталог. Необязательно делать это под правами root'а. Более того, это может составить угрозу системе безопасности, если не используется должным образом!

Этот файл может уже существовать, или должен быть создан. Если он уже существует, убедитесь, что Вы не записываете поверх него другие данные - или можете почитать мою прекрасную оговорку (про ответственность) :)

Во-первых, создайте файл /etc/sendmail.cw, который будет использоваться, чтобы переслать почту, предназначенную домену, определенному пользователю ... имеется пример ... (как вы уже знаете, имя "mailservice" может быть любым, какое захотите - оно может быть даже вашим именем входа в системе (как мое - freaker).

"(*** < file > *** text ***) /etc/sendmail.cw"

mydomain.dom		mailservice


4.5.4. создание файла /etc/maildomains

Сначала создайте файл /etc/maildomains, который будет использоваться, чтобы переслать почту, предназначенную домену, определенному пользователю ... имеется пример ... (как вы уже знаете, имя "mailservice" может быть любым, какое захотите - оно может быть даже вашим именем входа (как мое - freaker). (поместите файл /etc/maildomains в каталог /ваш_домашний_каталог/maildomains, как сказано выше, лишь измените соответствующим образом пути :)

Со СТАРЫМИ версиями sendmail:

"(*** < file > *** text ***) /etc/maildomains"

mydomain.dom		mailservice

С более НОВЫМИ версиями sendmail:

"(*** < file > *** text ***) /etc/maildomains"

@mydomain.dom		mailservice


4.5.5. пусть работает !

Со старыми и новыми версиями sendmail Вы должны сгенерировать базу данных btree. Для этого сделайте следующее: With the old & new sendmail versionsyou need to generate the btree (database) files, you'll need to do the following:

cd /etc (or /yourhomedir) makemap btree maildomains < maildomains

и после этого перезапустите sendmail. Все должно РАБОТАТЬ ! удачи :)


5. Автоматизация

Хорошо, теперь, когда все, описанное выше, работает ... (если не работает - даже не думайте об автоматизации, пока все не будет работать ...) - теперь - нам нужен некоторый скрипт, чтобы избежать головной боли у "mailadministrator'а" или root'а, при добавлении пользователей в файл procmailrc ... Ниже будет приведен пример для "более опытных пользователей", так как некоторые вещи ДОЛЖНЫ быть изменены ... - это пример для "Способа B - строки Subject". Он может быть легко приспособлен к "Способу A". "Способ B" будет больше использоваться (он более дешев), чем способ "A" - лично я решил использовать "Способ B" ...


5.1. "Каркас (скелет)"

Необходимо иметь файл заголовка и файл конца.


5.1.1. Файл .procmailrc-header (заголовок)

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

"(*** < file > *** text ***) .procmailrc-header"

:0 c
        passtrough

:0
* ^To:.*[email protected]
! freaker

:0
* ^Subject:.root
! root

:0
* ^Subject:.barbara
! barbara

:0
* ^Subject:.paul
! [email protected]

:0 c
* ^Subject:.john
! [email protected]

:0
* ^Subject:.john
! john

:0
* ^From:.*[email protected]
! freaker

:0
* ^FROM_DAEMON
throwaway


5.1.2. Файл .procmailrc-footer (конец)

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

"(*** < file > *** text ***) .procmailrc-footer"


:0
  |(/usr/bin/formail -r -k \
     -A"X-loop: [email protected] "| \
       /usr/bin/gawk '{print }\
       /^/ && !HEADER \
         { system("/bin/cat nosuchuser"); \
         print"--" ;\
         HEADER=1 }' ) |\
         /usr/bin/sendmail -t


exit


5.2. Скрипт addmail

Этот скрипт будет добавлять пользователя в файл заголовка. Присоединим заголовок и конец друг к другу - таким образом, получим полный файл .procmailrc. Строка, начинающаяся со знака "#", означает комментарий, и он не обязателен - это только информация для вас. :)

"(*** < file > *** code ***) addmail (* chmod 500 *)"

#/bin/sh
#
# Copyright (c)1997 by Gunther Voet. rev 1.0.1
# пожалуйста, оставьте этот Copyright, когда будете распространять этот файл


echo ""
echo "Addmail v1.0.1 by Gunther Voet, Freaker / TuC'97-98 (21/04/97)"
echo ""

if [ $1 ]; then

        if [ $2 ]; then


# создать резервную копию !


        cp /home/mailserv/.procmailrc-header /home/mailserv/.procmailrc-backup

# Добавить (>>) информацию в заголовочный файл ...

        echo ":0" >> /home/mailserv/.procmailrc-header
        echo "* ^Subject:.$1" >> /home/mailserv/.procmailrc-header
        echo "! $2" >> /home/mailserv/.procmailrc-header
        echo "" >> /home/mailserv/.procmailrc-header

# Скопировать содержимое заголовочного файла в .procmailrc -
# и добавить к нему окончание (.procmailrc-footer)


        cat /home/mailserv/.procmailrc-header > /home/mailserv/.procmailrc
        cat /home/mailserv/.procmailrc-footer >> /home/mailserv/.procmailrc

# Сделаем владельцем "mailserv" и чтение/запись ТОЛЬКО для группы user ...


        chown mailserv /home/mailserv/.procmailrc
        chgrp users /home/mailserv/.procmailrc
        chmod 600 /home/mailserv/.procmailrc
else
        echo "No DESTINATION mail address has been given ..."
fi

else
        echo "usage:"
        echo ""
        echo "syntax:  addmail from_user to_user(domain)"
        echo ""
        echo "example: addmail freaker [email protected]"
        echo ""
fi

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

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


6. Помогите!

Внизу я опишу некоторые общие проблемы. Если у вас появятся другие проблемы, НЕ описанные в этом разделе, то пишите мне - и я добавлю их, упомянув, возможно, ваше имя/email :). **ДО** того, как написать мне - пожалуйста, посмотрите, не забыли ли вы чего-нибудь - и если хотите получить какую-либо помощь от меня, посылайте мне более детальную информацию, включая скрипты, и то, что вам необходимо. Не надо присылать никаких бинарных файлов - я их все равно не буду запускать.


6.1. Скрипт автоматизации не работает:

  • файл сделан исполняемым?

  • путь к вашему shell - /bin/sh ?


6.2. Что вы подразумеваете под "анонимным mailserver'ом"?

  • Вы можете создать учетную запись типа "[email protected]" - и всю входящую на этот адрес почту пересылать на другой электронный адрес... никто не может просмотреть файл .procmailrc, и тогда ТОЛЬКО ВЫ будете знать этот адрес !


6.3. Моя кошка сдохла

  • Ну так в следующий раз не печатайте этот HOWTO на 200 граммовой бумаге, т.к. 10 страниц этого HOWTO будут весить 2 кг. - для кота это СЛИШКОМ ТЯЖЕЛО !


6.4. Моя собака сдохла

  • хмм - не могу ничего сказать по этому поводу ... Похороните и все ...


6.5. Linux?

  • Свободно распространяемая unix-подобная, posix-совместимая система - создатель Linus Torvalds ... Почему вы читаете этот HOWTO, если даже не знаете, что такое Linux ?


6.6. Вы можете мне помочь, обнаружить почтовую учетную запись?

  • Нет! - этот howto для ВАШЕЙ стороны, я не забочусь о вашем провайдере, нельзя никак получить ваш адрес электронной почты.


6.8. Как я могу получить "домен" ?

  • Спросите провайдера - он должен помочь вам с этим. Может потребоваться несколько дней и даже недель для выяснения этого в Internic - ваш провайдер может помочь.


6.9. Почему вы так "криво" используете это?

  • Потому что я не хочу тратить деньги - и потому, что хочу использовать это "криво" - я использую это - так к чему беспокоиться?


6.10. Файл "nosuchuser"?

  • Вы можете помещать в него все, что хотите - поместите туда некоторую необходимую информацию так, чтобы автор письма знал, что случилось с его "недошедшей" почтой.


6.11. Мои пользователи могут писать/посылать почту тоже?

  • Это не имеет никакого отношения к тому, что я объяснил вам, читайте руководство к sendmail ... - чтобы ПРИНИМАТЬ почту, она должна быть доступна на сервере.


6.12. Необходимо ли каждому пользователю иметь возможность входа в мою систему?

  • Нет .. но, для пользователей очень тяжело вообще не иметь доступа к интернет :) ... У вас может быть сеть с маскарадингом, и ваш компьютер может быть подключен к этой сети, поэтому пользователям надо будет отправлять почту подобным образом; можно также создать связь между почтой и доской объявлений; вы можете пересылать почту на шлюз fidonet :) Много разных причин для того, чтобы не давать пользователям возможности входа в систему.


6.13. скелет?

  • короче, мне просто нравится это слово.


6.14. Addmail?

  • Никаких вопросов - это все для автоматизации - вы лучше будьте уверены относительно того, что хотите сделать ... т.к. это МОЖЕТ быть троянский конь, знайте :))) (это не так, но вам необходимо знать, как создаются скрипты, прежде чем задавать вопросы). Он достаточно прост, чтобы понять - вот почему в нем я поместил комментарии . *ЕСЛИ* вы будете распространять этот скрипт - оставьте, пожалуйста, в нем мой Copyright! спасибо :).


6.15. Почему ты такой жестокий?

  • Я не жестокий :) я хороший :) я наилучший парень в мире, во вселенной! ТЕПЕРЬ ПРОВАЛИВАЙТЕ! (я только хотел в полной мере осветить тему и не слишком далеко уходить от нее - так вот :) это все).


6.16. Разве вы не получали жалоб на свой чрезмерный язык?

  • Нет еще, но мог бы, я фильтрую все, что содержит слова 'чрезмерный' и 'язык' ('excessive' и 'language') :) я не знаю :))


6.17. Почему этот howto больше всех отличается от остальных?

  • потому что иногда чтение простого howto МОЖЕТ быть скучным ... я хотел добавить сюда кое-что свое ...


6.18. Локально мои домены работают, но удаленно нет

  • проверьте ваш файл "sendmail.cw", т.к. домены должны быть добавлены в него !


7. Конец

Это звучит как конец ... Если вы нашли любые нежелательные ошибки (или особенности :)), то свяжитесь со мной ... отправляйте мне любые комментарии и предложения. Если вам все не надоест после чтения этого документа, пожалуйста, посетитте http://tuc.ml.org/ хе-хе-хе.

Мои благодарности:

Hannes van de Vel: за поддержку, Tetsu Isaji: японский перевод и уведомление меня об ошибках :), Greg Hankins: за уведомление меня о нескольких ошибках в sgml версии, Linus Torvalds: конечно ... без его помощи этого howto не было бы вообще!