В данном посте описан процесс установки почтового сервера на основе MTA Postfix. В качестве платформы будет использована CentOS версии 6.2 x32.
Для полноценной работы понадобятся дополнительные пакеты, такие как: Dovecot v2, MySQL, Postgrey, ClamAV.
Краткое содержание:
1. Установка MySQL и создание базы
2. Установка и настройка Postfix
3. Установка и настройка Dovecot
4. Установка Postgrey
5. Установка ClamAV
6. Установка PostfixAdmin и Apache
7. Настройка DNS сервера
8. Установка и настройка RoundCube Web Mail
Альтернативный почтовый сервер на Exim:
Установка и настройка почтового сервера Exim на CentOS 6.2 x32
Домен:
point.local
Имя хоста почтового сервера:
mx.point.local
IP адрес почтового сервера:
192.168.1.2
Начнем нашу установку с базы данных MySQL
1. Установка MySQL и создание базы
# yum install mysql-server mysql-devel -y
# service mysqld start
# vi /etc/my.cnf
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock
# chkconfig —level 35 mysqld on
# service mysqld restart
# mysql -u root -p
mysql> Enter password: ***** mysql> CREATE DATABASE mail; mysql> GRANT ALL PRIVILEGES ON mail.* TO 'postfix'@'localhost' IDENTIFIED BY 'password'; mysql> quit
2. Установка и настройка Postfix
# yum install postfix mysql pam mod_ssl openssl crypto-utils -y
На всякие пожарные, сохраним оригинальный конфиг файл:
# mv /etc/postfix/main.cf /etc/postfix/main.cf.original
Создадим свой:
# vi /etc/postfix/main.cf
soft_bounce = no
queue_directory = /var/spool/postfix
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
default_privs = nobody
inet_interfaces = all
myhostname = mx.point.local
mydomain = point.local
myorigin = $mydomain
mydestination = $myhostname,localhost.$myhostname,localhost
local_recipient_maps = $virtual_mailbox_maps, $virtual_alias_maps, $transport_maps
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8
relay_domains = $transport_maps
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mail_spool_directory = /var/mail
smtpd_banner = $myhostname ESMTP
debug_peer_level = 2
debug_peer_list = 127.0.0.1
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/local/man
config_directory = /etc/postfix
Этот листинг содержит базовые настройки для запуска Postfix. В нем нам интересны такие настройки как debug_peer_level и debug_peer_list. Это строчки отвечают за логирование SMTP сессий.
Первая debug_peer_level отвечает за уровень логирования, а вторая строчка указывает с каких хостов и сетей должны попадать логи.
Для примера, можно ввести адреса серверов популярных почтовых сервисов:
debug_peer_level = 2 debug_peer_list = yandex.ru, mail.ru pochta.ru 10.10.10.23/32 10.10.10.0/24
Хосты и сети можно перечислять через пробелы и знака запятой.
Если будут проблемы, вас спасет это debug режим.
Примечание: При составлении Postfix конфигов, важно соблюдать отступы.
Откроем опять главный конфиг файл:
# vi /etc/postfix/main.cf
И добавим текст:
virtual_mailbox_domains = mysql:$config_directory/sql/vdomains.cf virtual_mailbox_base = /var/vmail virtual_mailbox_maps = mysql:$config_directory/sql/vmailbox.cf virtual_alias_maps = mysql:$config_directory/sql/valias.cf virtual_minimum_uid = 1150 virtual_uid_maps = static:1150 virtual_gid_maps = static:12 virtual_transport = dovecot dovecot_destination_recipient_limit = 1 smtpd_sasl_auth_enable = yes smtpd_sasl_exceptions_networks = $mynetworks smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_type = dovecot smtpd_sasl_path = /var/spool/postfix/private/dovecot-auth
В этом листинг важно выставить идентификаторы пользователя, под которым будет работать Postfix. Если пользователь создан, ID можно взять с файла /etc/passwd, а ID группы хранится в /etc/groups. Так как у нас нет данного пользователя, создадим его:
# useradd -r -u 1150 -g mail -d /var/vmail -s /sbin/nologin -c Virtual vmail
Тут мы создали нового пользователя vmail c идентификатором ID — 1150, добавили его в группу mail.
# mkdir -p -v /var/vmail
# chmod 770 -R /var/vmail
# chown vmail:mail /var/vmail
Для корректной работы создали каталог почтовых сообщений /var/vmail, куда будет попадать почтовая переписка.
# setup
Firewall Configuration -> Firewall Enabled -> Убираем галочку
Здесь мы отключи встроенную цепочку правил фаерволла (RH-Input)
Отключаем SELINUX:
# gedit /etc/selinux/config
Находим строчку:
SELINUX=enforcing
Приводим ее к виду:
SELINUX=disabled
Встроенная цепочка и SELINUX иногда мешают нормальной работе программ. Поэтому мы отключили их.
Теперь запретим нашему серверу быть открытым Релеем, допишем:
# vi /etc/postfix/main.cf
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
permit
Создадим дополнительные конфигурационные файлы, которые указаны в /etc/postfix/main.cf, эти файлы отвечают за обращение к базе данных MySQL:
# mkdir /etc/postfix/sql
# vi /etc/postfix/sql/vdomains.cf
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'
# vi /etc/postfix/sql/vmailbox.cf
user = postfix 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'
# vi /etc/postfix/sql/valias.cf
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'
3. Установка и настройка Dovecot
# yum install dovecot dovecot-mysql -y
Чтобы Dovecot служил локальным транспортом, допишем следующие строчки в /etc/postfix/master.cf
# vi /etc/postfix/master.cf
dovecot unix - n n - - pipe
flags=DRhu user=vmail:mail argv=/usr/libexec/dovecot/deliver -d $(recipient)
Добавим в main.cf следующие строчки:
# vi /etc/postfix/main.cf
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_non_fqdn_recipient,
reject_unverified_recipient,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dialups.mail-abuse.org,
Сохраним оригинальный конфиг файл dovecot.conf
# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
Создаем файл /etc/dovecot/dovecot.conf
# vi /etc/dovecot/dovecot.conf
Вставим туда следующие настройки:
# 2.0.9: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-220.7.1.el6.i686 i686 CentOS release 6.2 (Final) ext4
auth_debug = yes
auth_debug_passwords = yes
auth_mechanisms = plain login cram-md5
auth_verbose = yes
base_dir = /var/run/dovecot/
disable_plaintext_auth = no
ssl = no
first_valid_uid = 1150
last_valid_uid = 1150
log_timestamp = %Y-%m-%d %H:%M:%S
mail_debug = yes
mail_location = maildir:/var/vmail/%d/%u
passdb {
args = /etc/dovecot-sql.conf
driver = sql
}
protocols = imap pop3
service auth {
unix_listener /var/spool/postfix/private/dovecot-auth {
user = postfix
group = postfix
mode = 0660
}
unix_listener auth-master {
user = vmail
group = mail
mode = 0660
}
unix_listener auth-userdb {
user = vmail
group = mail
mode = 0660
}
#user=root
}
service imap-login {
executable = /usr/libexec/dovecot/imap-login
inet_listener imap {
address = *
port = 143
}
}
service imap {
executable = /usr/libexec/dovecot/imap
}
service pop3-login {
executable = /usr/libexec/dovecot/pop3-login
inet_listener pop3 {
address = *
port = 110
}
}
service pop3 {
executable = /usr/libexec/dovecot/pop3
}
userdb {
args = /etc/dovecot-sql.conf
driver = sql
}
Теперь создайте файл /etc/dovecot-sql.conf
# vi /etc/dovecot-sql.conf
Внутри него поместите:
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 asuserdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
4. Установка Postgrey
Подключим необходимый репозитарий:
# rpm -Uvh http://pkgs.repoforge.org/rpmforge-rele … f.i686.rpm
Теперь установим Postgrey:
# yum install postgrey -y
После установки нам нужно дописать всего 1 строчку в главный конфигурационный файл main.cf, чтобы postfix подружился со спам фильтром postgrey. Открываем main.cf и делаем соответствующие изменения:
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_service unix:/var/spool/postfix/postgrey/socket,
reject_non_fqdn_recipient,
reject_unverified_recipient,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dialups.mail-abuse.org,
reject_rbl_client dull.ru
Примечание: строчка “check_policy_service unix …” должна быть обязательно прописана после строчки параметра “reject_unauth_destination”, как на примере выше.
5. Установка ClamAV
# yum remove rpmforge-release -y
# rpm -Uvh http://download.fedoraproject.org/pub/e … noarch.rpm
# yum install clamav clamav-server clamsmtp –y
# mv /etc/clamsmtpd.conf /etc/clamsmtpd.conf.orig
# vi /etc/clamsmtpd.conf
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: /var/tmp
Action: drop
Quarantine: on
User: clam
# chown clam:mail -R /var/run/clamd.clamsmtp/
# chown clam:clam -R /var/lib/clamd.clamsmtp
Добавляем в main.cf строчки:
# vi /etc/postfix/main.cf
content_filter = scan:127.0.0.1:10025 receive_override_options = no_address_mappings
Добавляем в master.cf строчки:
# vi /etc/postfix/master.cf
scan unix - - n - 16 smtp -o smtp_send_xforward_command=yes
Добавляем ниже приведенный конфиг в master.cf:
# vi /etc/postfix/master.cf
127.0.0.1:10026 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
6. Установка PostfixAdmin и Apache
Установим зависимости для Postfixadmin:
# yum -y install httpd php php-imap php-mbstring php-common php-pdo php-mysql php-cli gedit mc
Скачаем Postfixadmin и настроим его:
# cd /var/www/html
# tar -xvzf postfixadmin-2.3.6.tar.gz
# mv postfixadmin-2.3.6/ postfixadmin
# cd postfixadmin
# gedit /var/www/html/postfixadmin/config.inc.php
$CONF['configured'] = true; $CONF['database_type'] = 'mysql'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'password'; $CONF['database_name'] = 'mail'; $CONF['emailcheck_resolve_domain']='YES';
Ставим все службы в автозагрузку:
# 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
# chkconfig —level 35 clamd on
# chkconfig —level 35 clamsmtpd on
# chkconfig —level 35 saslauthd on
7. Настройка DNS сервера
Для того чтобы протестировать почтовый сервер, настройте Bind. Этот пакет позволить настроить DNS сервер.
Напомню, что наш почтовый сервер имеет следующий IP адрес 192.168.1.2.
# yum install bind -y
# gedit /etc/sysconfig/network
NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=mx.point.local
# gedit /etc/hosts
192.168.1.2 mx.point.local mx
Удаляем Network Manager (NM):
# service NetworkManager stop
# chkconfig NetworkManager off
# yum remove dnsmasq -y
# vi /etc/resolv.conf
nameserver 192.168.1.2
# gedit /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "point.local" {
type master;
file "point.local.fwd";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "point.local.rev";
};
include "/etc/named.rfc1912.zones";
# gedit /var/named/point.local.fwd
$ORIGIN point.local. $TTL 3D @ SOA mx.point.local. root.point.local. (12 4h 1h 1w 1h) @ IN NS mx.point.local. @ IN MX 10 mail.point.local. mx.point.local. IN A 192.168.1.2 www IN A 192.168.1.2 mail IN A 192.168.1.2
# gedit /var/named/point.local.rev
$ORIGIN 1.168.192.in-addr.arpa. $TTL 3D @ SOA mx.point.local. root.point.local. (12 4h 1h 1w 1h) @ IN NS mx.point.local. 2 IN PTR mx.point.local.
# gedit /etc/resolv.conf -> ставим свой IP адрес 192.168.1.2 - nameserver 192.168.1.2
# service named start
# chkconfig —level 35 named on
Проверка работы DNS:
# dig point.local
; <<>> DiG 9.7.4-RedHat-9.7.4-1.el5 <<>> point.local ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53153 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;point.local. IN A ;; ANSWER SECTION: point.local. 3600 IN A 192.168.1.2 ;; AUTHORITY SECTION: point.local. 3600 IN NS mx.point.local. ;; ADDITIONAL SECTION: mx.point.local. 3600 IN A 192.168.1.2 ;; Query time: 8 msec ;; SERVER: 192.168.1.2#53(192.168.1.2) ;; WHEN: Wed Aug 17 05:03:48 2011 ;; MSG SIZE rcvd: 78
# nslookup mx.point.local
# nslookup 192.168.1.2
# nslookup -type=MX point.local
hostname -f
mx.point.local
# reboot
Теперь зайдите в PostfixAdmin, для этого запустите браузер и введите веб адрес http://127.0.0.1/postfixadmin/setup.php
В окошке Change setup password введите свой пароль. Запомните его, он нам пригодится в дальнейшем.
Во втором окошке появится HASH нашего пароля (шифрованный пароль). Скопируйте эту "белеберду" в буфер.
После того как вы скопировали "hash" в буфер обмена, его нужно вставить в файл:
/var/www/html/postfixadmin/config.inc.php
Откройте этот файл и найдите в нем строчку:
$CONF['setup_password'] = 'changeme';
За место "changeme" ставим наш hash который скопировали в буфер. Получится так:
$CONF['setup_password'] = '6c5af4c72af213f0acac5f21d8f95ca1:e59172283d2bb72a5992af8ddc15332cde62f003';
И еще поставьте YES здесь:
$CONF['emailcheck_resolve_domain']='YES';
Сохраните файл.
Зайдите еще раз на страничку: http://127.0.0.1/postfixadmin/setup.php
Создайте учетку Админа, например "[email protected]", определите его пароль.
Нажмите на кнопке "Add Admin", появится надпись:
Admin has been added! ([email protected])
Запомните адрес админа и пароль.
Теперь уже заходим на страничку http://127.0.0.1/postfixadmin/
Вводим почтовый адрес админа и пароль.
Добавляем домен "point.local": Domain List - > New Domain -> point.local
Aliases - Ставим 0 Mailboxes - Ставим 0 Add default mail aliases - Галочка
После появится надпись:
Domain has been added! (point.local)
Создадим первый почтовый ящик, я создал "[email protected]".
Меню Virtual List -> Add MailBox ->
Username - linux
Password - 123 (sample)
Ну все!
Теперь пришло время тестировать наш почтовый сервер.
Найдите в локальной сети свободный компьютер, настройте сетевые настройки так чтобы он видел почтовый сервер.
Сетевой адрес должен быть в под сети сервера. Не забудьте указать ДНС сервер, у меня он имеет IP адрес почтового сервера.
Откройте почтовый клиент Outlook, укажите адрес вашего сервера и логин/пароль учетной записи [email protected]
SMTP/POP3 server: point.local
Учетная запись (Account name): [email protected]
Пароль (password): 123
Примечание: Не забудьте настроить SMTP авторизацию.
Отправьте себе тестовое письмо!
8. Установка и настройка RoundCube Web Mail
На данном этапе у нас есть удобный веб интерфейс для администратора почтового сервера, но нет веб интерфейса для пользователей. Этот досадное недоразумение решается установкой RoundCube:
# rpm -Uvh http://download.fedoraproject.org/pub/e … noarch.rpm
# yum install php-xml php-mcrypt php-intl php-sqlite php-pgsql
# cd /var/www/html
# tar xvfz roundcubemail-0.7.2.tar.gz
# mv roundcubemail-0.7.2 roundcube
Cоздаем файл roundcube.conf:
# vi /etc/httpd/conf.d/roundcube.conf
Вписываем следующее:
Alias /webmail /var/www/html/roundcubeAddType application/x-httpd-php .php .php3 .php4 .phtml # forcing open_base dir do not affect anything php_admin_value open_basedir / # AddDefaultCharset UTF-8 AddType text/x-component .htc php_flag display_errors Off php_flag log_errors On php_value error_log logs/errors php_value upload_max_filesize 5M php_value post_max_size 6M php_value memory_limit 64M php_flag display_errors Off php_flag log_errors On php_value error_log logs/errors php_value upload_max_filesize 5M php_value post_max_size 6M php_value memory_limit 64M Order allow,deny Deny from all Order deny,allow Allow from all
Далее создаем базу данных и пользователя:
# mysqladmin -p create roundcubemail
# mysql -p
mysql> GRANT ALL ON roundcube.* TO roundcube@localhost IDENTIFIED BY 'password';
# service httpd restart
# chown apache:apache -R /var/www/html/roundcube/temp
# chown apache:apache -R /var/www/html/roundcube/log
Далее идем по адресу http://127.0.0.1/roundcube/installer/ и устанавливаем по умолчанию, не меняя никаких настроек, кроме двух полей, где нужно указать название базы данных и пароль. В нашем случае название будет roundcubemail, а пароль, указанный ранее. Если все прошло успешно, удаляем директорию установщика в целях безопасности.
# rm -R -f /var/www/html/roundcube/installer
Альтернативный почтовый сервер на Exim:
Установка и настройка почтового сервера Exim на CentOS 6.2 x32
Оригинал: linuxforum.ru/viewtopic.php?id=21932
RSS & RSS to Email