Почтовый сервер · 9 min read · Nov 12, 2025
Как настроить почтовый сервер ISP с виртуальными пользователями/доменами на Centos 5.0 с использованием Postfix, Dovecot, MySQL, phpMyAdmin, TLS/SSL - Страница 2
Конфигурация:
SMTP-AUTH/TLS
Сначала мы настраиваем SMTP-AUTH и TLS. Для этого отредактируйте /usr/lib/sasl2/smtpd.conf с помощью вашего любимого редактора.
vi /usr/lib/sasl2/smtpd.confи внесите изменения, как указано ниже.
pwcheck_method: saslauthd
mech_list: plain loginСоздайте каталоги, затем закройте ключ и, наконец, сертификат.
mkdir -p /etc/postfix/ssl/mailserver
cd /etc/postfix/ssl/mailserver
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650Закрытые ключи и сертификаты были созданы. Позже мы скажем Postfix использовать их.
MySQL:
Теперь мы создадим базу данных с именем mail, для этого мы выполним команды, указанные ниже;
mysql -u root -pВведите пароль, и вы окажетесь на приглашении MySQL ( mysql>).
CREATE DATABASE mail;Дайте все привилегии на mail пользователю mail.
GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost' IDENTIFIED BY 'mail';
FLUSH PRIVILEGES;
quitУстановите пароль для пользователя mail. Это будет сделано с помощью следующего оператора.
mysqladmin -u mail password newpasswordЗатем мы создадим необходимые таблицы для нашей новой базы данных (mail), которая содержит информацию о доменах, пользователях, псевдонимах и почтовых ящиках.
mysql -u mail -pПосле ввода пароля вы окажетесь на приглашении MySQL.
show databases;Это покажет все базы данных, включая нашу базу данных “mail”. Мы будем использовать “mail”.
USE mail;- Создайте таблицу доменов.
CREATE TABLE domain ( domain varchar(255) NOT NULL default '', description varchar(255) NOT NULL default '', aliases int(10) NOT NULL default '0', mailboxes int(10) NOT NULL default '0', maxquota int(10) NOT NULL default '0', transport varchar(255) default NULL, backupmx tinyint(1) NOT NULL default '0', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (domain), KEY domain (domain) ) TYPE=MyISAM COMMENT=' Виртуальные домены';- Вторая по важности таблица - это почтовый ящик, поэтому создайте почтовый ящик.
CREATE TABLE mailbox ( username varchar(255) NOT NULL default '', password varchar(255) NOT NULL default '', name varchar(255) NOT NULL default '', maildir varchar(255) NOT NULL default '', quota int(10) NOT NULL default '0', domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (username), KEY username (username) ) TYPE=MyISAM COMMENT='Виртуальные почтовые ящики';- Создайте таблицу псевдонимов.
CREATE TABLE alias ( address varchar(255) NOT NULL default '', goto text NOT NULL, domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (address), KEY address (address) ) TYPE=MyISAM COMMENT='Виртуальные псевдонимы';Мы создали необходимые таблицы, поэтому выйдите из MySQL.
quitPostfix MySQL:
Postfix нужно знать, где и как он может искать всю информацию, связанную с почтовыми ящиками. Для этой цели мы создадим следующие файлы в /etc/postfix. Последние версии Postfix могут использовать это вместо других операторов, и в этом случае просто закомментируйте все строки и раскомментируйте последнюю.
- Создайте файл mysql_virtual_alias_maps.cf для переадресации электронной почты с одного адреса на другой.
vi /etc/postfix/mysql_virtual_alias_maps.cfuser = mail
password = mail
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'- Создайте файл mysql_virtual_domains_maps.cf для сопоставления виртуальных доменов. Виртуальные домены запрашиваются с использованием информации, предоставленной в этом файле.
vi /etc/postfix/mysql_virtual_domains_maps.cfuser = mail
password = mail
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'- Создайте файл mysql_virtual_mailbox_maps.cf. Обычно это сопоставление адресов электронной почты с местоположением почтового ящика пользователя на вашем жестком диске. Если вы сохранили входящие электронные письма на жестком диске с помощью встроенного агента доставки Postfix, то он будет запрашиваться для определения пути к почтовому ящику.
vi /etc/postfix/mysql_virtual_mailbox_maps.cfuser = mail
password = mail
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'- Наконец, создайте файл mysql_virtual_mailbox_limit_maps.cf, который будет использоваться для сопоставления лимита квоты почтовых ящиков пользователей.
vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cfuser = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = '1'
#query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'- Дайте файлам mysql_virtual соответствующее владение и разрешения.
chown root:postfix *.cf
chmod 644 *.cfPostfix:
В разделе конфигурации Postfix мы отредактируем файл main.cf, расположенный в каталоге конфигурации Postfix ( /etc/postfix), чтобы ввести некоторую основную информацию, необходимую для Postfix.
mv /etc/postfix/main.cf /etc/postfix/main.cf.orig
vi /etc/postfix/main.cf############## Postfix###############
#Дата изменения 17 июня 2008 года
#-------------------------------------------------------
smtpd_banner = $myhostname
biff = no
append_dot_mydomain = no
relayhost =
mynetworks = 192.168.49.0/24
inet_interfaces = 192.168.49.81
mailbox_size_limit = 0
recipient_delimiter = +
alias_database = hash:/etc/postfix/aliases
alias_maps = $alias_database
myhostname = example.co.tz
mydomain = rnd
myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain, $transport_maps
mail_spool_directory = /var/spool/mail
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
disable_vrfy_command = no
readme_directory = /usr/share/doc/postfix-2.2.10/README_FILES
sample_directory = /usr/share/doc/postfix-2.2.10/samples
sendmail_path = /usr/sbin/sendmail
html_directory = no
setgid_group = postdrop
command_directory = /usr/sbin
manpage_directory = /usr/share/man
daemon_directory = /usr/libexec/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
queue_directory = /var/spool/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 450
####################раздел postfix заканчивается здесь###############Информация о виртуальных пользователях Postfix:
Снова мы отредактируем файл main.cf, чтобы добавить поддержку виртуальных пользователей. “virtual_minimum_uid” и “virtual_uid_maps” указывают на идентификатор пользователя 150 в моем случае, который является пользователем, созданным специально для обработки виртуальной почты. Он использует стандартную группу “mail” с gid по умолчанию 12. Сначала создайте пользователя, выполнив команду useradd или adduser.
useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Виртуальный почтовый ящик" vmail
chmod 770 /var/vmail/ (создайте каталог, если он не существует)
chown vmail:mail /var/vmail
vi /etc/postfix/main.cf#######################Виртуальные домены, пользователи и почтовые ящики###############
virtual_mailbox_domains = mysql:$config_directory/mysql_virtual_domains_maps.cf
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = mysql:$config_directory/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:$config_directory/mysql_virtual_alias_maps.cf
virtual_minimum_uid = 150
virtual_uid_maps = static:150
virtual_gid_maps = static:12
##############################Раздел виртуальных пользователей main.cf заканчивается##############Аутентификация SASL/TLS Postfix:
Наконец, мы снова отредактируем файл main.cf, чтобы включить аутентификацию SASL/TLS. Ранее мы создали некоторые сертификаты, мы будем использовать их здесь для защиты почтового сервера.
vi /etc/postfix.main.cf#################### Аутентификация SASL/TLS###########################
######ЧАСТЬ SASL#########
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
######ЧАСТЬ TLS###########
smptpd_tls_cert_file = /etc/postfix/ssl/mailserver/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/mailserver/smtpd.key
smtpd_tls_CAfile = /etc/postfix/ssl/mailserver/cacert.pem
smtp_tls_auth_only = no
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_received_header = no
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
tls_random_source = dev:/dev/urandom
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_recieved_header = yes
###########################Аутентификация SASL/TLS заканчивается здесь#############Для моего удобства я разделил main.cf на три раздела { Postfix, виртуальные домены, пользователи и почтовые ящики, SASL/TLS-аутентификация}. Аутентификация SASL/TLS дополнительно делится на ( ЧАСТЬ SASL и ЧАСТЬ TLS). Чтобы показать вам каждый раздел и их параметры, я редактировал один и тот же файл трижды. Теперь скопируйте /etc/aliases и /etc/aliases.db в /etc/postfix/ и выполните newaliases.
cp /etc/aliases* /etc/postfix/
newaliasesDovecot v1.x IMAP и POP:
Давайте настроим Dovecot, который предоставляет как POP3, так и IMAP сервис. Файл конфигурации для Dovecot - /etc/dovecot.conf. Мы создадим резервную копию оригинального файла в dovecot.conf.orig и изменим текущий файл в соответствии с нашими потребностями. Чтобы обрабатывать виртуальных пользователей с dovecot, мы создадим файл /etc/dovecot-mysql.conf.
vi /etc/dovecot-mysql.conf######dovecot-mysql.conf должен выглядеть так##########
# ПРИМЕЧАНИЕ: '\' разделение строк используется только для удобочитаемости, в настоящее время Dovecot не поддерживает это
# Сокет mysqld.sock может находиться в разных местах в разных системах
driver = mysql
default_pass_scheme = plain
#connect = host=/var/run/mysqld/mysqld.sock dbname=mail user=root password=default
# В качестве альтернативы вы также можете подключиться к localhost:
connect = host=localhost dbname=mail user=mail password=mail
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 150 AS uid, 12 AS gid, concat('dirsize:storage=',quota) AS quota FROM mailbox WHERE username ='%u'
####################заканчивается здесь####################Теперь перейдем к настройке dovecot.conf, чтобы аутентифицировать виртуального пользователя, используя метод mysql_auth. Имейте в виду, что обычные пользователи Linux не могут войти на почтовый сервер. Поскольку мы не включили метод аутентификации Pam в нашей конфигурации dovecot. Также first_valid_uid и last_valid_uid установлены на 150, что означает, что только пользователь с uid 150 сможет войти. Протоколы Pop3 и pop3s доступны.
cp -p /etc/dovecot.conf /etc/dovecot.conf.orig
vi /etc/dovecot.conf(Отредактируйте только следующие строки)
##############dovecot настроен для работы с виртуальными пользователями############
base_dir = /var/run/dovecot/
protocols = imap pop3 imaps pop3s
listen = [::]
login_dir = /var/run/dovecot-login
mail_location = mbox:/var/vmail/%d/%n
mbox_read_locks = fcntl
log_timestamp = "%Y-%m-%d %H:%M:%S "
log_path = /var/log/maillog
mail_extra_groups = mail
first_valid_uid = 150
last_valid_uid = 150
maildir_copy_with_hardlinks = yes
userdb sql {
args = /etc/dovecot-mysql.conf
}
passdb sql {
args = /etc/dovecot-mysql.conf
}
####################################заканчивается здесь######################После этого мы установим владение и права доступа на /etc/dovecot-mysql.conf.
chmod 600 /etc/dovecot/*.conf
chown vmail /etc/dovecot/*.confУстановка и конфигурация Roundcube:
На основе ЗАМЕТКИ ПО УСТАНОВКЕ (Roundcube)
- Распакуйте и поместите эту папку где-то внутри вашего корня документа ( /var/www/html/mail)
- Убедитесь, что следующие каталоги (и файлы внутри) доступны для записи веб-сервером
- /temp
- /logs
- Создайте новую базу данных и пользователя базы данных для RoundCube (см. УСТАНОВКА БАЗЫ ДАННЫХ)
- Укажите браузер на http://url-to-roundcube/installer/
- Следуйте инструкциям скрипта установки (или смотрите РУЧНУЮ КОНФИГУРАЦИЮ)
- После создания и тестирования конфигурации удалите каталог установщика
- Готово!
УСТАНОВКА БАЗЫ ДАННЫХ
- MySQL 4.1.x/5.x
Для версии MySQL 4.1 и выше рекомендуется создать базу данных для RoundCube с кодировкой utf-8. Вот пример процедуры инициализации:
mysql -u root -pCREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';
quitmysql -u mail -p roundcubemail < SQL/mysql5.initial.sqlПримечание: ‘password’ - это основной пароль для пользователя roundcube. Настоятельно рекомендуется заменить его на более безопасный пароль. Пожалуйста, имейте в виду: вам нужно будет указать этот пароль позже в ‘config/db.inc.php’.
HTTP Раздел:
Чтобы начать использовать веб-интерфейс почтового сервера, мы отредактируем файл /etc/httpd/conf/httpd.conf.
vi /etc/httpd/conf/httpd.confИ добавьте указанные ниже операторы.
#Доступ к почте через веб-интерфейс с использованием roundcube
DocumentRoot /var/www/html/mail
ServerName mail.example.co.tz
Сохраните конфигурацию и выйдите.
Создание виртуальных пользователей и доменов:
- Теперь мы создадим виртуальные домены и виртуальных пользователей в нашей почтовой базе данных.
mysql -u mail -p- Введите пароль, и вы окажетесь на приглашении mysql>.
USE mail;- Сначала создайте виртуальный домен в таблице доменов (example.co.tz), используя команду, указанную ниже.
INSERT INTO domain (domain,description,aliases,mailboxes,maxquota,transport,backupmx,active) VALUES ('example.co.tz','Виртуальный домен','10','10', '0','virtual', '0','1');- Теперь создайте двух виртуальных пользователей в таблице почтовых ящиков. Я создал ( [email protected] & [email protected]) в качестве имен пользователей для киизы и хобоки.
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','mwamaLis', 'Хобока Мвамакунге ','hoboka/', '0','example.co.tz','1');
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','gekman', 'Кииза Мутунги','kiiza/', '0','example.co.tz','1');
quitТеперь, когда мы создали виртуальных пользователей и виртуальный домен, мы хотим протестировать наш почтовый сервер, войдя в систему и отправив почту с одной учетной записи на другую. Итак, давайте запустим демоны Dovecot, Postfix, MySQL и веб-сервера. Также мы хотим, чтобы они запускались автоматически при следующей перезагрузке. Для этого мы выполняем следующие команды.
chkconfig -level 235 mysqld on
chkconfig -level 235 saslauthd on
chkconfig -level 235 postfix on
chkconfig -level 235 dovecot on
chkconfig -level 235 httpd on
/etc/init.d/saslauthd start
/etc/init.d/mysqld start
/etc/init.d/postfix start
/etc/init.d/dovecot start
/etc/init.d/httpd startGet new posts in your inbox
No spam. Unsubscribe anytime.