Установка Postfix+Dovecot+MySQL+Clamav+Postgrey на Fedora 15-16-17-18-19 x32
Входные данные
Домен:
point.local
Имя хоста почтового сервера:
mx.point.local
IP адрес почтового сервера:
192.168.1.2
IP адрес DNS сервера провайдера:
111.222.333.444
Краткое содержание:
1. Настройка сетевого адаптера
2. Установка MySQL и создание базы "mail"
3. Установка и настройка Postfix
4. Установка и настройка Dovecot
5. Установка Postgrey
6. Установка ClamAV
7. Установка PostfixAdmin и Apache
8. Настройка DNS сервера
9. Настройка PostfixAdmin
10. Установка и настройка RoundCube Web Mail
1. Настройка сетевого адаптера
Файлы настроек сетевых адаптеров у Fedora имеют имена:
- ifcfg-enp0s3, ifcfg-enp0s8
- ifcfg-p2p1, ifcfg-p7p1
- ifcfg-eth0, ifcfg-eth1
Файлы находятся в каталоге /etc/sysconfig/network-scripts/
# systemctl stop NetworkManager.service
# systemctl disable NetworkManager.service
# systemctl enable network.service
# systemctl start network.service
Файл /etc/sysconfig/network-scripts/ifcfg-enp0s3, дописываем или меняем сетевые реквизиты:
ONBOOT="yes"
BOOTPROTO="static"
IPADDR=192.168.1.2
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
# systemctl restart network.service
Файл /etc/resolv.conf , вписываем IP адрес DNS сервера провайдера:
# vi /etc/resolv.conf
nameserver 192.168.1.1
Проверяем, пингуем:
# ping google.kz
2. Установка MySQL и создание базы "mail"
# yum install mysql mysql-server mysql-devel -y
# systemctl enable mysqld.service
# systemctl start mysqld.service
Создаем почтовую базу - "mail":
# 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
3. Установка и настройка Postfix
# yum install postfix pam mod_ssl openssl crypto-utils mc system-config-firewall-tui setuptool wget -y
# mv /etc/postfix/main.cf /etc/postfix/main.cf.original
Файл /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 = proxy:unix:passwd.byname $alias_maps
- unknown_local_recipient_reject_code = 550
- mynetworks = 127.0.0.0/8
- relay_domains =
- 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
Опять открываем /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
Создаем учетную запись пользователя vmail:
# useradd -r -u 1150 -g mail -d /var/vmail -s /sbin/nologin -c Virtual vmail
Для корректной работы создаем каталоги:
# mkdir -p -v /var/vmail
# chmod 770 -R /var/vmail
# chown vmail:mail /var/vmail
Отключаем SELINUX, открываем /etc/selinux/config и меняем:
Находим строку
SELINUX=enforcing
Приводим ее к виду
SELINUX=disabled
# setenforce 0
Ставим по умолчанию postfix :
# alternatives --config mta
Нажимаем цифру - 2
ENTER
There are 2 programs which provide 'mta'.
Selection Command
-----------------------------------------------
*+ 1 /usr/sbin/sendmail.sendmail
2 /usr/sbin/sendmail.postfix
Enter to keep the current selection[+], or type selection number: 2
# systemctl disable sendmail.service
# systemctl stop sendmail.service
Запрещаем Postfix быть открытым релеем, открываем /etc/postfix/main.cf, дописываем:
- smtpd_recipient_restrictions = permit_mynetworks,
- permit_sasl_authenticated,
- reject_unauth_destination,
Создаем файлы для обращения к БД:
# mkdir /etc/postfix/sql
Создаем файл /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'
Создаем файл /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'
Создаем файл /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'
4. Установка и настройка Dovecot
# yum install dovecot dovecot-mysql -y
Открываем /etc/postfix/master.cf и добавляем:
- dovecot unix - n n - - pipe
- flags=DRhu user=vmail:mail argv=/usr/libexec/dovecot/deliver -d $(recipient)
Открываем /etc/postfix/main.cf и добавляем:
- reject_non_fqdn_recipient,
- reject_unverified_recipient,
- reject_rbl_client cbl.abuseat.org,
- reject_rbl_client dialups.mail-abuse.org,
- permit
Создаем файл /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/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/dovecot-sql.conf
- driver = sql
- }
- protocol lda {
- auth_socket_path = /var/run/dovecot/auth-master
- postmaster_address = admin@point.local
- }
Теперь создайте файл /etc/dovecot/dovecot-sql.conf
- driver = mysql
- connect = host=localhost dbname=mail user=postfix password=password
- default_pass_scheme = CRAM-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'
5. Установка Postgrey
# yum install postgrey -y
Открываем файл /etc/postfix/main.cf , и добавляем check_policy_service unix:/var/spool/postfix/postgrey/socket после reject_unauth_destination :
- 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,
- permit
6. Установка ClamAV
# yum install clamav clamav-server clamsmtp clamav-update clamav-scanner –y
Открываем /etc/freshclam.conf и комментируем строку 8
#Строка номер 8: закоментировать
- Example
Обновляем базы:
# freshclam -v
Устанавливаем автообновление баз:
# freshclam -d
Открываем /etc/clamsmtpd.conf и вставляем:
- OutAddress: 10026
- TimeOut: 180
- KeepAlives: 0
- XClient: on
- Listen: 127.0.0.1:10025
- ClamAddress: /run/clamd.clamsmtp/socket
- Header: X-Virus-Scanned: ClamAV using ClamSMTP
- TempDirectory: /var/lib/clamd.clamsmtp
- Action: drop
- Quarantine: on
- User: clamsmtp
# chown clamsmtp:mail -R /var/run/clamd.clamsmtp/
Добавляем в /etc/postfix/main.cf строчки:
- content_filter = scan:127.0.0.1:10025
- receive_override_options = no_address_mappings
Добавляем в /etc/postfix/master.cf строчку:
- scan unix - - n - 16 smtp -o smtp_send_xforward_command=yes
Добавляем в /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
7. Установка PostfixAdmin и Apache
Установим зависимости для Postfixadmin:
# yum -y install httpd php php-imap php-mbstring php-common php-pdo php-mysql php-cli
Скачаем Postfixadmin и настроим его:
# cd /var/www/html
# wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-2.3.6/postfixadmin-2.3.6.tar.gz/download
# mv download postadmin.tar.gz
# tar -xvzf postadmin.tar.gz
# mv postfixadmin-2.3.6/ postfixadmin
# cd postfixadmin
Открываем /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['encrypt'] = 'dovecot:CRAM-MD5';
- $CONF['dovecotpw'] = "/usr/bin/doveadm pw";
Ставим все службы в автозагрузку:
# systemctl enable dovecot.service
# systemctl enable postfix.service
# systemctl enable httpd.service
# systemctl enable postgrey.service
# systemctl enable clamd@scan.service
# systemctl enable clamsmtp-clamd.service
8. Настройка DNS сервера
Открываем файл /etc/resolv.conf и приводим к виду:
- search point.local
- nameserver 127.0.0.1
- nameserver 192.168.1.2 //Первичный DNS
- nameserver 111.222.333.444 //Вторичный DNS
После наших изменений в файле - /etc/resolv.conf, данные о зоне "point.local" будут браться из нашего DNS сервера с IP адресом 192.168.1.2. Другие запросы будут разрешатся через DNS сервер провайдера.
Установим пакет Bind:
# yum install bind -y
Впишем имя хоста в /etc/sysconfig/network :
- NETWORKING=yes
- NETWORKING_IPV6=no
- HOSTNAME=mx.point.local
А также впишем имя хоста в /etc/hosts :
- 192.168.1.2 mx.point.local mx
Еще раз проверяем файл /etc/resolv.conf
- search point.local
- nameserver 127.0.0.1
- nameserver 192.168.1.2
- nameserver 111.222.333.444
Здесь IP адреса:
192.168.1.2 - наш DNS сервер
111.222.333.444 - IP адрес DNS сервера провайдера
Открываем /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 {
- listen-on port 53 { 127.0.0.1; 192.168.1.2; }; # ставим внешний IP интерфейса
- 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";
- allow-query { any; }; # меняем, даем обращатся всем
- allow-query-cache { localhost; 10.0.0.0/24; }; # меняем, добавляем локальную сеть если она есть
- allow-recursion { localhost; 10.0.0.0/24;}; # меняем, добавляем локальную сеть если она есть
- forwarders { 111.222.333.444; 444.555.666.777; }; # добавляем, ip dns провайдера
- dnssec-enable no;
- dnssec-validation no;
- 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";
- };
- # Зона прямого просмотра "point.local"
- zone "point.local" {
- type master;
- file "point.local.fwd";
- allow-update {none;};
- allow-transfer {192.168.1.10; }; //вторичный DNS
- };
- # Наша обратная зона просмотра "point.local"
- zone "1.168.192.in-addr.arpa" {
- type master;
- file "point.local.rev";
- allow-update {none;};
- allow-transfer {192.168.1.10; };
- };
- include "/etc/named.rfc1912.zones";
Создаем /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
Создаем /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.
# systemctl enable named.service
# systemctl start named.service
Проверка работы DNS:
# nslookup mx.point.local
# nslookup 192.168.1.2
# nslookup -type=MX point.local
# hostname -f
mx.point.local
# reboot
9. Настройка PostfixAdmin
В браузере ввести адрес http://127.0.0.1/postfixadmin/setup.php
или
http://IP почтового сервера/postfixadmin/setup.php
В окошке "Change setup password" - забиваем свой пароль, записываем его на бумажку.
Во втором окошке появится длинная красная непонятная строчка (наш шифрованный пароль), копируем ее в буфер обмена.
Открываем /var/www/html/postfixadmin/config.inc.php , находим строчку
$CONF['setup_password'] = 'changeme';
Меняем, вместо "changeme", вставляем шифрованный пароль который скопировали в буфер обмена. Вот что должно получится:
$CONF['setup_password'] = '6c5af4c72af213f0acac5f21d8f95ca1:e59172283d2bb72a5992af8ddc15332cde62f003';
Заходим http://127.0.0.1/postfixadmin/setup.php или http://IP сервера/postfixadmin/setup.php
Создаем учетную запись администратора, например "administrator@point.local".
Нажимаем на кнопке "Add Admin", появится надпись:
Admin has been added!
(administrator@point.local)
Запоминаем адрес (логин) и пароль.
Заходим на страничку http://127.0.0.1/postfixadmin/ или http://IP сервера/postfixadmin/
Вводим адрес administrator@point.local и пароль.
Добавляем домен point.local :
Заходим в меню -> Domain List - > New Domain -> point.local
- Aliases - Ставим 0
- Mailboxes - Ставим 0
- Add default mail aliases - Галочка
Нажимаем ОК.
Появится надпись:
Domain has been added!
(point.local)
Создадим первый почтовый ящик, я создал "linux@point.local".
Меню Virtual List -> Add MailBox ->
- Username - linux
- Password - 123 (sample)
Пришло время тестировать наш почтовый сервер.
В локальной сети находим свободный компьютер, настраиваем сетевые настройки так чтобы этот ПК видел почтовый сервер.
Настраиваем почтовый клиент Outlook или другой, указываем
- SMTP/POP3 server: point.local
- Учетная запись (Account name): linux@point.local
- Пароль (password): 123
Ставим галку - SMTP авторизация.
Отправляем себе письмо на linux@point.local
10. Установка и настройка RoundCube Web Mail
# yum install php php-xml php-mcrypt php-intl php-sqlite php-pgsql
# cd /var/www/html
# wgethttp://sourceforge.net/projects/roundcubemail/files/roundcubemail/0.9.4/roundcubemail-0.9.4.tar.gz/download
# tar xvfz roundcubemail-0.9.4.tar.gz
# mv roundcubemail-0.9.4 roundcube
Cоздаем файл roundcube.conf:
# vi /etc/httpd/conf.d/roundcube.conf
Вписываем следующее:
- Alias /webmail /var/www/html/roundcube
- <Directory /var/www/html/roundcube>
- AddType 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
- <IfModule mod_php4.c>
- 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
- </IfModule>
- <IfModule mod_php5.c>
- 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
- </IfModule>
- <FilesMatch "(\.inc|\~)$">
- Order allow,deny
- Deny from all
- </FilesMatch>
- Order deny,allow
- Allow from all
- </Directory>
Cоздаем базу данных и пользователя:
# mysqladmin -p create roundcubemail
# mysql -p
mysql> GRANT ALL ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';
mysql> quit
# service httpd restart
# chown apache:apache -R /var/www/html/roundcube/temp
# chown apache:apache -R /var/www/html/roundcube/logs
Ставим свой часовой пояс:
# vi /etc/php.ini
date.timezone = Asia/Almaty
или
date.timezone = Europe/Moscow
Идем по адресу http://127.0.0.1/roundcube/installer/ или http://IP сервера/roundcube/installer/]. Оставляем все по умолчанию, не меняя никаких настроек, кроме двух полей, где нужно указать название базы данных и пароль. В нашем случае название базы будет "roundcubemail", а пароль указанный ранее 'password'.
Не забываем включить опцию 'htmleditor' в 'always'.
По окончании настройки веб интерфейса, Вам будет предложено скачать и сохранить два конфигурационных файла:
1. db.inc.php
2. main.inc.php
Эти два файла требуется переместить в папку:
/var/www/html/roundcube/config/
Открываем /var/www/html/roundcube/config/main.inc.php
# vi /var/www/html/roundcube/config/main.inc.php
$rcmail_config['imap_auth_type'] = cram-md5;
Если пароль к базе Roundcube был введен с ошибкой, его можно сменить в файле
# vi /var/www/html/roundcube/config/db.inc.php
$rcmail_config['db_dsnw'] = 'mysql://roundcube:password@localhost/roundcubemail';
Здесь:
roundcube - имя пользователя базы roundcubemail
password - пароль доступа к базе
roundcubemail - сама база веб Интерфейса RoundCube
Заходим в веб интерфейс, вводим в браузере адрес:
http://point.local/webmail
или
http://point.local/roundcube
Вводим в окошке:
логин: administrator@point.local
пароль: 123456
сервер: point.local или IP