В данном посте описан процесс установки почтового сервера на основе 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