Этап 3. Настройка почтового сервера.
Для почтового сервера я выбрал, пожалуй, самую популярную связку: postfix+dovecot2+spamassassin+postfixadmin+roundcube. Не хватает антивирусника, но мне он реально не нужен, поскольку я сижу на линуксе что дома, что на работе. В настройке этого всего мне помогли вот эти статьи:
http://www.sys-adm.org.ua/mail/dovecot.php
http://vladimir-stupin.blogspot.com/2009/11/postfix-dovecot-postfixadmin.html
http://bozza.ru/art-170.html
http://www.opennet.ru/docs/RUS/postfix_soho
http://extmemory.blogspot.com/2010/01/spamassassin.html
http://gq.net.ru/2007/02/23/spamassassin-howto
http://www.samag.ru/archive/article/559
http://www.opennet.ru/base/net/spamassassin_mysql.txt.html
http://help-host.ru/ispmanager/admins-servers/41-ustanovka-roundcube-na-freebsd.html
http://mdex-nn.ru/page/nastrojka-pochtovogo-veb-interfejsa-roundcube
Начнём с установки postfix, который по зависимостям должен сразу же и dovecot за собой вытянуть:
cd /usr/ports/mail/postfix
make install clean
Опции сборки:
Опции сборки зависимостей:
Хочу сразу обратить ваше внимание на сборку cyrys-sasl 2! Оставляйте опции по умолчанию, не ставьте поддержку mysql. Если поставите поддержку mysql, то при приёме-отправке почты у вас будет вылазить вот такая ошибка:
auxpropfunc error no mechanism available
Информация взята вот из этих источников:
http://www.cyberciti.biz/faq/postfix-sql_select-option-missing-auxpropfunc-error
http://blog.mydream.com.hk/howto/linux/auxpropfunc-error-no-mechanism-available-errors
Продолжаем про опции зависимостей:
В конце установки будет показан вот такой вопрос:
Would you like to activate Postfix in /etc/mail/mailer.conf [n]?
Если хотим полностью заменить текущий MTA Sendmail на Postfix, то отвечаем: "y". Я так и ответил. А в rc.conf добавляем вот это:
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
postfix_enable="YES"
dovecot_enable="YES"
Сразу к конфигурированию постфикса пока не будем приступать. Я сначала установил postfixadmin и создал в нём домен и ящики. Поэтому, ставим postfixadmin:
cd /usr/ports/mail/postfixadmin
make install clean
Опции сборки по умолчанию оставляем, поскольку поддержка mysql стоит по умолчанию. После установки в каталоге /usr/local/www появится каталог postfixadmin. Здесь уже кому как удобнее будет: кто-то захочет создать дополнительную секцию в nginx для этого ресурса, кто-то — вообще виртуальный домен. Кому как нравится. Но я сделал проще: я создал каталог /usr/local/www/mysite/mailadmin и в него скопировал всё содержимое из каталога postfixadmin. Права дать на этот каталог не забыл:
chown -R www:www mailadmin
Теперь, в моём случае, я смогу заходить в постфиксадмин по адресу: http://192.168.0.100/mailadmin. Но для этого надо сначала сконфигурировать postfixadmin. Редактирую файл /usr/local/www/mysite/mailadmin/config.inc.php (привожу лишь те строчки, в которые вносил изменения):
$CONF['configured'] = true;
$CONF['setup_password'] = 'ваш пароль';
$CONF['postfix_admin_url'] = 'https://example.com/mailadmin';
$CONF['postfix_admin_path'] = '/usr/local/www/mysite/mailadmin';
$CONF['default_language'] = 'ru';
// здесь, почему-то надо писать именно mysqli, хоть у нас и mysql база будет.
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'ваш пароль на базу mysql, которую мы потом создадим для постфиксадмина';
$CONF['database_name'] = 'postfix';
// Этот адрес будет использован для отправлния письма при создании нового ящика.
$CONF['admin_email'] = 'admin@example.com';
// исли в строчке ниже прописано что-то другое, то обязательно ставим так:
$CONF['encrypt'] = 'md5crypt';
// строчки ниже редактируйте на своё усмотрение
$CONF['default_aliases'] = array (
'abuse' => 'abuse@example.com',
'hostmaster' => 'hostmaster@example.com',
'postmaster' => 'postmaster@example.com',
'webmaster' => 'webmaster@example.com'
);
// Чтобы письма располагались по структуре: ~/domain/user
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
// Квота по умолчанию в мегабайтах. Мне квота не нужна.
$CONF['aliases'] = '0';
$CONF['mailboxes'] = '0';
$CONF['maxquota'] = '0';
// Разрешить редактировать тип домена
$CONF['transport'] = 'YES';
// Управление псевдонимом для суперадмина
$CONF['alias_control'] = 'YES';
$CONF['user_footer_link'] = "https://example.com/mailadmin/main";
$CONF['footer_text'] = 'Return to example.com/mailadmin';
$CONF['footer_link'] = 'https://example.com/mailadmin';
// эти параметры выставляем так потому, что у нас dovecot
$CONF['create_mailbox_subdirs_prefix']='';
$CONF['new_quota_table'] = 'YES';
Теперь, нам надо сделать базу данных для постфиксадмина. Делаем:
mysql -p
CREATE DATABASE `postfix` CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION;
Теперь попробуем зайти вот по такой ссылке, чтобы запустился процесс настройки: http://192.168.0.100/mailadmin/setup.php И если всё сделали правильно, то должны увидеть вот это:
А если эту страничку пролистнуть вниз, то увидим приглашение с названием «Create superadmin account». Вводим:
Однако, после того, как нажмём кнопку «добавить администратора», у нас вылезет вот такая ошибка:
Это он просит подправить в конфиге параметр пароля, который мы там ввели в открытом виде. Нам нужно вставить пароль в том виде, в котором нас просит setup. И вот уже после того, как вы поправите в конфиге пароль, вы сможете создать учётную запись администратора. ВНИМАНИЕ! В моём случае, когда я поправил пароль в конфиге, достаточно было лишь обновить страничку в браузере (Firefox), и у меня сразу появилось уведомление:
Т.е., повторю, я не вбивал снова в эти поля пароль и т.д. — я просто обновил страничку в браузере, и учётная запись добавилась. После чего, можно, используя эту созданную учётку, переходить по адресу: http://192.168.0.100/mailadmin и настраивать домен и ящики пользователей. Да, и не забываем удалить файл /usr/local/www/mysite/mailadmin/setup.php, когда уже всё благополучно настроили.
После того, как настроите домен, пользователей и всё остальное, нужно будет сделать кое-что ещё. Дело в том, что postfixadmin не умеет сам себя перенаправлять в режим https (ну, по крайней мере, я не нашёл, как это делать.). А ведь это существенно повысит безопасность. Чтобы заходя на страничку http://192.168.0.100/mailadmin срабатывало перенаправление в режим https, надо в конфиг nginx внести кое-какую правку. Итак, находим в нём первую секцию server (который работает по порту 80) и, где-нибудь, после строчек
root /usr/local/www/mysite;
index index.php;
добавляем вот такую конструкцию:
location ~ .*/mailadmin { if ($ssl_protocol = "") { rewrite .* https://example.com/mailadmin break; } }
Сохраняем и перезапускаем nginx. После чего, пробуем чего у нас получилось. На этом, с настройкой postfixadmin всё.
Переходим к настройке самого Postfix. Нам надо сделать так, чтобы он понимал всё то, что мы насоздавали в постфиксадмине. Для начала, отредактируем конфиг /usr/local/etc/postfix/main.cf (привожу лишь те строчки, которые я редактировал):
myhostname = example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = localhost
local_recipient_maps = unix:passwd.byname $alias_maps
mynetworks = 127.0.0.1/32
relay_domains =
alias_maps = hash:/usr/local/etc/aliases
alias_database = hash:/usr/local/etc/aliases
home_mailbox = Mailbox
mail_spool_directory = /usr/home/mail
smtpd_banner = $myhostname ESMTP $mail_name
virtual_alias_maps = mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:1911
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 1911
virtual_transport = dovecot
virtual_destination_concurrency_limit = 10
# максимальное количество писем, которые почтовик может отправить одновременно.
virtual_destination_recipient_limit = 10
# максимальное количество писем, которые почтовик может принять одновременно.
virtual_uid_maps = static:1911
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,
reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient,
reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = cyrus
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /usr/local/etc/postfix/smtpd.pem
smtpd_tls_cert_file = /usr/local/etc/postfix/smtpd.pem
smtpd_tls_CAfile = /usr/local/etc/postfix/smtpd.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
После редактирования конфига нужно сделать ещё несколько вещей. Создадим пользователя и группу virtual для работы с виртуальными ящиками:
pw group add virtual -g 1911
pw user add virtual -g virtual -s /sbin/nologin -u 1911
gid и uid указываем такие же, как в main.cf указали. Создаём каталоги для локальных и виртуальных ящиков (хотя локальными я и не собираюсь пользоваться):
mkdir /usr/home/mail
mkdir /usr/home/vmail
chown postfix:postfix /usr/home/mail
chown virtual:virtual /usr/home/vmail
Далее, создаём файлы, с помощью которых постфикс сможет считывать данные из базы данных. Напомню, что именно в этой базе хранятся данные о доменах и пользователях, которые мы завели в постфиксадмине. Создаём файл /usr/local/etc/postfix/mysql_virtual_alias_maps.cf с таким содержимым:
user = postfix
password = ваш_пароль_на_базу
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
Создаём файл /usr/local/etc/postfix/mysql_virtual_domains_maps.cf с содержимым:
user = postfix
password = ваш_пароль_на_базу
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
Создаём файл /usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf с содержимым:
user = postfix
password = ваш_пароль_на_базу
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
Чтобы работала шифрованная smtp-сессия надо создать самоподписанный доверенный сертификат. Находясь в каталоге /usr/local/etc/postfix, необходимо выполнить команду:
openssl req -new -nodes -x509 -out smtpd.pem -keyout smtpd.pem -days 9999
На задаваемые вопросы отвечаем примерно так:
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Sverdlovskaya
Locality Name (eg, city) []:EKB
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mr.Technotrance
Organizational Unit Name (eg, section) []:noname
Common Name (eg, YOUR name) []:exapmle.com
Email Address []:yourmail@exapmle.com
Самым важным параметром является значение Common Name — оно должно совпадать с FQDN сервера.
На этом, постфикс пока оставим. Но и запускать его пока не будем. Осталось настроить Dovecot и Spamassassin.
Начнём с довекота. Зайдя в каталог /usr/local/etc/dovecot мы обнаружим, что там нет никаких конфигов. Но зато есть файл README, в котором написано, что конфиги надо скопировать из каталога /usr/local/share/doc/dovecot/example-config/. Так мы и сделаем, но нам от туда не все конфиги понадобятся. Копируем лишь папку conf.d и файлы dovecot-sql.conf.ext и dovecot.conf.
Редактируем dovecot.conf (только те строчки, которые я изменял):
protocols = imap
listen = *
base_dir = /var/run/dovecot/
instance_name = dovecot
login_trusted_networks = 127.0.0.1/32
shutdown_clients = yes
По такому же принципу редактируем dovecot-sql.conf.ext:
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=ваш_пароль_на_базу
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT local_part FROM mailbox WHERE username = '%u'
iterate_query = SELECT local_part FROM mailbox
По такому же принципу редактируем conf.d/10-auth.conf:
disable_plaintext_auth = no
auth_default_realm = example.com
auth_worker_max_count = 10
auth_mechanisms = plain
# комментируем строчку:
# !include auth-system.conf.ext
# и наоборот, убираем из комментария строчку:
!include auth-sql.conf.ext
По такому же принципу редактируем conf.d/10-logging.conf:
log_path = /var/log/dovecot.log
По такому же принципу редактируем conf.d/10-mail.conf:
mail_location = mbox:/usr/home/vmail/%d/%n
mail_uid = 1911
mail_gid = 1911
first_valid_uid = 1911
last_valid_uid = 1911
first_valid_gid = 1911
last_valid_gid = 1911
По такому же принципу редактируем conf.d/10-master.conf:
default_internal_user = dovecot service imap-login { inet_listener imap { port = 143 } inet_listener imaps { #port = 993 ssl = no } service_count = 1 process_min_avail = 0 service imap { # Most of the memory goes to mmap()ing files. You may need to increase this # limit if you have huge mailboxes. vsz_limit = 384M # Max. number of IMAP processes (connections) #process_limit = 1024 } service auth { unix_listener auth-userdb { mode = 0660 user = virtual group = virtual } unix_listener auth-master { mode = 0660 user = virtual group = virtual } # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } }
По такому же принципу редактируем conf.d/10-ssl.conf:
ssl = no
# комментируем эти строчки. Не вижу смысла включать тут ssl, поскольку к имапу будет подключение только с локального хоста.
#ssl_cert = </etc/ssl/certs/dovecot.pem
#ssl_key = </etc/ssl/private/dovecot.pem
По такому же принципу редактируем conf.d/15-lda.conf:
hostname = example.com
По такому же принципу редактируем conf.d/20-imap.conf:
imap_id_send = *
По такому же принципу редактируем conf.d/auth-sql.conf.ext:
args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
args = /usr/local/etc/dovecot/dovecot-sql.conf.ext
Остальные конфигурационные файлы я не трогал, оставляя их настройки по умолчанию.
Теперь установим и настроим Spamassassin. Установка:
cd /usr/ports/mail/p5-Mail-SpamAssassin
make install clean
Опции сборки:
Опции сборки зависимостей, в которых я что-либо менял:
В конце установки будет вот такой вопрос:
Do you wish to run sa-update to fetch new rules [N]?
Я ответил положительно. Также, после установки, появится каталог /usr/local/etc/mail/spamassassin, а в нём можно будет найти файл local.cf.sample. Тут же, сделаем его копию с названием local.cf и уже её отредактируем:
# Список через пробел ящиков-ловушек (у меня таких пока нет, но в будущем наверно сделаю)
# spam@example.com
rewrite_header Subject *****SPAM*****
report_safe 0
trusted_networks 127.0.0.1/32
lock_method flock
required_score 5.0
use_bayes 1
bayes_auto_learn 1
ok_locales ru en
use_pyzor 1
pyzor_options --homedir /usr/home/spamassassin/pyzor/
use_razor2 1
razor_config /usr/local/etc/mail/spamassassin/razor-agent.conf
use_dcc 1
dcc_home /usr/local/dcc
dcc_path /usr/local/bin/dccproc
dcc_timeout 10
# значение при превышении которого письмо будет рассматриваться
# как спам и будет производиться обучение системы анализа. Я пока закоментировал
# bayes_auto_learn_threshold_spam 12.0
# Это оо же самое, но наоборот для писем, которые не являются спамом.
# bayes_auto_learn_threshold_nonspam 0.1
Теперь создаём файл razor-agent.conf вот с таким содержимым:
# See razor-agent.conf (5)
# Change this to 5 for safer classification of MIME attachments. This will let more spam through
logic_method = 4
# Uncomment the next line for logging via syslog
#logfile = sys-syslog
razorhome = /usr/home/spamassassin/razor
debuglevel = 0
В файле v310.pre я закомментировал экспериментальный плагин:
# loadplugin Mail::SpamAssassin::Plugin::ReplaceTags
В файле v312.pre закомментировал ещё один экспериментальный плагин:
# loadplugin Mail::SpamAssassin::Plugin::DKIM
После редактирования конфигов не забываем создать каталоги для работы razor и pyzor:
mkdir /usr/home/spamassassin
mkdir /usr/home/spamassassin/pyzor
mkdir /usr/home/spamassassin/razor
chown -R spamd:spamd /usr/home/spamassassin
Также, надо создать mysql-базу для спамассассина. Незадача в том, что структура таблиц находится в архиве с исходниками, которые нам придётся скачать:
fetch http://www.sai.msu.su/apache//spamassassin/source/Mail-SpamAssassin-3.3.2.tar.bz2
В них и мы найдём каталог sql, который надо скопировать в какое-нибудь удобное место. Затем, перейдём в него и выполним создание базы:
mysql -p
CREATE DATABASE `spamassassin` CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON spamassassin.* TO 'spamassassin'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION;
После чего создаём в ней структуру таблиц. Делаем команду:
mysql -p spamassassin < userpref_mysql.sql
и получаем ошибку:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM' at line 8
Чтобы это исправить, находим эту самую пресловутую конструкцию 'TYPE=MyISAM' в файлах awl_mysql.sql, bayes_mysql.sql, userpref_mysql.sql и меняем её на такую:
ENGINE=MyISAM;
Затем, благополучно выполняем команды:
mysql -p spamassassin < userpref_mysql.sql
mysql -p spamassassin < bayes_mysql.sql
mysql -p spamassassin < awl_mysql.sql
Всё, база для спамассассина готова. Но чтобы спамассассин умел ею пользоваться, надо создать дополнительный кофигурационный файл рядышком с local.cf. Называться он будет sql.cf, а его содержимое будет таким:
user_scores_dsn DBI:mysql:spamassassin:localhost
user_scores_sql_username spamassassin
user_scores_sql_password ваш пароль на базу
# если будете использовать плагин автоматического создания белого списка, то раскомментируйте эти строчки.
# auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList
# user_awl_dsn DBI:mysql:spamassassin:localhost
# user_awl_sql_username spamassassin
# user_awl_sql_password ваш пароль на базу
bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:spamassassin:localhost
bayes_sql_username spamassassin
bayes_sql_password ваш пароль на базу
Также, скрипт запуска надо будет переименовать. Найдите файл /usr/local/etc/rc.d/sa-spamd.
Его надо переименовать просто в spamd.
В файл /etc/rc.conf добавьте строчку, которая будет запускать спамассассин при загрузке:
spamd_enable="YES"
Сейчас, чтобы заработала связка postfix+dovecot+spamassassin, надо отредактировать последний файл /usr/local/etc/postfix/master.cf. В самом верху есть строчка:
smtp inet n - n - - smtpd
К ней дописываем фильтр. Получится вот так:
smtp inet n - n - - smtpd -o content_filter=spamassassin
Затем надо раскомментировать вот эти строчки (также добавив к ним строчку с фильтром):
smtps inet n - n - - smtpd -o content_filter=spamassassin -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject
И в самый конец добавить вот такие строчки:
dovecot unix - n n - - pipe flags=DRhu user=virtual:virtual argv=/usr/local/libexec/dovecot/deliver -d ${recipient} spamassassin unix - n n - - pipe user=spamd argv=/usr/local/bin/spamc -f -e /usr/local/sbin/sendmail -oi -f ${sender} ${recipient}
Вот теперь, после всего этого длительного конфигурирования, перезагружаем сервер. Смотрим логи. У меня было всё в порядке, кроме одного — были вот такие уведомления:
no working DCC servers dcc1.dcc-servers.net dcc2.dcc-servers.net dcc3.dcc-servers.net ... at 209.169.14.30 80.91.36.101
dcc: instead of X-DCC header, dccproc returned 'no working DCC servers dcc1.dcc-servers.net dcc2.dcc-servers.net dcc3.dcc-servers.net ... at 209.169.14.30 80.91.36.101'
Чтобы это исправить нужно к серверу открыть порт UDP 6277:
add 00180 pass udp from any 6277 to me
Потом, перезапустив ipfw, выполнить вот такую команду:
cdcc "load /usr/local/dcc/map.txt"
Затем, попробуйте из постфиксадмина отправить письмо на какой-нибудь из своих же ящиков. Если видите ошибку:
postfix/smtpd[1547]: error: open database /usr/local/etc/aliases.db: No such file or directory
То делаем так:
rm -f /etc/aliases.db
mkdir /usr/local/etc/aliases
newaliases
Ещё, у меня была ошибка о том, что постфикс не может получить доступ к логу довекота. Особо разбираться не хотелось, потому просто сделал так:
chmod 666 /var/log/dovecot.log
После чего сервер заработал. Осталось лишь прикрутить вэб-интерфейс roundecube. Установим roundcube:
cd /usr/ports/mail/roundcube
make install clean
Опции сборки:
И сразу же получаем ошибку:
pecl-intl-1.1.2_3 cannot install: doesn't work with PHP version : 52 (Doesn't support PHP 4 52).
Исправить это легко. Находим файл /usr/ports/devel/pecl-intl/Makefile, а в нём находим строчку:
IGNORE_WITH_PHP=4 52
И изменяем её вот так:
IGNORE_WITH_PHP=4
Затем пробуем снова установить roundcube и получаем ещё одну ошибку:
/usr/bin/ld: Warning: size of symbol `datefmt_parse_args' changed from 160 in .libs/php_intl.o to 120 in dateformat/.libs/dateformat_class.o
Эту ошибку разрешаем вот такими действиями:
echo "LICENSES_ACCEPTED+=GPLv2" >> /etc/make.conf
cd /usr/ports/devel/pecl-intl/
make deinstall clean
make clean
rm ./files/*
После чего снова пробуем установить roundcube. В этот раз всё должно завершиться удачно, и в папке /usr/local/www мы увидим каталог roundcube. Но мне бы хотелось ещё установить дополнительную тему оформления. Внешний вид некоторых можно посмотреть вот тут:
http://www.w2a.ru/blog/684.html
Мне понравилась Air. Её и ставлю:
cd /usr/ports/mail/roundcube-air
make install clean
Теперь создадим mysql-базу для роундкуба:
mysql -p
CREATE DATABASE `roundcube` CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON roundcube.* TO 'roundcube'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION;
Потом заходим в каталог /usr/local/www/roundcube/SQL и создаём таблицы в базе:
mysql roundcube -p < mysql.initial.sql
В своём случае, я хочу заходить в почту по адресу https://192.168.0.100/mail, поэтому я копирую всё содержимое каталога /usr/local/www/roundcube в каталог /usr/local/www/mysite/mail. Как я уже и говорил раньше, настройки вэб-сервера под джумлу прекрасно подошли и под roundcube. При этом, обязательно помню, что надо дать соответствующие права на этот каталог:
chown -R www:www mail
Затем, чтобы сделать начальное конфигурирование, захожу по адресу: http://192.168.0.100/mail/installer И если всё работает, то должна появиться вот такая картинка:
Жмём на strat installation. На второй страничке я увидел надпись Intl: NOT AVAILABLE. Тут, наверно, достаточно просто было перезапустить php-fpm, но я перезагрузил весь сервер, после чего установшик больше на это не жаловался.
На второй странице «Create config» я сделал вот такие настройки:
product_name: назовите как-нибудь заголовок вашей страницы
temp не трогал
ip_check не ставил галку
des_key не трогал
enable_caching не имеет смыла, т.к. Imap прямо на этом же сервере.
enable_spellcheck — да, проверку правописания включить
spellcheck_engine выбрал pspell, т.к. не хочу, чтоб моя переписка куда-то в гугл уходила.
identities_level оставил как есть
debug_level — галка Log errors
log_driver — file
log_dir — /var/log/roundcube
Database setup: прописываем нашу базу, логин и пароль к ней
default_host — 127.0.0.1
default_port — 143
username_domain — автоматическое добавление домена к логину пользователя. Пишем свой example.com
auto_create_user — галка стоит
sent_mbox, trash_mbox, drafts_mbox, junk_mbox — каталоги, что будут создаваться в вашем ящике. Я оставил по умолчанию.
smtp_server — 127.0.0.1
smtp_port — 25
smtp_user/smtp_pass не надо ничего вводить, т.к. SMTP-сервер у нас на этом же хосте
smtp_log — снял галку, т.к. хватает и постфиксовских логов.
Language — ru_RU
skin — air
skin_logo — тут можно загрузить лого-картинку вместо стандартной. Но у меня она не готова пока. Потом вручную подменю картинку...
pagesize не менял
prefer_html не менял (отображать сообщения в виде HTML по умолчанию)
preview_pane — поствил галку (отображать панель просмотра сообщений по умолчанию)
htmleditor — создавать сообщения в формате HTML только когда отвечаю на HTML сообщение (последний вариант выбрал)
draft_autosave — сохранение черновика каждые n минут. Я отключил.
mdn_requests — отправлять уведомление о прочтении. Не трогал — пусть меня спрашивает
mime_param_folding — выбрал для аутглюка.
В конце нажимаем кнопку «create config», после чего установщик предложит скачать два конфига и положить их в папку /usr/local/www/mysite/mail/config , что мы и сделаем. А после этого, нажимаем в установщике «continue». Нас перебросит на тестовую страничку, на которой можно протестировать smtp и imap.
ВНИМАНИЕ: если у вас не проходит тест imap, то проверьте настройки в соответствии с тем, как сказано тут:
http://unix4me.ru/archives/1204
Дублирую сюда эту информацию:
при настройке криптации пароля пользователя в связке Postfixadmin+Dovecot+Roundcube необходимо настроить:
В Postfixadmin — config.inc.php:
$CONF['encrypt'] = 'md5crypt';
В Dovecot — 10-auth.conf:
auth_mechanisms = plain
Просто один plain без других видов криптации.
В Dovecot — dovecot-sql.conf.ext:
default_pass_scheme = MD5-CRYPT
В Roundcube — main.inc.php:
$rcmail_config['imap_auth_type'] = CRAM-MD5;
И не забываем создать каталог для логов:
mkdir /var/log/roundcube
chown www:www /var/log/roundcube
Если же все тесты прошли удачно, то давайте ещё немного подправим конфиг /usr/local/www/mysite/mail/config/main.inc.php вручную. Пишу лишь те строчки, что я подправил:
// Log session authentication errors to <log_dir>/session or to syslog. Записывать в лог неудачные попытки авторизоваться.
$rcmail_config['log_session'] = true;
// enforce connections over https. Принудительно переходить в https.
$rcmail_config['force_https'] = true;
// кодировать или нет IP-адрес и имя хоста. Пусть кодирует.
$rcmail_config['http_received_header_encrypt'] = true;
//автоматически создавать папки «входящие», «отправленные» и т.д. Новому пользователю.
$rcmail_config['create_default_folders'] = true;
//Если 0 у вас в системных квотах означает безлимит, ставим истину
$rcmail_config['quota_zero_as_unlimited'] = true;
Сохраняем конфиг и удаляем папку /usr/local/www/mysite/mail/installer Потом пробуем зайти на сервер http://192.168.0.100/mail При этом, вас должно перекинуть на https соединение. Попробуйте попользоваться почтой. Если всё сделали без ошибок, то почта должна работать.
07.06.2013 Добавлено:
После некоторого использования своего почтовика, выявилась одна проблема: когда кто-то шлёт письмо адресату, у которого есть алиас (псевдоним) на сервере, то на этот самый алиас приходит две копии письма. Проблема решается добавлением в конфиг master.cf вот такой строчки:
-o receive_override_options=no_address_mappings
добавляется она после строчки "-o content_filter=spamassassin"
Также была проблема, описанная вот тут:
http://forum.altlinux.org/index.php?topic=10538.0
Заключалась она в том, что если кто-то отправлял письмо на сразу два ящика моего сервера, то это письмо не доходило. Оно направлялось в отложенные письма. У меня она решилась добавлением в main.cf строчки:
dovecot_destination_recipient_limit = 1
При этом, по ссылке выше написано, что после её добавления начали вылазить какие-то ошибки при старте postfix. У меня же никаких ошибок не вылазило
05.11.2014 Добавлено:
В последние несколько месяцев мой ящик, работающий на моём сервере, начали весьма активно спамить. При этом, spamassassin успешно весь этот спам распазнаёт и ставит метки **SPAM**. Но не удаляет его. Груды спама удалять приходилось вручную каждый раз. И мне это сильно надоело. Поэтому я решил сделать апгрэйд для своей почтовой системы . Задачи я себе поставил следующие:
- Система должна сама класть спамовые письма в папку спам.
- Письма, у которых спамовый балл зашкаливает, должны удаляться сразу.
- В вэб-интерфейсе должна появиться конопочка "пометить как спам" и "пометить как НЕ спам", которая помещает письма в папку СПАМ и убирает письма из этой папки, если они туда попали случайно.
- При этом, система как-то должна обращать внимание на помещаемые вручную письма в папку СПАМ и должна их обрабатывать и обучаться.
Собственно, и не так страшен чёрт, как его малюют. Оказалось, что с первыми двумя задачами отлично справляется почтовый фильтр procmail. А с последними двумя задачами отлично справляется плагин для roundcube, который называется markasjunk2.
Приступаем. Что касается procmail, то его настройку под FreeBSD я уже затрагивал в двух своих статьях:
http://technotrance.su/index.php/moi-stati/freebsd/item/23-mail-gateway-freebsd
http://technotrance.su/index.php/moi-stati/freebsd/item/25-mailgateway-addon
Но тут я систематизирую всю эту информацию с учётом некоторых тонкостей, которые возникли во время настройки. Всё по порядку. Ставим procmail:
cd /usr/ports/mail/procmail
make install clean
опции оставляем по умолчанию.
Затем, настроим постфикс на работу с procmail. В конфиге постфикса /usr/local/etc/postfix/main.cf находим строчку:
#mailbox_command = /some/where/procmail
и правим её вот так:
mailbox_command = /usr/local/bin/procmail
Затем, найдём строчку:
#mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
И исправим её на:
mailbox_transport = procmail
либо просто добавляем эту строчку ниже.
А ещё, после неё, добавим вот эту строчку:
procmail_destination_recipient_limit = 1
Теперь надо отредактировать файл /usr/local/etc/postfix/master.cf. В него надо добавить следующие строчки:
-o content_filter=procmail:
procmail unix - n n - - pipe flags=Rq user=virtual argv=/usr/local/bin/procmail -f SENDER=${sender} -t RECIPIENT=${recipient} -m USER=${user} DOMAIN=${domain} /usr/local/etc/procmailrc
Чтобы было более наглядно, я приведу весь свой конфиг master.cf и зелёным цветом выделю добавленные строчки, чтобы было видно, где их надо добавить и где закомментировать лишнее.
smtp inet n - n - - smtpd # -o content_filter=spamassassin -o content_filter=procmail: -o receive_override_options=no_address_mappings #smtp inet n - n - 1 postscreen #smtpd pass - - n - - smtpd #dnsblog unix - - n - 0 dnsblog #tlsproxy unix - - n - 0 tlsproxy #submission inet n - n - - smtpd # -o syslog_name=postfix/submission # -o smtpd_tls_security_level=encrypt # -o smtpd_sasl_auth_enable=yes # -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING smtps inet n - n - - smtpd -o content_filter=spamassassin -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING #628 inet n - n - - qmqpd pickup fifo n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr fifo n - n 300 1 qmgr #qmgr fifo n - n 300 1 oqmgr tlsmgr unix - - n 1000? 1 tlsmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap proxywrite unix - - n - 1 proxymap smtp unix - - n - - smtp relay unix - - n - - smtp # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5 showq unix n - n - - showq error unix - - n - - error retry unix - - n - - error discard unix - - n - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache # dovecot unix - n n - - pipe flags=DRhu user=virtual:virtual argv=/usr/local/libexec/dovecot/deliver -d ${recipient} spamassassin unix - n n - - pipe user=spamd argv=/usr/local/bin/spamc -f -e /usr/local/sbin/sendmail -oi -f ${sender} ${recipient} procmail unix - n n - - pipe flags=Rq user=virtual argv=/usr/local/bin/procmail -f SENDER=${sender} -t RECIPIENT=${recipient} -m USER=${user} DOMAIN=${domain} /usr/local/etc/procmailrc
И вот тут объясню некоторые тонкости:
Первая — это параметр user=virtual. Это потому, что procmail будет раскладывать письма в каталоги виртуальных пользователей postfix, а на них права есть только у пользователя virtual.
Второй важный момент — это параметры USER=${user} DOMAIN=${domain}, указанные после ключика -m. Он нужны, чтобы procmail понимал переменные $USER и $DOMAIN. Зачем они нужны, будет видно ниже в правилах procmail.
Далее, создаём файл /usr/local/etc/procmailrc и наполняем его вот таким содержимым:
MAILDIR=/usr/local/etc/postfix/procmail
LOGFILE=$MAILDIR/procmail.log
LOCKFILE=$MAILDIR/procmail.lock
SHELL=/bin/sh
# отправляем письмо (которое меньше 512КБ) к спамассассину
:0fw
* <512000
| /usr/local/bin/spamc
# вырезаем спамовые письма и кладём в папку "спам", у которых балл от 5 до 7
:0H:
* ^.*----SPAM----.*$
* ^X-Spam-Level: \*\*\*\*(\*|\*\*|\*\*\*)$
/usr/home/vmail/$DOMAIN/$USER/Junk
# всё остальное, у чего балл выше, убиваем.
:0H
* ^.*----SPAM----.*$
* ^X-Spam-Level: \*\*\*\*\*\*\*.*$
/dev/null
# Хорошие же письма отправляем по месту назначения
:0H
* ^.*@mydomain\.domain.*$
! $RECIPIENT
# Последнее правило уничтожает всё остальное
:0
/dev/null
Думаю, что алгоритм обработки писем понятен из комментариев в конфиге.
Не забываем создать рабочий каталог для procmail ! Тот самый, который указали в конфиге постфикса master.cf:
mkdir /usr/local/etc/postfix/procmail
chown virtual:mail /usr/local/etc/postfix/procmail
chmod 770 /usr/local/etc/postfix/procmail
Вот теперь можно перезапускать postfix, чтобы все изменения вступили в силу:
service postfix restart
Теперь postfix будет получать письма, затем будет отдавать их на обработку в procmail, который, в свою очередь, будет отдавать их на проверку к спамассассину и уже после антиспамовой проверки будет направлять их далее: либо резать, либо в папку спам, либо во входящие к адресату.
В логе /usr/local/etc/postfix/procmail/procmail.log всё это дело будет наглядно отражаться. И если у вас спама реально много, то обязательно следует настроить ротацию этого лога. Чтобы это сделать, надо в файл /etc/newsyslog.conf добавить вот такую строчку:
/usr/local/etc/postfix/procmail/procmail.log virtual:mail 600 5 100 * JC
Только, лучше использовать знак табуляции между параметрами.
Теперь, что касается кнопки в вэб-интерфейсе. Сам я пользовался вот этой статьёй:
http://diskstation.ru/viewtopic.php?f=19&t=82
Итак, скачиваем плагин (в виде архива) для roundcube от сюда:
https://github.com/JohnDoh/Roundcube-Plugin-Mark-as-Junk-2/
И кладём содержимое этого архива в каталог plugins/markasjunk2, который внутри каталога с вашим roudcube. У меня это каталог /usr/home/www/mysite/mail/plugins/markasjunk2.
Теперь редактирую конфиг RoundCube home/www/mysite/mail/config/main.inc.php. Нахожу параметр:
$rcmail_config['plugins'] = array();
и дописываю название папки плагина в список
$rcmail_config['plugins'] = array(markasjunk2);
если у вас уже стоят другие плагины, перечисляете их через запятую.
Далее надо отредактировать конфиг плагина. Открываю файл home/www/mysite/mail/plugins/markasjunk2/config.inc.php. Если файла "config.inc.php" нет, то надо создать его из исходного "config.inc.php.dist". Находим параметр:
$rcmail_config['markasjunk2_learning_driver'] = null;
и меняем значение на 'cmd_learn':
$rcmail_config['markasjunk2_learning_driver'] = 'cmd_learn';
дальше находим параметр:
$rcmail_config['markasjunk2_spam_cmd'] = null;
и меняем его на:
$rcmail_config['markasjunk2_spam_cmd'] = 'sa-learn --spam --no-sync --username=%u %f';
где %u - имя пользователя, %f - полный путь к письму. Таким образом мы 'sa-learn' указываем письмо %f как СПАМ, а эти настройки просим применить для пользователя %u.
Аналогично исправляем параметр:
$rcmail_config['markasjunk2_ham_cmd'] = null;
на:
$rcmail_config['markasjunk2_ham_cmd'] ='sa-learn --ham --no-sync --username=%u %f';
это обучит SpamAssassin пропускать нормальную почту.
Чтобы исправить проблему с кодировкой при возврате письма, отмеченного как СПАМ в первоначальный вид, надо сделать следующее: В конфиге роундкуба main.inc.php находим запись:
// Use this charset as fallback for message decoding
$rcmail_config['default_charset'] = 'ISO-8859-1';
И меняем в ней кодировку на UTF-8:
// Use this charset as fallback for message decoding
$rcmail_config['default_charset'] = 'UTF-8';
Также, выяснилось, что возврат письма, отмеченного как спам, работает некорректно. Письмо уходит куда-то налево, а не обратно во входящие. Проблема решилась поправкой в конфиге плагина config.inc.php вот этого параметра:
$config['markasjunk2_ham_mbox'] = inbox;
Прописал явно inbox маленькими буквами.
Ещё одна моя проблема заключалась в том, что у меня стоял старый RoundCube, ещё версии 0.7.2. И плагин markasjunk2 на этой версии роундкуба не работал. При открытии почты получал пустой белый экран.
Чтобы плагин заработал, пришлось обновить роундкуб до последней версии (1.0.3) Обновление прошло без проблем в целом... Скачал архив с новой версией и распаковал его содержимое в каталог, где у меня расположен мой текущий роундкуб 0.7.2, с заменой файлов. Конфиги, при этом, остались старые, и в них я ничего не менял.
Всё, что я подкрутил после этого — это обратно поменял skin на classic. Как-то он мне более привычен уже.