Aug 10 08:51:58 mx postfix/master[2473]: warning: process /usr/libexec/postfix/trivial-rewrite pid 2497 exit status 1
Aug 10 08:51:58 mx postfix/master[2473]: warning: /usr/libexec/postfix/trivial-rewrite: bad command startup -- throttling
Это не моя статья. Поэтому лучше ее тут оставить. Я ее на opennet.ru нашел.
Да и я не уверен будет ли все работать на реальном сервере (я все завел на тестовой машине в локальной сети)
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 пакетов. В написании данной статьи я использовал статью автора Johnny Chada. Выражаю ему благодарность за его работы.
Подключим необходимые репозитарии
Как я отметил ранее, MySQL нужен для хранения в ней базы данных пользователей, а если быть точнее: названия учетной записи, пароля в шифрованном виде, пути, на основе которого MTA будет складывать почту и многое другое. Нам понадобится:
1. Установить СУБД;
2. Обезопасить нашу СУБД и подкорректировать работу СУБД под наши нужды;
3. Создать базу данных;
4. Создать пользователя, который будет с ней работать и назначить ему права.
Воспользовавшись программой yum, я установил MySQL сервер. Ну а если это вас не устраивает, то вы вольны установить MySQL сервер любым удобным вам методом.
text
yum -y install mysql-server mysql-devel
Установка программы может занять некоторое время. При канале 2 Mbps это заняло у меня минут 5-7. Теперь нам необходимо отконфигурировать демон СУБД и установить пароль для суперпользователя. Для этого необходимо запустить скрипт /usr/bin/mysql_secure_installation. Он представляет собой визард. Все что нужно - это читать вопросы и отвечать на них. Далее необходимо принудить MySQL слушать только localhost и включить регистрацию событий MySQL. На этапе установки это необходимая функция для того, чтобы видеть какие запросы отправляет система в СУБД. Позже её можно будет отключить. Для этого надо открыть файл /etc/my.cnf и добавить в него следующие строки:
text
service mysqld start
/usr/bin/mysql_secure_installation
Теперь необходимо создать базу данных, а так же создать пользователя и задать ему пароль и нужные для работы с базой данных права. (Это пример, поэтому вы можете изменять название базы данных, имя пользователя и пароль)
text
chkconfig --level 35 mysqld on
text
service mysqld restart
text
mysql -u root -p
Enter password:
mysql> CREATE DATABASE mail;
mysql> GRANT ALL PRIVILEGES ON mail.* TO 'postfix'@'localhost' IDENTIFIED BY 'password';
Postfix
Postfix это довольно быстрый в работе и простой в настройке Mail Transport Agent.
Установим MTA и нужные зависимости:
Пакет установлен, его конфигурационные файлы находятся в /etc/postfix. У postfix есть два конфигурационных файла, которые мы и будем редактировать (это main.cf и master.cf). Так же во время конфигурации нам нужно будет создать несколько конфигурационных файлов. И так, начнем с main.cf:
Одним удобным способом посмотреть, что происходит во время SMTP-сессии, является директива debug_peer_list из файла main.cf. Глобально включать отладку всех SMTP-соединений было бы очень накладно, поэтому в нее стоит добавлять только список хостов, взаимодействие с которыми мы хотим отслеживать тщательнее, чем обычно. К примеру, для наблюдения за передачей писем между нами и yandex.ru, mail.ru, pochta.ru и 10.10.10.23 строка могла бы выглядеть вот так:
debug_peer_level = 2
debug_peer_list = yandex.ru, mail.ru pochta.ru 10.10.10.23/32 10.10.10.0/24
Как видите, хосты можно перечислять двумя путями – через запятую и через пробел. Впрочем, как вы уже убедились, никто не мешает в качестве хоста указывать IP-адреса или целые подсети вроде 10.10.10.0/32.
Это базовые настройки Postfix, которые достаточны для старта сервера. Но это ещё не все. Не закрывая конфигурационный файл, дописываем конфигурацию для работы с виртуальными пользователями.
Значения всех этих параметров вы можете найти на сайте postfix. Но здесь есть некоторые параметры, которые я хотел бы пояснить. Параметры virtual_minimum_uid иvirtual_uid_maps указывают на ID пользователя, которого я специально создал для обработки почты. virtual_gid_maps указывает ID на группу mail. В моем случае это число равное 12. Уточните ID вашей группы mail. И так давайте создадим пользователя, который будет обрабатывать пользователя.
Этот параметр мы будем редактировать, но на данном этапе нам хватает. Теперь нам необходимо создать конфигурационные файлы в соответствии с данными, которые я указал в main.cf, чтобы postfix мог обращаться к нашей базе данных.
user = postfix
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'
text
gedit /etc/postfix/sql/vmailbox.cf
text
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'
text
gedit /etc/postfix/sql/valias.cf
text
user = postfix
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.
text
yum -y install dovecot dovecot-mysql
(Конфигурация dovecot будет рассмотрена ниже) Для того, чтобы dovecot служил локальным транспортом нам необходимо добавить в master.cf следующие строки.
text
gedit /etc/postfix/master.cf
text
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 полностью открытый и поддерживаемый сообществом. Вот ссылка на этот репозитарий http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm, вы можете скачать и установить данный репозитарий и установить нужные вам пакеты без проблем.
text
yum -y install postgrey
После установки нам нужно дописать всего 1 строчку после, которого postfix подружиться с postgrey. Открываем main.cf и делаем соответствующие изменения:
Примечание: check_policy_service должен быть обязательно прописан после параметра reject_unauth_destination. Так же check_policy_service как видно работает через UNIX сокет, есть так же возможность работы через TCP порт. Вам нужно будет проверить скрипт автозапуска для выяснения того как стартует демон. На этом привязка postgrey к postfix-у закончилась. Приступим к установке и настройке clamav.
text
yum -y install clamav clamav-devel clamav-update
У clamav есть конфигурационный файл, который нужно привести к нижеследующему виду:
Привязать clamav можно разными путями. Я предпочел привязку с помощью ClamSMTP. На сайте проекта я нашел ссылку на Source RPMS
данной программы которая облегчила бы установку и интеграцию. Соответственно я зашел и скачал нужный мне пакет, собрал его и установил
на свою систему. После этого нужно сконфигурировать демон ClamSMTP и привязать его к postfix.
text
gedit /etc/clamsmtp
text
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. Нужно привести данный конфигурационный файл к нижеследующему виду:
text
gedit /etc/dovecot-sql.conf
text
driver = mysql
connect = host=localhost dbname=mail user=postfix password=password
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 FROM mailbox WHERE username = '%u' AND active = '1'
password_query = SELECT username AS user, password, '/var/vmail/%d/%n' as userdb_home, 'maildir:/var/vmail/%d/%n' as userdb_mail, 1150 AS userdb_uid, 12 AS userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
Примечание: dovecot чувствителен к регистрам символов в своих конфигурационных файлах
Apache
Плоха та система, которой невозможно управлять. Для того, чтобы установить postfixadmin нам необходим Apache с поддержкой php. Необходимо
установить следующее программное обеспечение:
Для установки postfixadmin нужно скачать архив с сайта программы и выполнить следующие команды
text
cd /var/www/html
wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-2.3.3/postfixadmin-2.3.3.tar.gz/download
tar -xvzf postfixadmin-2.3.3.tar.gz
mv postfixadmin-2.3.3/ postfixadmin
cd postfixadmin
gedit config.inc.php
После распаковки архива необходимо перейти в директорию postfixadmin и отредактировать файл config.inc.php. В принципе данный конфигурационный файл ничего сложного из себя не представляет. (Подводным камнем является параметр $CONF[emailcheck_resolve_domain]).
А также $CONF['configured'] = true. Здесь имеется ввиду что если используется несуществующий домен, то этот параметр необходимо выключить иначе postfixadmin не даст добавить этот несуществующий домен в систему. В обозревателе открываете путь к данной панели управления.
Еще надо поменять значение $CONF['database_password'] = 'postfixadmin' на $CONF['database_password'] = 'password' который мы указали в начале.
Вы должны поменять значение:
chkconfig --level 35 mysqld on
chkconfig --level 35 dovecot on
chkconfig --level 35 postfix on
chkconfig --level 35 httpd on
chkconfig --level 35 postgrey on
Отключаем и убираем Sendmail:
text
alternatives --config mta
service sendmail stop
yum remove sendmail –y
touch /etc/aliases.db
text
reboot
Чтобы убедится в успешности установки, вы можете посмотреть почтовый лог файл /etc/var/maillog:
text
cat /etc/var/mailog
text
Aug 11 02:01:30 localhost dovecot: Dovecot v1.2.17 starting up (core dumps disabled)
Aug 11 02:01:30 localhost dovecot: auth-worker(default): mysql: Connected to localhost (mail)
Aug 11 02:01:31 localhost postgrey[2358]: Process Backgrounded
Aug 11 02:01:31 localhost postgrey[2358]: 2011/08/11-02:01:31 postgrey (type Net::Server::Multiplex) starting! pid(2358)
Aug 11 02:01:31 localhost postgrey[2358]: Using default listen value of 128
Aug 11 02:01:31 localhost postgrey[2358]: Binding to UNIX socket file /var/spool/postfix/postgrey/socket using SOCK_STREAM
Aug 11 02:01:31 localhost postgrey[2358]: Setting gid to "104 104"
Aug 11 02:01:31 localhost postgrey[2358]: Setting uid to "103"
Aug 11 02:01:31 localhost dovecot: auth(default): new auth connection: pid=2432
Aug 11 02:01:31 localhost dovecot: auth(default): new auth connection: pid=2433
Aug 11 02:01:31 localhost dovecot: auth(default): new auth connection: pid=2434
Aug 11 02:01:31 localhost dovecot: auth(default): new auth connection: pid=2435
Aug 11 02:01:31 localhost dovecot: auth(default): new auth connection: pid=2436
Aug 11 02:01:31 localhost dovecot: auth(default): new auth connection: pid=2437
Aug 11 02:01:31 localhost postfix/postfix-script[2445]: starting the Postfix mail system
Aug 11 02:01:31 localhost postfix/master[2446]: daemon started -- version 2.8.4, configuration /etc/postfix
Как видим, нету слов error и warrning
Послесловие
Данная конфигурация работает в одной организации, которая попросила заменить их коммерческий продукт на данную систему.
здравствуйте, я никогда не связывался с постфиксом, но вот на новой работе вылезло... такая проблема:
на одном постале юзвери довольно таки часто во время регистрации вбивают вымышленое мыло, и через некоторое время после того как высылается письмо с сылкой для подстверждения почты с почтовика приходит режект от том что такого мыла не сущствует. мне эти письма с режектами нужно складывать в отдельный каталог, подскажите пожалуйста как их можно отслеживать и как их куда то складывать