Виртуальные пользователи и домены в Postfix, Courier, MySQL и SquirrelMail (Fedora 10)

Опубликовано 21.12.2009

Оригинал: Virtual Users And Domains With Postfix, Courier, MySQL And SquirrelMail (Fedora 10)
Перевод: Сгибнев Михаил

 В этой статье описывается, как создать почтовый сервер на базе Postfix с поддержкой виртуальных пользователей и доменов. При этом список пользователей и доменов будет храниться в базе данных MySQL. Так же будет показана установка Courier (Courier-POP3, Courier-IMAP) и настройка его на работу с той же базой данных.

 На выходе мы получим сервер Postfix с поддержкой SMTP-AUTH, TLS и quota (quota по умолчанию не входит в Postfix), а пароли пользователей будут храниться в зашифрованном виде, в отличие от других известных документов, описывающих настройку почтового сервера. Так же будет рассмотрена установка Amavisd, SpamAssassin и ClamAV для защиты от спама и вирусов, а для досупа пользователей через web-интерфейс мы установим SquirrelMail.

 Преимуществами такой «виртуальной» установки (пользователи и домены в базе данных) является повышение производительности, в отличие от работы с «реальными» системными аккаунтами. При реализации такой схемы вполне возможным становится работа с многими тысячами доменов и пользователей. Кроме того, становится намного легче управление всем этим хозяйством, потому что вам придется иметь иметь дело с базой данных MySQL при редактировании или добавлении новых пользователей и доменов. Нет больше необходимости в команде postmap для создания db файлов, не надо перезагружать Postfix и т.д. Для администрирования MySQL вы можете использовать web-интерфейс, такой как phpMyAdmin, установка которого также описана в этом документе.

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

 Не дается никаких гарантий. Все, что вы делаете — вы делаете на свой страх и риск.

 (1) Предварительное примечание: руководство написано для дистрибутива Fedora 10 (должен быть уже установлен, например по этой инструкции), хост имеет адрес 192.168.0.100 и имя server1.example.com. Убедитесь, что пакетный фильтр выключен и SELinux так же отключен.

 (2) Установка ПО: сперва необходимо обновить имеющиеся пакеты в системе:

yum update

 И установить дополнительное ПО, которое нам понадобится позже.

yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'

 (3) Установка Apache, MySQL, phpMyAdmin Все можно поставить одной командой, включая пакеты, необходимые для сборки Courier-IMAP.

yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel
pkgconfig zlib-devel phpMyAdmin pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers
libtool gdbm-devel pam-devel gamin-devel

 (4) Устанавливаем Courier-IMAP, Courier-Authlib и Maildrop К сожалению rpm пакетов для установки Courier-IMAP, Courier-Authlib и Maildrop нет, поэтому устанавливаем их следующим образом:

 RPM пакет нет нужды собирать с правами пользователя root, courier-imap даже откажется компилироваться, если обнаружит, что вы работаете с такими правами. Поэтому мы создаем нормальную учетную запись пользователя (falko в этом примере) и устанавливаем ему пароль:

useradd -m -s /bin/bash falko
passwd falko

 Теперь нам необходимо выполнить команду sudo, для того, чтобы позволить пользователю сборку и установку rpm пакетов. Сперва, разрешим пользователю falko выполнение всех команд:

visudo

 Добавляем необходимую строку:

[...]
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
falko ALL=(ALL) ALL
[...]

 Теперь все готово. Переключаемся на пользователя falko:

su falko

 И создаем рабочие каталоги:

mkdir $HOME/rpm
mkdir $HOME/rpm/SOURCES
mkdir $HOME/rpm/SPECS
mkdir $HOME/rpm/BUILD
mkdir $HOME/rpm/BUILDROOT
mkdir $HOME/rpm/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386


echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros

 Создаем каталог downloads и скачиваем исходные файлы с http://www.courier-mta.org/download.php:

mkdir $HOME/downloads
cd $HOME/downloads


wget http://prdownloads.sourceforge.net/courier/courier-authlib-0.62.1.tar.bz2
wget http://prdownloads.sourceforge.net/courier/courier-imap-4.4.1.20080920.tar.bz2
wget http://prdownloads.sourceforge.net/courier/maildrop-2.0.4.20080726.tar.bz2

 Теперь (находясь в $HOME/downloads) собираем courier-authlib:

sudo rpmbuild -ta courier-authlib-0.62.1.tar.bz2

 После завершения сборки rpm пакет находится в $HOME/rpm/RPMS/i386 ($HOME/rpm/RPMS/x86_64 если у вас x86_64 система)

cd $HOME/rpm/RPMS/i386

 С помощью команды ls -l просмотрим список доступных пакетов:

[falko@server1 i386]$ ls -l
total 588
-rw-r--r-- 1 root root 139458 2009-01-21 16:12 courier-authlib-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 311705 2009-01-21 16:12 courier-authlib-debuginfo-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 34723 2009-01-21 16:12 courier-authlib-devel-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 17784 2009-01-21 16:12 courier-authlib-ldap-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 14096 2009-01-21 16:12 courier-authlib-mysql-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 13349 2009-01-21 16:12 courier-authlib-pgsql-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 8150 2009-01-21 16:12 courier-authlib-pipe-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 34986 2009-01-21 16:12 courier-authlib-userdb-0.62.1-1.fc10.i386.rpm
[falko@server1 i386]$

 Выбираем и устанавливаем пакеты, необходимые нам:

