Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
www.lissyara.su
—> статьи
—> FreeBSD
|
portsnap fetsh && portsnap extract |
создадим вспомогательную папочку для работы
mkdir /root/workmail
Шаг 1 - MYSQL/MARIADB
cd /usr/ports/databases/mariadb100-server/ make install && make clean |
Все опции здесь можно смело убрать.
Спрашивать будет много - остальное все по умолчанию.
Поставим в автозагрузку
echo 'mysql_enable="YES"' >> /etc/rc.conf |
смотрим где должен находиться конфигурационный файл MySQL
less /usr/local/etc/rc.d/mysql-server |
ищем строки
|
получается должен быть здесь /var/db/mysql/my.cnf
Создаем конфигурационный файл, скопировав из примеров
cp /usr/local/share/mysql/my-small.cnf /var/db/mysql/my.cnf |
Подредактируем некоторые параметры в my.cnf
/var/db/mysql/my.cnf
# Я хочу использовать связанные между собой таблицы, поэтому нуждаюсь в
# поддержке таблиц InnoDb.
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /var/db/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/db/mysql
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
Запускаем MySQL
/usr/local/etc/rc.d/mysql-server start Starting mysql. /usr/local/etc/rc.d/mysql-server status mysql is running as pid 40233 |
создадим следующий файлик:
/root/workmail/secure.sql
|
Все эти команды можно выполнить и так в сеансе клиента mysql.
Заливаем это в mysql
Таблицы MYSQL
Рекомендую использовать файлы для создания баз данных, таблиц в mysql. Это наглядней, и при ошибке проще откатывать. Создал базу, удалил, опять создал с исправлениями.
Напишем файл с командами создающими базу с пользователями /root/workmail/mkmaildb.sql
Теория такова: создадим таблицу с, почти минимальным, количеством полей. Подсмотреть рекомендуемые типы и максимальную длину значений в столбцах можно, к примеру здесь /usr/local/share/doc/dovecot/example-config/dovecot-sql.conf.ext.
Email идет одним полем, для возможности поддержки нескольких доменов и обеспечения уникальности почтовых адресов UNIQUE.
Home тоже UNIQUE для предотвращения указания разным учетным записям одной папки сохранения почты. Внимание на то, с какими home создаются пользователи test@testdomain.ru и test@newdomain.ru. С такой конфигурацией ошибки исключены. Ящиков в не основных доменах не много, и писать domain_user для них несложно, а исключить ошибки с большим количеством ящиков важно.
Попутно создаем пользователя mailreader, даем ему только права select на всю базу mail. В конце файла этому пользователю задается пароль. Сразу вносим некоторые записи в базу. Этого достаточно чтобы завести почтовую систему.
/root/workmail/mkmaildb.sql
|
Внимание на то какие домены добавляем, на пользователей и на предпоследнюю строчку где ставим свой пароль.
Заливаем все это добро в mysql
mysql < /root/workmail/mkmaildb.sql |
Проверить как работает - зайти под mailreader
mysql -u mailreader -p use mail; select * from users; \q |
Шаг 2 - Dovecot 2
Что мы ставим - IMAP, POP3 сервер - сервис висящий на портах 143 и 110 (как правило + еще те что с SSL) и отдающий клиентам их почтовые сообщения по соответствующим протоколам. В нашем случае он будет еще и LDA local delivery agent - агент локальной доставки - тот кто распихивает почту по каталогам пользователей.
cd /usr/ports/mail/dovecot2 make install && make clean |
Выбранные опции:
  [ * ]   DOCS
  [ * ]   EXAMPLES
  [ * ]   KQUEUE
  [ ]   LDAP
  [ ]   LIBWRAP
  [ ]   LUCENE
[ ] LZ4
  [ * ]   MYSQL
  [ ]   PGSQL
  [ ]   SOLR
  [ ]   SQLITE
  [ * ]   SSL
  [ ]   VPOPMAIL
