Установка почтового сервера на CentOS 7
В этом посте написано о том, как установить почтовый сервер на CentOS 7. В новой версии операционной системы произошли некоторые изменения, поэтому старая инструкция по установке Postfix требовала корректировки, которые отражены в этом посте.
Основная часть настроек по настройке Postfix не изменилась, но изменились настройки касающиеся самой операционной системы. Были упразднены старые пакеты по работе с брандмауэром, появился "systemd".
На мой взгляд произошли следующие изменения:
- Появился systemd - демон инициализации других демонов в Linux, пришедший на замену используемого ранее скрипта инициализации /sbin/init. Вследствие чего, за место привычного iptables имеем firewalld. Который настраивается по другому. А также управление демонами стало делаться через команду "systemctl" за место "service" и "chkconfig".
- Так как СУБД MySQL приобрела корпорация Oracle, сообщество решило использовать в своих дистрибутивах форк по имени MariaDB. Практически все что когда-то делалось в MySQL работает и в MariaDB. Изменилась только установка, теперь она выглядит так: yum install mariadb mariadb-server
- Версия Dovecot подскочила с 2.0.9 до 2.2, что повлияло на конфигурирование некоторых настроек.
- В остальном все осталось по старому, хотя кто имеет кучу скриптов старой системы инициализации, им видимо придется переписывать наработанное все свое добро на новый лад.
Если вы начинающий, лучше не возитесь с ручной установкой почтового сервера. Советую присмотреться к проверенным готовым решениям, например 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
КРАТКОЕ СОДЕРЖАНИЕ
- Настройка сетевого адаптера
- Установка MySQL и создание базы "mail"
- Установка и настройка Postfix
- Установка и настройка Dovecot
- Установка Postgrey
- Установка PostfixAdmin и Apache
- Настройка имени хоста
- Настройка фаервола firewalld
- Настройка PostfixAdmin
- Установка и настройка RoundCube Web Mail
- Настройка своего DNS сервера
1. Настройка сетевого адаптера
Проверяем какие есть у нас сетевые адаптеры в системе, вводим в консоли:
# ip a
Здесь видно, что на компьютере три адаптера:
- lo (loopback)
- enp0s3
- 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
Обычно файлы настроек сетевых адаптеров имеют имена:
- ifcfg-enp0s3, ifcfg-enp0s8 ...
- ifcfg-p2p1, ifcfg-p7p1 ...
- 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 = mysqlconnect = host=localhost dbname=mail user=postfix password=passworddefault_pass_scheme = CRAM-MD5user_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
$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