sudo rpm -ivh courier-authlib-0.62.1-1.fc10.i386.rpm
sudo rpm -ivh courier-authlib-devel-0.62.1-1.fc10.i386.rpm
sudo rpm -ivh courier-authlib-mysql-0.62.1-1.fc10.i386.rpm

 С помощью команды cd $HOME/downloads перейдем в каталог downloads и выполним rpmbuild
без sudo:

rpmbuild -ta courier-imap-4.4.1.20080920.tar.bz2

 После завершения сборки rpm пакет находится в $HOME/rpm/RPMS/i386 ($HOME/rpm/RPMS/x86_64 если у вас x86_64 система)

cd $HOME/rpm/RPMS/i386

 С помощью команды ls -l просмотрим список доступных пакетов:

[falko@server1 i386]$ ls -l
total 1864
-rw-r--r-- 1 root root 139458 2009-01-21 16:12 courier-authlib-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 311705 2009-01-21 16:12 courier-authlib-debuginfo-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 34723 2009-01-21 16:12 courier-authlib-devel-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 17784 2009-01-21 16:12 courier-authlib-ldap-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 14096 2009-01-21 16:12 courier-authlib-mysql-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 13349 2009-01-21 16:12 courier-authlib-pgsql-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 8150 2009-01-21 16:12 courier-authlib-pipe-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 34986 2009-01-21 16:12 courier-authlib-userdb-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 falko falko 398287 2009-01-21 17:02 courier-imap-4.4.1.20080920-1.10.i386.rpm
-rw-r--r-- 1 falko falko 895637 2009-01-21 17:02 courier-imap-debuginfo-4.4.1.20080920-1.10.i386.rpm
[falko@server1 i386]$

 И устанавливаем courier-imap:

sudo rpm -ivh courier-imap-4.4.1.20080920-1.10.i386.rpm

 С помощью команды cd $HOME/downloads вернемся в каталог downloads и выполним rpmbuild для сборки maildrop

sudo rpmbuild -ta maildrop-2.0.4.20080726.tar.bz2

 После завершения сборки rpm пакет находится в $HOME/rpm/RPMS/i386 ($HOME/rpm/RPMS/x86_64 если у вас x86_64 система)

cd $HOME/rpm/RPMS/i386

 С помощью команды ls -l просмотрим список доступных пакетов:

[falko@server1 i386]$ ls -l
total 3080
-rw-r--r-- 1 root root 139458 2009-01-21 16:12 courier-authlib-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 311705 2009-01-21 16:12 courier-authlib-debuginfo-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 34723 2009-01-21 16:12 courier-authlib-devel-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 17784 2009-01-21 16:12 courier-authlib-ldap-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 14096 2009-01-21 16:12 courier-authlib-mysql-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 13349 2009-01-21 16:12 courier-authlib-pgsql-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 8150 2009-01-21 16:12 courier-authlib-pipe-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 root root 34986 2009-01-21 16:12 courier-authlib-userdb-0.62.1-1.fc10.i386.rpm
-rw-r--r-- 1 falko falko 398287 2009-01-21 17:02 courier-imap-4.4.1.20080920-1.10.i386.rpm
-rw-r--r-- 1 falko falko 895637 2009-01-21 17:02 courier-imap-debuginfo-4.4.1.20080920-1.10.i386.rpm
-rw-r--r-- 1 root root 301762 2009-01-21 17:33 maildrop-2.0.4.20080726-3.10.i386.rpm
-rw-r--r-- 1 root root 726303 2009-01-21 17:33 maildrop-debuginfo-2.0.4.20080726-3.10.i386.rpm
-rw-r--r-- 1 root root 133025 2009-01-21 17:33 maildrop-devel-2.0.4.20080726-3.10.i386.rpm
-rw-r--r-- 1 root root 58561 2009-01-21 17:33 maildrop-man-2.0.4.20080726-3.10.i386.rpm
[falko@server1 i386]$

 И устанавливаем maildrop:

sudo rpm -ivh maildrop-2.0.4.20080726-3.10.i386.rpm

 После компиляции и установки необходимых пакетов возвращаемся к пользователю root:

exit

 (5) Накладываем патч Quota на Postfix Для этого нам необходимо получить rpm с исходными текстами Postfix, пропатчить его, собрать и установить новый пакет:

cd /usr/src
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/fedora/linux/releases/10/Fedora/source/SRPMS/postfix-2.5.5-1.fc10.src.rpm
rpm -ivh postfix-2.5.5-1.fc10.src.rpm

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

warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root

 Приступаем к процедуре:

cd /root/rpmbuild/SOURCES
wget http://vda.sourceforge.net/VDA/postfix-2.5.5-vda-ng.patch.gz
gunzip postfix-2.5.5-vda-ng.patch.gz
cd /root/rpmbuild/SPECS/

 Редактируем postfix.spec:

vi postfix.spec

 Добавляем Patch0: postfix-2.5.5-vda-ng.patch после # Patches и %patch0 -p1 -b .vda-ng в раздел %setup -q:

[...]
# Patches