пояснения к некоторым опциям
KQUEUE - масштабируемый интерфейс уведомления о событиях, позволяет получать
уведомления о событиях на указанные цели очень быстро.
LIBWRAP - для введения ограничений на доступ к сервисам по IP.
LUCENE - возможность подключить сторонний полнотекстовый поиск.
MYSQL - будем держать базу пользователей в MYSQL
SOLR - возможность подключить сторонний полнотекстовый поиск от apache
SSL - защита соединения
VPOPMAIL - позволяет создавать и работать с виртуальными доменами без
использования баз данных таких как: mysql, pgsql и т. д.
разрешим запуск dovecot при старте системы
echo 'dovecot_enable="YES"' >> /etc/rc.conf |
Приступим к настройке.
Пользователей будем использовать только виртуальных, из базы данных в mysql. Не вижу причин поддерживать две базы данных для пользователей, это только усложнит настройку, а положительных моментов я не вижу. За место хранения почтовых ящиков примем точку монтирования /MAIL.
Здесь должна быть врезка о проблеме выбора/создания/оптимизации raid/fs в зависимости от типа почтовых ящиков, которые будут использоваться.
Небольшое отступление: буду стараться использовать понятие почтовый каталог для каталогов внутри почтового ящика, видимым нами как папки Spam Drafts Sent.
mkdir /MAIL |
Доступ ко всем почтовым ящикам будем осуществлять от единого vmail. Разные UID/GID усложнят настройку дополнительных фишек Dovecot ценой, возможно, большей безопасности. Чем то надо жертвовать. (честно говоря я просто не пробовал).
Создадим пользователя и группу
pw groupadd -n vmail -g 999 pw useradd -n vmail -u 999 -g vmail -s /usr/sbin/nologin chown vmail:vmail /MAIL chmod 750 /MAIL |
Внесем минимальные настройки в конфигурационные файлы чтобы dovecot завелся. Это будет отправная точка для усложнения конфигурации.
cd /usr/local/etc/dovecot cp -R /usr/local/share/doc/dovecot/example-config/* /usr/local/etc/dovecot/ |
dovecot.conf
|
Протокол я оставил только IMAP. Не вижу причин поддерживать pop3. И протокол TCPv4 только.
перейдем на уровень ниже для удобства
cd conf.d/ |
10-auth.conf
|
В 10-auth.conf задаются параметры аутентификации. auth_mechanisms в каком виде пароли используется клиентами при подключении. PLAIN просто текст, в открытом виде.
Рекомендую использовать PLAIN, с другими вариантами легко нарваться на проблемы с другими интересными функциями dovecot, и поддержкой со стороны клиентов. А открытую передачу паролей закроем потом.
Закомментируем строку !include auth-system.conf.ext отвечающую за системных пользователей. Не вижу смысла иметь две базы пользователей.
!include auth-sql.conf.ext включим поиск пользователей в SQL
смотрим auth-sql.conf.ext
здесь passdb - для проверки пароля
userdb — для местонахождения почты пользователями, последнее можно сделать статически - без дергания базы данных.
Очередные аргументы показывают - /usr/local/etc/dovecot/dovecot-sql.conf.ext
cd ../ |
dovecot-sql.conf.ext
|
В файле dovecot-sql.conf.ext задаются параметры соединения с базой данных, и какие именно поля мы там запрашиваем. default_pass_scheme указывает в каком виде находятся пароли в базе данных - PLAIN (открытым текстом) Можно передавать пароли по сети в PLAIN а хранить как нить зашифрованными (варианты и как настроить см "Возможности dovecot2"). Внимание на пробелы - именно так: connect = host=/tmp...
Внимание здесь определяется что будет использоваться в качестве username (user@domain)
не забудем выполнить рекомендации в начале этого конфига
chmod 0600 dovecot-sql.conf.ext chown root dovecot-sql.conf.ext |
Переходим опять уровнем выше
cd conf.d/ |
На этапе настройки видеть подробный вывод ошибок сервиса необходимо, поэтому раскомментируем нужные строчки в следующем конфиге:
10-logging.conf
|
10-master.conf
|
Внимательно, с фигурными скобками, -закомментил слушателя на порту 993 (с ssl по умолчанию), не видел ни разу примера чтоб им пользовались, да и сертификаты мы сейчас временно отключим. Можно будет включить и работать с этими портами позже, когда настроим.
10-mail.conf
|
Здесь находится важный параметр mail_location. Он определяет не только местоположение почтовых ящиков, но и формат в котором будет храниться почта. Доступны варианты (источник http://wiki2.dovecot.org/MailboxFormat):
mbox - Традиционный способ хранения сообщений в UNIX. Один файл содержит несколько сообщений. Лучше сразу отказаться, если будут большие почтовые ящики (они будут точно!)- будут проблемы.
Maildir - Один файл содержит одно сообщение. Надежный выбор, так как файлы никогда не изменяются и все операции являются атомарными.
sdbox, mdbox - Собственный высокопроизводительный формат почтовых ящиков Dovecot . Сообщения хранятся в одном или нескольких файлах, каждый из которых содержит одно или несколько сообщений.
Я выбрал Maildir, надеясь на совместимость с Courier IMAP, вдруг что. Сейчас думаю, надо было повнимательнее присмотреться к sdbox, mdbox форматам.
Итак строка
mail_location = maildir:~/Maildir
формат ящиков maildir
местоположение /home/Maildir, home возьмем из базы данных. Та же строка в другом виде maildir:%h/Maildir Почему не поступить проще, к примеру так: maildir:/%h/, зачем дополнительный уровень вложенности? - желательно иметь домашний каталог, отдельно от почтового, это всплывет позже при настройке, дополнений типа Sieve.
Какие переменные можно использовать в пути к почтовому ящику см. 10-mail.conf
Дополнительно можно:
сменить разделитель используемый для каталогов внутри почтового ящика. По умолчанию Maildir/.folder.subfolder можно получить Maildir/folder/subfolder установив mail_location = maildir:/mail/~/Maildir:LAYOUT=fs (кроме визуального удобства, если будем лазить по каталогам в консоли, не вижу преимуществ). Если выберете, подсматривайте в оригинальную документацию для отслеживания где еще придется делать дополнительные телодвижения.
Хранить отдельно control файлы (вспомогательные)
dovecot-uidlist — соответсвие IMAP UID <-> Maildir filename
dovecot-keywords - Maildir filename flag (a..z = 0..25) <-> keyword name соответствие
прописав mail_location = maildir:/mail/~/Maildir:CONTROL=/var/no-quota/%u можно хранить их отдельно от почтовых сообщений. Имеет смысл только при использовании квот файловой системы.
Еще можно задать местоположение индексных файлов,
mail_location = maildir:/mail/~/Maildir:INDEX=/var/indexes/%u, этим займемся для общих почтовых каталогов. Здесь переопределять это смысла я не вижу. Можно отключить создание индексных файлов :INDEX=MEMORY.
10-ssl.conf
|
пока отключим ssl, завести бы так...
15-lda.conf
|
полезный параметр, позволяет автоматически создавать почтовые ящики пользователей, по факту прихода почты для него. (LDA локальный агент доставки)
открывем вторую консоль,
tail -f /var/log/maillog |
на первой консоли
/usr/local/etc/rc.d/dovecot start Starting dovecot. /usr/local/etc/rc.d/dovecot status dovecot is running as pid 2610. netstat -na | grep LISTEN tcp4 0 0 *.143 *.* LISTEN |
смотрим есть ли ругань, на консоли. Настраиваем учетные записи в почтовом клиенте, если получится, последние версии thunderbird стали слишком умными, пытаются проверить там чего-то, не дают завершить настройку, если не проходит соединение. Возможно не пропрет без smtp сервера. Простой пароль, без защиты соединения, пытаемся подключиться, смотрим лог. Внимание пользователь с доменной частью!!! mailadmin@tstdomain.ru
Что, я считаю необходимым сделать дополнительно:
Уже привычно что в почтовом клиенте, присутствуют почтовые каталоги Отправленные, Черновики, Корзина. Они могут быть созданы автоматически, почтовым клиентом. Но с этим возможны траблы. Представим, пользователь только получил учетную запись, стандартных каталогов нет, и он их создает вручную, на русском языке. Какие каталоги создадутся на сервере? На русском? Да еще если клиент показывает русские названия, а работает с папками на сервере Sent, Drafts ….
Для того чтобы избежать лишних проблем и сэкономить время и нервы в будущем, желательно, что бы стандартная структура для каждого почтового ящика создавалась автоматом.
15-mailboxes.conf
|
namespace inbox это наше private namespace (подробнее об этом далее). В 15-mailboxes.conf комментариев достаточно чтобы понять что мы сделали (перевод конфигов - еще одна статья здесь "Dovecot2 config files RUS").
/usr/local/etc/rc.d/dovecot restart |
проверим.
Готово! Далее для сбора полноценного стенда нам потребуется настроить postfix.
Шаг 3 - Postfix
Что это мы ставим - MTA mail transfer agent - это сервис висящий как правило на порту 25 (и не только) и принимающий почтовые сообщения по протоколу smtp.
cd /usr/ports/mail/postfix/ make install && make clean |
postfix-2.11.3_2,1
x x+[ ] BDB Berkeley DB (uses WITH_BDB_VER)
x x+[ ] CDB CDB maps lookups
x x+[x] DOCS Build and/or install documentation
x x+[ ] INST_BASE Install into /usr and /etc/postfix
x x+[ ] LDAP_SASL OpenLDAP client-to-server SASL auth
x x+[ ] LMDB LMDB maps
x x+[x] MYSQL MySQL maps (uses WITH_MYSQL_VER)
x x+[ ] NIS NIS maps lookups
x x+[ ] OPENLDAP OpenLDAP maps (uses WITH_OPENLDAP_VER)
x x+[x] PCRE Perl Compatible Regular Expressions
x x+[ ] PGSQL PostgreSQL maps (uses DEFAULT_PGSQL_VER)
x x+[ ] SASL2 Cyrus SASLv2 (Simple Auth. and Sec. Layer)
x x+[x] SPF SPF support (via libspf2 1.2.x)
x x+[ ] SQLITE SQLite maps
x x+[ ] TEST SMTP/LMTP test server and generator
x x+[x] TLS SSL and TLS support
x x+[ ] VDA VDA (Virtual Delivery Agent 32Bit)
x xqqqqqqqqqqqqqqqqqqq Dovecot SASL authentication methods qqqqqqqqqqqqqqqqqqx x
x x+( ) DOVECOT Dovecot 1.x SASL authentication method
x x+(*) DOVECOT2 Dovecot 2.x SASL authentication method
x xqqqqqqqqqqqqqq Kerberos network authentication protocol type qqqqqqqqqqqqqx x
x x+( ) SASLKRB5 If your SASL req. Kerberos5, select this
x x+( ) SASLKMIT If your SASL req. MIT Kerberos5, select this
не знаю как расписать все опции, опишу отмеченные
MYSQL - там у нас пользователи
PCRE - поддержка регулярных выражений - ограничения
SPF - на будущее, проще в инете найти что это
TLS - защита соединения SSL|TLS
DOVECOT2 - за аутентификацию пользователей будет отвечать он.
VDA можно не ставить. Раскладыванием почтовых сообщений по ящикам будет заниматься dovecot.
Would you like to activate Postfix in /etc/mail/mailer.conf [n]? y |
Сделаем рекомендуемое:
/etc/periodic.conf
|
/etc/rc.conf
|
перейдем в каталог с конфигурациооными файлами postfix
cd /usr/local/etc/postfix/ |
main.cf
|
наверное это минимальный набор изменений в main.conf, для запуска postfix в нашем случае.
Немного комментариев:
myhostname лучше указать то имя для которого у вас настроена mx запись.
mydomain указаны честно локальное имя моего сервера, он находится во внутренней сети.
mydestination — для кого мы будем принимать почту помимо виртуальных доменов, пример для мой записи: root@mail.testdomain.local root@localhost.testdomain.local root@localhost root@testdomain.local все эти адреса действительны и postfix для них почту принимать будет. Меня это устраивает.
mynetworks_style = subnet - пока нужно для тестов, условие тестов - еще один комп в той же подсети.
virtual_transport = dovecot указываем что почту для виртуальных пользователей будет доставлять dovecot (будет LDA -локальным агентом доставки).
Сделаем еще вот что:
postconf | grep alias_maps alias_maps = hash:/etc/aliases |
postfix ожидает хэш системного файла aliases здесь /etc/aliases, это ссылка на /etc/mail/aliases. Этот файл - список алиасов, которые в конечном счете указывают на root, добавим в конце еще один алиас на виртуального пользователя
/etc/mail/aliases
|
и создадим хеш
postalias /etc/mail/aliases |
принудительно укажем смотреть на оригинальный файл
main.cf
|
после этих манипуляций, вся почта адресованная root будет уходить виртуальному пользователю mailadmin@testdomain.ru.
Создадим файлы с параметрами подключения к базе данных.
mkdir /usr/local/etc/postfix/virtual cd /usr/local/etc/postfix/virtual |
domains.sql
|
users.sql
|
Немного подкрутим безопасность файлов с паролями
chown -R root /usr/local/etc/postfix/virtual chmod -R 640 /usr/local/etc/postfix/virtual/ chgrp -R postfix /usr/local/etc/postfix/virtual |
Добавим описание транспорта dovecot для postfix
master.cf
|
Подсмотрено здесь http://wiki2.dovecot.org/LDA/Postfix
и еще права
/usr/local/etc/dovecot/conf.d/10-master.conf
|
Обязательно на соседней консоли
tail -f /var/log/maillog |
а в рабочей
/usr/local/etc/rc.d/postfix start /usr/local/etc/rc.d/dovecot restart |
проверяем,
echo test | mail root |
отслеживаем в другой консоли что происходит...
dovecot: lda(admin@testdomain.ru): msgid=<20130307131730.64A812A3C1@mail.testdomain.ru>: saved mail to INBOX postfix/pipe[96643]: 779E12A3C2: to=<admin@testdomain.ru>, orig_to=<root>, relay=dovecot, delay=0.47, delays=0.05/0.01/0/0.41, dsn=2.0.0, status=sent (delivered via dovecot service) |
Вроде работает.
Важно еще проверить ходимость почты между пользователями из почтового клиента.
Ну вот, тестовый стенд для постепенного наращивания функционала собран.
Шаг 4 — Dovecot TLS, SSL
Итак пароли у нас передаются открытым текстом. Это может быть приемлемым, но не всегда. Если выбрать другой, более сложный механизм аутентификации, можно получить проблемы с неподдержкой его клиентами. Конкретнее, проблема в приложениях для мобильников, как правило они поддерживают только PLAIN, и в дополнение требуют SSL/TLS).
Немного теории с http://wiki2.dovecot.org
Первоначально поддержка SSL была добавлена для протоколов, используя отдельный "SSL порт" (IMAPS, pop3s и т.д.), где SSL рукопожатие начинается сразу же, при подключении клиента, и только после получения зашифрованной сессии, начинается работа регулярных протоколов. Использовать два отдельных порта для аутентификации открытым текстом и SSL соединений считается расточительным и добавляет сложности клиентам которые, возможно, хотят использовать SSL. Появление команды STARTTLS позволяет отказаться от выделенных SSL портов.
Попробуем внедрить TLS.
Безусловно, хорошо бы поступать правильно, с публичными центрами сертификации, но ознакомившись с ценами идем создавать самоподписные сертификаты.
Разработчики dovecot о нас позаботились, можно воспользоваться готовым скриптом /usr/local/share/examples/dovecot/mkcert.sh предварительно подредактировав /usr/local/share/examples/dovecot/dovecot-openssl.cnf
cd /usr/local/share/examples/dovecot/ |
dovecot-openssl.cnf
|
создадим папки в которых будут храниться сертификаты
mkdir /etc/ssl/certs /etc/ssl/private |
еще полезно поправить срок действия сертификатов, параметр -days 365 в скрипте mkcert.sh. Грубо прикинем, сколько осталось до пенсии — 20*365=7300. Запустим генерирование сертификатов:
sh mkcert.sh chmod -R 0444 /etc/ssl/certs/ chmod -R 0400 /etc/ssl/private/ |
сертификаты готовы, права выставлены, идем настраивать dovecot
cd /usr/local/etc/dovecot/conf.d/ |
10-ssl.conf
|
Сказали пользовать ssl, пути к сертификатам, и не смотреть список отзыва клиентских сертификатов.
10-auth.conf
|
Теперь нельзя простыми паролями (это не относится к соединениям защищенным ssl). Тоесть теперь только ssl с простым паролем, и никак по другому.
10-logging.conf
|
/usr/local/etc/rc.d/dovecot restart |
Идем на клиент, проверяем что не можем подключиться к серверу по IMAP, смотрим логи. Меняем в настройках клиента — защита соединения STARTTLS. Начинается ругань, что неизвестный сертификат, соглашаемся что неизвестный, просматриваем, убеждаемся что наш сертификат, принимаем. Проверяем как работает.
Итак, чего мы достигли: теперь все пользователи подключаются к нашему серверу через зашифрованное соединение. Положительные моменты — возможность подключения мобильных приложений и пароли с пользователями в открытом виде не передаются. Можно сделать исключения для пользователей из "своих" сетей - не использовать TLS, но как показал опыт - никто при настройке лишние движения делать не хочет, в том числе и я :( Сейчас также можно задействовать выделенные порты с SSL, если это Вам нужно.
Шаг 5 - Master users
Продолжим с Dovecot.
Можно настроить мастер пользователей, которые смогут входить в систему под любой учетной записью.
Зачем? Если достает начальник с просьбами подключить то тот, то этот ящик, для "контроля".. или себе для поддержки пользователей...
Итак, что нам нужно, указать разделитель (* хороший выбор) и 2 базы данных с обычными и мастер пользователями. При использовании логина пользователь*мастер проверка мастера производится в другой базе. Работает только при использовании PLAIN механизма SASL( с STARTTLS или без)(еще один аргумент за PLAIN).
Настроим рекомендуемый разделитель, и подключим auth-master.conf.ext
10-auth.conf
|
auth-master.conf.ext
|
echo 'masteradmin:{plain}222' > /usr/local/etc/dovecot/master-users cat /usr/local/etc/dovecot/master-users masteradmin:{plain}222 |
/usr/local/etc/rc.d/dovecot restart |
Проверяем, необходимо с клиента подключиться под пользователем test@tstdomain.ru*masteradmin и паролем 222, защита соединения STARTTLS.
Мастер пользователей может быть несколько:
echo 'masteradmin2:{plain}333' > /usr/local/etc/dovecot/master-users |
Я выбрал самый простой вариант с отдельным простым файлом с мастер пользователями. Есть и другие методы настройки мастер пользователей - хранение их в куче с остальными в SQL или иметь просто пароль, без пользователя. Настройку этих вариантов можно посмотреть в моей другой статье на этом же сайте - Возможности dovecot2
Шаг 6 - QUOTA
Настройка квот очень важна на сервере, даже если у Вас 10 человек, то все равно рано или поздно получим проблемы. В основном это проблемы с огромным количеством никому не нужных сообщений, которые еще и будут синхронизироваться по imap, и удалить их нельзя, вдруг там что-то ООЧЕНЬ важное, а чистить от неважного времени конечно нет.... Необходим метод принуждения.
Подробное описание что тут сделано статья - Возможности dovecot2, сейчас кратко.
Приступим к реализации. Настроим наиболее часто используемые - maildir пользовательские квоты в 10Мб.
90-quota.conf
|
Настроили ящик размером 10 мб, и дополнительно 100мб в корзине. (при удалении письма сначала копируются в корзину, для этого нужно дополнительное место сверх общей квоты. (про shift+del не все знают). quota_grace = 20%% - полезный параметр - позволяет превысить квоту на ..% при доставке почты, при этом по imap не даст нормально работать - вынуждая пользователя чистить ящик. На http://wiki2.dovecot.org/ пример скрипта, создадим соответствующий файлик:
/usr/local/bin/quota-warning.sh
|
chmod +x /usr/local/bin/quota-warning.sh chown vmail:vmail /usr/local/bin/quota-warning.sh chmod 550 /usr/local/bin/quota-warning.sh |
Настроили, теперь необходимо задействовать.
Модуля квоты два:
quota: сама реализация квот, включая все движки квот.
imap_quota: выдает информацию о квотах через IMAP.
Добавим их в нужные конфиги...
15-lda.conf
|
20-imap.conf
|
убедимся, что на закладке квота, свойств почтового каталога входящие, появилась информация о квоте.
Протестируем..
обязательно смотрим на соседней консоли
tail -f /var/log/maillog |
добиваемся заполнения ящика на 80 и 95 % и 100%
Шаг 7 - QUOTA PER USER
Введем элемент дискриминации тех или иных пользователей.
Будем переопределять только что настроенную квоты, значением из базы данных пользователей, где мы зададим квоты персонально..
приступим
введем в таблицу users дополнительное поле quota
/root/workmail/adduserquota.sql
|
зальем в мускуль
mysql < adduserquota.sql |
добавили UNSIGNED - беззнаковое число, думаю длины в 10 знаков хватит с лихвой, (зависит от того в каких единицах Вы будете мерять) и задали всем квоту в 30 ЕДЕНИЦ объема.
дополнительно необходимо в ../dovecot-sql.conf.ext несколько модифицировать user_query
|
внимательно с запятыми.
Здесь добавляется запрос значения поля quota из базы данных и формирования строки, которая переопределит строку quota_rule = *:storage=10M из 90-quota.conf
Приписывание M/G позволяет хранить в базе более читабельные значения квот. Думаю пора уже использовать G. Для теста пока оставим M.
Проверяем, если все работает как задумывалось, можно немного лоска навести — подредактировать /usr/local/bin/quota-warning.sh, написать поинтересней сообщение, возможно, даже на великом и могучем. Я не парился.
Да, и поставьте G !!
Шаг 8 — Public Namespace (общие почтовые каталоги)
Зачем? Появится возможность создавать общие почтовые каталоги видимые всеми/не всеми сотрудниками. Сообщение там будет храниться в одном экземпляре для всех - меньше места, возможно будет отказаться от некоторых массовых рассылок....
Попробуем добавить public namespace.
Перейдем в каталог в котором будет вестись основная работа
cd /usr/local/etc/dovecot/conf.d/ |
откроем еще одну консоль, на которой запустим
tail -f /var/log/maillog |
Важно видеть всю ругань которая возможно будет появляться при наших манипуляциях.
Для начала раскомментим некоторые параметры в пространстве имен по умолчанию. Дело в том, что если ни одно namespace не определено, то подразумевается что определено private. Но, если сразу добавить public или shared, система будет думать что мы создаем сервер только с этими namespace и забудет о private. Поэтому перед добавлением дополнительного namespace, явно укажем что у нас есть private.
10-mail.conf
|
в руководстве separator рекомендуется выбирать «/», Если это не указывать, будет использоваться сепаратор по умолчанию «.» Я использовал рекомендуемый. Важно его раскомментировать.
/usr/local/etc/rc.d/dovecot restart |
смотрим консоль с логом и малость протестируем, что все еще работает....
Попробуем настроить public namespace.
10-mail.conf
|
Описание используемых параметров в переводе 10-mail.conf (см. отдельную статью "dovecot RUS" на этом же ресурсе)
тип почтового ящика maildir, location = maildir:/MAIL/Company
и создадим почтовые каталоги. Почтовые каталоги у меня начинаются с «.», т. к. я не переопределял принятый по умолчанию в dovecot разделитель иерархии для maildir
mkdir -p /MAIL/Company/.Spam mkdir /MAIL/Company/.News chown -R vmail:vmail /MAIL/Company/ chmod -R g+w /MAIL/Company/ |
/usr/local/etc/rc.d/dovecot restart |
Выбираем подписаться в контекстном меню ящика, и отмечаем каталоги на которые хотим подписаться.
Здесь важна магия! Сразу может не заработать. Нужно поплясать с бубном - копирнуть потроха другого почтового ящика в Company. Проверить, почистить...
типа
cp -R /MAIL/test/Maildir/* /MAIL/Company/ |
Проверим как все работает.
По умолчанию, сообщения в этих почтовых каталогах маркируются как прочитаные/непрочитаные глобально, т. е. если один пользователь изменил \Seen флаг, это увидят все остальные. Полезно изменить это поведение
10-mail.conf
|
С такой конфигурацией, каждый пользователь будет иметь свой вариант прочитаных/непрочитаных сообщений.
Попробуем прикрутить квоту к этому namespace.
приведем правила квот к виду:
90-quota.conf
|
/usr/local/etc/rc.d/dovecot restart |
Проверим как все работает.
:( у меня не заработало :(, а раньше получалось. Ну да ладно, это мелочи.
Сейчас к этому каталогу все имеют полный доступ, мы это поправим..
Итак, общий каталог конечно хорошо, но было бы неплохо иметь возможность рулить доступом к таким каталогам, а то замусорят ведь, или наоборот удалят чего "важного".
Шаг 9 — Access Control Lists
Немного теории с dovecot.org:
Dovecot v1.0 и v1.1 поддерживает файлы ACL — списки контроля доступа настраиваемые администратором. v1.2+ также поддерживает расширение IMAP ACL, которое позволяет пользователям самостоятельно изменять списки ACL.
Подробное описание см. в статье "Возможности Dovecot" на этом же сайте.
Пример файла ACL:
|
Владелец - все возможные права.
пользователь timo только read, list
группе acessallow - нет вообще доступа (user timo перекроет эти права, даже если он в этой группе)
group-override=acessdeny lrwstipekxa - полные права членам группы, не перекрываются индивидуально заданными пользователям.
Приступим к реализации.
90-acl.conf [/b]
|
в 20-imap.conf добавить к существующим расширениям, следующие: acl imap_acl - сам движек прав доступа и движек выдающий эту информацию по imap, у меня с учетом предыдущих примеров, подобное:
|
/usr/local/etc/rc.d/dovecot restart |
и проверяем, действительно ли мы потеряли доступ к нашему public namespace. Если были подписаны, то выдает ошибку, если подписываться заново, то не видит почтовых каталогов.
Теперь создадим dovecot-acl файл с разрешением доступа
/MAIL/Company/dovecot-acl
|
cp /MAIL/Company/dovecot-acl /MAIL/Company/.Spam/dovecot-acl cp /MAIL/Company/dovecot-acl /MAIL/Company/.News/dovecot-acl |
Теперь группы..
идем в mysql добавлять поле с группами, внимание с длиной поля, возможно всего 128 знаков маловато будет, но мне хватит.
введем в таблицу users дополнительное поле acl_groups
/root/workmail/addacl_groups.sql
|
зальем в мускуль
mysql < addacl_groups.sql |
Внимание, группы должны быть разделены только запятой «accessallow,accessdeny», с пробелами «allow, deny» работать не будет. В реальной системе, возможно будут группы вида group@tstdomain.ru, сейчас попроще.
в dovecot-sql.conf.ext правим запрос к базе пользователей, добавим в user_query запрос поля acl_groups
|
/usr/local/etc/rc.d/dovecot restart |
Проверяем.
Необходимо создать файлы типа /MAIL/Company/dovecot-acl
с правами на пользователей и группы внутри.
ACL и Мастер пользователи
Если осталась настроенной учетная запись test@tstdomain.ru*masteradmin, то можно видеть что она не работает. Исправим:
в dovecot-sql.conf.ext раздуем еще чуть-чуть запрос, добавив:'%u' as master_user,
|
/usr/local/etc/rc.d/dovecot restart |
В результате master_user для системы ACL становится user-ом
Шаг 10 Shared namespace
Попробуем следующий уровень - добавим shared namespace.
У пользователей появится возможность самостоятельно расшаривать свои почтовые каталоги для других пользователей.
Добавим желаемое namespace
10-mail.conf
|
опять, если интересно подробнее - "Возможности Dovecot2"
Итак наша строка
mail_location = maildir:%%h/Maildir:INDEX=%h/Maildir/shared/%%u
означает:
%%h/Maildir указывает на Maildir других пользователей, например, "/mail/someone1".
:INDEX=%h/Maildir/shared/%%u указывает на то, где будут храниться лично мой индексный файл расшареного почтового каталога другого пользователя.
С указанной выше конфигурацией можно открыть расшареные почтовые каталоги, если вы знаете их имена, но они не будут видны в списке общих почтовых каталогов. Это потому, что Dovecot не знает, какие пользователи сделали общими свои почтовые каталоги и для кого. Перебор всех пользователей и, просмотр их почтовых каталогов был бы ужасно неэффективен для более чем пары пользователей.
Для решения этой проблемы Dovecot-у необходим словарь, содержащий список пользователей имеющих общие почтовые каталоги и для кого они доступны.
Вы можете использовать любой backend словарь, в том числе SQL, но простой плоский файл тоже будет неплохо работать (руководство - дословно):
Создадим словарь, как простой файл:
90-acl.conf
|
mkdir /var/db/dovecot/dict/ chown vmail:vmail /var/db/dovecot/dict/ /usr/local/etc/rc.d/dovecot restart |
Смотрим, визуально изменений никаких, но главное чтобы ругани в /var/log/maillog не было.
Далее:
Смотрим свойства папки в thunderbird -вккладка "совместное использование".
Ранее приходилось ставить дополнение imap-ACL-Extension
как проверять думаю понятно...
Если очень хочется, можно расшарить свою папку всем. По умолчанию Dovecot не позволяет использовать установку IMAP разрешений для "anyone" или "authenticated". Но если Вам очень нужно:
90-acl.conf
|
После этой манипуляции можно использовать anyone и authenticated идентификаторы и у всех пользователей появится возможность воспользоваться Вашим опубликованным каталогом. За исключением, тех, кому можно установить негативные права!! Например добавим -test@tstdomain.ru read message. Добавляется с минусом, и этот пользователь теряет доступ, в отличии от всех остальных.
Небольшое отступление: anyone включает anonymous, authenticated без него. Это встроенные группы. Группы из поля acl_groups, тоже работают! Их можно добавлять как $group или $!group и для возможности group-override.
Шаг 11 Sieve
Зачем? - появляется возможность обработки почтовых сообщений на сервере по заданным правилам (настраивали правила сортировки в почтовой программе?, а потом приходили, к примеру домой и тоже самое настраивали?) Можно еще настроить глобальное правило, действующее на всех, типа почту помеченную как спам в спам.
cd /usr/ports/mail/dovecot2-pigeonhole/ make install |
поставили, то что поставили состоит из 2х частей: плагин для dovecot который обрабатывает почту и сервер, позволяющий пользователям самим править свои правила sieve.
Приступим.
Включим плагин в конфигурации dovecot, обработки запускаются при локальной доставке.
cd /usr/local/etc/dovecot/conf.d/ |
скопируем новый конфиг файл
cp /usr/local/share/doc/dovecot-pigeonhole/example-config/conf.d/90-sieve.conf \ /usr/local/etc/dovecot/conf.d/ |
включим плагин sieve в дополнение к, у меня уже работающему, плагину quota
15-lda.conf
|
90-sieve.conf
|
/usr/local/etc/rc.d/dovecot restart |
Смотрим нет ли ругани...
Внедрили, теперь можно написать скрипты и посмотреть как работает, но писать лень, и для простых пользователей необходимо более простое решение, чем написание скриптов .sieve в сеансе SSH или заливание их к себе в домашний каталог по FTP.
Настроим ManageSieve Server, скопируем, для начала, чудесно появившийся новый конфиг файл
cp /usr/local/share/doc/dovecot-pigeonhole/ example-config/conf.d/20-managesieve.conf /usr/local/etc/dovecot/conf.d/ |
20-managesieve.conf
|
/usr/local/etc/rc.d/dovecot restart netstat -na | grep LISTEN tcp4 0 0 *.4190 *.* LISTEN |
видим что у нас поднялся еще один сервис, теоретически он должен позволять рулить .sieve скриптами. У thunderbird есть всякие дополнения, которые позволяют работать с этим. Рекомендую сразу забыть об этих дополнениях, и настаивать правила через web-интерфейс roundcube, благо там поддержка dovecot sieve заявлена как "fine".
Можно прикрутить глобальный сценарий, работающий для всех пользователей, см подробности в статье "Возможности Dovecot2"
Шаг 12 - Trash Plugin
Обычно, если сообщение не может быть сохранено/скопировано, потому что пользователь превысил квоту, операция завершается с ошибкой "Квота превышена". Trash плагин поможет еще немного продержаться, давая Dovecot право автоматически стирать старые сообщения из определенных почтовых каталогов, пока новое сообщение не будет сохранено. Если новое сообщение настолько большое, что не поместится, даже если стереть все сообщения из настроенных почтовых каталогов, то удаления не происходит, и пользователь получает ошибку "Квота превышена". Этот плагин может сэкономить время, избежав общения с пользователями, просто перемещающими ненужные сообщения в корзину, без ее очистки. Иногда просто забывают.
Этот плагин требует загруженного и настроенного плагина quota, использующего не файловую квоту.
Приступим к реализации:
Где включается? По идее там где и квота, 15-lda.conf, 20-imap.conf либо глобально 10-mail.conf
15-lda.conf
|
укажем местоположение файла конфигурации
90-plugin.conf
|
Файл конфигурации представляет собой текстовый файл, где каждая строка имеет формат:
<priority> <mailbox name>
Письма будут удаляться по приоритету, начиная с низшего -> до высшего номера.
/usr/local/etc/dovecot/dovecot-trash.conf.ext
|
/usr/local/etc/rc.d/dovecot restart |
Проверяем, ….. не забываем при тестировании работы, настраивали ли мы дополнительные, внеквотные 100Mб для каталога Trash.
Если Вы добрались до этого места, и еще не хочется на все плюнуть, идем к части 2.
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
вверх
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK