Postfix Dovecot MySql: Difference between revisions
(Created page with "Обычно в примерах создания серверов описывается настройка одного общего сервера почты и серве...") |
No edit summary |
||
Line 16: | Line 16: | ||
$ vagrant up | $ vagrant up | ||
$ vagrant ssh</pre> | $ vagrant ssh</pre> | ||
После того, как гостевая система успешно загрузится и произойдёт удачное | После того, как гостевая система успешно загрузится и произойдёт удачное подключение по ssh-протоколу, из гостевой системы можно будет выйти и остановить её: | ||
<pre>$ vagrant halt</pre> | <pre>$ vagrant halt</pre> | ||
и в домашнем каталоге появится файл “Vagrantfile”. Кроме того, если запустить | и в домашнем каталоге появится файл “Vagrantfile”. Кроме того, если запустить “virtualbox”, то можно будет увидеть, что появилась новая гостевая система. Все настройки этой и других гостевых систем, созданных с помощью “vagrant”, осуществляются в файле “'''Vagrantfile'''”. | ||
У гостевого сервера всегда будет присутствовать один сетевой интерфейс с | У гостевого сервера всегда будет присутствовать один сетевой интерфейс с внутренним адресом сети “virtualbox”. В данном случае это будет один из адресов сети “10.0.2.0/24”. Кроме того, нам понадобится дополнительная внутренняя сеть для всех гостевых систем. | ||
Для удобства имя гостевой системы в “virtualbox” можно будет переименовать в | Для удобства имя гостевой системы в “virtualbox” можно будет переименовать в более адекватное. | ||
== DNS == | |||
Перейдём к созданию DNS-сервера на основе имеющегося образа. Для этого вместо “d | |||
efault”-настройки добавим в имеющийся “'''Vagrantfile'''” следующее: | |||
<pre>config.vm.define "dns" do |dns| | |||
dns.vm.box = "ol7" | |||
dns.vm.box_url = "https://yum.oracle.com/boxes/oraclelinux/ol75/ol75.box& | |||
quot; | |||
dns.vm.hostname = "ns.example.edu" | |||
dns.vm.network "private_network", ip: "192.168.33.12", | |||
:netmask => "255.255.255.0" | |||
dns.vm.provider "virtualbox" do |vb| | |||
vb.name = "dns" | |||
# vb.gui = true | |||
vb.memory = "512" | |||
vb.cpus = "1" | |||
vb.customize ["modifyvm", :id, "--vram", "10"] | |||
vb.customize ["modifyvm", :id, "--natdnshostresolver1", | |||
"on"] | |||
end | |||
end </pre> | |||
Инициализируем “dns”-сервер: | |||
<pre>$ vagrant init dns | |||
$ vagrant up dns | |||
$ vagrant ssh dns</pre> | |||
и попробуем к этому серверу подключиться через “ssh”-протокол. | |||
Из настроек видно, что “dns”-сервер будет иметь имя “ns.example.edu”, адрес этог | |||
о сервера будет “192.168.33.12” с маской “255.255.255.0”. Объём ОЗУ выбран 512 М | |||
Б, 1 процессор, 10 МБ видеопамяти. Также произведено переименование исходного им | |||
ени гостевой системы в “virtualbox” после инициализации в “dns”. | |||
Запуск сервера будет выглядить приблизительно следующим образом: | |||
<pre>$ vagrant up dns | |||
==> dns: Clearing any previously set forwarded ports... | |||
==> dns: Fixed port collision for 22 => 2222. Now on port 2200. | |||
==> dns: Clearing any previously set network interfaces... | |||
==> dns: Preparing network interfaces based on configuration... | |||
dns: Adapter 1: nat | |||
dns: Adapter 2: hostonly | |||
==> dns: Forwarding ports... | |||
dns: 22 (guest) => 2200 (host) (adapter 1) | |||
==> dns: Running 'pre-boot' VM customizations... | |||
==> dns: Booting VM... | |||
==> dns: Waiting for machine to boot. This may take a few minutes... | |||
dns: SSH address: 127.0.0.1:2200 | |||
dns: SSH username: vagrant | |||
dns: SSH auth method: private key | |||
dns: Warning: Connection reset. Retrying... | |||
dns: Warning: Remote connection disconnect. Retrying... | |||
==> dns: Machine booted and ready! | |||
==> dns: Checking for guest additions in VM... | |||
==> dns: Setting hostname... | |||
==> dns: Configuring and enabling network interfaces... | |||
==> dns: Mounting shared folders... | |||
dns: /vagrant => /home/eugene | |||
$</pre> | |||
=== Установка пакетов и настройка DNS-сервера === | |||
В качестве DNS-сервера используется BIND. Для этого устанавливаются пакеты “'''b | |||
ind, bind-utils'''”. | |||
После установки пакетов начнём настраивать “dns”-сервер. Для этого надо будет со | |||
здать прямую и реверсную зоны, а также информацию об этих зонах надо будет добав | |||
ить в файл настроек “'''/etc/named.conf'''”. Файлы зон размещаются в каталоге “' | |||
''/var/named/'''” с именами “'''example.edu'''” и “'''33.168.192.in-addr.arpa''' | |||
”. | |||
Файлы зон выглядят следующим образом: | |||
<pre>[root@ns named]# cat /var/named/example.edu | |||
$ORIGIN example.edu. | |||
$TTL 86400 ; 1 day | |||
@ IN SOA ns.example.edu. hostmaster.example.edu. ( | |||
2018092605 ; serial | |||
10800 ; refresh (3 hours) | |||
3600 ; retry (1 hour) | |||
1209600 ; expire (2 weeks #RFC1912) | |||
86400 ; minimum (1 day) | |||
) | |||
; DNS Servers | |||
IN NS ns.example.edu. | |||
; MX Records | |||
IN MX 10 mail.example.edu. | |||
$ORIGIN example.edu. | |||
www A 192.168.33.10 | |||
mysql A 192.168.33.11 | |||
ns A 192.168.33.12 | |||
mail A 192.168.33.13 </pre> | |||
и | |||
<pre>[root@ns named]# cat /var/named/33.168.192.in-addr.arpa | |||
$TTL 86400 ; 1 day | |||
@ IN SOA ns.example.edu. hostmaster.example.edu. ( | |||
7 ; serial | |||
28800 ; refresh (8 hours) | |||
14400 ; retry (4 hours) | |||
3600000 ; expire (5 weeks 6 days 16 hours) | |||
86400 ; minimum (1 day) | |||
) | |||
@ IN NS ns.example.edu. | |||
10 PTR www.example.edu. | |||
11 PTR mysql.example.edu. | |||
12 PTR ns.example.edu. | |||
13 PTR mail.example.edu. </pre> | |||
а в файл “'''/etc/named.conf'''” надо внести следующие обновления: | |||
<pre>options { | |||
listen-on port 53 { any; }; | |||
allow-query {any; }; | |||
... | |||
zone "example.edu" IN { | |||
type master; | |||
file "example.edu"; | |||
allow-update { none; }; | |||
allow-query { any; }; | |||
notify yes; | |||
}; | |||
zone "33.168.192.in-addr.arpa" IN { | |||
type master; | |||
file "33.168.192.in-addr.arpa"; | |||
allow-update { none; }; | |||
allow-query { any; }; | |||
notify yes; | |||
};</pre> | |||
В этом файле минимальные настройки, которые для нашего примера описывают только | |||
внутреннюю сеть “192.168.33.0/24”. | |||
В каталоге “'''/var/named/'''” права для вновь созданных файлов поменяем на “nam | |||
ed”: | |||
<pre># chown named:named /var/named/{example.edu,33.168.192.in-addr.arpa} | |||
# systemctl start named</pre> | |||
и проверим, что сервис запущен без ошибок: | |||
<pre># systemctl status named | |||
* named.service - Berkeley Internet Name Domain (DNS) | |||
Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor prese | |||
t: disabled) | |||
Active: <@\textcolor{red}{active (running)}@> since Wed 2018-11-28 12: | |||
55:23 EET; 52min ago | |||
Process: 1058 ExecStart=/usr/sbin/named -u named-c ${NAMEDCONF} $OPTIONS (co | |||
de=exited, status=0/SUCCESS) | |||
Process: 1051 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING& | |||
quot; == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF&q | |||
uot;; else echo "Checking of zone files is disabled"; fi (code=exited, | |||
status=0/SUCCESS) | |||
Main PID: 1060 (named) | |||
CGroup: /system.slice/named.service | |||
|__1060 /usr/sbin/named -u named -c /etc/named.conf | |||
Nov 28 12:55:23 ns.example.edu named[1060]: zone 1.0.0.127.in-addr.arpa/IN: ...0 | |||
Nov 28 12:55:23 ns.example.edu named[1060]: zone 33.168.192.in-addr.arpa/IN:...7 | |||
Nov 28 12:55:23 ns.example.edu named[1060]: zone localhost.localdomain/IN: l...0 | |||
Nov 28 12:55:23 ns.example.edu named[1060]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0...0 | |||
Nov 28 12:55:23 ns.example.edu named[1060]: zone localhost/IN: loaded serial 0 | |||
Nov 28 12:55:23 ns.example.edu named[1060]: all zones loaded | |||
Nov 28 12:55:23 ns.example.edu systemd[1]: Started Berkeley Internet Name Do.... | |||
Nov 28 12:55:23 ns.example.edu named[1060]: running | |||
Nov 28 12:55:28 ns.example.edu named[1060]: no longer listening on 192.168.3...3 | |||
Nov 28 12:55:32 ns.example.edu named[1060]: listening on IPv4 interface eth1...3 | |||
Hint: Some lines were ellipsized, use -l to show in full. </pre> | |||
Теперь можно проверить, что сервер отвечает правильно на запросы: | |||
<pre>[root@ns named]# nslookup - 127.0.0.1 | |||
> ns.example.edu | |||
Server: 127.0.0.1 | |||
Address: 127.0.0.1#53 | |||
Name: ns.example.edu | |||
Address: 192.168.33.12 | |||
> 192.168.33.12 | |||
Server: 127.0.0.1 | |||
Address: 127.0.0.1#53 | |||
12.33.168.192.in-addr.arpa name = ns.example.edu. | |||
> | |||
^D</pre> | |||
После того, когда убедились, что сервер правильно отвечает на запросы, надо “''' | |||
named.service'''” добавить в автоматическую загрузку при старте гостевого узла: | |||
<pre># systemctl enable named</pre> | |||
Для нормального ответа на все сетевые запросы необходимо, чтобы в файле “'''/etc | |||
/resolv.conf'''” была ссылка на локальный “dns”-сервер, а так как первый интерфе | |||
йс всегда “nat”, получаемый параметры через “dhcp”, то в этом файле исходно запи | |||
сь “nameserver” указывает на основной сервер с “virtualbox”. Поэтому необходимо | |||
после запуска гостевой системы содержимое файла “'''/etc/resolv.conf'''” изменит | |||
ь. Это делается изменением в файле “Vagrantfile”: | |||
<pre> config.vm.provision :shell do |shell| | |||
shell.path = "bin/fix_vagrant_resolv.conf.sh" | |||
end </pre> | |||
В домашнем каталоге хостового узла в директории “'''$HOME/bin'''” надо создать ф | |||
айл “'''fix_vagrant_resolv.conf.sh'''” с содержимым: | |||
<pre>$ cat ~/bin/fix_vagrant_resolv.conf.sh | |||
cat > /etc/resolv.conf <<EOF | |||
# | |||
# managed by vagrant | |||
# | |||
domain example.edu | |||
search example.edu | |||
nameserver 192.168.33.12 | |||
EOF </pre> |
Revision as of 22:50, 5 December 2018
Обычно в примерах создания серверов описывается настройка одного общего сервера почты и сервера базы данных. В данной книге будет рассмотрен пример создания независимых серверов со взаимодействием между собой.
Для этого в качестве основы создания серверов будет использоваться “vagrant” и “virtualbox”. Пакеты “vagrant” и “virtualbox” можно взять непосредственно с сайтов.
Создание гостевых узлов
В качестве сервера виртуальных машин был выбран “Oracle Linux 7”. Для этого с сайта “Oracle” был взят готовый образ для “vagrant”.
Vagrant
Установку “virtualbox” по всей видимости можно здесь не рассматривать, так как это на мой взгляд не представляет никаких проблем. Остановимся на установке гостевых систем с помощью “vagrant”. После инсталляции пакета “vagrant” и заранее установленного пакета “virtualbox” от имени не root-пользователя производится добавление гостевого исходного образа (box) и его инициализация:
$ vagrant box add --name ol7 https://yum.oracle.com/boxes/oraclelinux/ol75/ ol75.box $ vagrant init ol7 $ vagrant up $ vagrant ssh
После того, как гостевая система успешно загрузится и произойдёт удачное подключение по ssh-протоколу, из гостевой системы можно будет выйти и остановить её:
$ vagrant halt
и в домашнем каталоге появится файл “Vagrantfile”. Кроме того, если запустить “virtualbox”, то можно будет увидеть, что появилась новая гостевая система. Все настройки этой и других гостевых систем, созданных с помощью “vagrant”, осуществляются в файле “Vagrantfile”.
У гостевого сервера всегда будет присутствовать один сетевой интерфейс с внутренним адресом сети “virtualbox”. В данном случае это будет один из адресов сети “10.0.2.0/24”. Кроме того, нам понадобится дополнительная внутренняя сеть для всех гостевых систем.
Для удобства имя гостевой системы в “virtualbox” можно будет переименовать в более адекватное.
DNS
Перейдём к созданию DNS-сервера на основе имеющегося образа. Для этого вместо “d efault”-настройки добавим в имеющийся “Vagrantfile” следующее:
config.vm.define "dns" do |dns| dns.vm.box = "ol7" dns.vm.box_url = "https://yum.oracle.com/boxes/oraclelinux/ol75/ol75.box& quot; dns.vm.hostname = "ns.example.edu" dns.vm.network "private_network", ip: "192.168.33.12", :netmask => "255.255.255.0" dns.vm.provider "virtualbox" do |vb| vb.name = "dns" # vb.gui = true vb.memory = "512" vb.cpus = "1" vb.customize ["modifyvm", :id, "--vram", "10"] vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] end end
Инициализируем “dns”-сервер:
$ vagrant init dns $ vagrant up dns $ vagrant ssh dns
и попробуем к этому серверу подключиться через “ssh”-протокол.
Из настроек видно, что “dns”-сервер будет иметь имя “ns.example.edu”, адрес этог о сервера будет “192.168.33.12” с маской “255.255.255.0”. Объём ОЗУ выбран 512 М Б, 1 процессор, 10 МБ видеопамяти. Также произведено переименование исходного им ени гостевой системы в “virtualbox” после инициализации в “dns”.
Запуск сервера будет выглядить приблизительно следующим образом:
$ vagrant up dns ==> dns: Clearing any previously set forwarded ports... ==> dns: Fixed port collision for 22 => 2222. Now on port 2200. ==> dns: Clearing any previously set network interfaces... ==> dns: Preparing network interfaces based on configuration... dns: Adapter 1: nat dns: Adapter 2: hostonly ==> dns: Forwarding ports... dns: 22 (guest) => 2200 (host) (adapter 1) ==> dns: Running 'pre-boot' VM customizations... ==> dns: Booting VM... ==> dns: Waiting for machine to boot. This may take a few minutes... dns: SSH address: 127.0.0.1:2200 dns: SSH username: vagrant dns: SSH auth method: private key dns: Warning: Connection reset. Retrying... dns: Warning: Remote connection disconnect. Retrying... ==> dns: Machine booted and ready! ==> dns: Checking for guest additions in VM... ==> dns: Setting hostname... ==> dns: Configuring and enabling network interfaces... ==> dns: Mounting shared folders... dns: /vagrant => /home/eugene $
Установка пакетов и настройка DNS-сервера
В качестве DNS-сервера используется BIND. Для этого устанавливаются пакеты “b ind, bind-utils”.
После установки пакетов начнём настраивать “dns”-сервер. Для этого надо будет со здать прямую и реверсную зоны, а также информацию об этих зонах надо будет добав ить в файл настроек “/etc/named.conf”. Файлы зон размещаются в каталоге “' /var/named/'” с именами “example.edu” и “33.168.192.in-addr.arpa ”.
Файлы зон выглядят следующим образом:
[root@ns named]# cat /var/named/example.edu $ORIGIN example.edu. $TTL 86400 ; 1 day @ IN SOA ns.example.edu. hostmaster.example.edu. ( 2018092605 ; serial 10800 ; refresh (3 hours) 3600 ; retry (1 hour) 1209600 ; expire (2 weeks #RFC1912) 86400 ; minimum (1 day) ) ; DNS Servers IN NS ns.example.edu. ; MX Records IN MX 10 mail.example.edu. $ORIGIN example.edu. www A 192.168.33.10 mysql A 192.168.33.11 ns A 192.168.33.12 mail A 192.168.33.13
и
[root@ns named]# cat /var/named/33.168.192.in-addr.arpa $TTL 86400 ; 1 day @ IN SOA ns.example.edu. hostmaster.example.edu. ( 7 ; serial 28800 ; refresh (8 hours) 14400 ; retry (4 hours) 3600000 ; expire (5 weeks 6 days 16 hours) 86400 ; minimum (1 day) ) @ IN NS ns.example.edu. 10 PTR www.example.edu. 11 PTR mysql.example.edu. 12 PTR ns.example.edu. 13 PTR mail.example.edu.
а в файл “/etc/named.conf” надо внести следующие обновления:
options { listen-on port 53 { any; }; allow-query {any; }; ... zone "example.edu" IN { type master; file "example.edu"; allow-update { none; }; allow-query { any; }; notify yes; }; zone "33.168.192.in-addr.arpa" IN { type master; file "33.168.192.in-addr.arpa"; allow-update { none; }; allow-query { any; }; notify yes; };
В этом файле минимальные настройки, которые для нашего примера описывают только внутреннюю сеть “192.168.33.0/24”.
В каталоге “/var/named/” права для вновь созданных файлов поменяем на “nam ed”:
# chown named:named /var/named/{example.edu,33.168.192.in-addr.arpa} # systemctl start named
и проверим, что сервис запущен без ошибок:
# systemctl status named * named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor prese t: disabled) Active: <@\textcolor{red}{active (running)}@> since Wed 2018-11-28 12: 55:23 EET; 52min ago Process: 1058 ExecStart=/usr/sbin/named -u named-c ${NAMEDCONF} $OPTIONS (co de=exited, status=0/SUCCESS) Process: 1051 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING& quot; == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF&q uot;; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS) Main PID: 1060 (named) CGroup: /system.slice/named.service |__1060 /usr/sbin/named -u named -c /etc/named.conf Nov 28 12:55:23 ns.example.edu named[1060]: zone 1.0.0.127.in-addr.arpa/IN: ...0 Nov 28 12:55:23 ns.example.edu named[1060]: zone 33.168.192.in-addr.arpa/IN:...7 Nov 28 12:55:23 ns.example.edu named[1060]: zone localhost.localdomain/IN: l...0 Nov 28 12:55:23 ns.example.edu named[1060]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0...0 Nov 28 12:55:23 ns.example.edu named[1060]: zone localhost/IN: loaded serial 0 Nov 28 12:55:23 ns.example.edu named[1060]: all zones loaded Nov 28 12:55:23 ns.example.edu systemd[1]: Started Berkeley Internet Name Do.... Nov 28 12:55:23 ns.example.edu named[1060]: running Nov 28 12:55:28 ns.example.edu named[1060]: no longer listening on 192.168.3...3 Nov 28 12:55:32 ns.example.edu named[1060]: listening on IPv4 interface eth1...3 Hint: Some lines were ellipsized, use -l to show in full.
Теперь можно проверить, что сервер отвечает правильно на запросы:
[root@ns named]# nslookup - 127.0.0.1 > ns.example.edu Server: 127.0.0.1 Address: 127.0.0.1#53 Name: ns.example.edu Address: 192.168.33.12 > 192.168.33.12 Server: 127.0.0.1 Address: 127.0.0.1#53 12.33.168.192.in-addr.arpa name = ns.example.edu. > ^D
После того, когда убедились, что сервер правильно отвечает на запросы, надо “ named.service” добавить в автоматическую загрузку при старте гостевого узла:
# systemctl enable named
Для нормального ответа на все сетевые запросы необходимо, чтобы в файле “/etc /resolv.conf” была ссылка на локальный “dns”-сервер, а так как первый интерфе йс всегда “nat”, получаемый параметры через “dhcp”, то в этом файле исходно запи сь “nameserver” указывает на основной сервер с “virtualbox”. Поэтому необходимо после запуска гостевой системы содержимое файла “/etc/resolv.conf” изменит ь. Это делается изменением в файле “Vagrantfile”:
config.vm.provision :shell do |shell| shell.path = "bin/fix_vagrant_resolv.conf.sh" end
В домашнем каталоге хостового узла в директории “$HOME/bin” надо создать ф айл “fix_vagrant_resolv.conf.sh” с содержимым:
$ cat ~/bin/fix_vagrant_resolv.conf.sh cat > /etc/resolv.conf <<EOF # # managed by vagrant # domain example.edu search example.edu nameserver 192.168.33.12 EOF