Среда, 15.05.2024, 16:09

Блог Владимира Степанова

Реклама
Статистика
Яндекс.Метрика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Меню
Категории раздела
Установка [14]
Настройка [23]
Установка ПО [11]
Работаем самостоятельно [2]
Хитрости [1]
Разное [1]
Вход на сайт
Реклама
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » Статьи » Линукс » Настройка

    Виртуальные пользователи и домены, почтовый сервер на основе Postfix, Courier, MySQL и SquirrelMail (Ubuntu 8,04 LTS) (Часть 1)

    Виртуальные пользователи и домены, почтовый сервер на основе Postfix, Courier, MySQL и SquirrelMail (Ubuntu 8,04 LTS).


    Версия 1.0

    Автор: Falko Timme <ft [at] falkotimme [dot] com>

    Последнее редактирование 05/15/2008

    Перевод: Глушков Вадим <plusv [at] yandex [dot] ru>

    Оригинальный текст руководства можно найти по следующему адресу http://www.howtoforge.org/virtual-users-domains-postfix-courier-mysql-squirrelmail-ubuntu8.04


    Права на данное руководство принадлежат Falko Timme (Copyright (c) 2008 by Falko Timme). Оно взято из учебника Christoph Haas, которое вы можете найти по адресу http://workaround.org. Вы можете свободно использовать данное руководство, оно распространяется по лицензии Creative Commons версии 2.5 и других более поздних версий.


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


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


    Преимущество такой «виртуальной» установки (виртуальные пользователи и домены хранятся в базе данных MySQL) состоит в том, что такая установка обладает большей гибкостью и мощностью, чем установка с «реальными» пользователями. С таким «виртуальным» почтовым сервером можно легко обрабатывать тысячи пользователей и доменов. Кроме этого ими легче управлять, так управление осуществляется через базу данных MySQL, вы с легкостью можете добавлять новые или изменять существующие. Отпадает необходимость использование команды postmap для создания bd файлов, нет необходимости перезагрузки Postfix и т.п. Для управления базой данных вы можете использовать веб инструменты, такие как phpmyadmin, установка которого также описанна в данном руководстве. Третье преимущество заключается в том, что пользователи будут иметь адрес электронной почты в качестве имени пользователя электронной почты (вместо имени пользователя + адрес электронной почты), которые легче понять и запомнить.


    Этот документ предназначен для использования в качестве практического руководства в нем не раскрыты теоретические основы. Они представлены во множестве других документах в Интернет.


    Этот документ поставляется без гарантий любого рода! Я хочу сказать, что это не единственный способ создания такой системы. Есть много способов достижения этой цели, но это такой, который я принял. Я не выдают никаких гарантий, что это будет работать у Вас!


    1. Предварительные замечания


    Это руководство для Ubuntu 8.04 Server (Hardy Heron), вам необходимо произвести базовую установку Ubuntu 8.04 server перед началом (как это сделать можно посмотреть на страницах 1-3 руководства «The Perfect Server — Ubuntu Hardy Heron (Ubuntu 8.04 LTS Server)» http://www.howtoforge.com/perfect-server-ubuntu8.04-lts) . Система должна иметь статический IP адрес. Я использую 192.168.0.100 как мой IP адрес в данном руководстве и server1.example.com как имя хоста.


    Убедитесь, что вы зашли как суперпользователь,


    sudo su


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


    Очень важным является, чтобы вы сделали символическую ссылку /bin/sh на /bin/bash...


    ln -sf /bin/bash /bin/sh


    ... и еще отключите AppArmor:


    /etc/init.d/apparmor stop
    update-rc.d -f apparmor remove


    2. Установка Postfix, Courier, Saslauthd, MySQL, phpMyAdmin


    Для установки Postfix, Courier, Saslauthd, MySQL и phpMyAdmin, нам просто необходимо вполнить:


    apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl 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


    Мы должны получить исходники 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.


    Сначала создадим базу данных с названием mail:


    mysqladmin -u root -p create 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(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 INT(10) 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;


    Как вы уже наверное заметили мы покинули оболочку MySQL и ввернулись командную оболочку Linux.


    Таблица domains будет хранить наименования виртуальных доменов для которых Postfix будет получать письма.


    domain

    example.com


    Таблица forwardings будет содержать псевдонимы почтовых ящиков, например почтовые сообщения направленные на info@example.com будт перенаправлены на sales@example.com.


    source

    destination

    info@example.com

    sales@example.com


    Таблица users будет содержать всю информацию о виртуальных пользователях (например, адреса электронной почты, потому что адрес электронной почты и имя пользователя одно и тоже) и паролей (в зашифрованном виде!), а также размер квоты для каждого почтового ящика (в данном примере значение по умолчанию равно 10485760 байт, что означает 10 Мб)


    email

    password

    quota

    sales@example.com

    No9.E4skNvGa. ("secret" in encrypted form)

    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

    Категория: Настройка | Добавил: Raxxell (13.10.2010)
    Просмотров: 2291 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]