Yvision.kzYvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
2
14:13, 08 ноября 2015

Postfix — установка почтового сервера на CentOS 7

Blog post image

Установка почтового сервера на CentOS 7

В этом посте написано о том, как установить почтовый сервер на CentOS 7. В новой версии операционной системы произошли некоторые изменения, поэтому старая инструкция по установке Postfix требовала корректировки, которые отражены в этом посте.

Основная часть настроек по настройке Postfix не изменилась, но изменились настройки касающиеся самой операционной системы. Были упразднены старые пакеты по работе с брандмауэром, появился "systemd".
На мой взгляд произошли следующие изменения:

  1. Появился systemd - демон инициализации других демонов в Linux, пришедший на замену используемого ранее скрипта инициализации /sbin/init. Вследствие чего, за место привычного iptables имеем firewalld. Который настраивается по другому. А также управление демонами стало делаться через команду "systemctl" за место "service" и "chkconfig".
  2. Так как СУБД MySQL приобрела корпорация Oracle, сообщество решило использовать в своих дистрибутивах форк по имени MariaDB. Практически все что когда-то делалось в MySQL работает и в MariaDB. Изменилась только установка, теперь она выглядит так: yum install mariadb mariadb-server
  3. Версия Dovecot подскочила с 2.0.9 до 2.2, что повлияло на конфигурирование некоторых настроек.
  4. В остальном все осталось по старому, хотя кто имеет кучу скриптов старой системы инициализации, им видимо придется переписывать наработанное все свое добро на новый лад.

Если вы начинающий, лучше не возитесь с ручной установкой почтового сервера. Советую присмотреться к проверенным готовым решениям, например Zimbra или IRedMail. Свой сервер можно вообще не иметь, сейчас популярны бесплатные облачные почтовые сервисы от Yandex.ru и Mail.ru. Если есть деньги, то покупается аналогичный сервис от Google. Малым и средним компаниями лучше всего пользоваться такими бесплатными услугами, если конечно у вас не крупная компания.

 

Обычно Postfix сам по себе не может выполнять все функции почтового сервиса, его задача - это пересылка сообщений другим почтовым системам. Для полноценной работы на сервер выполняющий почтовые задачи ставят дополнительные пакеты, такие как: Dovecot, MySQL, CLamAV, Postgrey и т.д.

У меня в этой записке будут трудится в связке:

  • Postfix

  • Dovecot

  • MySQL

  • Postgrey

  • Postfixadmin

  • Roundcube

Кратко напишу для чего какой пакет (программа) используются:

Postfix - будет заниматься отправкой и получением писем от других почтовых серверов (MTA - Mail Transfer Agent / почтовый агент пересылки ). Он же SMTP сервер.

Dovecot - занимается доставкой почты от Postfix к почтовым клиентам (MDA - mail delivery agent / почтовый агент доставки). Он же POP3/IMAP сервер.

MySQL - в базе MySQL будут содержаться такие данные, как наш домен - company.kz, имена почтовых учетных записей, пароли и т.д.

Postgrey - эффективный спам фильтр основанный на механизме серых списков, который будет отсеивать спам не создавая большой вычислительной нагрузки на сервер.

PostfixAdmin - веб интерфейс для управления почтовым сервером, предназначен для системного администратора. IT-специалист в нем может легко производить такие операции как: заведение доменов, почтовых учетный записей, смена паролей и т.д.

RoundCube - веб интерфейс для пользователей почтового сервера. С помощью него пользователь непрсредственно работает со своим почтовым ящиком. То есть он может: просматривать почтовые сообщения, отправлять письма и т.д.

Все что здесь написано должно работать на Fedora версий v15-19 и Red Hat 7.
Домен: point.ru
Имя хоста почтового сервера: mail.point.ru
IP адрес почтового сервера: 217.15.188.50
IP адрес DNS сервера провайдера: 10.22.32.51

 