Patch0: postfix-2.5.5-vda-ng.patch
Patch1: postfix-2.1.1-config.patch
Patch3: postfix-alternatives.patch
Patch6: postfix-2.1.1-obsolete.patch
Patch7: postfix-2.1.5-aliases.patch
Patch8: postfix-large-fs.patch
Patch9: postfix-2.4.0-cyrus.patch
Patch10: postfix-2.4.5-open_define.patch
[...]
%prep
%setup -q
# Apply obligatory patches
%patch0 -p1 -b .vda-ng
%patch1 -p1 -b .config
%patch3 -p1 -b .alternatives
%patch6 -p1 -b .obsolete
%patch7 -p1 -b .aliases
%patch8 -p1 -b .large-fs
%patch9 -p1 -b .cyrus
%patch10 -p1 -b .open_define
[...]

 Собираем новый пакет Postfix с квотами для MySQL:

rpmbuild -ba postfix.spec

Пакет будет собран в каталоге /root/rpmbuild/RPMS/i386 (/root/rpmbuild/RPMS/x86_64 если у вас x86_64 система), куда мы и переходим с помощью команды cd /root/rpmbuild/RPMS/i386. Просмотрим содержимое каталога с помощью команды ls -l:

[root@server1 i386]# ls -l
total 11828
-rw-r--r-- 1 root root 4006842 2009-01-21 18:26 postfix-2.5.5-1.fc10.i386.rpm
-rw-r--r-- 1 root root 8028042 2009-01-21 18:26 postfix-debuginfo-2.5.5-1.fc10.i386.rpm
-rw-r--r-- 1 root root 51909 2009-01-21 18:26 postfix-pflogsumm-2.5.5-1.fc10.i386.rpm
[root@server1 i386]#

 Устанавливаем Postfix:

rpm -ivh postfix-2.5.5-1.fc10.i386.rpm

 (6) Устанавливаем пароль на MySQL и конфигурируем phpMyAdmin

 Запускаем MySQL:

chkconfig --levels 235 mysqld on
/etc/init.d/mysqld start

 И устанавливаем пароль root для MySQL:

mysqladmin -u root password yourrootsqlpassword
mysqladmin -h server1.example.com -u root password yourrootsqlpassword

 Если в ходе выполнения последней команды была получена ошибка:

[root@server1 i386]# mysqladmin -h server1.example.com -u root password howtoforge
mysqladmin: connect to server at 'server1.example.com' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
[root@server1 i386]#

 Необходимо установить пароль другим способом:

mysql -u root -p
mysql> USE mysql;
mysql> UPDATE user SET Password = password('yourrootsqlpassword') WHERE Host = 'server1.example.com' AND User = 'root';
mysql> UPDATE user SET Password = password('yourrootsqlpassword') WHERE Host = '127.0.0.1' AND User = 'root';

 Выполните:

mysql> SELECT * FROM user;

 Чтобы убедиться, что все строки с упоминанием root имеют пароль. Если все выглядит хорошо, то выполните:

mysql> FLUSH PRIVILEGES;
mysql> quit;

 Приступаем к конфигурации phpMyAdmin. Мы должны изменить конфигурацию Apache таким образом, чтобы phpMyAdmin принимал соединения не только с localhost.

vi /etc/httpd/conf.d/phpMyAdmin.conf

 Комментируем секцию

# phpMyAdmin - Web based MySQL browser written in php
#
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin
#
# order deny,allow
# deny from all
# allow from 127.0.0.1
#

# This directory does not require access over HTTP - taken from the original
# phpMyAdmin upstream tarball
#

Order Deny,Allow
Deny from All
Allow from None

# This configuration prevents mod_security at phpMyAdmin directories from
# filtering SQL etc. This may break your mod_security implementation.
#
#
#
# SecRuleInheritance Off
#

#

 Создаем стартовую ссылку и запускаем Apache:

chkconfig --levels 235 httpd on
/etc/init.d/httpd start

 Теперь, воспользовавшись браузером, мы можем пройти по ссылке http://server1.example.com/phpMyAdmin/ или http://192.168.0.100/phpMyAdmin/. Имя пользователя — root, пароль — тот,
что мы указали в MySQL.

 (7) Создаем базу данных MySQL для Postfix/Courier База будет называться незамысловато — mail.

mysqladmin -u root -p create mail
mysql -u root -p

 Находясь в оболочке MySQL, создадим пользователя mail_admin with с паролем mail_admin_password, который будет иметь привелегии SELECT,INSERT,UPDATE,DELETE для базы данных mail. Этот пользователь будет использоваться Postfix и Courier для подключения к базе.

GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';
FLUSH PRIVILEGES;

 Создаем необходимые таблицы:

USE mail;

CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota bigint(20) DEFAULT '10485760',
PRIMARY KEY (email)
) TYPE=MyISAM;

CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) TYPE=MyISAM;

quit;



Таблица domains служит для указания Postfix, для кого пересылать почту.


Эта таблица служит для указания форвардинга — например письма для info@example.com будут пересылаться на sales@example.com.


Здесь хранятся учетные записи пользователей и размер квоты.


Эта таблица для продвинутых пользователей. Тут мы указываем пересылку для доменов или пользователей на другой сервер.

Тут коллеги подсказывают, что авторы допустили ошибку:
mysql> INSERT INTO `transport` (`domain`, `transport`) VALUES (‘example.com’, ‘virtual:’);
Без этой записи postfix отправляет всю почту в /var/spool/mail (ну или что у кого в системе дефолтовое для емыла).

 (8) Конфигурируем Postfix Теперь мы должны указать Postfix, что он дложен брать всю информацию из базы. Обратите внимание, что вы должны указать Postfix обращаться к MySQL на IP адрес 127.0.0.1 вместо localhost. Это связано с тем, что Postfix запускается в chroot jail и не имеет доступа к сокету MySQL, который бы использовался при доступе к localhost.

 Теперь нам предстоит отредактировать 6 текстовых файлов:

vi /etc/postfix/mysql-virtual_domains.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1

vi /etc/postfix/mysql-virtual_forwardings.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1

vi /etc/postfix/mysql-virtual_mailboxes.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1

vi /etc/postfix/mysql-virtual_email2email.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1

vi /etc/postfix/mysql-virtual_transports.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT transport FROM transport WHERE domain='%s'
hosts = 127.0.0.1

vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf

user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT quota FROM users WHERE email='%s'
hosts = 127.0.0.1

chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf

 Теперь мы создаем пользователя и группу vmail с домашним каталогом /home/vmail. Здесь будут храниться почтовые ящики пользователей.

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

 Продолжаем конфигурирование Postfix. Убедитесь, что заменили server1.example.com на верное FQDN! Иначе вряд-ли вы получите требуемый результат.

postconf -e 'myhostname = server1.example.com'
postconf -e 'mydestination = server1.example.com, localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'virtual_alias_domains ='
postconf -e ' virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = static:5000'
postconf -e 'virtual_gid_maps = static:5000'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'
postconf -e 'virtual_create_maildirsize = yes'
postconf -e 'virtual_maildir_extended = yes'
postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'
postconf -e 'virtual_mailbox_limit_override = yes'
postconf -e 'virtual_maildir_limit_message = "The user you are trying to reach is over quota."'
postconf -e 'virtual_overquota_bounce = yes'
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps \
$virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps \
$relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'
postconf -e 'inet_interfaces = all'

 Создаем SSL сертификат, который потребуется нам для работы TLS:

cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

  • Country Name (2 letter code) [GB]: — Страна, в которой вы находитесь
  • State or Province Name (full name) [Berkshire]: — Область
  • Locality Name (eg, city) [Newbury]: — Город
  • Organization Name (eg, company) [My Company Ltd]: — Наименование компании
  • Organizational Unit Name (eg, section) []: — Подразделение
  • Common Name (eg, your name or your server’s hostname) []: — Доменное имя сервера
  • Email Address []:

 Изменяем разрешения для smtpd.key:

chmod o= /etc/postfix/smtpd.key


[ad name=»Google Adsense»]



 (9) Конфигурируем Saslauthd Для этого нам потребуется отредактировать /usr/lib/sasl2/smtpd.conf.

vi /usr/lib/sasl2/smtpd.conf

pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/spool/authdaemon/socket

 Отключаем Sendmail и запускаем Postfix, saslauthd и courier-authlib:

chmod 755 /var/spool/authdaemon
chkconfig --levels 235 courier-authlib on
/etc/init.d/courier-authlib start

chkconfig --levels 235 sendmail off
chkconfig --levels 235 postfix on
chkconfig --levels 235 saslauthd on
/etc/init.d/sendmail stop
/etc/init.d/postfix start
/etc/init.d/saslauthd start

 (10) Конфигурируем Courier Нам необходимо указать Courier что данные для аутентификации находятся в MySQL. Откроем файл /etc/authlib/authdaemonrc и изменим значение authmodulelist.

vi /etc/authlib/authdaemonrc
[...]
authmodulelist="authmysql"
#authmodulelist="authuserdb authpam authpgsql authldap authmysql authcustom authpipe"
[...]

 Затем редактируем /etc/authlib/authmysqlrc. Убедитесь, что указали правильные параметры соединения с базой данных.

cp /etc/authlib/authmysqlrc /etc/authlib/authmysqlrc_orig
cat /dev/null > /etc/authlib/authmysqlrc
vi /etc/authlib/authmysqlrc

MYSQL_SERVER localhost
MYSQL_USERNAME mail_admin
MYSQL_PASSWORD mail_admin_password
MYSQL_PORT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD password
#MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD "/home/vmail"
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
#MYSQL_NAME_FIELD
MYSQL_QUOTA_FIELD quota

 Затем перезапускаем Courier:

chkconfig --levels 235 courier-imap on
/etc/init.d/courier-authlib restart
/etc/init.d/courier-imap restart

 При первом запуске courier-imap, автоматически создаются файлы сертификатов /usr/lib/courier-imap/share/imapd.pem и /usr/lib/courier-imap/share/pop3d.pem из файлов /usr/lib/courier-imap/etc/imapd.cnf и /usr/lib/courier-imap/etc/pop3d.cnf. Поскольку .cnf файлы содержат строку CN=localhost, а сервер называется server1.example.com, могут возникнуть проблемы при TLS соединении. Для того, чтобы решить их просто удалите оба сертификата…

cd /usr/lib/courier-imap/share
rm -f imapd.pem
rm -f pop3d.pem

 И замените строку CN=localhost в /usr/lib/courier-imap/etc/imapd.cnf и
/usr/lib/courier-imap/etc/pop3d.cnf with CN=server1.example.com:

vi /usr/lib/courier-imap/etc/imapd.cnf
[...]
CN=server1.example.com
[...]
vi /usr/lib/courier-imap/etc/pop3d.cnf
[...]
CN=server1.example.com
[...]

 Пересоздаем сертификаты:

./mkimapdcert
./mkpop3dcert

 Перезапускаем courier-authlib и courier-imap:

/etc/init.d/courier-authlib restart
/etc/init.d/courier-imap restart

 После их запуска, выполняем:

telnet localhost pop3

 Если все у нас настроено правильно, то мы должны увидеть:

[root@server1 share]# telnet localhost pop3
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Hello there.
quit
+OK Better luck next time.
Connection closed by foreign host.
[root@server1 share]#

 (11) Модифицируем /etc/aliases Убедитесь, что в этом файле присутствуют алиасы для пользователей root и postmaster:

vi /etc/aliases
[...]
postmaster: root
root: postmaster@yourdomain.tld
[...]

 Или так:

[...]
postmaster: root
root: administrator
[...]

 После модификации вами файла /etc/aliases, необходимо выполнить команду newaliases и перезапустить Postfix:

/etc/init.d/postfix restart

 (11) Устанавливаем Amavisd-new, SpamAssassin и ClamAV Для установки выполните следующие команды:

yum install amavisd-new spamassassin clamav clamav-data clamav-server clamav-update unzip bzip2

Вам необходимо отредактировать файл /etc/amavisd/amavisd.conf.

vi /etc/amavisd/amavisd.conf

 Необходимо заменить

$mydomain = 'example.com'; # a convenient default for other settings

 На

$mydomain = 'localhost';
#$mydomain = 'example.com'; # a convenient default for other settings

 И

$sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.2; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 6.9; # triggers spam evasive actions (e.g. blocks mail)
$sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent

 На

$sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 4.0; # add 'spam detected' headers at that level
$sa_kill_level_deflt = $sa_tag2_level_deflt; # triggers spam evasive actions (e.g. blocks mail)
$sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent

#$sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level
#$sa_tag2_level_deflt = 6.2; # add 'spam detected' headers at that level
#$sa_kill_level_deflt = 6.9; # triggers spam evasive actions (e.g. blocks mail)
#$sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent

 И

# @lookup_sql_dsn =
# ( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'user1', 'passwd1'],
# ['DBI:mysql:database=mail;host=host2', 'username2', 'password2'],
# ["DBI:SQLite:dbname=$MYHOME/sql/mail_prefs.sqlite", '', ''] );
# @storage_sql_dsn = @lookup_sql_dsn; # none, same, or separate database

 На

# @lookup_sql_dsn =
# ( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'user1', 'passwd1'],
# ['DBI:mysql:database=mail;host=host2', 'username2', 'password2'],
# ["DBI:SQLite:dbname=$MYHOME/sql/mail_prefs.sqlite", '', ''] );
# @storage_sql_dsn = @lookup_sql_dsn; # none, same, or separate database

@lookup_sql_dsn =
( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'mail_admin', 'mail_admin_password'] );

$sql_select_policy = 'SELECT "Y" as local FROM domains WHERE CONCAT("@",domain) IN (%k)';

$sql_select_white_black_list = undef; # undef disables SQL white/blacklisting

$recipient_delimiter = '+'; # (default is '+')

$replace_existing_extension = 1; # (default is false)

$localpart_is_case_sensitive = 0; # (default is false)

 И

# $recipient_delimiter = '+'; # undef disables address extensions altogether
# when enabling addr extensions do also Postfix/main.cf: recipient_delimiter=+

 На

$recipient_delimiter = undef; # undef disables address extensions altogether
# $recipient_delimiter = '+'; # undef disables address extensions altogether
# when enabling addr extensions do also Postfix/main.cf: recipient_delimiter=+

 И

$final_virus_destiny = D_DISCARD;
$final_banned_destiny = D_BOUNCE;
$final_spam_destiny = D_DISCARD;
$final_bad_header_destiny = D_BOUNCE;

 На

$final_virus_destiny = D_REJECT;
$final_banned_destiny = D_REJECT;
$final_spam_destiny = D_PASS;
$final_bad_header_destiny = D_PASS;

#$final_virus_destiny = D_DISCARD;
#$final_banned_destiny = D_BOUNCE;
#$final_spam_destiny = D_DISCARD;
#$final_bad_header_destiny = D_BOUNCE;

 Конечно, это ваше дело, что делать с вирусами и спамом, но я решаю принимать спам (D_PASS), так как такие письма могут быть легко отфильтрованы почтовым клиентом (так как amavisd-new перезаписывает тему письма). Это лучше, чем отбрасывать письма по ложному срабатыванию. Расшифровка параметров D_PASS, D_DISCARD, D_BOUNCE, and D_REJECT описана здесь.

 После моих изменений, файл /etc/amavisd/amavisd.conf приобрел следующий вид. amavisd-new склеивает между собой Postfix и SpamAssassin/ClamAV. Postfix передает почту amavisd-new, а он, в свою очередь, вызывает SpamAssassin и ClamAV для ее проверки. Пожалуйста взгляните на Spamassassin и параметры настройки ClamAV в /etc/amavisd/amavisd.conf. Конечно, вы можете внести намного больше изменений в этот файл. Не стесняйтесь делать это и поглядывайте в оригинальный файл /etc/amavisd/amavisd.conf!

 Когда вы установили ClamAV, было создано задание cron для обновления его антивирусных баз каждые 3 часа. Но оно будет работать, только если есть соответствующая запись в /etc/sysconfig/freshclam и /etc/freshclam.conf::

vi /etc/sysconfig/freshclam

## When changing the periodicity of freshclam runs in the crontab,
## this value must be adjusted also. Its value is the timespan between
## two subsequent freshclam runs in minutes. E.g. for the default
##
## | 0 */3 * * * ...
##
## crontab line, the value is 180 (minutes).
# FRESHCLAM_MOD=

