From: neTTY
Newsgroups: email
Date: Mon, 30 Aug 2008 18:21:07 +0000 (UTC)
Subject: Корпоративный почтовый сервер
Postfix, Dovecot, MySQL, Postgrey, ClamAV и ClamSMTP
Disclaimer
Данная статья является подведением некоторых итогов над
моими экспериментами с Postfix. Вы можете использовать ее как базовый
документ, длясоздания на базе Postfix своих почтовых серверов работающих
под управлением RedHat подобных дистрибутивов Linux. Эта статья не
является официальным документом. Я надеюсь, что вы имеете опыт работы в
Linux.
Введение
Данная почтовая система построена на операционной системе Linux, а
еслибыть точнее под дистрибутивом Linux CentOS. Как упоминалось ранее,
данная статья, может быть использована для построения почтовых систем на
дистрибутивах Linux подобных на Red Hat. Я использовал Postfix, как MTA
для своей системы, IMAP/
POP3 сервером служит dovecot. Из-за ограниченности аппаратного
обеспечения, какантиспам решение я использовал postgrey. Clalmav
выступает в роли антивирусногофильтра для нашей почтовой системы. База
пользователей храниться в MySQL.
Структуру базы данных мы будем использовать от проекта postfixadmin,
а соответственно сам проект как веб интерфейс к панели управления
почтовой системы.
Все программы устанавливались в большинстве случаев из rpm пакетов. А
если ситуация требовала доработки, то скачивался с Интернета src.rpm
пакет, которыйпересобирался в rpm пакет и устанавливался в систему.
В написании данной статьи я использовал статью автора Johnny Chada.
Выражаю ему благодарность за его работы.
MySQL
Как я отметил ранее, MySQL нужен для хранения в ней базы
данных пользователей, а если быть точнее: названия учетной записи, пароля
в шифрованномвиде, пути, на основе которого MTA будет складывать почту и
многое другое. Нампонадобится:
1.установить СУБД;
2.обезопасить нашу СУБД и подкорректировать работу СУБД под нашинужды;
3.создать базу данных;
4.создать пользователя, который будет с ней работать и назначить емуправа
Воспользовавшись программой yum, я установил MySQL сервер. Ну а если
это вас не устраивает, то вы вольны установить MySQL сервер любым удобным
вам методом.
yum -y install mysql-server mysql-devel
Установка программы может занять некоторое время. При каннеле 2 Mbps это
заняло у меня минут 5-7.
Теперь нам необходимо отконфигурировать демон СУБД и установить
пароль для супер пользователя. Для этого необходимо запустить скрипт
/usr/bin/mysql_secure_installation. Он представляет собой визард. Все
что нужно - это читатьвопросы и отвечать на них. Далее необходимо
принудить MySQL слушать толькоlocalhost и включить регистрацию событий
MySQL. На этапе установки этонеобходимая функция для того, чтобы видеть
какие запросы отправляет система вСУБД. Позже её можно будет отключить.
Для этого надо открыть файл /etc/my.cnf идобавить в него следующие
строки:
Теперь необходимо создать базу данных, а так же создать пользователя и
задать ему пароль и нужные для работы с базой данных права. (Это пример,
поэтому выможете изменять название базы данных, имя пользователя и
пароль)
#mysql -u root -p
Enter password:
mysql>CREATE DATABASE mail;
mysql>GRANT ALL PRIVILEGES ON mail.* TO postmaster@localhost IDENTIFIEDBY password
С настройкой СУБД мы закончили, перейдем к настройкам postfix.
Postfix
Postfix это довольно быстрый в работе и простой в настройке Mail
Transport Agent. Как я отметил ранее, я не стремился собирать программы
из исходных кодов, мне интересно было насколько быстро можно развернуть
систему. К сожалению, поумолчанию rpm пакет postfix идет без поддержки
mysql. Соответственно нужно былонайти src.rpm пакет данного пакета,
который нашел на http://rpmfind.net .
После установкиданного пакета необходимо открыть для редактирования spec
файл пакета. Изменяемпараметры %define MYSQL 0 на %define MYSQL 1. Далее
необходимо будет найти иотключить PostgreSQL параметры и собрать пакет с
помощью команды rpmbuild(rpmbuild ba postfix.spec). Компиляция и
создание rpm пакета в зависимости отвозможности компьютера может занять
до 5 минут. Собранный пакет лежит в /usr/src/ redhat/RPMS/i386
Примечание: данный путь действителен для ОС i386 если у вас
иная архитектура, то путь будет соответственно другим.
Устанавливаем данный пакет:
rpm -ivh postfix-X.Y.Z.i386.rpm
Пакет установлен, его конфигурационные файлы находятся в /etc/postfix.
У postfix есть два конфигурационных файла, которые мы и будем
редактировать (этоmain.cf и master.cf). Так же во время конфигурации нам
нужно будет создать несколько конфигурационных файлов. И так, начнем с main.cf:
Это базовые настройки Postfix, которые достаточны для старта сервера. Но
это ещё не все. Не закрывая конфигурационный файл, дописываем
конфигурацию дляработы с виртуальными пользователями.
Значения всех этих параметров вы можете найти на сайте postfix. Но здесь
есть некоторые параметры, которые я хотел бы пояснить. Параметры
virtual_minimum_uid иvirtual_uid_maps указывают на ID пользователя,
которого я специально создал дляобработки почты. virtual_gid_maps
указывает ID на группу mail. В моем случае эточисло равное 12. Уточните
ID вашей группы mail. И так давайте создадимпользователя, который будет
обрабатывать пользователя.
Этот параметр мы будем редактировать, но на данном этапе нам хватает.
Теперь нам необходимо создать конфигурационные файлы в соответствии с
данными, которые я указал в main.cf, чтобы postfix мог обращаться к
нашей базе данных.
#vim /etc/postfix/sql/vdomains.cf
user = postmaster
password = password
hosts = localhost
dbname = mail
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx='0' AND active='1'
#vim /etc/posfix/sql/
user = postmaster
password = password
hosts = localhost
dbname = mail
table = mailbox
select_field = CONCAT(domain,'/',maildir)
where_field = username
additional_conditions = and active = '1'
#query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s'AND active = '1'
#vim /etc/postfix/sql/valias.cf
user = postmaster
password = password
hosts = localhost
dbname = mail
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
#query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
Примечание: параметры user и password это пользователь и его пароль,
который вы задали для работы postfix c базой данный в разделе MySQL.
Как видно из конфигурационного файла локально внутри сервера
обработкой почты будет занимать dovecot. Поэтому сначала нам необходимо
установить dovecot.
yum -y install dovecot
(Конфигурация dovecot будет рассмотрена ниже)
Для того, чтобы dovecot служил локальным транспортом нам необходимо
добавить в master.cf следующие строки.
#vim /etc/postfix/master.cf
dovecot unix - n n - - pipe
flags=-DRhu user=vmail:mail argv=/usr/libexec/dovecot/deliver -d $(recipient)
Перед тем как перейти к настройке dovecot, давайте завершим
конфигурацию postfix. Сначала давайте допишем ограничения самого postfix,
а далее подключим кpostfix-у postgrey и clamav. Открываем файл main.cf
для редактирования, находимпараметр smtpd_recipient_restrictions и
дописываем следующие строки:
Пояснения о каждом параметре можно прочитать на http://www.postfix.org
Перед тем как приступить к установке clamav и postgrey
рекомендую произвести поиск в своем репозитарии на наличии этих пакетов.
Примечание: в стандартном репозитарии CentOS я не нашел пакета postgrey,
а clamav есть демон clamd. В репозитарии Fedora не было postgrey, а у
clamav отсутствовал демон clamd. Проблему эту можно решить, в Интернете я
набрел нарепозитарий для Enterprise Linux полностью открытый и
поддерживаемый сообществом. Вот ссылка на этот репозитарий, вы можете
скачать и установитьданный репозитарий и установить нужные вам пакеты
без проблем.
yum -y install postgrey
После установки нам нужно дописать всего 1 строчку после, которого postfix
подружиться с postgrey. Открываем main.cf и делаем соответствующие изменения:
Примечание: check_policy_service должен быть обязательно прописан
после параметра reject_unauth_destination. Так же check_policy_service
как видно работаетчерез UNIX сокет, есть так же возможность работы через
TCP порт. Вам нужнобудет проверить скрипт автозапуска для выяснения по
как стартует демон.
На этом привязка postgrey к postfix-у закончилась. Приступим к установке
инастройке clamav.
yum -y install clamd
У clamav есть конфигурационный файла, которые нужно привести к
нижеследующему виду:
Привязать clamav можно разными путями. Я предпочел привязку
спомощью ClamSMTP. На сайте проекта я нашел ссылку на Source RPMS
данной программы которая облегчила бы установку и интеграцию.
Соответственно я зашел искачал нужный мне пакет, собрал его и установил
его на свою систему. После этогонужно сконфигурировать демон ClamSMTP и
привязать его к postfix.
#vim /etc/clamsmtp
OutAddress: 10026
TimeOut: 180
KeepAlives: 0
XClient: on
Listen: 127.0.0.1:10025
ClamAddress: /var/run/clamav/clamd.sock
Header: X-Virus-Scanned: ClamAV using ClamSMTP
TempDirectory: /tmp
Action: drop
Quarantine: on
User: clamav
Для того, чтобы привязать clamav с помощью ClamSMTP нам нужно дописать в
main.cf и master.cf следующие строки:
scan unix - - n - 16 smtp -o smtp_send_xforward_command=yes
Таким образом, мы пере направляем почту для проверки в clamav. Но нам
также нужно, чтобы письма возвращались обратно в postfix. Для этого в
master.cf файле мыдобавляем нижеследующие строки:
Вот и все, в принципе SMTP часть почтового сервера готова, за
исключением схемы, которую мы будем использовать в нашей базе данных (как
отмечалось ранее еемы возьмем из postfixadmin-а. Он будет
рассматриваться ниже в разделе Apache). Ночто это за почтовый сервер, у
которого нет IMAP/POP3 части. Ранее мы установилиdovecot, который и
будет отвечать за эту часть нашего почтового сервера.
Dovecot
Конфигурационный файл dovecot по формату немного отличается
от конфигурационных файлов, с которыми мы работали до этого. Мы
будем редактировать 2 конфигурационных файла (dovecot.conf и
dovecot-sql.conf), которыележат в директории /etc. Вы можете скачать
src.rpm пакет и указать другое месторасположение данных файлов.
Итак, откроем конфигурационный файл dovecot.conf для редактирования
и приведем его к следующему виду:
Как видно из данного конфигурационного файла нам нужен
другой конфигурационный файл под названием dovecot-sql.conf. По умолчанию
данный конфигурационный файл лежит в следующей директории
/usr/share/doc/dovecot-X.Y.Z/ examples/dovecot-sql-example.conf. Можно
скопировать его в директорию /etc илисоздать в директории /etc файл
dovecot-sql.conf. Нужно привести данныйконфигурационный файл к ниже
следующему виду:
#vim /etc/dovecot-sql.conf
driver = mysql
connect = host=localhost dbname=postfix user=postmaster password=uRandom57
default_pass_scheme = MD5
user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n'as mail, 1150 AS uid, 12 AS gid, concat('dirsize:storage=', quota) AS quota FROMmailbox WHERE username = '%u' AND active = '1'
password_query = SELECT username as user, password, '/var/vmail/%d/%n' asuserdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 1150 as userdb_uid, 12 asuserdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
Примечание: dovecot чувствителен к реестрам символов в
своих конфигурационных файлах
Apache
Плоха та система, которой невозможно управлять. Для того, чтобы
установить postfixadmin нам необходим Apache с поддержкой php. Необходимо
установить следующее программное обеспечение:
yum y install httpd php php-imap php-mbstring php-common php-pdo php-mysqlphp-cli
Для установки postfixadmin нужно скачать архив с сайта программы
и выполнить следующие команды
После распаковки архива необходимо перейти в директорию postfixadmin
и отредактировать файл config.inc.php. В принципе данный конфигурационный
файл ничего сложного из себя не представляет. (Подводным камнем является
параметр $CONF[emailcheck_resolve_domain]). В обозревателе открываете
путь к даннойпанели управления.
Послесловие
Данная конфигурация работает в одной организации, которая
попросила заменить их коммерческий продукт на данную систему.
1037 Прочтений • [Корпоративный почтовый сервер (linux centos mail postfix mysql imap dovecot)] [08.05.2012] [Комментариев: 0]