КРАТКОЕ СОДЕРЖАНИЕ

 
  1. Настройка сетевого адаптера
  2. Установка MySQL и создание базы "mail"
  3. Установка и настройка Postfix
  4. Установка и настройка Dovecot
  5. Установка Postgrey
  6. Установка PostfixAdmin и Apache
  7. Настройка имени хоста
  8. Настройка фаервола firewalld
  9. Настройка PostfixAdmin
  10. Установка и настройка RoundCube Web Mail
  11. Настройка своего DNS сервера
 

1. Настройка сетевого адаптера

 

Проверяем какие есть у нас сетевые адаптеры в системе, вводим в консоли:

# ip a

Здесь видно, что на компьютере три адаптера:

  1. lo (loopback)
  2. enp0s3
  3. enp0s8

Первый адаптер - это специальный программный интерфейс обратной петли. Мы его использовать не будем.
Второй адаптер - это наш внешний физический интерфейс, мы должны прописать белый IP адрес в его настройки.
Третий адаптер - это внутренний интерфейс подключенный в локальную сеть, соответственно у него будет адрес из диапазона локальной сети.

Теперь давайте найдем файлы настроек сетевых адаптеров, они хранятся в каталоге /etc/sysconfig/network-scripts/, для этого введем:

# ls /etc/sysconfig/network-scripts/

 
ifcfg-enp0s3  ifdown-post      ifup-bnep   ifup-routes  
ifcfg-enp0s8  ifdown-ppp       ifup-eth    ifup-sit  
ifcfg-lo      ifdown-routes    ifup-ippp   ifup-Team  
ifdown        ifdown-sit       ifup-ipv6   ifup-TeamPort  
ifdown-bnep   ifdown-Team      ifup-isdn   ifup-tunnel  
ifdown-eth    ifdown-TeamPort  ifup-plip   ifup-wireless  
ifdown-ippp   ifdown-tunnel    ifup-plusb  init.ipv6-global  
ifdown-ipv6   ifup             ifup-post   network-functions  
ifdown-isdn   ifup-aliases     ifup-ppp    network-functions-ipv6
   

Обычно файлы настроек сетевых адаптеров имеют имена:

  1. ifcfg-enp0s3, ifcfg-enp0s8 ...
  2. ifcfg-p2p1, ifcfg-p7p1 ...
  3. ifcfg-eth0, ifcfg-eth1 ...

У нас первый вариант.

До настроек сетевых карт, обязательно отключите программу под названием NetworkManager. Это программа помогает пользователю облегчить настройки подключения к разным сетям. Но на сервере, из за этой работающей утилиты, могут возникнуть необъяснимые проблемы. Если у вас сервер, то желательно отключить NetworkManager.

Отключение NetworkManager:

# systemctl stop NetworkManager.service

# systemctl disable NetworkManager.service

Включаем сеть если она не включена:

# systemctl enable network.service

# systemctl start network.service

Файл /etc/sysconfig/network-scripts/ifcfg-enp0s3, дописываем или меняем сетевые реквизиты:

# vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

 
HWADDR=08:00:27:DF:58:83  
TYPE=Ethernet  
BOOTPROTO=static  
DEFROUTE=yes  
PEERDNS=yes  
PEERROUTES=yes  
IPV4_FAILURE_FATAL=no  
IPV6INIT=no  
IPV6_AUTOCONF=yes  
IPV6_DEFROUTE=yes  
IPV6_PEERDNS=yes  
IPV6_PEERROUTES=yes  
IPV6_FAILURE_FATAL=no  
NAME=enp0s3  
UUID=9825ca5b-d916-4514-b3ac-fdc7964c8362  
ONBOOT=yes  
IPADDR=217.15.188.50  
NETMASK=255.255.255.0  
GATEWAY=217.15.188.48
   

Жирным шрифтом помечены изменения которые были произведены мною. Здесь дописаны такие основные параметры как:

  • IP адрес компьютера
  • указан признак статического адреса для хоста
  • маска сети
  • адрес шлюза
  • адрес DNS сервера