## A predefined value for the delay in seconds. By default, the value is
## calculated by the 'hostid' program. This predefined value guarantees
## constant timespans of 3 hours between two subsequent freshclam runs.
##
## This option accepts two special values:
## 'disabled-warn' ... disables the automatic freshclam update and
## gives out a warning
## 'disabled' ... disables the automatic freshclam silently
# FRESHCLAM_DELAY=

### !!!!! REMOVE ME !!!!!!
### REMOVE ME: By default, the freshclam update is disabled to avoid
### REMOVE ME: network access without prior activation
#FRESHCLAM_DELAY=disabled-warn # REMOVE ME

vi /etc/freshclam.conf

[...]
# Comment or remove the line below.
#Example
[...]

 Теперь создаем скрипты запуска для ClamAV и amavisd-new, обновляем антивирусные базы ClamAV и запускаем оба сервиса:

chkconfig --levels 235 amavisd on
chkconfig --levels 235 clamd.amavisd on
/usr/bin/freshclam
/etc/init.d/amavisd start
/etc/init.d/clamd.amavisd start

 Теперь сконфигурируем Postfix на получение почты через amavisd-new:

postconf -e 'content_filter = amavis:[127.0.0.1]:10024'
postconf -e 'receive_override_options = no_address_mappings'

 Добавим в файл /etc/postfix/master.cf следущее:

vi /etc/postfix/master.cf

[...]
amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes

127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_bind_address=127.0.0.1

 И перезапустим Postfix:

/etc/init.d/postfix restart

 (13) Устанавливаем Razor, Pyzor, DCC и конфигурируем SpamAssassin. Razor, Pyzor и DCC являются спам-фильтрами. Для их установки выполните команду yum install perl-Razor-Agent pyzor, а для инициализации:

chmod -R a+rX /usr/share/doc/pyzor-0.4.0 /usr/bin/pyzor /usr/bin/pyzord
chmod -R a+rX /usr/lib/python2.5/site-packages/pyzor
su -m amavis -c 'pyzor --homedir /var/spool/amavisd discover'
su -m amavis -c 'razor-admin -home=/var/spool/amavisd -create'
su -m amavis -c 'razor-admin -home=/var/spool/amavisd -register'

 DCC устанавливается следующим образом:

cd /tmp
wget http://www.dcc-servers.net/dcc/source/dcc-dccproc.tar.Z
tar xzvf dcc-dccproc.tar.Z
cd dcc-dccproc-1.3.102
./configure --with-uid=amavis
make
make install
chown -R amavis:amavis /var/dcc
ln -s /var/dcc/libexec/dccifd /usr/local/bin/dccifd

  Теперь укажем SpamAssassin использовать эти программы. Отредактируйте /etc/mail/spamassassin/local.cf следующим образом:

vi /etc/mail/spamassassin/local.cf

# These values can be overridden by editing ~/.spamassassin/user_prefs.cf
# (see spamassassin(1) for details)

# These should be safe assumptions and allow for simple visual sifting
# without risking lost emails.

#required_hits 5
#report_safe 0
#rewrite_header Subject [SPAM]

# dcc
use_dcc 1
dcc_path /usr/local/bin/dccproc

#pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor

#razor
use_razor2 1
razor_config /var/spool/amavisd/razor-agent.conf

#bayes
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

 Теперь необходимо подключить плагин DCC к SpamAssassin. Откройте /etc/mail/spamassassin/v310.pre и раскомментируйте строку loadplugin:

[...]
# DCC - perform DCC message checks.
#
# DCC is disabled here because it is not open source. See the DCC
# license for more details.
#
loadplugin Mail::SpamAssassin::Plugin::DCC
[...]

 Проверяем правильность конфигурации SpamAssassin командой spamassassin —lint. При ее выполнении не должно возникнуть ошибок. После этого, перезапустите SpamAssasin командой /etc/init.d/amavisd restart и обновите наборы правил командой sa-update —no-gpg. Также, командой crontab -e можно создать задание на регулярное обновление правил:

23 4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null

 (13) Предупреждение о превышении квоты. Если вы хотите получать предупреждения о превышении квоты почтовым аккаунтом, выполните следующие действия:

cd /usr/local/sbin/
wget http://puuhis.net/vhcs/quota.txt
mv quota.txt quota_notify
chmod 755 quota_notify

 Откройте файл /usr/local/sbin/quota_notify и отредактируйте, как показано ниже:

vi /usr/local/sbin/quota_notify

[...]
my $POSTFIX_CF = "/etc/postfix/main.cf";
my $MAILPROG = "/usr/sbin/sendmail -t";
my $WARNPERCENT = 80;
my @POSTMASTERS = ('postmaster@yourdomain.tld');
my $CONAME = 'My Company';
my $COADDR = 'postmaster@yourdomain.tld';
my $SUADDR = 'postmaster@yourdomain.tld';
my $MAIL_REPORT = 1;
my $MAIL_WARNING = 1;
[...]
print "Subject: WARNING: Your mailbox is $lusers{$luser}% full.\n";
[...]
print "Your mailbox: $luser is $lusers{$luser}% full.\n\n";
[...]

 С помощью команды crontab -e создайте задание на периодическое выполнение:

0 0 * * * /usr/local/sbin/quota_notify &> /dev/null

 (15) Тестируем Postfix Для проверки готовности Postfix к работе с SMTP-AUTH и TLS выполните команду telnet localhost 25 и поприветствуйте свой сервер командой ehlo localhost:

[root@server1 ~]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server1.example.com ESMTP Postfix
ehlo localhost
250-server1.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
[root@server1 ~]#

 Выйти в командную строку можно с помощью команды quit. Вас должны интересовать строки 250-STARTTLS и 250-AUTH PLAIN LOGIN

 (14) Наполняем и тестируем базу данных Для этого подключимся к MySQL командой mysql -u root -p и выберем нужную нам базу командой USE mail;, после чего создадим записи в таблицах domains и users:

INSERT INTO `domains` (`domain`) VALUES ('example.com');
INSERT INTO `users` (`email`, `password`, `quota`) VALUES ('sales@example.com', ENCRYPT('secret'), 10485760);

 Обратите внимание на то, что во второй команде используется функция ENCRYPT для шифрования пароля пользователя.

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

INSERT INTO `forwardings` (`source`, `destination`) VALUES ('info@example.com', 'sales@example.com');
INSERT INTO `transport` (`domain`, `transport`) VALUES ('example.com', 'smtp:mail.example.com');

 После внесения данных воспольуйтесь командой quit; чтобы покинуть MySQL.

 Для большинства пользователей значительно проще будет действовать через графический интерфейс. В данном случае, это phpMyAdmin (в этом примере по адресу http://192.168.0.100/phpMyAdmin/ или http://server1.example.com/phpMyAdmin/) для администрирования базы данных mail. И в этом случае обращаю ваше внимание на использование функции ENCRYPT.

 Посмотреть смысл полей таблиц forwardings и transport вы можете на рисунках, представленных ниже. Для получения более подробной информации по transport, выполните команду man transport.

 Важно: так как Postfix использует для транспорта механизм кэширования, то есть некоторая задержка перед тем, как изменения вступят в силу. Если вы хотите, чтобы изменения были применены немедленно, воспользуйтесь командой postfix reload для перезагрузки Postfix.

 (17) Шлем письмо для создания почтового каталога Когда вы создадите новый почтовый аккаунт и попробуете получить с него почту через POP3/IMAP, то, вероятно, получите сообщение об ошибке, говорящие о том, что почтового каталога не существует. Почтовый каталог создается автоматически при получении новой почты, поэтому будет неплоой идеей отправить письмо с приветствием на новый аккаунт.

 Для начала, установим mailx:

yum install mailx

 А уж потом пошлем письмо по нижеприведенному образцу:

[root@server1 ~]# mailx sales@example.com
Subject: Welcome <-- ENTER Welcome! Have fun with your new mail account. <-- ENTER <-- CTRL+D EOT [root@server1 ~]#

 (18) Установка SquirrelMail SquirrelMail - это web-интерфейс, позволяющий пользователям получать, читать и отправлять почту с помощью браузера. В этой главе описано, как установить и настроить SquirrelMail для нашей конфигурации так, чтобы пользователи могли изменять пароль своей учетной записи из интерфейса SquirrelMail.

 Для установки SquirrelMail выполните команду:

yum install squirrelmail php-pear-DB

 Перезапускаем Apache:

/etc/init.d/httpd restart

 SquirrelMail уже идет с некоторыми предварительно установленными плагинами, но к сожалению ни один из них не способен менять пароль нашей учетной записи, хранящейся в MySQL. Но есть плагин Change SQL Password plugin, который мы можем установить вручную:

cd /usr/share/squirrelmail/plugins
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fchange_sqlpass-3.3-1.2.tar.gz
tar xvfz change_sqlpass-3.3-1.2.tar.gz
cd change_sqlpass
cp config.php.sample config.php

 Теперь нам необходимо отредактировать config.php и привести его в соответствие с нашими требованиями. Отредактируйте переменные $csp_dsn, $lookup_password_query, $password_update_queries, $password_encryption, $csp_salt_static и $csp_delimiter и закомментируйте параметр $csp_salt_query:

vi config.php

[...]
$csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail';
[...]
$lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4';
[...]
$password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"');
[...]
$password_encryption = 'MYSQLENCRYPT';
[...]
$csp_salt_static = 'LEFT(password, 2)';
[...]
//$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"';
[...]
$csp_delimiter = '@';
[...]

 Полностью файл будет выглядеть следующим образом Плагин Change SQL Password имеет зависимость от плагина Compatibility plugin, который устанавливается следующим образом:

cd /usr/share/squirrelmail/plugins
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fcompatibility-2.0.14-1.0.tar.gz
tar xvfz compatibility-2.0.14-1.0.tar.gz

 Теперь нам предстоит зайти в конфигурацию SquirrelMail и указать использовать Courier в качестве POP3 и IMAP сервера и задействовать плагины Change SQL Password и Compatibility plugins:


SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Main Menu --
1. Organization Preferences
2. Server Settings
3. Folder Defaults
4. General Options
5. Themes
6. Address Books
7. Message of the Day (MOTD)
8. Plugins
9. Database
10. Languages

D. Set pre-defined settings for specific IMAP servers

C Turn color off
S Save data
Q Quit

Command >> <-- D SquirrelMail Configuration : Read: config.php --------------------------------------------------------- While we have been building SquirrelMail, we have discovered some preferences that work better with some servers that don't work so well with others. If you select your IMAP server, this option will set some pre-defined settings for that server. Please note that you will still need to go through and make sure everything is correct. This does not change everything. There are only a few settings that this will change. Please select your IMAP server: bincimap = Binc IMAP server courier = Courier IMAP server cyrus = Cyrus IMAP server dovecot = Dovecot Secure IMAP server exchange = Microsoft Exchange IMAP server hmailserver = hMailServer macosx = Mac OS X Mailserver mercury32 = Mercury/32 uw = University of Washington's IMAP server quit = Do not change anything Command >> <-- courier imap_server_type = courier default_folder_prefix = INBOX. trash_folder = Trash sent_folder = Sent draft_folder = Drafts show_prefix_option = false default_sub_of_inbox = false show_contain_subfolders_option = false optional_delimiter = . delete_folder = true Press any key to continue... <-- press some key SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Main Menu -- 1. Organization Preferences 2. Server Settings 3. Folder Defaults 4. General Options 5. Themes 6. Address Books 7. Message of the Day (MOTD) 8. Plugins 9. Database 10. Languages D. Set pre-defined settings for specific IMAP servers C Turn color off S Save data Q Quit Command >> <-- 8 SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Plugins Installed Plugins 1. delete_move_next 2. squirrelspell 3. newmail Available Plugins: 4. administrator 5. bug_report 6. calendar 7. change_sqlpass 8. compatibility 9. demo 10. filters 11. fortune 12. info 13. listcommands 14. mail_fetch 15. message_details 16. sent_subfolders 17. spamcop 18. test 19. translate R Return to Main Menu C Turn color off S Save data Q Quit Command >> <-- 8 (or whatever number the compatibility plugin has - it's needed by the change_sqlpass plugin) SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Plugins Installed Plugins 1. delete_move_next 2. squirrelspell 3. newmail 4. compatibility Available Plugins: 5. administrator 6. bug_report 7. calendar 8. change_sqlpass 9. demo 10. filters 11. fortune 12. info 13. listcommands 14. mail_fetch 15. message_details 16. sent_subfolders 17. spamcop 18. test 19. translate R Return to Main Menu C Turn color off S Save data Q Quit Command >> <-- 8 (the number of the change_sqlpass plugin) SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Plugins Installed Plugins 1. delete_move_next 2. squirrelspell 3. newmail 4. compatibility 5. change_sqlpass Available Plugins: 6. administrator 7. bug_report 8. calendar 9. demo 10. filters 11. fortune 12. info 13. listcommands 14. mail_fetch 15. message_details 16. sent_subfolders 17. spamcop 18. test 19. translate R Return to Main Menu C Turn color off S Save data Q Quit Command >> <-- S SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Plugins Installed Plugins 1. delete_move_next 2. squirrelspell 3. newmail 4. compatibility 5. change_sqlpass Available Plugins: 6. administrator 7. bug_report 8. calendar 9. demo 10. filters 11. fortune 12. info 13. listcommands 14. mail_fetch 15. message_details 16. sent_subfolders 17. spamcop 18. test 19. translate R Return to Main Menu C Turn color off S Save data Q Quit Command >> S

Data saved in config.php
Press enter to continue... <-- ENTER SquirrelMail Configuration : Read: config.php (1.4.0) --------------------------------------------------------- Plugins Installed Plugins 1. delete_move_next 2. squirrelspell 3. newmail 4. compatibility 5. change_sqlpass Available Plugins: 6. administrator 7. bug_report 8. calendar 9. demo 10. filters 11. fortune 12. info 13. listcommands 14. mail_fetch 15. message_details 16. sent_subfolders 17. spamcop 18. test 19. translate R Return to Main Menu C Turn color off S Save data Q Quit Command >> <-- Q

 Напоследок мы должны изменить файл /etc/squirrelmail/config_local.php и закомментировать переменную $default_folder_prefix - если вы этого не сделаете, то получите сообщение об ошибке Query: CREATE "Sent" Reason Given: Invalid mailbox name.

vi /etc/squirrelmail/config_local.php

<?php
/**
* Local config overrides.
*
* You can override the config.php settings here.
* Don't do it unless you know what you're doing.
* Use standard PHP syntax, see config.php for examples.
*
* @copyright © 2002-2006 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: config_local.php,v 1.2 2006/07/11 03:33:47 wtogami Exp $
* @package squirrelmail
* @subpackage config
*/
//$default_folder_prefix = '';
?>

 Теперь заходите браузером на http://server1.example.com/webmail или http://192.168.0.100/webmail для доступа к SquirrelMail.


О! А вот и наше мыло!


Для смены пароля выберите Options и затем Change Password:


Пароль сменился!

 Ссылки по теме:
Postfix MTA: http://www.postfix.org/
Postfix Quota Patch: http://web.onda.com.br/nadal/
phpMyAdmin: http://www.phpmyadmin.net/
SquirrelMail: http://www.squirrelmail.org/
Fedora: http://fedoraproject.org


[ad name="Google Adsense"]



 Уважайте труд автора, сохраняйте копирайты.
Реклама на сайте висит не просто так и если статья Вам понравилась, с ее помощью Вы можете отблагодарить автора за проделанную работу. Спасибо!

2 комментария в Виртуальные пользователи и домены в Postfix, Courier, MySQL и SquirrelMail (Fedora 10)

  1. Mixa, авторы забыли одну важную штуку, без которой данная конструкция не пашет, поправь плиз:

    mysql> INSERT INTO `transport` (`domain`, `transport`) VALUES (‘example.com’, ‘virtual:’);

    Без этого постфикс валит всю почту в /var/spool/mail (ну или шо у кого в системе дефолтовое для емыла).
    Спасибо большое за перевод!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*