эта статья является компиляцией двух мануалов :
"Установка почтового сервера Postfix + Dovecot + MYSQL и виртуальных доменов" автор Stepanoff
"HowTo. Почтовый сервер Postfix, Courier, MySQL и SquirrelMail (Ubuntu 8,04)" автор Falko Timme перевод Глушков Вадим
Всем им респект и уважуха за очень удачные и содержательные мануалы !!!
Меня не устроило в первой статье использование в качестве IMAP Courier. А во второй статье огорчило , что много приходится доделывать руками, например создание директорий доменов.
Поэтому я взял настройку постфикса и антиспама из первой статьи (она там исчерпывающая), а dovecot из второй.
1. Предварительные замечания
Убедитесь, что вы зашли как суперпользователь,
sudo su
потому что в данном руководстве необходимо выполнять все шаги от его имени.
Очень важным является, чтобы вы сделали символическую ссылку /bin/sh на /bin/bash...
ln -sf /bin/bash /bin/sh
... и еще отключите AppArmor:
/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
Все ошибки и прочие события из жизни вашего почтовика вы можете найти в логах
/var/log/mail.log
/var/log/mail.err
/var/log/mail.warn
/var/log/mail.info
2. Установка Postfix, Dovecot, Saslauthd, MySQL, phpMyAdmin
Для установки Postfix, Dovecot, Saslauthd, MySQL и phpMyAdmin, нам просто необходимо вполнить:
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server dovecot-pop3d dovecot-imapd openssl postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass
Вам будет задано несколько вопросов на которые необходимо ответить:
New password for the MySQL "root" user: <-- yourrootsqlpassword
Repeat password for the MySQL "root" user: <-- yourrootsqlpassword
Create directories for web-based administration? <-- No
General type of mail configuration: <-- Internet Site
System mail name: <-- server1.example.com
SSL certificate required <-- Ok
Web server to reconfigure automatically: <-- apache2
3. Применение патча квоты Postfix
Если у вас 10.04 server, то этот пункт вам не нужен . Там квоты и так работают. А если нет ... :
Мы должны получить исходники Postfix, патч к нему, построить .deb пакеты и установить эти .deb пакеты:
apt-get install build-essential dpkg-dev fakeroot debhelper libgdbm-dev libldap2-dev libpcre3-dev libssl-dev libsasl2-dev postgresql-server-dev-8.2 po-debconf dpatch libmysqlclient15-dev lsb-release libcdb-dev libdb-dev
cd /usr/src
apt-get source postfix
(Убедитесь что вы используете корректную версию Postfix. У меня установлена версия Postfix 2.5.1. Вы можете узнать вашу версию выполнив следующие команды:
postconf -d | grep mail_version
Вы должны увидеть после выполнения команд следующее:
root@server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.5.1
milter_macro_v = $mail_name $mail_version
root@server1:/usr/src#
)
wget http://vda.sourceforge.net/VDA/postfix-2.5.1-vda-ng.patch.gz
gunzip postfix-2.5.1-vda-ng.patch.gz
cd postfix-2.5.1
patch -p1 < ../postfix-2.5.1-vda-ng.patch
dpkg-buildpackage
Вы можете увидеть предупреждения при выполнении команды dpkg-buildpackage, например такие:
dpkg-buildpackage: warning: Failed to sign .dsc and .changes file
такие сообщения можно игнорировать
Сейчас мы перейдем на один уровень вверх и посмотрим какие новые .deb пакеты были созданы:
cd ..
Выполним команду
ls -l
она покажет нам все доступные пакеты:
root@server1:/usr/src# ls -l
total 5804
drwxr-sr-x 19 root src 4096 2008-05-15 00:36 postfix-2.5.1
-rw-r--r-- 1 root src 235739 2008-05-15 00:35 postfix_2.5.1-2ubuntu1.diff.gz
-rw-r--r-- 1 root src 787 2008-05-15 00:35 postfix_2.5.1-2ubuntu1.dsc
-rw-r--r-- 1 root src 2236 2008-05-15 00:37 postfix_2.5.1-2ubuntu1_i386.changes
-rw-r--r-- 1 root src 1165838 2008-05-15 00:37 postfix_2.5.1-2ubuntu1_i386.deb
-rw-r--r-- 1 root src 3153629 2008-02-26 03:04 postfix_2.5.1.orig.tar.gz
-rw-r--r-- 1 root src 57952 2008-03-24 01:51 postfix-2.5.1-vda-ng.patch
-rw-r--r-- 1 root src 39796 2008-05-15 00:37 postfix-cdb_2.5.1-2ubuntu1_i386.deb
-rw-r--r-- 1 root src 139888 2008-05-15 00:37 postfix-dev_2.5.1-2ubuntu1_all.deb
-rw-r--r-- 1 root src 916386 2008-05-15 00:37 postfix-doc_2.5.1-2ubuntu1_all.deb
-rw-r--r-- 1 root src 46694 2008-05-15 00:37 postfix-ldap_2.5.1-2ubuntu1_i386.deb
-rw-r--r-- 1 root src 41730 2008-05-15 00:37 postfix-mysql_2.5.1-2ubuntu1_i386.deb
-rw-r--r-- 1 root src 41530 2008-05-15 00:37 postfix-pcre_2.5.1-2ubuntu1_i386.deb
-rw-r--r-- 1 root src 41796 2008-05-15 00:37 postfix-pgsql_2.5.1-2ubuntu1_i386.deb
root@server1:/usr/src#
Выбираем пакеты postfix и postfix-mysql и устанавливаем их:
dpkg -i postfix_2.5.1-2ubuntu1_i386.deb
dpkg -i postfix-mysql_2.5.1-2ubuntu1_i386.deb
4. Создание базы данных MySQL для Postfix/Courier.
Базу можно создавать из командной строки ( как истиному линуксоиду) или нагляднее через phpmyadmin (типа ламеры :) )
Я предпочитаю второй способ. Ниже привиден пример для создания в командной строке , но можно открыть
http://<ваш адрес>/phpmyadmin , скопировать SQL запросы туда и не знать горя :)
Сначала создадим базу данных с названием mail:
mysqladmin -u root -p create mail
в phpmyadmin : create database mail;
Затем мы перейдем в оболочку MySQL:
mysql -u root -p
В оболочке MySQL скорлупы, мы создадим пользователя mail_admin с паролем 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;
Сейчас используя оболочку MySQL, мы создадим таблицы необходимые Postfix и Courier:
USE mail;
CREATE TABLE domains (
domain varchar(80) 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 userlist (
name varchar(80) NOT NULL,
domain varchar(80) NOT NULL DEFAULT 'ваш домен.по умолчанию',
password varchar(32) NOT NULL,
quota INT(10) DEFAULT '10485760',
PRIMARY KEY (name),
KEY `domain` (`domain`)
) TYPE=MyISAM;
CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) TYPE=MyISAM;
ALTER TABLE `userlist` ADD INDEX ( `domain` ) ;
CREATE VIEW users AS
SELECT CONCAT(userlist.name, '@', domains.domain) AS email,
userlist.password FROM userlist
LEFT JOIN domains ON userlist.domain=domains.domain;
quit;
Дополнительные индексы и связи удобны при использовании данных в разных скриптах системы .
Как вы уже наверное заметили мы покинули оболочку MySQL и ввернулись командную оболочку Linux.
Таблица domains будет хранить наименования виртуальных доменов для которых Postfix будет получать письма.
domain
example.com
Таблица forwardings будет содержать псевдонимы почтовых ящиков, например почтовые сообщения направленные на Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
будт перенаправлены на Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
.
source destination
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Таблица users будет содержать всю информацию о виртуальных пользователях (например, адреса электронной почты, потому что адрес электронной почты и имя пользователя одно и тоже) и паролей (в зашифрованном виде!), а также размер квоты для каждого почтового ящика (в данном примере значение по умолчанию равно 10485760 байт, что означает 10 Мб)
name
domain
password
quota
sales
example.com
3565626532323934656364306530663038656162373639306432613665653639 (MD5("secret") )
10485760
Таблица transport необязательного характера, она для продвинутых пользователей. Позволяет перенаправлять почту отдельных пользователей, доменов либо всю почту на другой почтовый сервер. Например,
domain
transport
example.com
smtp:[1.2.3.4]
направит все сообщения приходящие для example.com по протоколу smtp на сервер IP-адресом 1.2.3.4 (квадратные скобки [] означают "не делать поиск MX записи в DNS" (это имеет смысл для IP-адреса .. .). Если вы используете полное доменное имя (FQDN), а вам не нужно использовать квадратные скобки.).
Между прочим (предполагая, что адрес вашего почтового сервера 192.168.0.100), для доступа к почтовой базе данных через phpMyAdmin вы можете набрать в вашем браузере http://192.168.0.100/phpmyadmin/ и войти как mail_admin. После этого вы можете посмотреть базу данных. В дальнейшем вы можете использовать phpMyAdmin для администрирования почтового сервера.
5. Настройка Postfix
Сейчас нам необходимо указать Postfix, где ему искать информацию в базе данных. Для этого создадим шесть текстовых файлов. Как вы можете заметить, я указываю Postfix соединяться с MySQL через IP адрес 127.0.0.1 вместо localhost. Это связанно с тем, что Postfix запущенный в chroot окружении не сможет иметь доступа к MySQL сокету, если будет пытаться использовать localhost для подключения. Если же я буду использовать 127.0.0.1 будет использовать TCP сеть для подключения к MySQL, и это снимет проблему соединения из chroot окружения (в качестве альтернативы можно поместить соект MySQL в chroot окружение, но это вызовет дополнительные проблемы).
Убедитесь что /etc/mysql/my.cnf содержит следующие строки:
vi /etc/mysql/my.cnf
[...]
bind-address = 127.0.0.1
[...]
Если вы изменили /etc/mysql/my.cnf, пожалуйста перезапустите MySQL:
/etc/init.d/mysql restart
Запустите
netstat -tap | grep mysql
чтобы убедится, что MySQL прослушивает 127.0.0.1 (localhost.localdomain):
root@server1:/usr/src# netstat -tap | grep mysql
tcp 0 0 localhost.localdo:mysql *:* LISTEN 6177/mysqld
root@server1:/usr/src#
Сейчас давайте создадим шесть необходимых нам файлов:
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 with на настоящий FQDN, иначе ваш почтовый сервер Postfix не сможет корректно работать!
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_mailbox_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'
Создадим сертификат 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) [AU]: <-- Введите страну (например, "RU").
State or Province Name (full name) [Some-State]: <-- Введите название области (например,"Moskow") .
Locality Name (eg, city) []: <-- Введите населенный пункт (например, "Moskow").
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Введите наименование вашей организации (например, "Ltd DoIt").
Organizational Unit Name (eg, section) []: <-- Введите наименование вашего подразделения (например. "IT Department").
Common Name (eg, YOUR name) []: <-- Введите Fully Qualified Domain Name (например. "server1.example.com").
Email Address []: <-- Введите ваш email.
Изменяем права доступа на smtpd.key:
chmod o= /etc/postfix/smtpd.key
6 Настройка Saslauthd
Сначала выполним следующую команду:
mkdir -p /var/spool/postfix/var/run/saslauthd
Затем изменим /etc/default/saslauthd. Установив параметр START в yes и заменим строку OPTIONS="-c -m /var/run/saslauthd" на OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r":
vi /etc/default/saslauthd
#
# Settings for saslauthd daemon
# Please read /usr/share/doc/sasl2-bin/README.Debian for details.
#
# Should saslauthd run automatically on startup? (default: no)
START=yes
# Description of this saslauthd instance. Recommended.
# (suggestion: SASL Authentication Daemon)
DESC="SASL Authentication Daemon"
# Short name of this saslauthd instance. Strongly recommended.
# (suggestion: saslauthd)
NAME="saslauthd"
# Which authentication mechanisms should saslauthd use? (default: pam)
#
# Available options in this Debian package:
# getpwent -- use the getpwent() library function
# kerberos5 -- use Kerberos 5
# pam -- use PAM
# rimap -- use a remote IMAP server
# shadow -- use the local shadow password file
# sasldb -- use the local sasldb database file
# ldap -- use LDAP (configuration is in /etc/saslauthd.conf)
#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="pam"
MECHANISMS="pam"
# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS=""
# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5
# Other options (default: -c -m /var/run/saslauthd)
# Note: You MUST specify the -m option or saslauthd won't run!
#
# See /usr/share/doc/sasl2-bin/README.Debian for Debian-specific information.
# See the saslauthd man page for general information about these options.
#
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
#OPTIONS="-c -m /var/run/saslauthd"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
Создаем файл /etc/pam.d/smtp. И добавляем в него две строчки (обязательно используйте корректные значения относящиеся к вашей базе данных):
vi /etc/pam.d/smtp
auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
Создаем файл /etc/postfix/sasl/smtpd.conf. Он должен быть подобного вида:
vi /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true
auxprop_plugin: mysql
sql_hostnames: 127.0.0.1
sql_user: mail_admin
sql_passwd: mail_admin_password
sql_database: mail
sql_select: select password from users where email = '%u'
Добавляем пользователя postfix в группу sasl (это даст Postfix права доступа к saslauthd):
adduser postfix sasl
Перезапускаем Postfix и Saslauthd:
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart
7 Настройка Dovecot
Перейдем к настройкам dovecot, все файлы его конфигурации хранятся в папке /etc/dovecot, начнем настройку с файла /etc/dovecot/dovecot.conf
Найдите строку protocols и смените на
Код:
protocols = imap imaps pop3 pop3s
Так же найдите и измените строку disable_plaintext_auth до состояния disable_plaintext_auth = no
Далее измените параметр mail_location
Код:
mail_location = maildir:/home/vmail/%d/%n
Найдите строку namespace private и измените до
Код:
namespace private {
separator = .
prefix = INBOX. (если пользователи ругаются на то что ящики расположены деревом, то оставьте пустое место)
inbox = yes
}
Перейдите к секции «auth default» и отредактируйте разрешенные механизмы аутентификации
Код:
mechanisms = plain login
В этой же секции измените
Код:
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
Измените так же параметр userdb static
Код:
userdb static {
args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
}
Перейдите к секции socket listen сдесь мы укажем файлы сокета для аутентификации dovecot
Код:
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
Перейдите к секции protocol lda, не забудьте сменить адрес постмастера на реальный
Код:
protocol lda {
log_path = /home/vmail/dovecot-deliver.log
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
mail_plugins = cmusieve
global_script_path = /home/vmail/globalsieverc
}
На этом файл можно сохранить.
Отредактируйте файл /etc/dovecot/dovecot-sql.conf, измените настройки на приведенные ниже
Код:
driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail_admin password=mail_admin_password
default_pass_scheme = PLAIN-MD5
password_query = SELECT email as user, password FROM users WHERE email='%u';
Перезапустите dovecot командой /etc/init.d/dovecot restart и загляните в лог файл /var/log/mail.log, там вы должны увидеть
Код:
dovecot: Dovecot v1.0.rc15 starting up
dovecot: auth-worker(default): mysql: Connected to 127.0.0.1 (mymailserver)
Теперь выставим права доступа к файлам конфигурации dovecot
Код:
$>
chgrp vmail /etc/dovecot/dovecot.conf
$>
chmod g+r /etc/dovecot/dovecot.conf
Настроим TLS/SSL
Код:
$>
openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/dovecot.pem \
-keyout /etc/ssl/private/dovecot.pem
Ответьте на несколько вопросов и сертификат будет создан, не забудьте указать правльно все параметры вместо примеров привеленных ниже
Код:
Generating a 1024 bit RSA private key
.........++++++
............................++++++
writing new private key to '/etc/ssl/certs/dovecot.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Russia
Locality Name (eg, city) []:Russia
Organization Name (eg, company) [Internet Widgits Pty Ltd]:example.com
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:mail.example.com
Email Address []:Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Выставим права доступа на файл
Код:
$>
chmod o= /etc/ssl/private/dovecot.pem
Теперь настроим аутентификацию SMTP, внесите следующие изменения в конфиг Postfix’a, не забудьте сменить примеры на реальные адреса сетей!
Код:
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
Многие забывают внести последний радостный штрих в постфикс и ломают голову "Что же не работает ???" ( сам такой был:) )
$>
postconf -e mynetworks=192.168.50.0/24 (Внимание !!! подумай прежде чем сделать это ! читай ниже.)
$>
postconf -e smtpd_sasl_type=dovecot
$>
postconf -e smtpd_sasl_path=private/auth
$>
postconf -e smtpd_sasl_auth_enable=yes
$>
postconf -e smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
В примере используется сеть 192.168.50.0/24 ей разрешено отправлятиь почту без SMTP авторизации. В своей сети я запрещаю отправку без авторизации. Причина - потенциальный спам если подхватишь трояна. поэтому я ставлю postconf -e mynetworks=127.0.0.0/8 , а все остальные компы сети только через авторизацию !
На этом настройка нашего БАЗОВОГО почтового сервера закончена .Перезапустите сервисы postfix и dovecot, выполните команду postfix check для проверки правильности настроек и прав доступа на файлы, команда должна отдать пустой результат.
telnet localhost imap
чтобы убедится, что наш сервер IMAP корректно работает. Мы должны увидеть
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
(введите quit для возврата в оболочку Linux).
8 Изменяем /etc/aliases
Откроем и изменим /etc/aliases. Сделаете так, что postmaster указывать на root, а root указывает на ваше имя пользователя или ваш почтовый адрес, у вас должно получится примерно так:
[...]
postmaster: root
root: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
[...]
или так (здесь administrator ваше имя пользователя):
[...]
postmaster: root
root: administrator
[...]
После изменения /etc/aliases, вы должны запустить команду
newaliases
и перезапустить Postfix:
/etc/init.d/postfix restart
9 Установка amavisd-new, SpamAssassin и ClamAV
Для установки amavisd-new, spamassassin и clamav, выполним следующую команду:
apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 zip libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax
Настроим amavisd-new. Конфигурационные файлы находятся в директории /etc/amavis/conf.d . Ознакомитесь с ними. Большинство из настроек в этих файлах отлично выставлены, но все же мы изменим три файла:
Во первых включим ClamAV и SpamAssassin in /etc/amavis/conf.d/15-content_filter_mode раскомментировав @bypass_virus_checks_maps и @bypass_spam_checks_maps lines:
vi /etc/amavis/conf.d/15-content_filter_mode
Файл должен быть похож на этот:
use strict;
# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.
#
# Default antivirus checking mode
# Uncomment the two lines below to enable it back
#
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
#
# Default SPAM checking mode
# Uncomment the two lines below to enable it back
#
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
1; # ensure a defined return
Вам следует посмотреть настройки спама и действия со спамом в /etc/amavis/conf.d/20-debian_defaults. Вам нет необходимости менять настройки по умолчанию. Этот файл содержит хорошие комментарии и поэтому нет необходимости дополнительно их разъяснять здесь:
vi /etc/amavis/conf.d/20-debian_defaults
[...]
$QUARANTINEDIR = "$MYHOME/virusmails";
$quarantine_subdir_levels = 1; # enable quarantine dir hashing
$log_recip_templ = undef; # disable by-recipient level-0 log entries
$DO_SYSLOG = 1; # log via syslogd (preferred)
$syslog_ident = 'amavis'; # syslog ident tag, prepended to all messages
$syslog_facility = 'mail';
$syslog_priority = 'debug'; # switch to info to drop debug output, etc
$enable_db = 1; # enable use of BerkeleyDB/libdb (SNMP and nanny)
$enable_global_cache = 1; # enable use of libdb-based cache if $enable_db=1
$inet_socket_port = 10024; # default listening socket
$sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 6.31; # triggers spam evasive actions
$sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent
$sa_mail_body_size_limit = 200*1024; # don't waste time on SA if mail is larger
$sa_local_tests_only = 0; # only tests which do not require internet access?
[...]
$final_virus_destiny = D_DISCARD; # (data not lost, see virus quarantine)
$final_banned_destiny = D_BOUNCE; # D_REJECT when front-end MTA
$final_spam_destiny = D_BOUNCE;
$final_bad_header_destiny = D_PASS; # False-positive prone (for spam)
[...]
Последним отредактируем /etc/amavis/conf.d/50-user добавив посередке параметр $pax='pax'; :
vi /etc/amavis/conf.d/50-user
use strict;
#
# Place your configuration directives here. They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file
#
$pax='pax';
#------------ Do not modify anything below this line -------------
1; # ensure a defined return
После этого добавим пользователя clamav в группу amavis и презапустим amavisd-new и ClamAV:
adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart
/etc/init.d/clamav-freshclam restart
Настроим 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
Выполним
netstat -tap
убедимся, что Postfix (master) прослушивает 25 (smtp) и 10025 порт, а amavisd-new расположен на 10024:
root@server1:/etc/postfix# netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 localhost.localdo:10024 *:* LISTEN 15645/amavisd (mast
tcp 0 0 localhost.localdo:10025 *:* LISTEN 16677/master
tcp 0 0 localhost.localdo:mysql *:* LISTEN 6177/mysqld
tcp 0 0 *:www *:* LISTEN 5367/apache2
tcp 0 0 *:smtp *:* LISTEN 16677/master
tcp6 0 0 [::]:imaps [::]:* LISTEN 14020/couriertcpd
tcp6 0 0 [::]:pop3s [::]:* LISTEN 14088/couriertcpd
tcp6 0 0 [::]:pop3 [::]:* LISTEN 14051/couriertcpd
tcp6 0 0 [::]:imap2 [::]:* LISTEN 13983/couriertcpd
tcp6 0 0 [::]:ssh [::]:* LISTEN 4006/sshd
tcp6 0 52 server1.example.com:ssh 192.168.0.210%8191:3340 ESTABLISHED 4059/0
root@server1:/etc/postfix#
10 Установка Razor, Pyzor And DCC и настройка SpamAssassin
Razor, Pyzor и DCC это спам фильтры, которые используются совместно для фильтрации в сети. Установим Razor и Pyzor
apt-get install razor pyzor
DCC не содержится в репозитории Ubuntu 8.04, поэтому мы его установим так:
cd /tmp
wget http://launchpadlibrarian.net/11564361/dcc-server_1.3.42-5_i386.deb
wget http://launchpadlibrarian.net/11564359/dcc-common_1.3.42-5_i386.deb
dpkg -i dcc-common_1.3.42-5_i386.deb
dpkg -i dcc-server_1.3.42-5_i386.deb
Скажем SpamAssassin использовать эти три программы. Отредактируем /etc/spamassassin/local.cf добавив несколько строчек в него:
vi /etc/spamassassin/local.cf
[...]
#dcc
use_dcc 1
dcc_path /usr/bin/dccproc
#pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor
#razor
use_razor2 1
razor_config /etc/razor/razor-agent.conf
#bayes
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1
Мы должны включить плагин DCC в SpamAssassin. Откроем /etc/spamassassin/v310.pre и раскомментируем такую строчку loadplugin Mail::SpamAssassin::Plugin::DCC :
vi /etc/spamassassin/v310.pre
[...]
# 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
Вывод не должен содержать никаких ошибок.
Перезапускаем amavisd-new:
/etc/init.d/amavis restart
Обновим набор правил для SpamAssassin следующим образом:
sa-update —no-gpg
Добавим в cron задание, чтобы набор правил обновлялся регулярно. Запустим
crontab -e
чтобы открыть редактор cron и добавим в него следующее задание:
23 4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null
Это позволит обновлять набор правил каждый 2 день в 4 часа 23 минуты.
11 Предупреждения при превышении квоты
Для того чтобы получать сообщения об превышении квоты почтовых ящиков пользователей сделаем так:
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 = ('Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
');
my $CONAME = 'My Company';
my $COADDR = 'Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
';
my $SUADDR = 'Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
';
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
чтоб задать задание cron на выполнения скрипта
0 0 * * * /usr/local/sbin/quota_notify &> /dev/null
12 Проверка Postfix
Чтоб ы посмотреть слушает ли Postfix порты SMTP-AUTH и TLS, выполним
telnet localhost 25
После установления подключения с вашим почтовым сервером Postfix введем следующее:
ehlo localhost
и увидим следующие строки
250-STARTTLS
и
250-AUTH LOGIN PLAIN
если все нормально:
root@server1:/usr/local/sbin# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 server1.example.com ESMTP Postfix (Ubuntu)
ehlo localhost
250-server1.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
root@server1:/usr/local/sbin#
введем
quit
для того чтобы вернутся в оболочку Linux.
13 Заполнение базы данных и ее тестирование
Большинству более удобно работать через графический интерфейс с MySQL, для этого можно использовать phpMyAdmin ( в данном примере необходимо набрать в строке вашего интернет браузера http://192.168.0.100/phpmyadmin/ или http://server1.example.com/phpmyadmin/) для администрирования базы данных mail . При создании пользователей, мы должны использовать функцию ENCRYPT для шифрования пароля.
Для заполнения базы данных будем использовать оболочку MySQL:
mysql -u root -p
USE mail;
По крайней мере нам необходимо добавить записи в таблицы domains и users:
INSERT INTO `domains` (`domain`) VALUES ('example.com');
INSERT INTO `userlist` (`name`,`domain`, `password`, `quota`) VALUES ('sales','example.com', MD5('secret'), 10485760);
(Пожалуйста, с осторожностью используйте синтаксис MD5 во втором объявлении INSERT для шифрования пароля!)
Если необходимо вставить данные в остальные две таблицы, сделаем так:
INSERT INTO `forwardings` (`source`, `destination`) VALUES ('Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
', 'Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
');
INSERT INTO `transport` (`domain`, `transport`) VALUES ('example.com', 'smtp:mail.example.com');
Выйдем с оболочки MySQL набрав
quit;
Таблица forwardings может иметь записи следующего вида:
source
destination
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Перенаправляет почту предначначеную для Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
на Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
@example.com
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Создает ловушку для всех аккаунтов Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
. Вся почта домена example.com будет доставляться на адрес Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
, исключая тех кто находится в таблице users (например, если Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
существует в таблице users, то письма направленные на Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
будут по прежнему доставляться Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
).
@example.com
@anotherdomain.tld
Перенаправляет письма всех пользователей направленные на example.com на этих же пользователей в домен anotherdomain.tld. Например, письмо для Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
будет направленно на Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
.
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
, Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Перенапрваить почту для Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
на двух и большее количество адресатов. Все указанные адресаты получат копию почтового сообщения.
Таблица transport может иметь записи такого вида:
domain
transport
example.com
:
Delivers emails for example.com locally. This is as if this record would not exist in this table at all.
example.com
smtp:mail.anotherdomain.tld
Delivers all emails for example.com via smtp to the server mail.anotherdomain.com.
example.com
smtp:mail.anotherdomain.tld:2025
Delivers all emails for example.com via smtp to the server mail.anotherdomain.com, but on port 2025, not 25 which is the default port for smtp.
example.com
smtp:[1.2.3.4]
smtp:[1.2.3.4]:2025
smtp:[mail.anotherdomain.tld]
The square brackets prevent Postfix from doing lookups of the MX DNS record for the address in square brackets. Makes sense for IP addresses.
.example.com
smtp:mail.anotherdomain.tld
Mail for any subdomain of example.com is delivered to mail.anotherdomain.tld.
*
smtp:mail.anotherdomain.tld
All emails are delivered to mail.anotherdomain.tld.
Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
smtp:mail.anotherdomain.tld
Emails for Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
are delivered to mail.anotherdomain.tld.
Посмотри
man transport
чтобы узнать больше деталей.
Запомните, что порядок записей в таблице transport очень важен! Записи считываются сверху вниз.
Важно: Postfix использует механизм кэширования для транспортов, и чтобы изменения сделанные в таблице transport вступили в действия, вам необходимо выполнить перезагрузку
postfix reload
14 Отправка электронного письма приветствия для создания почтового каталога
При попытке получения почты с нового почтового ящика (через POP3/IMAP) вы получите сообщение о том, что почтовый каталог не существует. Почтовый каталог создается автоматически, когда приходит первое письмо, поэтому лучше всего отправлять письмо приветствия после создания нового почтового ящика.
Установим пакет mailx:
apt-get install mailx
Для отправки письма приветствия на Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
, мы сделаем так:
mailx Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Вам будет предложено ввести тему, введите ее (например, добро пожаловать!), нажмите ENTER и в следующих строчках напишите ваше сообщения. Когда закончим набирать сообщения необходимо набрать CTRL+D и еще раз ENTER:
root@server1:/usr/local/sbin# mailx Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Subject: Welcome <-- ENTER
Welcome! Have fun with your new mail account. <-- ENTER
<-- CTRL+D
Cc: <-- ENTER
root@server1:/usr/local/sbin#
15 Установка SquirrelMail
SquirrelMail это веб интерфейс, который позволяет пользователю получать и отправлять почту используя браузер. В этой части покажем как установить и позволим в наших настройках пользователям менять свой пароль используя интерфейс SquirrelMail.
Чтобы установить SquirrelMail выполним:
apt-get install squirrelmail php-pear
Скопируем конфигурационный файл Apache, который входит в пакет SquirrelMail, в каталог /etc/apache2/conf.d перезапустим Apache:
cp /etc/squirrelmail/apache.conf /etc/apache2/conf.d/squirrelmail.conf
/etc/init.d/apache2 restart
Squirrelmail сразу устанавливается со множеством плагинов, но среди нех нет необходимого для нас плагина позволяющего изменять пароль.
Установим его в ручную (предварительно установив установив все необходимое для его работы:
pear install DB
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 variables,
как показанно ниже и закомментируйте $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 = '@';
[...]
В итоге мы должны получить файл такого содержания:
<?php
/**
* SquirrelMail Change SQL Password Plugin
* Copyright (C) 2001-2002 Tyler Akins
* 2002 Thijs Kinkhorst <Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
>
* 2002-2005 Paul Lesneiwski <Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
>
* This program is licensed under GPL. See COPYING for details
*
* @package plugins
* @subpackage Change SQL Password
*
*/
// Global Variables, don't touch these unless you want to break the plugin
//
global $csp_dsn, $password_update_queries, $lookup_password_query,
$force_change_password_check_query, $password_encryption,
$csp_salt_query, $csp_salt_static, $csp_secure_port,
$csp_non_standard_http_port, $csp_delimiter, $csp_debug,
$min_password_length, $max_password_length, $include_digit_in_password,
$include_uppercase_letter_in_password, $include_lowercase_letter_in_password,
$include_nonalphanumeric_in_password;
// csp_dsn
//
// Theoretically, any SQL database supported by Pear should be supported
// here. The DSN (data source name) must contain the information needed
// to connect to your database backend. A MySQL example is included below.
// For more details about DSN syntax and list of supported database types,
// please see:
// http://pear.php.net/manual/en/package.database.db.intro-dsn.php
//
$csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail';
// lookup_password_query
//
// This plugin will always verify the user's old password
// against their login password, but an extra check can also
// be done against the database for more security if you
// desire. If you do not need the extra password check,
// make sure this setting is empty.
//
// This is a query that returns a positive value if a user
// and password pair are found in the database.
//
// This query should return one value (one row, one column), the
// value being ideally a one or a zero, simply indicating that
// the user/password pair does in fact exist in the database.
//
// %1 in this query will be replaced with the full username
// (including domain), such as "Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
"
// %2 in this query will be replaced with the username (without
// any domain portion), such as "jose"
// %3 in this query will be replaced with the domain name,
// such as "example.com"
// %4 in this query will be replaced with the current (old)
// password in whatever encryption format is needed per other
// plugin configuration settings (Note that the syntax of
// the password will be provided depending on your encryption
// choices, so you NEVER need to provide quotes around this
// value in the query here.)
// %5 in this query will be replaced with the current (old)
// password in unencrypted plain text. If you do not use any
// password encryption, %4 and %5 will be the same values,
// except %4 will have double quotes around it and %5 will not.
//
//$lookup_password_query = '';
// TERRIBLE SECURITY: $lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND plain_password = "%5"';
//$lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND crypt_password = %4';
$lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4';
// password_update_queries
//
// An array of SQL queries that will all be executed
// whenever a password change attempt is made.
//
// Any number of queries may be included here.
// The queries will be executed in the order given here.
//
// %1 in all queries will be replaced with the full username
// (including domain), such as "Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
"
// %2 in all queries will be replaced with the username (without
// any domain portion), such as "jose"
// %3 in all queries will be replaced with the domain name,
// such as "example.com"
// %4 in all queries will be replaced with the new password
// in whatever encryption format is needed per other
// plugin configuration settings (Note that the syntax of
// the password will be provided depending on your
// encryption choices, so you NEVER need to provide quotes
// around this value in the queries here.)
// %5 in all queries will be replaced with the new password
// in unencrypted plain text - BEWARE! If you do not use
// any password encryption, %4 and %5 will be the same
// values, except %4 will have double quotes around it
// and %5 will not.
//
// $password_update_queries = array(
// 'UPDATE users SET crypt_password = %4 WHERE username = "%1"',
// 'UPDATE user_flags SET force_change_pwd = 0 WHERE username = "%1"',
// 'UPDATE users SET crypt_password = %4, force_change_pwd = 0 WHERE username = "%1"',
// );
$password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"');
// force_change_password_check_query
//
// A query that checks for a flag that indicates if a user
// should be forced to change their password. This query
// should return one value (one row, one column) which is
// zero if the user does NOT need to change their password,
// or one if the user should be forced to change it now.
//
// This setting should be an empty string if you do not wish
// to enable this functionality.
//
// %1 in this query will be replaced with the full username
// (including domain), such as "Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
"
// %2 in this query will be replaced with the username (without
// any domain portion), such as "jose"
// %3 in this query will be replaced with the domain name,
// such as "example.com"
//
//$force_change_password_check_query = 'SELECT IF(force_change_pwd = "yes", 1, 0) FROM users WHERE username = "%1"';
//$force_change_password_check_query = 'SELECT force_change_pwd FROM users WHERE username = "%1"';
$force_change_password_check_query = '';
// password_encryption
//
// What encryption method do you use to store passwords
// in your database? Please use one of the following,
// exactly as you see it:
//
// NONE Passwords are stored as plain text only
// MYSQLPWD Passwords are stored using the MySQL password() function
// MYSQLENCRYPT Passwords are stored using the MySQL encrypt() function
// PHPCRYPT Passwords are stored using the PHP crypt() function
// MD5CRYPT Passwords are stored using encrypted MD5 algorithm
// MD5 Passwords are stored as MD5 hash
//
//$password_encryption = 'MYSQLPWD';
$password_encryption = 'MYSQLENCRYPT';
// csp_salt_query
// csp_salt_static
//
// Encryption types that need a salt need to know where to get
// that salt. If you have a constant, known salt value, you
// should define it in $csp_salt_static. Otherwise, leave that
// value empty and define a value for the $csp_salt_query.
//
// Leave both values empty if you do not need (or use) salts
// to encrypt your passwords.
//
// The query should return one value (one row, one column) which
// is the salt value for the current user's password. This
// query is ignored if $csp_salt_static is anything but empty.
//
// %1 in this query will be replaced with the full username
// (including domain), such as "Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
"
// %2 in this query will be replaced with the username (without
// any domain portion), such as "jose"
// %3 in this query will be replaced with the domain name,
// such as "example.com"
//
//$csp_salt_static = 'LEFT(crypt_password, 2)';
//$csp_salt_static = '"a4"'; // use this format with MYSQLENCRYPT
//$csp_salt_static = '$2$blowsomefish$'; // use this format with PHPCRYPT
//$csp_salt_static = '';
$csp_salt_static = 'LEFT(password, 2)';
//$csp_salt_query = 'SELECT SUBSTRING_INDEX(crypt_password, '$', 1) FROM users WHERE username = "%1"';
//$csp_salt_query = 'SELECT SUBSTRING(crypt_password, (LENGTH(SUBSTRING_INDEX(crypt_password, '$', 2)) + 2)) FROM users WHERE username = "%1"';
//$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"';
//$csp_salt_query = '';
// csp_secure_port
//
// You may ensure that SSL encryption is used during password
// change by setting this to the port that your HTTPS is served
// on (443 is typical). Set to zero if you do not wish to force
// an HTTPS connection when users are changing their passwords.
//
// You may override this value for certain domains, users, or
// service levels through the Virtual Host Login (vlogin) plugin
// by setting a value(s) for $vlogin_csp_secure_port in the vlogin
// configuration.
//
$csp_secure_port = 0;
//$csp_secure_port = 443;
// csp_non_standard_http_port
//
// If you serve standard HTTP web requests on a non-standard
// port (anything other than port 80), you should specify that
// port number here. Set to zero otherwise.
//
// You may override this value for certain domains, users, or
// service levels through the Virtual Host Login (vlogin) plugin
// by setting a value(s) for $vlogin_csp_non_standard_http_port
// in the vlogin configuration.
//
//$csp_non_standard_http_port = 8080;
$csp_non_standard_http_port = 0;
// min_password_length
// max_password_length
// include_digit_in_password
// include_uppercase_letter_in_password
// include_lowercase_letter_in_password
// include_nonalphanumeric_in_password
//
// You can set the minimum and maximum password lengths that
// you accept or leave those settings as zero to indicate that
// no limit should be applied.
//
// Turn on any of the other settings here to check that the
// new password contains at least one digit, upper case letter,
// lower case letter and/or one non-alphanumeric character.
//
$min_password_length = 6;
$max_password_length = 0;
$include_digit_in_password = 0;
$include_uppercase_letter_in_password = 0;
$include_lowercase_letter_in_password = 0;
$include_nonalphanumeric_in_password = 0;
// csp_delimiter
//
// if your system has usernames with something other than
// an "@" sign separating the user and domain portion,
// specify that character here
//
//$csp_delimiter = '|';
$csp_delimiter = '@';
// debug mode
//
$csp_debug = 0;
?>
Установим необходимый нам 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.11-1.0.tar.gz
tar xvfz compatibility-2.0.11-1.0.tar.gz
Укажем SquirrelMail, что мы используем Courier в качестве POP3 и IMAP сервера и подключим Change SQL Password и Compatibility плагины:
/usr/sbin/squirrelmail-configure
Увидев меню конфигурации с помощью пунктов выбора настроим наш SquirrelMail^
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 on
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 on
S Save data
Q Quit
Command >> <-- 8
SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Plugins
Installed Plugins
Available Plugins:
1. abook_take
2. administrator
3. bug_report
4. calendar
5. change_sqlpass
6. compatibility
7. delete_move_next
8. demo
9. filters
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. sent_subfolders
17. spamcop
18. squirrelspell
19. test
20. translate
R Return to Main Menu
C Turn color on
S Save data
Q Quit
Command >> <-- 6 (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. compatibility
Available Plugins:
2. abook_take
3. administrator
4. bug_report
5. calendar
6. change_sqlpass
7. delete_move_next
8. demo
9. filters
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. sent_subfolders
17. spamcop
18. squirrelspell
19. test
20. translate
R Return to Main Menu
C Turn color on
S Save data
Q Quit
Command >> <-- 6 (the number of the change_sqlpass plugin)
SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Plugins
Installed Plugins
1. compatibility
2. change_sqlpass
Available Plugins:
3. abook_take
4. administrator
5. bug_report
6. calendar
7. delete_move_next
8. demo
9. filters
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. sent_subfolders
17. spamcop
18. squirrelspell
19. test
20. translate
R Return to Main Menu
C Turn color on
S Save data
Q Quit
Command >> <-- S
SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Plugins
Installed Plugins
1. compatibility
2. change_sqlpass
Available Plugins:
3. abook_take
4. administrator
5. bug_report
6. calendar
7. delete_move_next
8. demo
9. filters
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. sent_subfolders
17. spamcop
18. squirrelspell
19. test
20. translate
R Return to Main Menu
C Turn color on
S Save data
Q Quit
Command >> S
Data saved in config.php
Press enter to continue... <-- press some key
SquirrelMail Configuration : Read: config.php (1.4.0)
---------------------------------------------------------
Plugins
Installed Plugins
1. compatibility
2. change_sqlpass
Available Plugins:
3. abook_take
4. administrator
5. bug_report
6. calendar
7. delete_move_next
8. demo
9. filters
10. fortune
11. info
12. listcommands
13. mail_fetch
14. message_details
15. newmail
16. sent_subfolders
17. spamcop
18. squirrelspell
19. test
20. translate
R Return to Main Menu
C Turn color on
S Save data
Q Quit
Command >> <-- Q
Все настроено . Для доступа к веб интерфейсу SquirrelMail вы можете набрать в вашем браузере http://server1.example.com/squirrelmail или http://192.168.0.100/squirrelmail.
Вот собственно и все что я хотел написать. Заранее звиняйте если какие-то ляпы остались. Писалось паралельно с установкой нового сервака. ;)
Mr.Bublik
Комментарии
Да не за что, но...
Запустить рабочий мэйл-сервер по данному руководству мне не удалось, почти на каждом этапе возникают ошибки.
postfix не слушает 25 и 10025 порты, файл quota_notify по ссылке puuhis.net/vhcs/quota.txt отсутствует, архив с патчем для squirrelmail для смены паролей по ссылке не скачался, я нашел через сайт, скачал - не распаковывается - неожиданный конец архива. И т.д.
в общем все плохо(у меня).
Прошу помощи. Могу дать номер аськи.
у меня больше десятка серверов по этому мануалу собраны.
Вот эту строку надо вставить в master.cf что бы dovecot мог нежно общаться с postfix`ом
Спасибо за интерес к этой теме , ну и вообще заметите ляпы какие-нибудь пишите ! буду рад .
Вот это что такое:
Теперь настроим аутентификацию SMTP, внесите следующие изменения в конфиг Postfix’a, не забудьте сменить примеры на реальные адреса сетей!
Код:
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmai l argv=/usr/lib/d ovecot/deliver -d ${recipient}
???
и еще - там параметр интересный --mechauth1
а примеры автоматизации переноса здесь : www.lissyara.su/.../imapsync . Респект и уважуха !!! :)
RSS лента комментариев этой записи