В моих примерах, текстовые файлы создаются и редактируются с помощью редактора vi. Кратко опишу основные операции по работе с текстом:

  • После открытия файла через команду vi <имя файла>, требуется активировать режим редактирования (ввода), это нужно чтобы вносить текст в файл. Активирование режима ввода осуществляется с помощью нажатия клавиши "INS". Далее редактор перейдет с режима просмотра в состояние редактирования. Потом от вас потребуется вводить новые данные в файл. В моих примерах от вас нужно будет копировать текст из инструкции в созданный файл, обычно это происходит путем нажатия "INS" - переход в режим редактирования, и далее осуществляется вставка текста из буфера обмена нажатием комбинации "SHIFT"+"INS".

  • По окончанию ввода текста, нажмите кнопку "ESC". Тем самым вы вернетесь в режим просмотра.

  • Самое главное - это сохранение файла, чтобы ваш труд не пропал. В текстовом редакторе vi данную операцию возможно осуществить двумя способами, первый вариант - нажмите и держите кнопку Shift, теперь когда кнопка Shift удержана, не отпуская ее нажмите по букве "z" - два раза. Обязательно проверьте "Caps Lock" - он должен быть выключен. Второй вариант - после выхода из режима редактирования "ESC", введите ":w!" и нажмите "ENTER".

  • Поиск текста в редакторе vi делается путем нажатия в режиме просмотра кнопки "/", далее вводится текст который нужно найти.

  • Выход без сохранения текста - если вдруг вы неправильно ввели текст, можно выйти из редактора без сохранения введенных данных. Для этого нажмите "ESC" и введите ":q!", потом нажмите ENTER.

Перезапускаем демон отвечающий за сеть:

# systemctl restart network.service

В файл /etc/resolv.conf вписываем IP адрес DNS сервера провайдера:

# vi /etc/resolv.conf

 
search point.ru  
nameserver 10.22.32.51 //DNS провайдера
   

Проверяем есть ли интернет на сервере, пингуем:

# ping google.ru

2. Установка MySQL и создание базы "mail"

 

# yum install mariadb mariadb-server -y

# systemctl enable mariadb.service

# systemctl start mariadb.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 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 = mail.point.ru  
mydomain = point.ru  
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_authenticated_header = 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

В CentOS 7 по умолчанию уже должен стоят 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_sasl_authenticated,  
    permit_mynetworks,  
    reject_unauth_destination,  
    reject_non_fqdn_recipient,  
    reject_invalid_hostname,  
    reject_unknown_recipient_domain,  
    reject_unknown_client,  
    reject_unlisted_recipient,  
    reject_unverified_recipient,  
    reject_unauth_pipelining,  
    reject_rbl_client cbl.abuseat.org,  
    reject_rbl_client dialups.mail-abuse.org,  
    reject_rbl_client bl.spamcop.net,  
    reject_rbl_client zen.spamhaus.org,  
    reject_rbl_client sbl-xbl.spamhaus.org,  
    permit
 

Здесь правило reject_unauth_destination - должно запрещать открытый релей через ваш сервер.

Создадим дополнительные конфигурационные файлы, которые указаны в /etc/postfix/main.cf, эти файлы отвечают за обращение к базе данных MySQL:

С помощью них Postfix будет работать с БД:

# 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'
 

Создаем файл /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'
 

Создаем файл /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'
   

4. Установка и настройка Dovecot

 

# yum install dovecot dovecot-mysql -y

Если не работает SASL, установите пакет cyrus-sasl:

# yum install cyrus-sasl -y

Открываем /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_client_restrictions =
    reject_unauth_pipelining,
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unknown_client_hostname,
    permit
smtpd_helo_restrictions =
    permit_mynetworks,
    reject_invalid_hostname,
    reject_invalid_helo_hostname,
    reject_unknown_hostname,
    reject_non_fqdn_helo_hostname,
    reject_unknown_helo_hostname,
    permit
smtpd_sender_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_non_fqdn_sender,
    reject_authenticated_sender_login_mismatch,
    reject_unauthenticated_sender_login_mismatch,
    reject_unknown_sender_domain,
    permit_sasl_authenticated,
    reject_sender_login_mismatch
    permit
 

Создаем файл /etc/dovecot/dovecot.conf, вставим туда следующие настройки:

 
# /etc/dovecot/dovecot.conf  
# OS: CentOS release 7 (Final)   
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.ru  
}
 

Теперь создайте файл /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

 

Подключаем репозиторий Epel:

 
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm
 

Устанавливаем Postgrey:

# yum install postgrey -y

После установки нам нужно дописать всего 1 строчку в главный конфигурационный файл main.cf, чтобы postfix подружился со спам фильтром postgrey. Открываем файл - /etc/postfix/main.cf и делаем соответствующие изменения:

 
smtpd_recipient_restrictions = 
    permit_sasl_authenticated,  
    permit_mynetworks,  
    reject_unauth_destination,  
    check_policy_service unix:/var/spool/postfix/postgrey/socket,  #Наша строчка
    reject_non_fqdn_recipient,  
    reject_invalid_hostname,  
    reject_unknown_recipient_domain,  
    reject_unknown_client,  
    reject_unlisted_recipient,  
    reject_unverified_recipient,  
    reject_unauth_pipelining,  
    reject_rbl_client cbl.abuseat.org,  
    reject_rbl_client dialups.mail-abuse.org,  
    reject_rbl_client bl.spamcop.net,  
    reject_rbl_client zen.spamhaus.org,  
    reject_rbl_client sbl-xbl.spamhaus.org,  
    permit  
smtpd_client_restrictions =  
    reject_unauth_pipelining,  
    permit_sasl_authenticated,  
    permit_mynetworks,  
    reject_unknown_client_hostname,  
    permit  
smtpd_helo_restrictions =  
    permit_mynetworks,  
    permit_sasl_authenticated,  
    reject_invalid_hostname,  
    reject_invalid_helo_hostname,  
    reject_unknown_hostname,  
    reject_non_fqdn_helo_hostname,  
    reject_unknown_helo_hostname,  
    permit  
smtpd_sender_restrictions =  
    permit_sasl_authenticated,  
    permit_mynetworks,  
    reject_non_fqdn_sender,  
    reject_authenticated_sender_login_mismatch,  
    reject_unauthenticated_sender_login_mismatch,  
    reject_unknown_sender_domain,  
    permit_sasl_authenticated,  
    reject_sender_login_mismatch  
    permit

   

Вставленная строчка помечена жирным шрифтом.

Примечание: строчка “check_policy_service unix:/var/spool/postfix/postgrey/socket,” должна быть обязательно прописана после строчки параметра “reject_unauth_destination”, как на примере выше.

 

6. Установка 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.91/postfixadmin-2.91.tar.gz/download -O postfixadmin-2.91.tar.gz

# tar -xvzf postfixadmin-2.91.tar.gz

# mv postfixadmin-2.91/ postfixadmin

# cd postfixadmin

# chown -R apache.apache /var/www/html/postfixadmin/templates_c

# vi /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";  
$CONF['emailcheck_resolve_domain']='YES';
 

Ставим все службы в автозагрузку:

# systemctl enable dovecot.service

# systemctl enable postfix.service

# systemctl enable httpd.service

# systemctl enable postgrey.service

7. Настройка имени хоста

 

Открываем файл /etc/resolv.conf и приводим к виду:

 
search point.ru  
nameserver 10.22.32.51    //DNS провайдера
 

Впишем имя хоста в /etc/sysconfig/network

 
NETWORKING=yes  
NETWORKING_IPV6=no  
HOSTNAME=mail.point.ru
 

А также впишем имя хоста в /etc/hosts

 
217.15.188.50 mail.point.ru mail
 

Еще раз проверяем файл /etc/resolv.conf

 
search point.ru  
nameserver 10.22.32.51
   

Здесь IP адрес:

10.22.32.51 - провайдерский DNS сервер

Проверка работы DNS:

# nslookup mail.point.ru

# nslookup 217.15.188.50

# nslookup -type=MX point.ru

# hostname -f

 
mail.point.ru
 

# reboot


8. Настройка фаерволла

 

Смотрим активные зоны:

# firewall-cmd --get-active-zones

 
public   
interfaces: enp0s3 enp0s8
 

Здесь видим, что два наших интерфейса в зоне Public, где все запрещено кроме DHCP и SSH.

Адаптер enp0s8 - это внутренний адаптер, его добавим в зону Trust:

# firewall-cmd --permanent --zone=trusted --change-interface=enp0s8

Также добавим в зону Trust локальную сеть:

# firewall-cmd --permanent --zone=trusted --add-source=192.168.2.0/24

Открываем порты на внешнем интерфейсе:

# firewall-cmd --permanent --zone=public --add-service=smtp

# firewall-cmd --permanent --zone=public --add-service=http

# firewall-cmd --permanent --zone=public --add-port=110/tcp

# firewall-cmd --permanent --zone=public --add-port=143/tcp

Здесь я открыл основные порты 25, 80, 110 и 143.

Если вы настроили TLS/SSL доступ, потребуется открыть также порты 443, 578, 993 и 995.

# firewall-cmd --permanent --zone=public --add-service=https

# firewall-cmd --permanent --zone=public --add-service=imaps

# firewall-cmd --permanent --zone=public --add-service=pop3s

Внесенные настройки надо сохранить через команды

# firewall-cmd --reload

Проверка открытых сервисов:

# firewall-cmd --list-services

Проверяем наши открытые порты/настройки

# firewall-cmd --zone=public --list-ports

 
110/tcp 443/tcp 80/tcp 25/tcp 143/tcp
 

По умолчанию в зоне Public есть всего только два сервиса dhcp и ssh, так как это самые используемые службы. Это легко проверить введя команду:

# firewall-cmd --zone=public --list-all

 
public (default, active)  
  interfaces: enp0s3 enp0s8  
  sources:  
  services: dhcpv6-client ssh  
  ports: 110/tcp 443/tcp 80/tcp 25/tcp 143/tcp  
  masquerade: no  
  forward-ports:  
  icmp-blocks:  
  rich rules:
 

Здесь видно что есть службы dhcpv6-client и ssh

DHCP удаляется командой:

# firewall-cmd --permanent --remove-service=dhcpv6-client

9. Настройка PostfixAdmin

 

В браузере ввести адрес

 
http://217.15.188.50/postfixadmin/setup.php
 

или

 
http://mail.point.ru/postfixadmin/setup.php
 

В окошке "Change setup password" - забиваем свой пароль, записываем его на бумажку.
Во втором окошке появится длинная красная непонятная строчка (наш шифрованный пароль), копируем ее в буфер обмена.
Открываем файл:

 
/var/www/html/postfixadmin/config.inc.php
 

находим строчку:

 
$CONF['setup_password'] = 'changeme';
 

Меняем, вместо "changeme", вставляем шифрованный пароль который скопировали в буфер обмена. Вот что должно получится:

 
$CONF['setup_password'] = '6c5af4c72af213f0acac5f21d8f95ca1:e59172283d2bb72a5992af8ddc15332cde62f003';
 

Создаем учетную запись администратора, например "administrator@point.ru".

Нажимаем на кнопке "Add Admin", появится надпись:

 
Admin has been added!  
(administrator@point.ru)
 

или

 
Администратор был добавлен! (admin@point.ru)
 

Примечание: Если у вас не получается создать учетную запись администратора, вы на экране видите сообщение - "Некорректный адрес администратора!", то значить имеется проблема с DNS сервером. Для исправления ошибки понадобится настроить ответственные DNS сервера вашего домена у хостера или поднять свой DNS сервер.

Запоминаем адрес (логин) и пароль.
Заходим на страничку:

 
http://217.15.188.50/postfixadmin/
 

или

 
http://имя хоста mail.point.ru/postfixadmin/
 

Вводим адрес administrator@point.ru и пароль.
Добавляем домен point.ru :

Заходим в меню -> Domain List - > New Domain -> point.ru

 
Aliases - Ставим 0  
Mailboxes - Ставим 0  
Add default mail aliases - Галочка  
Нажимаем ОК.
 

Появится надпись:

 
Domain has been added!  
(point.ru)
 

Создадим первый почтовый ящик, я создал "linux@point.ru".

 
Меню Virtual List -> Add MailBox ->  
Username - linux  
Password - 123 (sample)
 

Пришло время тестировать наш почтовый сервер.

В локальной сети находим свободный компьютер, настраиваем сетевые настройки так чтобы этот ПК видел почтовый сервер.

Настраиваем почтовый клиент Outlook или другой, указываем

 
SMTP/POP3 server:                        point.ru  
Учетная запись (Account name):   linux@point.ru  
Пароль (password):                      123
 

Ставим галку - SMTP авторизация.

Отправляем себе письмо на linux@point.ru

10. Установка и настройка RoundCube Web Mail


На данном этапе у нас есть удобный веб интерфейс для администратора почтового сервера, но нет веб интерфейса для пользователей. Этот досадное недоразумение решается установкой RoundCube:

Настройка без необходимости запуска веб браузера

# yum install php php-xml php-mcrypt php-intl php-sqlite php-pgsql

# mysql -u root -p

 
mysql> CREATE DATABASE IF NOT EXISTS `roundcubemail`;
mysql> GRANT ALL PRIVILEGES ON `roundcubemail` . * TO 'roundcube'@'localhost' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
mysql> quit
 

# wget http://sourceforge.net/projects/roundcubemail/files/roundcubemail/1.0.3/roundcubemail-1.0.3.tar.gz/download  -O roundcubemail-1.0.3.tar.gz

# tar xvfz roundcubemail-1.0.3.tar.gz
# mv roundcubemail-1.0.3 roundcube
# chown apache:apache -R /var/www/html/roundcube/temp
# chown apache:apache -R /var/www/html/roundcube/logs
# cd /var/www/html/roundcube/SQL/
# mysql -u root -p roundcubemail < mysql.initial.sql
# cd /var/www/html/roundcube/config/
# cp config.inc.php.sample config.inc.php
# vi config.inc.php
 
