Наружные работы
Прежде всего, для продолжения настройки необходимо настроить окружение, чтобы в нем было уютно работать. Для начала предлагаем установить ssh, чтобы все дальнейшие манипуляции производить не из консоли.
apt-get install ssh |
После этого подключаемся любым ssh-клиентом на 22 порт нашего серера, вводим имя и пароль администратора. Также рекомендуем установить Midnight Commander для упрощения работы с файлами и редактирования конфигурационных файлов.
apt-get install mc |
Добавим остальные установочные диски в список доступных источников пакетов командой.
apt-cdrom |
Выполняем эту команду для каждого диска. При желании можно воспользоваться сетевыми источниками пакетов и security updates с сайта Debian.
Для этого снова открываем и добавляем в него следующие строки
mcedit /etc/apt/sources.list: deb http://security.debian.org/ etch/updates main contrib deb-src http://security.debian.org/ etch/updates main contrib |
Далее обновим список пакетов и саму систему.
apt-get update apt-get upgrade |
На этом все подготовительные мероприятия считаем законченными.
Postfix
Установим нужные для работы почтового сервера пакеты.
apt-get install postfix libsasl2 libsasl2-modules sasl2-bin cyrus-imapd-2.2 cyrus-pop3d-2.2 cyrus-admin-2.2 |
Во время первоначальной настройки postfix укажите конфигурацию для Интернет-сайта (Internet Site). На вопрос об имени почтового сервера-оставьте вариант по-умолчанию или укажите свой. В нашем случае это было mailserver.test.ru
Настроим сервер авторизации saslauthd на использование базы данных паролей sasldb2. Для этого отредактируем файл /etc/default/saslauthd:
mcedit /etc/default/saslauthd: START=yes |
Запустим сервис командой:
/etc/init.d/saslauthd start |
Сейчас проверим правильно ли он работает, но для начала необходимо добавить хотя бы одного пользователя.
mailserver:~# saslpasswd2 test Password: Again (for verification): mailserver:~# sasldblistusers2 test@mailserver: userPassword mailserver:~# testsaslauthd -u test -p test |
Если в результате этих манипуляций вы получили сообщение
"0: OK "Success.", значит все в порядке и можно продолжать. Если же авторизация не прошла - смотрите файл /var/log/auth.log и повторяйте, повторяйте и ещё раз повторяйте все шаги, пока не получится нужный результат.
У почтового сервера postfix есть одна особенность - после запуска он работает в chroot окружении, которое находится в папке /var/spool/postfix/.
mailserver:~# ls -al /var/spool/postfix/ total 76 drwxr-xr-x 19 root root 4096 Feb 12 16:27 . drwxr-xr-x 8 root root 4096 Feb 12 16:26 .. drwx------ 2 postfix root 4096 Feb 12 16:27 active drwx------ 2 postfix root 4096 Feb 12 16:27 bounce drwx------ 2 postfix root s 4096 Feb 12 16:27 corrupt drwx------ 2 postfix root 4096 Feb 12 16:27 defer drwx------ 2 postfix root 4096 Feb 12 16:27 deferred drwxr-xr-x 2 root root 4096 Feb 12 16:27 etc drwx------ 2 postfix root 4096 Feb 12 16:27 flush drwx------ 2 postfix root 4096 Feb 12 16:27 hold drwx------ 2 postfix root 4096 Feb 12 16:27 incoming drwxr-xr-x 2 root root 4096 Feb 12 16:27 lib drwx-wx--T 2 postfix postdrop 4096 Feb 12 16:27 maildrop drwxr-xr-x 2 postfix root 4096 Feb 12 16:27 pid drwx------ 2 postfix root 4096 Feb 12 16:27 private drwx--s--- 2 postfix postdrop 4096 Feb 12 16:27 public drwx------ 2 postfix root 4096 Feb 12 16:27 saved drwx------ 2 postfix root 4096 Feb 12 16:27 trace drwxr-xr-x 3 root root 4096 Feb 12 16:25 usr |
Это сделано из соображений безопасности, однако несколько усложняет сам процесс настройки. Так как postfix общается с остальными приложениями в большинстве случаев посредством socket'ов, и выше своего chroot окружения выбраться не может, то эти сокеты приходится переносить в доступную postfix-папку.
Учитывая то, что для авторизации пользователей postfix будет использоваться демон saslauthd, нам нужно перенести его socket в рабочую директорию нашего сервера /var/spool/postfix/. Самый простой способ сделать это заключается в монтировании в нужную папку директории с уже созданным сокетом демона saslauthd.
Делается это редактированием файла /etc/fstab.
mcedit /etc/fstab: /var/run/saslauthd /var/spool/postfix/var/run/saslauthd none rw,bind 0 0 |
Не забудьте поставить [Enter] после последней строки. Также нужно не забыть создать папку, куда мы смонтируем сокет демона авторизации.
mkdir -p /var/spool/postfix/var/run/saslauthd mount /var/run/saslauthd |
Возникла проблема с монтированием в системе Ubuntu 10.04. mount: can't find /var/run/saslauthd in /etc/fstab or /etc/mtab В чем дело, точно не известно, проблема не решена. |
Сейчас сконфигурируем postfix для использования sasl авторизации.
mcedit /etc/postfix/main.cf: smtpd_sasl_local_domain = smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_relay_domains smtpd_sasl_authenticated_header = yes smtpd_sasl_application_name = smtpd |
*В одном конфиге есть, в другом нет. Так что опционально, проверить, будет работать или нет. |
Существует и упрощенный вариант редактирования этого файла командой postconf –e "smtpd_sasl_auth_enable = yes" и т.д.Сейчас мы запретим отсылать почту через наш SMTP шлюз без авторизации. Для этого создадим файл /etc/postfix/sasl/smtpd.conf со следующим содержимым.
pwcheck_method: saslauthd |
Перезапустим наш postfix сервер и внимательно просмотрим следующие файлы на предмет ошибок:
/var/log/mail.err
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.log.
/etc/init.d/postfix restart tail /var/log/mail.err tail /var/log/mail.info tail /var/log/mail.warn tail /var/log/mail.log |
Если все чисто, сухо и гладко - обратимся к утитиле telnet, для того, чтобы подключиться к нашему серверу.
mailserver:~# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailserver.test.ru ESMTP Postfix (Debian/GNU) 250-mailserver.test.ru 250-PIPELINING 250-SIZE 10240000 250-VRFY250-ETRN 250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME250 DSNQUIT Connection closed by foreign host. |
Если у вас нечто похожее - продолжаем, если же подключение не удалось - проверяем где вы вставили лишний пробел или нечаянно удалили символ.
Для того, чтобы "подружить" saslauthd и postfix необходимо выполнить следующее:
adduser postfix sasl |
Оговоримся, что мы не будем вытанцовывать с бубном для настройки шифрования. Если кому-то это будет интересно, то найти необходимую информацию не составит большого труда и экспериментировать на уже работающей базе будет проще. Сейчас же продолжим наше руководство и расскажем как предоставить IMAP4/POP3 доступ к почтовому ящику.
Cyrus-imapd
Cyrus - это мощный набор POP3/NNTP/IMAP и некоторых других демонов для создания полноценных сервисов работы с электронной почтой. Официальный сайт проекта находится здесь: http://cyrusimap.web.cmu.edu/. В нашем случае cyrus будет заниматься получением почты от postfix, раскладыванием ее по папкам и предоставлению к ней доступа пользователям. Отредактируем файл /etc/imapd.conf.
mcedit /etc/imapd.conf : admins: cyrus allowplaintext: yes sasl_mech_list: PLAIN sasl_pwcheck_method: saslauthd auxprop sasl_auxprop_plugin: sasldb |
Обратите внимание, что cyrus так же, как и saslauthd, придется взаимодействовать с postfix, поэтому их нужно сделать доступными друг другу. Воспользуемся уже известным механизмом:
mcedit /etc/fstab : /var/run/cyrus /var/spool/postfix/var/run/cyrus none rw,bind 0 0 |
Не забываем создать папки для cyrus.
mkdir -p /var/spool/postfix/var/run/saslauthd |
И выполнить команду:
mount /var/run/cyrus |
Сейчас предоставим возможность cyrus забирать почту у postfix. Отредактируем файл /etc/postfix/main.cf:
mailbox_transport = lmtp:unix:/var/run/cyrus/socket/lmtp |
Добавим почтовый сервер в группу lmtp:
addgroup lmtp adduser postfix lmtp |
И выполним следующее:
dpkg-statoverride --remove /var/run/cyrus/socket dpkg-statoverride --force --update --add cyrus lmtp 750 /var/run/cyrus/socket |
Добавим еще одну опцию: ()
local_recipient_maps = |
В случае с pam-авторизацией по логинам и паролям системных пользователей все бы работало без проблем. Но когда имена и пароли хранятся в формате, отличном от системного, необходимо указать данную опцию. Она означает "принимать письма для любого адресата". Это, конечно, не лучший выход, однако лучшего пока найти не удалось.Добавим пользователя cyrus в нашу базу учетных записей:
saslpasswd2 -c cyrus |
Введите пароль, когда вас об этом попросят, и перезапустим наши демоны:
/etc/init.d/postfix start /etc/init.d/cyrus2.2 restart /etc/init.d/saslauthd restart |
Если вы без ошибок сделаете все, что было описано выше, то теоретически к этому моменту уже можете принимать и отправлять письма, создавать и удалять папки на IMAP-сервере, устанавливать квоты и права доступа на папки средствами утилиты cyradm.К примеру, можно создать скрипт, который будет создавать пользователю папки Sent, Trash, Drafts, Spam средствами утилиты cyradm.Так как все дальнейшие действия по настройке в целях тестирования потребуют отсылать и принимать почту, приведем краткую инструкцию по созданию почтовых аккаунтов:
saslpasswd2 –c <имя пользователя> cyradm –user cyrus localhost localhost>cm user.<имя пользователя> localhost>cm user.<имя пользователя>.INBOX localhost>cm user.<имя пользователя>.Sent localhost>cm user.<имя пользователя>.Draft localhost>cm user.<имя пользователя>.Trash |
При желании, можно задать квоты на количество места в папках и другие параметры, с которыми можно познакомиться набрав "?" или "help" в утилите cyradm.
От себя рекомендую установить утилиту gyrus – графическая утилита администрирования cyrus, очень сильно облегчает процесс создания и настройки ящиков в отличие от текстовой консоли, в которой можно запутаться. |
Использование доменного почтового ящика.
После установки понадобилось забирать почту из внешнего ящика и раскладывать по ящикам локальных юзеров.
Как забрать почту.
Для скачивания почты используем программу fetchmail, также советую поставить fetchmailconf, графический конфигуратор фечмейла, там все достаточно просто и понятно, поэтому нет смысла описывать, методом научного тыканья за день можно настроить.
Можно считать что фечмейл умеет забирать почту, теперь надо его заставить это делать автоматически.
Далее.
Я решал следующим способом:
в файле /etc/crontab прописывается приблизительно следующее:
*/1 * * * * user fetchmail -N -d0 -f /home/user/.fetchmailrc
Также можно сделать следующее:
/etc/default/fetchmail
START_DAEMON=yes |
В дополнениях см. статью по настройкам crontab и fetchmail |
Отправка почты.
mcedit /etc/postfix/mail.cf |
указываем сервер пересылки
relayhost = mail.dp.ukrtel.net |
Вроде и все.
По крайней мере у меня заработало. Локальная почта пересылалась от юзера к юзеру, внешняя почта тоже приходила куда надо.
Авторизация на релее.
Указать в main.cf сервер в качестве релея:
relay = smtp.apex.dp.ua
Создать файл /etc/postfix/sasl_password с правами 600 и содержимым:
smtp.trifle.net login:password
не забыть сделать # postmap /etc/postfix/sasl_password
Дописать в main.cf строки:
# говорим smtp-client-у постфикса использовать smtp-аутентификацию
smtp_sasl_auth_enable = yes
# база с логинами/паролями
smtp_sasl_password_maps = cdb:/etc/postfix/sasl_password
# отключаем использование методов, допускающих анонимную sasl-аутентификацию, одновременно разрешая использование
# plaintext-методов (т.к. дефолтное значение noplaintext, noanonymous)
smtp_sasl_security_options = noanonymous
# указываем использовать исключительно plain-метод (особенно важно если на стороне сервиса поддерживаются только PLAIN-пароли.)
smtp_sasl_mechanism_filter = PLAIN
Мой конфиг, вернее его часть, которая отвечает за авторизацию.
smtpd_sasl_local_domain = smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_relay_domains smtpd_sasl_authenticated_header = yes smtpd_sasl_application_name = smtpd smtp_sasl_password_maps = hash:/etc/postfix/sasl_password smtp_sasl_mechanism_filter = PLAIN |
Обращаю внимание:
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
и
smtp_sasl_password_maps = hash:/etc/postfix/sasl_password
smtp_sasl_mechanism_filter = PLAIN
Изначально там стояло smtpd, из-за чего на релее не проходила авторизация.
Копирование всей входящей и исходящей почты на отдельный ящик.
Для организации важно сохранение входящей и исходящей переписки, например для резервного копирования.
Postfix позволяет это реализовать различными методами.
http://www.mdex.nnov.ru/page/kontrol-perepiski-postfix.html#cut
Контроль переписки в Postfix («большой брат» следит за тобой)
Задача - требуется контролировать переписку определенных сотрудников (официальная версия - создать backup почтовой переписки с возможностью последующего просмотра). Другими словами необходимо, чтобы при отправке письма пользователем (например, Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ), доставлял его почту как обычно адресату, а также дублировал это письмо в определенный ящик (например, Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ).
На первый взгляд задача довольно не простая, но как оказалось - всё довольно легко реализуется. Имеем - операционная система FreeBSD и почтовый сервер на базе Postfix. Вот какие возможности для решения этой задачи предоставляет нам Postfix:
always_bcc = address
Доставляет копии ВСЕХ сообщений (входящих и исходящих) на указанный адрес (поддерживается с Postfix v.2.1). Например, указав в /usr/local/etc/postfix/mail.cf строкуalways_bcc = Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. можно сделать полный бэкап всей почты на адрес Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. , вот только не повезет тому, кто это всё разгребать будет.
sender_bcc_maps = type:table и recipient_bcc_maps = type:table
Таблицы соответствия отправителя/получателя с адресами доставки копий сообщений (функция доступна в Postfix 2.1 и выше.) То что нам и нужно.
Рассмотрим 2 варианта реализации - на основе файлов (индексированных карт hash) и базы данных MySQL.
Способ с использованием индексированных hash карт
Мы можем контролиривать, что хотим получить в результате - копировать на определенный ящик только отправляемые пользователем сообщения или только входящие, а может и то и другое.
Для примера рассмотрим вариант копирования исходящих сообщений:
1. Создаем файл в каталоге /usr/local/etc/postfix/, содержащий записи о том с какого почтового адреса копировать почту и на какой отправлять копии - назовем его sender_bcc. Добавляем в него строчку в формате:
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
2. Добавляем в main.cf строчку
sender_bcc_maps = hash:/usr/local/etc/postfix/sender_bcc
3. Обязательно создаем индексированный файл:
postmap /usr/local/etc/postfix/sender_bcc
4. Перезагружаем постфикс и любуемся копированием исходящей почты.
Аналогичные шаги нужно проделать для получения возможности копирования входящей почты. Вместо sender_bcc_maps следует использовать recipient_bcc_maps.
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc
Внимание! После внесения изменений не забываем перестроить хэш:
postmap /usr/local/etc/postfix/recipient_bcc postmap /usr/local/etc/postfix/sender_bcc
Способ с использованием MySQL
Подразумевается, что вы уже используете MySQL совместно с Postfix для хранения учетных записей, транспорта и т.д.
1. Создаем табличку bcc в вашей базе данных
CREATE TABLE bcc ( id int(10) unsigned NOT NULL auto_increment, sender varchar(128) NOT NULL default '', recipient varchar(128) NOT NULL default '', copy varchar(128) NOT NULL default '', PRIMARY KEY (id) ) TYPE=MyISAM;
2. в /usr/local/etc/postfix/ создаем файлы sender_bcc.cf и recipient_bcc.cf:
sender_bcc.cf
user = postfix_user password = postfix_password dbname = mail_database query = SELECT copy FROM bcc WHERE sender = '%s' hosts = 127.0.0.1
recipient_bcc.cf
user = postfix_user password = postfix_password dbname = mail_database query = SELECT copy FROM bcc WHERE recipient = '%s' hosts = 127.0.0.1
3. В main.cf добавляем строчки
sender_bcc_maps = mysql:/usr/local/etc/postfix/sender_bcc.cf recipient_bcc_maps = mysql:/usr/local/etc/postfix/recipient_bcc.cf
4. Перезапускам Postfix для применения изменений. Изменения данных в таблице MySQL bcc применяются без перезапуска Postfix.
Избавляемся от дублирования сообщений bcc_maps
Чтобы не происходило дублирования почты при использовании bcc_maps в master.cf следует добавить строчку:
-o receive_override_options=no_address_mappings
В моём случае это выглядит так:
sender_bcc_maps = hash:/usr/local/etc/postfix/sender_bcc
0Напоследок - неплохая статья по настройке Postfix , хотя сам несколько иначе строил, но руки пока не доходят написать свою статью полностью. Хотя есть некоторые наработки, описания которых не встречал в сети.
У себя я реализовал так.
Для копирования входящей почты использовал вышеуказанный метод с виртуальными ящиками.
В файле /etc/postfix/virtual сделал следующее
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. , Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. , Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. |
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. — виртуальная запись (первая в строке), вторая в строке — этот же ящик, уже реальный, на который пересылается почта, пришедшая на первый, виртуальный, через запятую перечисляются все остальные получатели: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. , Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. .
По этому принципу все входящие письма пересылаются на backup — ящик.
Для копирования исходящей почты использовал метод из статьи «большой брат» следит за тобой.
В файле /etc/postfix/main.cf добавил строчку
sender_bcc_maps = hash:/usr/local/etc/postfix/sender_bcc
1Дополнения.
>Настройка crontab
файл /etc/crontab - файл настроек пользователя root
Чтобы проверить подключен ли он набираем crontab -l
Чтобы подключить новый файл настроек набираем crontab filename
Пример:
sender_bcc_maps = hash:/usr/local/etc/postfix/sender_bcc
2Чтобы заставить выполняться задачу в 15 часов 30 минут под пользователем root заводим в /etc/crontab
Пример:
sender_bcc_maps = hash:/usr/local/etc/postfix/sender_bcc
3Чтобы заставить выполняться задачу раз в 6 часов под пользователем php заводим в /etc/crontab
Пример:
sender_bcc_maps = hash:/usr/local/etc/postfix/sender_bcc
4Чтобы заставить выполняться задачу раз в 30 минут под пользователем php заводим в /etc/crontab
Пример:
sender_bcc_maps = hash:/usr/local/etc/postfix/sender_bcc
5Для посылки логов ошибок на email пишем в /etc/crontab следующее
Пример:
sender_bcc_maps = hash:/usr/local/etc/postfix/sender_bcc
6
Опции fetchmail
>> fetchmail (1) ( Русские man: Команды и прикладные программы пользовательского уровня )
Ключ fetchmail обнаружен в базе ключевых слов.
СИНТАКСИС
sender_bcc_maps = hash:/usr/local/etc/postfix/sender_bcc
7ОПИСАНИЕ
sender_bcc_maps = hash:/usr/local/etc/postfix/sender_bcc
8ОСНОВНЫЕ ОПЕРАЦИИ
sender_bcc_maps = hash:/usr/local/etc/postfix/sender_bcc
9АУТЕНТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЕЙ И ШИФРОВАНИЕ
postmap /usr/local/etc/postfix/sender_bcc
0АДМИНИСТРАТИВНЫЕ ОПЦИИ
postmap /usr/local/etc/postfix/sender_bcc
1СБОИ ПРИ ПРИЕМЕ ПОЧТЫ
postmap /usr/local/etc/postfix/sender_bcc
2ФИЛЬТРАЦИЯ СПАМА
postmap /usr/local/etc/postfix/sender_bcc
3КОНФИГУРАЦИОННЫЙ ФАЙЛ
postmap /usr/local/etc/postfix/sender_bcc
4ВЗАИМОДЕЙСТВИЕ С RFC 822
postmap /usr/local/etc/postfix/sender_bcc
5ИСПОЛЬЗОВАНИЕ ДОМЕННЫХ ПОЧТОВЫХ ЯЩИКОВ
postmap /usr/local/etc/postfix/sender_bcc
6ФАЙЛЫ
postmap /usr/local/etc/postfix/sender_bcc
7ОКРУЖЕНИЕ
postmap /usr/local/etc/postfix/sender_bcc
8ОШИБКИ И ИЗВЕСТНЫЕ ПРОБЛЕМЫ
postmap /usr/local/etc/postfix/sender_bcc
9АВТОРЫ
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc
0Статистика
isoqlog
просто ввести в консоли. Автоматически генерит сатистику по логам
И как обычно:
- смотрим стоимость моих услуг;
- записываем мои контакты.