$config['db_dsnw'] = 'mysql://roundcube:password@localhost/roundcubemail';  
$rcmail_config['default_host'] = 'localhost';  
$config['product_name'] = 'Roundcube Webmail';  
$config['plugins'] = array(  
    'archive',  
    'zipdownload',  
$config['skin'] = 'larry';
 

# vi /var/www/html/roundcube/config/defaults.inc.php

 
$rcmail_config['imap_auth_type'] = cram-md5;  
$rcmail_config['default_host'] = '127.0.0.1';  
$rcmail_config['login_autocomplete'] = 2;  
$config['htmleditor'] = 1;  
$rcmail_config['username_domain'] = 'point.ru';  
$rcmail_config['db_dsnw'] = 'mysql://roundcube:password@localhost/roundcubemail';
 

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>
 

# service httpd restart

 

Примечание: У веб интерфейса RoundCube есть репозиторий с большим выбором плагинов которые расширяют его возможности:> http://trac.roundcube.net/wiki/Plugin_Repository

Например, можно добавить возможность скачивания всех вложений письма единым архивом и т.д.


Настройка при помощи веб браузера

# yum install php php-xml php-mcrypt php-intl php-sqlite php-pgsql

# cd /var/www/html

# wget http://sourceforge.net/projects/roundcubemail/files/roundcubemail/1.0.3/roundcubemail-1.0.3.tar.gz/download  -O roundcubemail-1.0.3.tar.gz

# tar xvfz roundcubemail-1.0.3.tar.gz

# mv roundcubemail-1.0.3 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>
 

Далее создаем базу данных и пользователя:

# 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 = Europe/Moscow
 

Далее идем по адресу http://217.15.188.50/roundcube/installer/ и устанавливаем по умолчанию, не меняя никаких настроек, кроме двух полей, где нужно указать название базы данных и пароль. В нашем случае название базы будет "roundcubemail", а пароль указанный ранее 'password'. В процессе настройки надо обязательно согласится на создание схемы базы Roundcube (Create Database Scheme или Initialize Database). В противном случае будет ошибка, и вы не сможете войти на страничку RoundCube.

По окончании установки веб интерфейса, Вам будет предложено скачать и сохранить один конфигурационный файл:

  • config.inc.php

Этот файл требуется переместить в папку:

 
/var/www/html/roundcube/config/
 

Далее открываем файл /var/www/html/roundcube/config/defaults.inc.php и в нем меняем алгоритм по умолчанию на:

# vi /var/www/html/roundcube/config/defaults.inc.php

 

$rcmail_config['imap_auth_type'] = cram-md5;
 

А также ставим IP адрес своего почтового хоста чтобы каждый раз не вводить его, логично было бы указать адрес - 127.0.0.1:

 
$rcmail_config['default_host'] = '127.0.0.1';
 

В RoundCube нету автозаполнения полей логин и пароль, чтобы включить эту возможность отредактируйте строку:

 
$rcmail_config['login_autocomplete'] = 2;
 

Также следует включить опцию 'htmleditor' в 'always'.

 
$config['htmleditor'] = 0;
 

Если у вас всего один домен, и вы не хотите вводит доменную часть почтового адреса при входе в веб интерфейс, установите заранее свой домен здесь:

 
$rcmail_config['username_domain'] = 'point.ru';
 

Если пароль к базе Roundcube был введен с ошибкой, его можно сменить в файле

# vi /var/www/html/roundcube/config/db.inc.php

 
$rcmail_config['db_dsnw'] = 'mysql://roundcube:password@localhost/roundcubemail';
 

Здесь:

roundcube - имя пользователя базы roundcubemail
password - пароль доступа к базе
roundcubemail - сама база веб Интерфейса RoundCube

Если все прошло успешно, удаляем директорию установщика в целях безопасности.

 
# rm -R -f /var/www/html/roundcube/installer
 

Пытаемся зайти с Веб интерфейса, в браузере вводим адрес:

 
http://point.ru/webmail
 

или

 
http://point.ru/roundcube
 

Будет выведено окошко, где надо указать:

  • логин
  • пароль
  • сервер
    Вводим например:
  • логин: user@point.ru
  • пароль: 123456
  • сервер: point.ru или 217.15.188.50
 

11. Настройка своего DNS сервера

 

Свой DNS сервер нужен если у вас нет аналогичных от хостера/регистратора/провайдера или в компании где вы работаете по информационной политике запрещено использование сторонних служб DNS.
Этот пункт настройки в основном можно пропускать, так как редки случаи настройки своего DNS сервера. Исключением является - проверка работоспособности почтового сервера у себя в локальной сети или в виртуальной машине. Итак поехали настраивать свой небольшой сервер имен для гипотетического домена "point.ru".
Первым делом установим пакет Bind, именно он отвечает за функции DNS сервера:

# yum install bind -y

Открываем файл /etc/resolv.conf и приводим к виду:

 
search=point.ru  
nameserver 217.15.188.50
 

Здесь мы убрали адрес DNS сервера провайдера и поставили IP адрес нашего почтового сервера. Чтобы обращение по DNS запросам шли непосредственно к нашей DNS службе.

Открывает /etc/sysconfig/network вписываем в него имя хоста нашего почтового сервера:

 
NETWORKING=yes  
NETWORKING_IPV6=no  
HOSTNAME=mail.point.ru
 

А теперь самое главное, редактируем главный файл отвечающий за работу DNS сервера/службы - /etc/named.conf

Открываем его в текстовом редакторе:

# vi /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; };  
        listen-on-v6 port 53 { ::1; };  
        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     { localhost; };  

        /*  
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.  
         - If you are building a RECURSIVE (caching) DNS server, you need to enable  
           recursion.  
         - If your recursive DNS server has a public IP address, you MUST enable access  
           control to limit queries to your legitimate users. Failing to do so will  
           cause your server to become part of large scale DNS amplification  
           attacks. Implementing BCP38 within your network would greatly  
           reduce such attack surface  
        */  
        recursion yes;  

        dnssec-enable yes;  
        dnssec-validation yes;  
        dnssec-lookaside auto;  

        /* Path to ISC DLV key */  
        bindkeys-file "/etc/named.iscdlv.key";  

        managed-keys-directory "/var/named/dynamic";  

        pid-file "/run/named/named.pid";  
        session-keyfile "/run/named/session.key";  
};  

logging {  
        channel default_debug {  
                file "data/named.run";  
                severity dynamic;  
        };  
};  

zone "." IN {  
        type hint;  
        file "named.ca";  
};  

include "/etc/named.rfc1912.zones";  
include "/etc/named.root.key";
 

Мы его меняем к следующему ввиду:

 
//  
// 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; 217.15.188.50; }; # Наш внешний IP адрес почтового сервера  
#      listen-on-v6 port 53 { ::1; };                         # комментируем, нам пока IPv6 не нужен, хотя...  
        version "MS DNS server";                               # скрываем версию "named"  
        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; }; # меняем, даем обращаться всем к нашему DNS серверу  
        allow-query-cache { localhost; 10.0.0.0/24; }; # меняем, добавляем локальную сеть если она есть  
        allow-recursion { localhost; 10.0.0.0/24;}; # меняем, добавляем локальную сеть если она есть  
        forwarders { 10.22.32.51; 8.8.8.8; }; # добавляем IP адреса DNS серверов провайдера и публичный Google DNS  
        ## Наши настройки закончены ##  

        /*  
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.  
         - If you are building a RECURSIVE (caching) DNS server, you need to enable  
           recursion.  
         - If your recursive DNS server has a public IP address, you MUST enable access  
           control to limit queries to your legitimate users. Failing to do so will  
           cause your server to become part of large scale DNS amplification  
           attacks. Implementing BCP38 within your network would greatly  
           reduce such attack surface  
        */  
#      recursion yes; # комментируем  

        dnssec-enable yes;  
        dnssec-validation yes;  
        dnssec-lookaside auto;  

        /* Path to ISC DLV key */  
        bindkeys-file "/etc/named.iscdlv.key";  

        managed-keys-directory "/var/named/dynamic";  

        pid-file "/run/named/named.pid";  
        session-keyfile "/run/named/session.key";  
};  

logging {  
        channel default_debug {  
                file "data/named.run";  
                severity dynamic;  
        };  
};  

zone "." IN {  
        type hint;  
        file "named.ca";  
};  

### Rate Limit ###  
rate-limit {  
    responses-per-second 15;  
    window 5;  
};  
########Наша прямая зона##########  
# Зона прямого просмотра "point.ru"  
zone "point.ru" {  
     type master;  
     file "point.ru.fwd";  
     allow-update {none;};  
     allow-transfer {217.15.188.55; }; //вторичный DNS - желательно чтобы он был  
};  

##### Наша обратная зона просмотра "point.ru"######  
zone "188.15.217.in-addr.arpa" {  
     type master;  
     file "point.ru.rev";  
    allow-update {none;};  
    allow-transfer {217.15.188.55; }; //вторичный DNS - желательно чтобы он был  
};  

include "/etc/named.rfc1912.zones";  
include "/etc/named.root.key";
 

Теперь надо создать файлы прямой (forward) и обратной (reverse) зоны для домена "point.ru".

Создаем файл отвечающий за прямую зону /var/named/point.ru.fwd и вписываем:

# vi /var/named/point.ru.fwd

 
$ORIGIN point.ru.  

$TTL 3D  

@       SOA                     mail.point.ru.     root.point.ru. (12 4h 1h 1w 1h)  
@       IN      NS              mail.point.ru.  
@       IN      MX      10    mail.point.ru.  

mail.point.ru.         IN      A    217.15.188.50  
www                     IN      A    217.15.188.50  
mail                    IN      A    217.15.188.50
 

Создаем файл обратного просмотра зоны - point.ru (reverse zone)

# vi /var/named/point.ru.rev

Здесь за место 188.15.217 - надо указать свою под сеть в обратном порядке.

А также при добавлении PTR записи требуется ставить последнею цифру IP адреса,

у нас эта цифра 50, так как IP адрес почтового сервере оканчивается на 50 (217.15.188.50)

 
$ORIGIN 188.15.217.in-addr.arpa.  

$TTL 3D  
@    SOA         mail.point.ru.    root.point.ru. (12 4h 1h 1w 1h)  
@    IN          NS      mail.point.ru.  
50   IN          PTR     mail.point.ru.
 

Поставим службу named в автозагрузку и запустим ее:

# systemctl enable named.service

# systemctl start named.service

 
2
9863
5