Создание тестовой сетевой инфраструктуры предприятия

Разворачивание тестовой сетевой инфраструктуры предприятия.


stand2

Тестовый стенд локальной сети и входящих в неё хостов.

Тестовая сеть состоит из компьютера на которой установлен гипервизор VirtualBox, виртуальных машин "gate", "server", "client1" на основе операционной системы Debian и виртуальной машины client2 на основе операционной системы Microsoft Windows 10.

Как показала практика для моделирования этого стенда хватает процессора на 4 ядра и оперативной памяти от 6 гигабайт если исключить из него машину на windows 10, машинам "gate" и "server" можно выделить по одному ядру и по 1024 гб оперативной памяти, виртуальной машине "client1" два ядра и 2048 гб оперативной памяти.

Для моделирования сети понадобится установленная ос debian на виртуальную машину(пример установки здесь).

Внутренняя виртуальная сеть имеет доступ в глобальную сеть через виртуальную машину "gate", которая выполняет роль маршрутизатора. Домашняя локальная сеть 192.168.1.0 будет считаться внешней сетью для машин "gate", "server", "client1", "client2".

Router — домашний маршрутизатор-router предоставляющий доступ в глобальную сеть, с локальной сетью 192.168.1.0/24 и ip адресом шлюза LAN 192.168.1.1/24.
 
HostSystemVirtualBox  — компьютер на который установлен гипервизор VirtualBox, у меня с статическим ip 192.168.1.3 который можно не настраивать, а оставить ip динамическим (Пример установки VirtualBox на компьютер).

gate  — виртуальная машина выполняющая роли шлюза, с технологией NAT, между внутренней сетью 172.16.1.0/24 и внешними сетями, dns сервера, dhcp сервера.

server  — виртуальная машина выполняющая роль сервера предприятия с статичным ip адресом 172.16.1.2/24, предназначается для установки и настройки сервисов, таких как файловый сервер, почтовый сервер, веб сервер и так далее.

client1  — виртуальная машина выполняющая роль компьютера "для сотрудников" с установленным графическим окружением и динамическим ip адресом.

client2  — виртуальная машина выполняющая роль компьютера "для сотрудников" с установленной операционной системой windows 10 и динамическим ip адресом.

Настройка виртуальной машины "gate":

Устанавливаем и настраиваем гипервизор Virtualbox, устанавливаем linux debian с минимальными ресурсами, без графического окружения(галку на какое либо графическое окружение при установке debian не ставим) и с установленным сервером ssh как в примере здесь.

Кому лень, или нет времени, настраивать виртуальную машину вручную, здесь скрипт по автоматическому конфигурированию виртуальной машины "gate".

gate_install

Создание и настройка виртуальной машины "gate".

gate_install

Выделяем выключенную виртуальную машину левой кнопкой мыши, далее кликаем правой кнопкой мыши по выделенной машине и в появившемся меню выбираем пункт "клонировать..."
В появившемся окошке прописываем:
Имя: gate_corp1 (Можно прописать любое, это имя относится  только к визуальному отображению виртуальной машины в списке virtualbox).
Путь: можно оставить по умолчанию или перенести в отдельную папку или жёсткий диск.
Политика MAC-адреса: выбираем пункт "Сгенерировать новые MAC-адреса всех сетевых адаптеров", тем самым мы сгенерируем MAC адреса на всех сетевых адаптерах и исключим возможность ошибок сети. Нажимаем кнопку "Далее".

gate_install

Следующим шагом выбираем тип клонирования, тут стоит так как нас устраивает, поэтому просто жмём кнопку "Готово".

gate_install

Запускается процесс клонирования виртуальной машины, остаётся дождаться его завершения.

gate_install

После завершения клонирования, виртуальная машина с именем gate_corp1 должна появиться в списке виртуальных машин VirtualBox.

gate_install

Выбираем нашу машину из списка левой кнопкой мыши и нажимаем кнопку "Настроить".

gate_install

В открывшейся вкладке выбираем пункт меню "Сеть" ==> "Адаптер 1". По умолчанию он может быть включен, проверяем галку в пункте "Включить сетевой адаптер", она должна стоять.
По умолчанию имя этого сетевого адаптера в debian будет enp0s3, что соответствует на схеме внутренней сети.
Поэтому далее в пункте "Тип подключения" выбираем "Внутренняя сеть".
Имя: можно придумать любое, это виртуальная сеть куда будут подключаться остальные хосты из этой сети, я назвал corp1.
Далее проверить наличие галки в пункте "Подключить Кабель".

gate_install

Так как это пограничное устройство между сетями, необходимо включить второй сетевой адаптер.
Переходим во вкладку "Адаптер 2", ставим галку в пункте "Включить сетевой адаптер", по умолчанию в virtualbox адаптер 2 именуется как enp0s8, по схеме он "смотрит" во внешнюю сеть, поэтому в типе подключения ставим "Сетевой мост", внизу проверяем наличие галки в пункте "Подключить кабель" и нажимаем кнопку "ОК".
"Адаптеры 3 и 4" отключены.

gate_install

Предварительные настройки завершены, нажимаем кнопку "Запустить".

gate_install

После загрузки операционной системы вводим логин и пароль пользователя указанного при установке о.с. У меня это:
log: ivan
pass: linux
Если левой кнопкой мыши нажать внутрь окна, то может захватиться курсор авто-захватом виртуальной машины, выйти от туда как правило правый Ctrl.

gate_install

Посмотрим присутствие сетевых интерфейсов командой ip a .
Сетевые интерфейсы enp0s3 и enp0s8 присутствуют.
В данном cлучае внешний сетевой интерфейс( enp0s8 )по каким-то причинам не получил динамический ip от роутера по протоколу dhcp.Если остро необходимо получить ip в данный момент, то можно попытаться сделать это вручную командой dhclient -v enp0s8 или просто dhclient -v, чтобы отказаться от назначенного ip адреса dhclient -r, так как подключение в данный момент не особо и нужно идём дальше.  

gate_install

Далее открываем файл конфигурации сети редактором текста, я буду использовать vim.tiny в последствии просто vim, так-же можно использовать nano, так как vim.tiny и nano установлены уже из коробки.
vim.tiny /etc/network/interfaces

нажимаем "i" и прописываем новые настройки сетевых интерфейсов:

auto enp0s8
iface enp0s8 inet static
           address 192.168.1.31/24
           gateway 192.168.1.1

auto enp0s3
iface enp0s3 inet static
           address 172.16.1.1/24

Если вы в vim.tiny нажимаем Esc потом : wq и Enter.

gate_install

При этом надо закоментировать прежние настройки сетевых интерфейсов, если они есть, поставив перед каждой строкой # .
Не трогая loopback интерфейс.

gate_install

Перезапускаем сетевой сервис.

sudo systemctl restart networking.service

gate_install

Проверяем сетевые настройки командой ip a.
Надо сказать что ip адреса для виртуальных тестовых машин можно выбирать из вашей сети какие нравятся, я выбрал этот ip 192.16.1.31, так как у меня домашний роутер раздаёт динамические ip начиная с адреса 192.168.1.100
Так-же можно взять любой не занятый ip из диапазона для данной подсети 192.168.1.2 — 192.168.1.254 (192.168.1.1 у меня занят роутером).

gate_install

Далее проверим статус сервиса ssh, он должен быть установлен и работать.

systemctl status ssh

gate_install

Теперь переходим к подключению по ssh через putty(установка putty).
В настройках подключения вводим ip адрес внешнего адаптера виртуальной машины gate: 192.168.1.31
Далее можно сохранить настройки подключения и открываем сессию нажав на кнопку "Open".
Как настроить палитру в putty.

gate_install

Вводим логин и пароль и нажимаем Enter.

gate_install

Станем супер пользователем root на продолжительное время (на рабочих серверах лучше так не делать).Вводим команду:

sudo -i

Настройка сервисов виртуальной машины "gate":

Обновляем систему командой

root@debian12:~# apt update && apt upgrade

gate_install

Для своего удобства я установлю текстовый редактор vim и буду работать в нём.
Что-бы скопировать текст и вставить в vim-e(Ctrl+c Ctrl+v не работает в виме) копируете текст привычным образом, или Ctrl+Insert, в vim-e вставляем Shift+Insert.

root@debian12:~# apt install vim -y

gate_install

Теперь поменяем имя хоста, открываем файл настройки на редактирование, стираем всё что там есть и прописываем туда полное доменное имя gate.corp1.un 

где:

gate  — имя хоста

corp1  — вымышленное имя домена второго уровня в который входит хост "gate"(можно придумать какое вам нравиться, для тестов я придумал corp1, что значит корпорация1, если мне понадобится повторить инфраструктуру тестового стенда и чтобы стенды между собой взаимодействовали, для простоты, следующий стенд будет называться corp2 и т.д. , это необходимо для корректной работы локальных dns серверов).

un  — вымышленное имя домена первого уровня(так-же можно придумать названия своего домена, здесь домен un, что значит unix).

root@debian12:~# vim /etc/hostname

И прописываем туда полное доменное имя хоста, для этого в vim нажать i.

gate.corp1.un

gate_install

Записываем файл и выходим из редактора, для этого в vim нажимаем Esc :wq и Enter.

Далее редактируем файл hosts, когда-то этот файл использовался для сопоставления имён хостов к ip адресам(предтеча dns).

root@debian12:~# vim /etc/hosts

Приводим его к такому виду:

gate_install

Далее прописываем ip адрес dns сервера в файле конфигурации resolv.conf. На данный момент настрою resolv на dns сервер провайдера, это ip моего роутера, так-же можно использовать ns сервера от google, это 8.8.8.8 или 8.8.4.4 и т.д. В последствии у нас будет собственный локальный dns сервер и мы переключим resolv на себя. Открываем файл на редактирование и приводим его к ниже следующему состоянию.

root@debian12:~# vim /etc/resolv.conf

search corp1.un
nameserver 192.168.1.1

gate_install

Перезагружаем систему командой reboot или init 6.

После повторного подключения видим, что имя хоста поменялось на нужное.

gate_install

Установка и настройка dns view сервера на виртуальной машине "gate":

Обновляем систему и устанавливаем dns сервер bind9

root@gate:~# apt update

root@gate:~# apt install bind9 -y

Открываем на редактирование конфигурационный файл named.conf.options и прописываем туда следующие настройки:

root@gate:~# vim /etc/bind/named.conf.options

// Раскомментировать блок forwarders и прописать туда имя dns сервера провайдера(у меня прописан ip адрес шлюза, домашний роутер), либо 8.8.8.8 
         forwarders {
            192.168.1.1;
         };

//Вписать строку, тем самым включив рекурсию из данных сетей, по умолчанию рекурсия включена только из внутренней //сети 172.16.1.0/24 и localhost
        allow-recursion { 192.168.1/24; 172.16.1/24; 127/8; };

//Отключить проверку валидности dns серверов, поменяв опцию с yes на no
        dnssec-validation no;

//Отключить resolv ipv6 поменяв опцию any на :: (два двоеточия, что означает ноль)
        listen-on-v6 { ::; };

gate_install

Следующим шагом создаём файл зоны для внутренней сети. То есть нам надо сделать так что-бы на запросы из внутренней и внешней сети наш сервер отвечал по разному, например на запрос о адресе www.corp1.un для хоста client1 он выдавал адрес 172.16.1.2, а на точно такой-же запрос из внешней сети, ответ должен быть 192.168.1.31, (свой внешний ip), потому как о адресе 172.16.1.2 "ничего не знают" во внешней сети и связаться с веб сервером не смогут.

Создаем новый файл с именем corp1.un и записываем туда строки настроек, этот файл зоны для внутренних запросов.

root@gate:~# vim /etc/bind/corp1.un

$TTL 3h
@ IN SOA ns admin 2024012801 1d 12h 1w 3h
      NS ns
      A 172.16.1.2
      MX 9 mx

ns         IN   A 172.16.1.1
gate      IN   A 172.16.1.1
server   IN   A 172.16.1.2
mx        IN   A 172.16.1.2
www     IN   A 172.16.1.2

gate_install

Разберёмся в внесённых записях dns зоны.

$TTL 3h   сколько данный сервер рекомендует хранить полученные от него ответы другим серверам и клиентам, измеряется в часах

@ IN SOA ns admin 2024012801 1d 12h 1w 3h 
         @  – знак в начале записи означает, что далее к остальным записям нужно подставлять имя файла зоны, а как мы помним имя файла у нас corp1.un
         IN  – означает что эта запись из пространства INTERNET (на заре dns думали, что будет много сетевых технологий и им возможно понадобятся отдельные пространства имён, поэтому заранее разделили записи на разные пространства имён).
         SOA  – данная запись отвечает на запрос о домене и технической информации которая прописана справа
         ns  –  сервер отвечающей за домен
         admin  – ответственный(владелец) данного сервера
         2024012801  – серийный номер изменения записей в файле зоны, важен для slave dns серверов, так-как подчинённые dns сервера сверяют серийные номера  перед скачиванием файла зоны и если они совпадают, то файл зоны не скачивается и соответственно получается рассинхронизация записей зоны, у нас вторичного сервера не будет поэтому это не так важно, но вне зависимости от этого хорошим тоном прописывать серийный номер таким порядком:  2024 – год изменения; 01 – месяц изменения; 28 – число дня изменения; 01 – порядковый номер изменения в этот день, хотя вместо такой длинной записи можно поставить цифру 1 и потом увеличивать её по мере изменения в файле зоны.
         1d 12h 1w 3h  – далее идёт техническая информация для подчинённых серверов где: 1d – c какой переодичностью slave сервер будет обращаться к master за обновлением(один раз в сутки), 12h – если мастер не доступен, то slave попытается связаться с master через 12 часов, 1w – если мастер не будет доступен,то через сколько удалить информацию о зоне из кэша(одна неделя), 3h – время жизни негативного ответа(три часа).
          NS ns  – эта запись отвечает какой сервер обслуживает данную зону домена
          A 172.16.1.2  – запись сопоставления имени corp1.un и ip адреса, если одно имя сопоставляется с несколькими ip то и записей должно быть несколько, так как у нас нет каких либо других серверов пропишем сюда ip адрес нашего сервера.
          MX 9 mx  – MX означает что эта запись для почтового сервера, 9 означает приоритет, если серверов несколько(но если даже сервер один, приоритет всё равно надо прописывать, любой начиная с 1), mx имя хоста почтового сервера.  
          ns        IN A 172.16.1.1   – запись сопоставления имени и ip адреса dns сервера
          gate     IN A 172.16.1.1   – запись сопоставления ip адреса хоста с именем gate
          server  IN A 172.16.1.2  – запись сопоставления ip адреса хоста с именем server
          mx       IN A 172.16.1.2   – запись сопоставления ip адреса хоста с именем mx, заготовка для почтового сервера(хоста с таким именем и не будет, но все почтовые запросы пойдут на хост с именем server, где будет установлен почтовый сервер)
          www   IN A 172.16.1.2  – запись сопоставления ip адреса хоста с именем www, так-же заготовка как и в строке выше, для веб сервера.

Сохраняем файл и выходим из редактора.


Теперь необходимо создать файл зоны для внешних запросов(которые будут прилетать из сети 192.168.1.0/24).
Для этого создаём ещё один новый файл с названием corp1.un.out и делаем туда похожие записи:

root@gate:~# vim /etc/bind/corp1.un.out

$TTL 3h
@ IN SOA ns admin 2024012801 1d 12h 1w 3h
          NS ns
          A 192.168.1.31
          MX 9 mx

ns            IN A 192.168.1.31
mx        IN A 192.168.1.31

www           CNAME ns

gate_install

Принцип записей остался прежний, что и в ранее созданном файле,  поменялись только ip адреса зоны, тут мы прописали внешний ip адрес шлюза и на все запросы "gate" будет выдавать свой-же внешний ip(чуть позже мы пробросим порты на хосты внутренней сети и "gate" уже будет "понимать" какой порт на какой хост маршрутизировать.
Появилась только одна запись сделанная по новому www CNAME ns  она указывает, что хост www это тот-же хост что и ns, а ns имеет адрес 192.168.1.31, это ещё один вариант записей, через канонические имена и псевдонимы(aliases).

Сохраняем файл и выходим из редактора.

Далее в настройках dns сервера подключаем файл зоны , созданный для внутренней сети:

root@gate:~# vim /etc/bind/named.conf.local

zone "corp1.un" {
            type master;
            file "/etc/bind/corp1.un";
};

gate_install

zone "corp1.un"  – с фигурными скобками, говорит о том, что это блок с настройками зоны и именем corp1.un.
            type master;  – эта настройка говорит о том, что этот сервер является первичным(основным).
            file "/etc/bind/corp1.un";  – тут прописан полный путь к файлу и название файла с зоной.


Идём далее и "разграничиваем"  сети на внешние и внутренние и тут-же подключаем файл зоны созданный для внешних сетей.
Открываем на редактирование файл named.conf и приводим его в такой вид:

root@gate:~# vim /etc/bind/named.conf

include "/etc/bind/named.conf.options";

view "inside" {
           match-clients {
           172.16.1/24;
           127/8;
         };
          include "/etc/bind/named.conf.local";
          include "/etc/bind/named.conf.default-zones";
};

view "outside" {
           zone "corp1.un" {
           type master;
           file "/etc/bind/corp1.un.out";
          };
};

gate_install

Разберёмся в сделанных настройках.

include "/etc/bind/named.conf.options";  – подключение файла настроек к серверу, он подключен по умолчанию, его не трогаем.
view "inside"  с фигурными скобками – означает что это блок настроек с именем inside.
           match-clients    с фигурными скобками – внутри них перечисляем сети относящиеся к внутренним сетям.
           172.16.1/24;   – все адреса начиная с 172.16.1.
           127/8;  – все сети с адресом начинающимся с 127(localhost).
После закрывающей фигурной скобки с точкой запятой идут подключение дефолтных файлов настроек(а как мы помним в файле named.conf.local подключен файл нашей зоны для внутренних сетей corp1.un.
          include "/etc/bind/named.conf.local";
          include "/etc/bind/named.conf.default-zones";

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


Теперь надо, чтобы сервер "перечитал" настройки и применил их.

Перечитать файлы с зонами:

root@gate:~# named-checkconf -z

gate_install

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

Далее применяем настройки.

root@gate:~# rndc reload

Переходим к тестированию работы dns сервера.

Посмотрим ответ на запрос о записи типа A (адрес) для домена corp1.un, и запрос направим на ip адрес 192.168.1.31

root@gate:~# nslookup -q=A corp1.un 192.168.1.31

gate_install

Так как мы послали запрос на внешний ip адрес, то и ответ получили о внешнем ip адресе шлюза, то что и настраивали ранее в файлах зоны.

Запрос ушёл на адрес 192.168.1.31 и ответ пришёл с адреса 192.168.1.31 53-го порта

gate_install

Это уже хорошо, дальше проверяем ответы с внутренней сети 172.16.1.0 послав запрос на внутренний адрес шлюза 172.16.1.1

root@gate:~# nslookup -q=A corp1.un 172.16.1.1

install_gate

И проверим ответ с интерфейса localhost послав запрос на ip адрес 127.0.0.1, а как помним все сети начинающиеся с 127, у нас относятся к внутренним сетям.

root@gate:~# nslookup -q=A corp1.un 127.0.0.1

gate_install

Отлично, логика работы сервера правильная, теперь остаётся перевести resolving виртуальной машины "gate" на себя.

Для этого открываем на редактирование уже знакомый файл resolv.conf и вместо ip адреса роутера прописываем туда локальный ip адрес: 127.0.0.1

root@gate:~# vim /etc/resolv.conf

gate_install

Сохраняем и выходим из редактора.
Проверяем ответ без указания ip адреса dns сервера:

root@gate:~# nslookup -q=A corp1.un

gate_install

Далее нужно проверить отвечает-ли наш dns сервер на запросы с других компьютеров.

Для этого открываем на любом домашнем компьютере под управлением операционной системы windows, находящимся в одной локальной сети что и машина "gate", командную строку, я открою её на том компьютере где установлен virtualbox.

В поиске пишем cmd  и нажимаем на появившейся значок с именем "Командная строка".
Далее прописываем команду как на машине с linux и не забываем указать внешний ip адрес виртуальной машины "gate":

nslookup -q=A corp1.un 192.168.1.31 

gate_install

Подробнее про настройку dns серверов здесь и здесь.

Теперь протестируем ответы и на другие запросы типа A.

Запрос на А запись хоста ns (name server) сервера:
nslookup -q=A ns.corp1.un 192.168.1.31

Запрос на А запись веб сервера:
nslookup -q=A www.corp1.un 192.168.1.31

Запрос на A запись почтового сервера mx:
nslookup -q=A mx.corp1.un 192.168.1.31

gate_install

Настройка сервера dhcp на виртуальной машине "gate":

Для выдачи динамических ip адресов во внутренней сети 172.16.1.0, установим и настроим dhcp сервер.

Обновим список установочных пакетов репозитория и установим isc-dhcp-server.

root@gate:~# apt update && apt install isc-dhcp-server -y

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

gate_install

root@gate:~# systemctl status isc-dhcp-server.service

gate_install

Выход из отчёта "q".

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

В debian 11 и ниже посмотреть ошибку в логах можно с помощью команды:  grep dhcp /var/log/syslog 

В данном случае используется debian 12, по умолчанию система логирования syslog не установлена и считается устаревшей, вместо неё используется systemd-journald, посмотреть ошибку можно командой: 

root@gate:~# journalctl --unit isc-dhcp-server.service

gate_install

Выход из журнала так-же кнопкой "q".

Приступим к настройке сервера.

Открываем файл конфигурации на редактирование и прописываем туда следующие настройки:
в строку INTERFACESv4="" для ip версии 4 вписываем сетевой интерфейс внутренней сети, по схеме он имеет имя enp0s3,
а ip версии 6 у нас использоваться не будет, поэтому закомментируем эту строку поставив знак # в начале. 

root@gate:~# vim /etc/default/isc-dhcp-server

INTERFACESv4="enp0s3"
#INTERFACESv6=""

gate_install

Сохраним оригинальный конфигурационный файл dhcpd.conf в текущий каталог и удалим его содержимое в ветке /etc/dhcp/ , так как большая часть строк там закомментирована  и используются в качестве примера, они нам не понадобятся.

root@gate:~# cp /etc/dhcp/dhcpd.conf .

root@gate:~# :> /etc/dhcp/dhcpd.conf

Далее вносим в конфигурационный файл необходимые записи настроек:

root@gate:~# vim /etc/dhcp/dhcpd.conf

ddns-update-style none;
log-facility local7;
authoritative;

default-lease-time 600;
max-lease-time 7200;

option domain-name "corp1.un";
option domain-name-servers 172.16.1.1;

shared-network LAN1 {
     subnet 172.16.1.0 netmask 255.255.255.0 {
     range 172.16.1.101 172.16.1.254;
     option routers 172.16.1.1;
  }
}

gate_install

Сохраняем и выходим.

Подробно не будем расписывать каждую строку настроек, они пояснены здесь и здесь.

Коротко скажу о том, что мы выделили под выдачу динамических ip, адреса с 172.16.1.101 по 172.16.1.254, сервером dns и шлюзом по умолчанию 172.16.1.1, что является ip внутреннего сетевого интерфейса виртуальной машины "gate".

Проверяем правильность синтаксиса внесённых записей:

root@gate:~# dhcpd -t

gate_install

Запускаем сервис isc-dhcpd-server и смотрим статус его работы:

root@gate:~# systemctl start isc-dhcp-server

root@gate:~# systemctl status isc-dhcp-server

gate_install

Настройка маршрутизации и проброс портов на виртуальной машине "gate":

Выход из журнала "q".
На данном этапе настройка dhcp сервера завершена, протестируем его работу немного позже, так-как у нас во внутренней сети нет ещё ни одной виртуальной машины.

Теперь необходимо включить маршрутизацию пакетов с технологией NAT, для трафика из внутренней сети во внешние и наоборот.

Для этого включаем forward  в модуле ядра:
Находим строку в файле конфигурации sysctl.conf,  #net.ipv4.ip_forward=1  и раскомментируем её убрав знак # в начале строки.

root@gate:~# vim /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

gate_install

Сохраняем настройки и выходим.

root@gate:~# sysctl -f

Следующим шагом установим вспомогательные утилиты для создания правил маршрутизации.

root@gate:~# apt update && apt install iptables iptables-persistent -y

iptables  – используется для создания правил.

iptables-persistent  – используется для автоматического применения правил после перезагрузки системы.

На вопросы о сохранении правил, при установке этих утилит, можно нажимать Enter(по умолчанию), никаких настроек  у нас всё равно пока нет.

Добавляем первое правило маршрутизации в таблицу NAT:

root@gate:~# iptables -t nat -A POSTROUTING -o enp0s8 -s 172.16.1.0/24 -j MASQUERADE 

iptables -t nat  – добавить правило для пакетов, в таблицу nat

-A POSTROUTING  – в конец цепочки POSTROUTING

-o enp0s8  – с выходным сетевым интерфейсом enp0s8

-s 172.16.1.0/24  – из сети 172.16.1.0/24

-j MASQUERADE  – то сделать действие MASQUERADE

То есть, если пакет прилетит из внутренней сети 172.16.1.0/24 с запросом на внешний сетевой ресурс, например с ip адреса 172.16.1.102, то его следует передать на сетевой интерфейс enp0s8, предварительно заменив(MASQUERADE) ip адрес 172.16.1.102 на 192.168.1.31 (ip адрес внешнего интерфейса),при этом этот пакет записывается в таблицу маршрутизации и если на него придёт ответный пакет, то его переправят на внутренний адрес 172.16.1.102 согласно таблице.

Проверим добавление правила в таблицу.

root@gate:~# iptables-save

gate_install

Как видим правило добавилось и применилось, но несмотря на название утилиты iptables-save, она ничего не сохраняет и созданное правило будет существовать только до момента перезагрузки системы, что-бы оно применилось и после перезагрузки, его надо добавить в конфигурационный файл rules.v4 в правильном порядке, а при помощи утилиты iptables-save это очень легко сделать, надо просто перенаправить с перезаписью результат её работы в этот файл.

root@gate:~# iptables-save > /etc/iptables/rules.v4

Теперь правило не пропадёт и будет применено при загрузке системы.

Ну и сразу пробросим порты для будущих серверов электронной почты и веб сервера. Для этих сервисов у нас будет применяться виртуальная машина "server" и ip адрес у неё будет 172.16.1.2 согласно схеме в начале страницы.
Пробросим 80 и 443 порты для web сервера, соответственно для http и https протоколов, они работают по умолчанию на этих портах.

root@gate:~# iptables -t nat -A PREROUTING -i enp0s8 --destination 192.168.1.0/24 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.2:80

root@gate:~# iptables -t nat -A PREROUTING -i enp0s8 --destination 192.168.1.0/24 -p tcp --dport 443 -j DNAT --to-destination 172.16.1.2:443

iptables -t nat  – добавить правило для пакетов, в таблицу nat

-A PREROUTING  – в конец цепочки PREROUTING(обратим внимание что цепочка поменялась)

-i enp0s8  – с входным сетевым интерфейсом enp0s8

--destination 192.168.1.0/24  – прибывающих из сети 192.168.1.0/24

-p tcp --dport 80  – по протоколу tcp на порт 80

-j DNAT --to-destination 172.16.1.2:80  – заменить ip адрес источника на 172.16.1.2 и порт назначения 80.

Для 443 порта правило то-же самое, только порт прибытия изменён на 443.

Далее добавим правило для 25 порта, на этом порту работает протокол smtp сервиса электронной почты.

root@gate:~# iptables -t nat -A PREROUTING -i enp0s8 --destination 192.168.1.0/24 -p tcp --dport 25 -j DNAT --to-destination 172.16.1.2:25

Сохраняем

root@gate:~# iptables-save > /etc/iptables/rules.v4

Теперь просмотрим добавленные правила таким способом, где будет видно все номера правил, протоколы, порты и т.д.

root@gate:~# iptables -t nat -L -v --line-numbers

gate_install

Подробнее про маршрутизацию пакетов здесь и здесь.

На этом настройку виртуальной машины "gate" пока закончим, нашим минимальным требованиям по моделированию сети предприятия она отвечает. Если понадобится что-то добавить в настройки этой машины, то сделаем это позже. И следует отметить, что она не обладает полноценным сетевым экраном(Firewall-ом), любой хост из сети 192.168.1.0 может попасть во внутреннею сеть 172.16.1.0, если добавит маршрут в эту сеть у себя в таблицу маршрутизации. В конце настроек всех сетевых машин мы это сделаем и проверим легко доступность внутренних ресурсов из внешней сети. По хорошему виртуальная машина "server" должна находиться в отдельной от остальных хостов демилитаризованной сети. Но для упрощения настроек она включена в общую локальную сеть. 

Создание виртуальной машины "client1":

Виртуальная машина выполняющая роль компьютера "для сотрудников" с установленным графическим окружением и динамическим ip адресом. Скрипт для автоматической настройки виртуальной машины "client1" здесь.

Следующим шагом перейдём к созданию и настройке виртуальной машины "client1". Она настраивается очень просто и это не займёт много времени, к тому-же при создании этой машины, мы проверим правильность настроек машины "gate".

client1_install

Создание и настройка виртуальной машины "client1".

Для создания машины "client1" нам понадобится тот-же образ операционной системы Debian, из которого мы создавали машину "gate".
У меня эта виртуальная машина называется debian12, нажимаем на неё правой кнопкой мыши и в появившемся меню выбираем пункт "клонировать".

client1_install

Имя виртуальной машины: client1_corp1
Политика MAC-адреса: сгенерировать новые MAC-адреса всех сетевых адаптеров
Нажимаем кнопку "Далее".

client1_install

В следующем пункте оставляем всё как есть и просто нажимаем кнопку "Готово".

client1_install

Начнётся клонирование виртуальной машины, остаётся дождаться его завершения.

client1_install

После завершения копирования, выбираем левой кнопкой мыши нашу машину "client1_corp1" и нажимаем кнопку "Настроить"

client1_install

Во вкладке система, материнская плата, установим 2048 МБ оперативной памяти.

client1_install

Во вкладке процессор установим 2 процессора, тут подразумевается 2 ядра.

client1_install

Далее во вкладке сеть, Адаптер 1, снимаем галку с пункта "Включить сетевой адаптер".
Тем самым мы отключим сетевой адаптер с именем enp0s3, так-как у нас будет задействован адаптер с именем enp0s8, а это адаптер номер 2.

client1_install

В пункте Адаптер 2: ставим галку на "Включить сетевой адаптер", далее Тип подключения: "выбираем внутренняя сеть", Имя: выбираем corp1 (если настраивали машину gate, то сеть с таким именем существует и есть в списках, если нужен просто хост с графическим окружением, то можно выбрать Тип подключения: "Сетевой мост"). Нажимаем кнопку "ОК".

client1_install

Если машина "gate" не запущена запускаем сначала её, а потом машину "client1".

client1_install

Входим в аккаунт пользователя, который создавали при установке операционной системы, у меня это

log: ivan
pass: linux

Далее переходим в работу из под root-a командой:

sudo -i

проверяем получения ip по протоколу dhcp от виртуальной машины "gate", командой:

ip a

В моём случае ip адрес не был получен

client1_install

Делаем запрос на получение ip адреса командой:

dhclient -v

После чего сетевые настройки были получены от сервера dhcp и виртуальная машина "client1" получила ip адрес 172.16.1.101 на сетевом интерфейсе enp0s8.

И тут видно диалог запросов и ответов клиент-сервер.

client1_install

Теперь "пропингуем" любой сайт по доменному имени, тем самым мы проверим сразу две вещи, это работоспособность маршрутизации и работу dns сервера на машине "gate".
Я буду "пинговать" сайт ya.ru, набираем в командной строке:

ping -c4 ya.ru

client1_install

Отлично, связь есть и dns сервер работает корректно.

Что-бы убедится в том, что на dns запросы отвечает именно "gate" можно набрать в командной строке уже знакомую команду:

nslookup -q=A ya.ru

И будет видно какой ip отвечает на dns запросы, это 172.16.1.1, адрес шлюза.

client1_install

Существует много вариантов как подключится по ssh из внешней сети к хосту во внутренней сети.

Рассмотрим пару вариантов:

Первый вариант через машину "gate", для этого открываем putty и подключаемся к "gate" обычным способом. Как мы помним внешний ip у этой машины 192.168.1.31

client1_install

Подключение по ssh к машине "client1" c авторизацией на машине "gate".

client1_install

После ввода логина и пароля, в командной строке набираем:

ivan@gate:~$ ssh ivan@172.16.1.101

То-есть подключаемся как пользователь ivan к хосту с ip 172.168.1.101 по ssh

На вопрос о добавлении ключа пишем "yes" и нажимаем Enter

client1_install

Таким образом мы попадаем на машину "client1".

client1_install

Следующий вариант подключения, состоит в добавлении маршрута во внутреннюю сеть на хосте во внешней сети, как мы помним что по сути межсетевой экран на машине "gate" настроен таким образом, что любой может подключится к внутренним ресурсам сети.

client1_install

Подключение по ssh к машине "client1" через маршрутизацию машины "gate".

Для этого добавим маршрут в таблицу маршрутизации, в сеть 172.16.1.0/24 и подключимся к клиенту с помощью putty.

На хосте с windows, где установлен virtualbox, откроем "Командную строку"(в поиске набираем cmd, нажимаем правой кнопкой мыши на появившееся приложение "Командная строка" и нажимаем "Запуск от имени администратора").

client1_install

В появившемся окне набираем инструкцию:

route ADD 172.16.1.0/24 192.168.1.31

либо: 

route ADD 172.16.1.0 MASK 255.255.255.0  192.168.1.31

что по сути одно и то-же.

Как мы помним "client1" получил настройки сети по dhcp с ip адресом 172.16.1.101( посмотреть ip адрес на клиенте можно командой: ip a ). Сразу "пропингуем" этот ip адрес набрав команду в командной строке:

ping 172.16.1.101

client1_install

Этот маршрут будет добавлен в таблицу маршрутизации на машине с windows, до момента презагрузки, чтобы добавить его "на постоянку" нужно добавить к инструкции ключ -p.

route -p ADD 172.16.1.0/24 192.168.1.31

Что-бы посмотреть существующие маршруты в windows:

route PRINT

И среди прочих маршрутов будет присутствовать и наш добавленный маршрут

client_install

Удалить маршрут можно командой:

route DELETE 172.16.1.0

справка по командам route 

route /?

или просто:

route

Далее запускаем putty и прописываем в строке подключения ip машины "client1", у меня это 172.16.1.101 и нажимаем "Open"

client1_install

После ввода логина и пароля мы оказываемся на машине "client1"

client1_install

Сохранять профиль в putty для этого подключения не имеет смысла, так-как ip у машины "client1" будет меняться из-за получения его по dhcp, а привязку по MAC адресу мы не будем делать, потому что эта машина нам нужна будет для работы именно в графике а не в терминале.

Итак приступим к основным настройкам виртуальной машины "client1".

Станем рутом на продолжительное время

ivan@debian12:~$ sudo -i

Обновляем репозиторий и я установлю текстовый редактор vim для своего удобства и буду работать в нём.

root@debian12:~# apt update && apt install vim -y

Меняем имя хоста на client1.corp1.un прописав его в конфигурационном файле /etc/hostname

root@debian12:~# vim /etc/hostname

client1.corp1.un

client1_install

Напомню для выхода из vim с сохранением изменений сделанных в файле, нажимаем Esc : прописываем wq и нажимаем Enter

client1_install

Идём далее и меняем имя хоста в файле /etc/hosts 

root@debian12:~# vim /etc/hosts

127.0.0.1   localhost
127.0.1.1   client1.corp1.un client1

client1_install

Конфигурационный файл resolv.conf оставляем по умолчанию, так как эту настройку машина будет получать по dhcp.
Файл interfaces так-же можно оставить по умолчанию, но лучше явно прописать инструкцию о получение сетевых настроек по dhcp.
Что-бы скопировать текст и вставить в vim-e(Ctrl+c Ctrl+v не работает в виме) копируете текст привычным образом, или Ctrl+Insert, в vim-e вставляем Shift+Insert.

root@debian12:~# vim /etc/network/interfaces

allow-hotplug enp0s8
iface enp0s8 inet dhcp

client1_install

Устанавливаем минимальное графическое окружение, браузер firefox и почтовый клиент thunderbird.

root@debian12:~# apt -y install xorg xdm xfce4 xfce4-terminal xfce4-xkb-plugin firefox-esr thunderbird dbus-x11

При вопросе какой использовать дисплей выбираем lightdm нажимаем "OK"(чтобы попасть на кнопку ок нажимаем Tab и Enter).Дожидаемся установки П.О.
Далее стартуем сервис lightdm

root@debian12:~# service lightdm start

После запуска lightdm видим форму входа в аккаунт, на данном этапе настройка виртуальной машины "client1" завершена.

client1_install

Создание и настройка виртуальной машины "server":

Виртуальная машина выполняющая роль сервера предприятия с статичным ip адресом 172.16.1.2/24, предназначается для установки и настройки сервисов, таких как файловый сервер, почтовый сервер, веб сервер и так далее.

server_install

Создание и настройка виртуальной машины "server".

Итак приступим к настройке виртуальной машины, повторяем шаги по клонированию виртуальной машины из установленной операционной системы debian, как мы это делали для машины "client1".
Выбираем выключенную виртуальную машину с установленной о.с. нажимаем на неё правой кнопкой мыши и в появившемся меню нажимаем левой кнопкой мыши на значок "Клонировать...".

server_install

Прописываем имя виртуальной машины server_corp1. В политике MAC-адреса выбираем "Сгенерировать новые MAC-адреса всех сетевых адаптеров, нажимаем кнопку "Далее".

server_install

Следующим шагом оставляем всё по умолчанию и нажимаем "Готово".

server_install

После окончания клонирования виртуальной машины, выбираем её из списка и нажимаем кнопку "Настроить".

server_install

В настройках виртуальной машины созданных при установке операционной системы меня всё устраивает, тут применяется: Жёсткий диск 8 Гб; Оперативная память 2048 Мб; Процессор 2 ядра, таких ресурсов вполне хватит для тестовых задач, но можно и урезать ресурсы до 1024 Гб оперативной памяти и 1 ядра процессора, без графического окружения, которое на сервере и не будет, этого то-же будет достаточно. Единственное надо поменять сетевой адаптер и включить эту машину во внутреннюю сеть corp1. Во вкладке "Сеть", "Адаптер 1" снимаем галку в пункте "Включить сетевой адаптер".

server_install

Переходим во вкладку "Адаптер 2", ставим галку в пункте "Включить сетевой адаптер", ниже в пункте "Тип подключения" выбираем "Внутренняя сеть". В пункте Имя: выбираем corp1(если настраивали "gate" то имя сети corp1 есть в списке). Нажимаем "ОК".

server_install

Запускаем виртуальную машину.

server_install

Так как у нас связь из внутренней сети с внешним миром идёт через машину "gate", то необходимо запустить и её, если она выключена.

server_install

После входа в аккаунт на виртуальной машине "server", и ввода команды для работы из под root

ivan@debian12:~$ sudo -i

Внесём сетевые настройки в файл interfaces

server_install

root@debian12:~# vim.tiny /etc/network/interfaces

auto enp0s8
iface enp0s8 inet static
      address 172.16.1.2/24
      gateway 172.16.1.1

Не забыв закомментировать прежние настройки поставив в начале строк этих настроек знак # (если конечно они были).

server_install

Выходим из редактора и перезапускаем сетевой адаптер

root@debian12:~# systemctl restart networking.service

server_install

Смотрим применились-ли настройки сети, из скриншота ниже видно, что у меня всё в порядке и на сетевом адаптере назначен правильный ip адрес 172.16.1.2 

root@debian12:~# ip a

server_install

Далее подключаемся к машине "server" по ssh, либо через машину "gate", либо через добавление маршрута, на хостовый компьютер, как было описано выше.

Заходим в аккаунт у меня это ivan с паролем linux, переходим в работу из под root

ivan@debian12:~$ sudo -i

Обновляем пакеты установщика из репозитория и я установлю текстовый редактор vim

root@debian12:~# apt update && apt install vim -y

server_install

Поменяем имя хоста на "server", для этого, как мы делали раньше, откроем конфигурационный файл hostname любым текстовым редактором и внесём необходимую запись

 root@debian12:~# vim /etc/hostname

server.corp1.un

server_install

Далее поменяем настройки в файле resolv.conf

root@debian12:~# vim /etc/resolv.conf

search corp1.un
nameserver 172.16.1.1

server_install

По сути предварительная настройка машины "server" завершена, что-бы применились все настройки окончательно перезагрузим систему командой 

root@debian12:~# reboot

или 

root@debian12:~# init 6

На этом можно было-бы завершить настройки виртуальной машины "server", но установим пару сервисов на будущее, заранее.

Установка и настройка веб сервера apache2 на "server":

Устанавливаем web сервер apache2

root@server:~# apt install apache2 -y

После установки можно сразу проверить доступность технической страницы установленного веб сервера, так как мы прокидывали 80 порт на виртуальной машине "gate" во внутреннею сеть, то при обращении к ip адресу 192.168.1.31(внешний ip "gate") по http а это порт 80 по умолчанию, запрос будет перенаправлен на ip 172.16.1.2(ip сервера), а ответ от сервера будет направлен обратно на ip откуда пришёл запрос. В любом интернет браузере, например на компьютере где установлен virtualbox,в верхней строке набираем

http://192.168.1.31

И нажимаем "Enter"

server_install

Как видим мы зашли на техническую страницу web сервера apache2

server_install

Хотя сервер настроен на дефолтную директорию из коробки, и для того что-бы поменять стартовую страницу на свою, необходимо всего лишь заменить файл index.html по пути /var/www/html/ ,на свой ,но настроим сервер на сайт домена corp1, для этого отключим дефолтный сайт и создадим свой.

Отключаем дефолтный сайт:

root@server:~# a2dissite 000-default.conf

Создаём конфигурационный файл сайта и прописываем туда необходимые настройки:

root@server:~# vim /etc/apache2/sites-available/default.conf

<VirtualHost *:80>
    ServerName corp1.un
    ServerAlias www.corp1.un
    DocumentRoot /var/www/html

    <Directory /var/www/html>
         AllowOverride All
         Require all granted

    </Directory>

    ErrorLog    ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

server_install

Скопируем техническую страницу сервера apache2 в текущую директорию 

root@server:~# cp /var/www/html/index.html .

Сотрём всё её содержимое

root@server:~# :> /var/www/html/index.html

И создадим свою простую html страницу:

root@server:~# vim /var/www/html/index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Простая HTML-страница</title>
    </head>

    <body>
        <h1>Welcome to Corp1</h1>

        <p>You are on the www.Corp1.un website</p>

        <!-- <img src="image.jpg" alt="Изображение"> -->
    </body>
</html>

server_install

После этого подключаем конфигурационный файл default.conf к настройкам сервера:

root@server:~# a2ensite default.conf

И перезагружаем сервер apache2:

root@server:~# systemctl reload apache2

Проверяем работоспособность страницы, набираем в интернет браузере, в верхнем окошке:

http://192.168.1.31

server_install

Теперь проверим доступность страницы из внутренней сети 172.16.1.0, с виртуальной машины "client1". Для этого запускаем машину "client1", заходим в аккаунт в графике, запускаем браузер, и так-же в верхнем окошке пишем адрес сайта, только уже по доменному имени, так как у нас работает dns сервер на машине "gate" и мы вносили соответствующие записи в файл зоны.

http://www.corp1.un

http://corp1.un

server_install
server_install
server_install

На этом настройку веб сервера завершим и перейдём к настройке следующего сервиса, а именно электронной почты.

Кратко по настройке apache2 здесь.

Настройка электронной почты на "server"

Настраивать сервер будем по так называемой модели "lamp".

LAMP (Linux+Apache+MySQL+PHP):

В роли МТА SMTP сервера будет выступать postfix.

В роли IMAP сервера будет выступать dovecot и IMAP клиента thunderbird.

Для доступа к почте через web, будут настроены сервисы mariadb; apache2; roundcube.

Итак для начала устанавливаем postfix:

root@server:~# apt install postfix -y

После начала установки последуют некоторые вопросы по поводу параметров установки.

Первый вопрос(разъяснение), нажимаем кнопку "Tab" подсветится кнопка "OK" на экране и нажимаем "Enter".

server_install

Второй вопрос, тут предлагается выбрать установку из 5 главных конфигураций, оставляем по умолчанию второй пункт "Internet Site", нажимаем "Tab" и "Enter".

server_install

Следующим шагом предлагается ввести полное доменное имя почтового сервера, то-есть у нас будет один главный почтовый сервер, поэтому сюда вводим строку corp1.un и адреса почтовых ящиков будут такими: ivan@corp1.un . 

server_install

В принципе postfix минимально настроен из коробки, пока подправим только одну запись в конфигурационном файле а именно  в файле main.cf исправим строку mayhostname = server.corp1.un . Так-как в записях dns зоны у нас написано, что за электронную почту отвечает хост "mx".  

root@server:~# vim /etc/postfix/main.cf

mayhostname = mx.corp1.un

server_install
server_install

Записи в файле dns зоны, для почтового сервера.

Перезагружаем postfix.

root@server:~# service postfix reload

или так:

root@server:~# systemctl reload postfix

Далее устанавливаем dovecot-imapd:

root@server:~# apt install dovecot-imapd -y

Опять-же dovecot минимально настроен из коробки, поэтому при правильной настройке dns зоны он заработает сразу, тем более, что dovecot, что postfix установлены на одну машину, поэтому перемещаемся на машину "client1" и попробуем подключить thunderbird к нашим smtp и imap серверам.

Захожу на "client1" как пользователь ivan.

server_install

После входа в аккаунт нажимаем левой кнопкой мыши на "Applications" и в выпавшем меню на пункт "Mail Reader".

server_install

При первом запуске thunderbird мы попадаем в меню настройки почтового аккаунта. Вводим имя пользователя, я ввёл просто "ivan", далее адрес почтового ящика: ivan@corp1.un и пароль, тут важно что-бы этот пользователь с паролем существовал на машине "server", как мы помним пользователь "ivan" у нас существует на всех виртуальных машинах, так как он был добавлен при установке операционной системы Debian, а все остальные виртуальные машины это клоны той машины.
Нажимаем кнопку "Continue".

server_install

Пройдёт первоначальный тест конфигурации и загорится зелёная табличка, а под ней параметры входа в аккаунт. 
Нажимаем кнопку "Done".

server_install

После нажатия кнопки "Done" нас предупредят о ненадёжном сертификате на сервере, это потому что там используется само-подписаный сертификат безопасности, сформированный в процессе установки. Другого сертификата у нас нет, поэтому жмём кнопку "Confirm Security Exception".

server_install

Далее нажимаем кнопку "Finish"

server_install

И вот мы оказываемся в настроенном аккаунте thunderbird, теперь попробуем послать кому-нибудь письмо, а так-как других пользователей кроме этого и root у нас нет, пошлём письмо root-y. Нажимаем кнопку " New Message".

server_install

Кому: root@corp1.un
Заголовок: Test
Тело письма: Test mail system.

И нажимаем Отправить(Send).

server_install

И тут нас встречает снова это предупреждение, потому что мы до этого подключились к dovecot по протоколу imap, а к postfix по протоколу smtp не были подключены, а за отправку почты отвечает именно postfix. Нажимаем кнопку "Confirm Security Exception" и подключаемся к серверу.

server_install

Письмо должно уйти на почтовый ящик root-a.

server_install

Теперь посмотрим пришло-ли письмо к пользователю root, самый простой способ это сделать, это зайти на машину "server", стать рутом sudo -i и просмотреть почтовый ящик рута командой cat, так как почтовый ящик это просто текстовый файл ASCII:

root@server:~# cat /var/mail/root

server_install

Как видим письмо дошло и его можно прочитать. Далее необходимо прикрутить веб доступ к почте, так как веб сервер уже установлен, устанавливаем базу данных необходимую для работы Roundcube.

root@server:~# apt install mariadb-server -y

И устанавливаем сам Roundcube плюс дополнение для работы с базами данных mysql.

root@server:~# apt install roundcube roundcube-mysql -y

В процессе установки последуют пару вопросов, первый вопрос о базе данных выбираем "yes" и нажимаем "Enter".

server_install

Второй вопрос о вводе пароля к базе данных, дело в том что мы не формировали базу данных для Roundcube и не задавали никаких паролей, в процессе установки, если Roundcube устанавливается на ту-же машину где установлен mariadb-server, то база данных и пароль к ней сформируется автоматически, поэтому на этом шаге не вводим пароль, оставляем поле пустым, выбираем "OK" и жмём "Enter".

server_install

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

root@server:~# vim /etc/apache2/conf-enabled/roundcube.conf

Alias /roundcube /var/lib/roundcube/public_html

server_install

И перезапускаем веб сервер.

root@server:~# systemctl restart apache2

Идём в браузер на компьютере где установлен virtualbox, вводим адрес веб сервера с стартовой страницей roundcube.

http://192.168.1.31/roundcube

Вводим логин и пароль существующего в системе пользователя, у меня это ivan с паролем linux.

server_install

Ну и попадаем в почтовый аккаунт пользователя.

server_install

Теперь надо подправить учётную запись в настройках аккаунта, потому что по умолчанию почтовый адрес стоит ivan@localhost, надо его исправить на наш почтовый ящик домена, для этого заходим в "Настройки", "Профили", "ivan@localhost" и в графе E-Mail прописываем правильный адрес почтового ящика "ivan@corp1.un". Сохраняем.

server_install

Но при попытке отправить письмо, например на адрес рута повторив ранее проделанный тест, мы увидим ошибку "Сбой соединения с сервером".

server_install

Дело в том, что roundcube настроен по умолчанию на подключение к серверу smtp к 587 порту, а postfix по умолчанию не слушает этот порт, переведём roundcube на подключение к smtp серверу на 25 порт.

root@server:~# vim /etc/roundcube/config.inc.php

$config['smtp_host'] = 'localhost:25';

server_install

Сохраняем изменения и выходим из редактирования, перезапускаем apache2.

root@server:~# systemctl restart apache2

Однако при попытке снова отослать письмо возникнет другая ошибка "Ошибка авторизации".

server_install

Postfix по умолчанию не настроен на авторизацию пользователей. Её имеет смысл настраивать только на рабочих серверах и то через пограничный smtp сервер на котором нет авторизации, иначе при доступе к серверу из интернета, боты вычислят этот сервер, что на нём есть авторизация и будут пытаться ломать аккаунты при помощи подбора паролей, а так изначально postfix настроен таким образом, что он не является открытым релеем и на нём выключена авторизация, так как боты постоянно мониторят ip адреса на открытые 25 порты и пытаются пересылать спам через сервера которые нашли.
Поэтому отключаем авторизацию в настройках roundcube, стираем всё внутри одинарных кавычек в строках:

$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';

root@server:~# vim /etc/roundcube/config.inc.php

$config['smtp_user'] = '';
$config['smtp_pass'] = '';

server_install

Перезапускаем веб сервер.

root@server:~# systemctl restart apache2

Теперь при попытке отправить письмо, оно ушло без проблем.

server_install

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

Установка и настройка сервера Samba на машину "server":

Варианты настроек сервера samba здесь и здесь.

Развернём файловый сервер samba в простой конфигурации, со входом в общую шару по паролю.

Установка:

root@server:~# apt install samba -y

Так как на сервере у меня пока один пользователь ivan, он-же администратор(не считая рута), задаю для него пароль для входа в общую шару.

root@server:~# smbpasswd -a ivan

Последует строка с предложением ввести пароль для этого пользователя, у меня будет пароль linux12345, отмечу что при вводе пароля, как это принято в linux, не появляется никаких символов или звёздочек, после ввода нажимаем "Enter" и следующим шагом повторяем ввод пароля.

server_install

Посмотреть краткую справку по команде smbpasswd можно так:

root@server:~# smbpasswd -h

Итак пользователя мы добавили в базу данных samba, теперь отконфигурируем основной файл настройки.

Сохраняем оригинальный конфиг в текущую директорию и стираем всё содержимое файла в директории /etc 

root@server:~# cp /etc/samba/smb.conf .

root@server:~# :> /etc/samba/smb.conf

открываем файл на редактирование и прописываем туда свои настройки

root@server:~# vim /etc/samba/smb.conf

[global]
      unix charset = UTF-8
      dos charset = cp866
      workgroup = CORP1
      passdb backend = tdbsam
      security = user
      log file = /var/log/samba/log.%m
      max log size = 1000
      panic action = /usr/share/samba/panic-action %d

[storage]
      comment = Corporate file storage
      path = /var/samba
      guest ok = no
      read only = no
      force user = games

[printers]
      comment = All Printers
      browseable = no
      path = /var/tmp
      printable = yes
      guest ok = no
      read only = yes
      create mask = 0700

[print$]
      comment = Printer Drivers
      path = /var/lib/samba/printers
      browseable = yes
      read only = yes
      guest ok = no

server_install

Разберём внесённые настройки:

[global]   – квадратные скобки означают, что ниже внесённые строки относятся к этому блоку, до следующих квадратных скобок, в данном случае блок с именем global означает общие настройки сервера.
      unix charset = UTF-8  – кодировка создания имён файлов, от клиентов samba как правило получает имена файлов в Unicode. В современных samba серверах она включена по умолчанию, поэтому этот пункт можно и не прописывать.
      dos charset = cp866 – кодировка для dos, применяется для очень старых машин, включён здесь для совместимости, сейчас почти не используется и поэтому этот пункт аналогично можно не прописывать.
      workgroup = CORP1  – для windows, можно участвовать в рабочей группе(WORKGROUP), либо в домене, можно оставить как есть или прописать рабочую группу WORKGROUP.
      passdb backend = tdbsam  – включает передачу и приём хеш паролей понятный для операционной системы на базе windows.
      security = user – политика безопасности user, далее в отдельных блоках её можно менять на основе групп и т.д.
      log file = /var/log/samba/log.%m – путь для записи файлов логов.
      max log size = 1000 – максимальный размер одного файла лога.
      panic action = /usr/share/samba/panic-action %d – действия при краше samba, это просто путь до скрипта, на отправку письма администратору.

[storage]  – блок с настройками расшариваемой директории и название расшариваемой директории, то есть в проводнике мы будем видеть папку именно с этим названием, можно придумать любое имя. 
      comment = Corporate file storage  – это просто комментарий, при наведении мышки на папку в проводнике windows, будет показываться всплывающее окошко с этим текстом.
      path = /var/samba  – путь к расшариваемой директории(далее мы её создадим).
      guest ok = no   – запрещает вход пользователей проваливших аутентификацию.
      read only = no  – говорит о том что в шаре пользователь сможет открывать файлы как на чтение так и на запись.
      force user = games  – при входе в шару, при пройденной аутентификации всех пользователей будут приравнивать к пользователю games, этот пользователь уже существует в debian и ubuntu по умолчанию и для простоты используем его в данном случае.

Далее идут настройки для принтеров, они нам тут не понадобятся, поэтому их можно вообще не прописывать. Сохраняем изменения и выходим из редактирования. Напомню что в vim это "Esc" :wq и "Enter".

Посмотрим а существует пользователь games в системе на самом деле

root@server:~# id games

server_install

Как видим пользователь такой есть, дальше создаём расшариваемую папку и меняем у неё владельца и права.

root@server:~# mkdir /var/samba

root@server:~# chown games /var/samba

root@server:~# chmod 755 /var/samba

Ну и пробуем зайти в шару по ip адресу, напомню что сервер samba у меня находится в другой сети доступ к которой происходит через шлюз "gate" c внешним ip адресом 192.168.1.31, но так как я добавил маршрут в эту сеть на компьютер на котором установлен virtualbox и на машине "gate" по сути нет меж сетевого экрана, то я могу обращаться на сервер samba по ip внутренней сети сервера 172.16.1.2 на прямую с этого компьютера.

В проводнике в верхнем окошке набираем

\\172.16.1.2   если у вас другой ip адрес сервера то набираем его.

server_install

Нажимаем "Enter", появится окно для ввода логина и пароля, у меня логин ivan, пароль linux12345

server_install

Нажимаем "OK" и попадаем к папке которую расшаривали

server_install

Заходим в неё и тут уже можем создавать и выкладывать файлы.

server_install

Этот логин и пароль можно раздать всем пользователям, кто будет пользоваться шарой или для каждого пользователя завести отдельные аккаунты в системе linux можно без пароля и без shell но обязательно внести пароль и пользователя в базу данных samba командой smbpasswd -a имя пользователя. Просмотр базы данных samba:

root@server:~# pdbedit -w -L

Удалить пользователя и пароль из базы данных samba:

root@server:~# smbpasswd -x ivan 

Хорошо, мы настроили доступ к шаре и подключились к ней с компьютера на базе операционной системы windows, но у нас есть пользователи которые работают за компьютерами на базе операционной системы linux(виртуальная машина "client1") и им тоже нужен доступ к этому файловому хранилищу.

Настройка подключения к файловому серверу samba c компьютера на базе операционной системы linux:

Возвращаемся на виртуальную машину "client1", что-бы было удобней работать подключусь к ней не в графике а по ssh.
Так-как машина "client1" получает динамический ip то для того что-бы узнать её ip адрес можно зайти в графике и в терминале набрать команду 

ivan@client1:~$ ip a

server_install

Как видно из скриншота, у меня машина "client1" получила ip адрес 172.16.1.101
Подключаемся к ней по ssh, либо напрямую если настроен маршрут в эту сеть, либо сначала подключаемся к машине "gate" по ip 192.168.1.31 а с него уже к машине "client1". Все действия будут выполняться  из под рута

ivan@client1:~$ sudo -i

Устанавливаем П.О:

 root@client1:~# apt install smbclient cifs-utils gvfs-backends gvfs-fuse -y

Далее создаём директорию куда будем монтировать шару

root@client1:~# mkdir /mnt/corp_storage

После этого прописываем в fstab параметры монтирования

root@client1:~# vim /etc/fstab

//172.16.1.2/storage /mnt/corp_storage cifs rw,user,user=ivan,pass=linux12345,noauto 0 0

server_install

где:

//172.16.1.2/storage – откуда монтируем
 /mnt/corp_storage – куда монтируем
cifs rw, – тип файловой системы, в режиме чтения и записи.
user, – этот параметр нужен для того что-бы любой пользователь мог примонтировать эту директорию, по умолчанию монтировать может только root.
user=ivan, – логин аккаунта монтируемой директории(логин который мы добавляли на сервере командой smbpasswd -a).
pass=linux12345 – пароль от логина на сервере.
noauto – не монтировать автоматически при загрузке системы.
0 0 – первая цифра отвечает за дамп, вторая цифра отвечает за проверку файловой системы на наличие ошибок, оба параметра ставим в 0.

Так как на виртуальной машине "gate" работает dns сервер зоны, то эта запись могла быть и такая:

//server.corp1.un/storage /mnt/corp_storage cifs rw,user,user=ivan,pass=linux12345,noauto 0 0

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

root@client1:~# systemctl daemon-reload

Заходим на машину "client1" в графике, пользователем ivan и в терминале монтируем шару командой

ivan@client1:~$ mount /mnt/corp_storage/

server_install

Монтирование должно пройти без сообщений об ошибках, после этого заходим в шару, для этого закрываем терминал, нажимаем на иконку любого файлового менеджера, в данном случае это "File System" двойным щелчком левой кнопкой мыши.

server_install

Ну и идём по пути нашего монтирования, ищем папку mnt, corp_storage, и т.д.

server_install
server_install
server_install

Ну вот вобщем-то и всё, минусы такого подхода, пользователю всё равно надо набирать в терминале команду на монтирование, но это можно исправить, например написать простейший скрипт, а пользователям объяснить, что для того что-бы попасть в шару надо с начала два раза клацнуть на файл в документах. И ещё один большой минус, это в том что на этом компьютере кто первый шару примонтирует того и тапки, то есть если пользователь ivan примонтирует эту шару, то он должен и отмонтировать её, а если он этого не сделает, то когда он выйдет из аккаунта  и за этот компьютер сядет другой пользователь например user1 и войдёт в свой аккаунт, то шара будет смонтирована с владельцем ivan, по умолчанию пользователь user1 сможет читать файлы в шаре но изменять их и записывать нет.

Создание виртуальной машины "client2" на базе операционной системы Windows.

Для работы операционной системы windows на virtualbox понадобятся значительные ресурсы основного компьютера, если железо не позволяет использовать эту операционную систему на виртуалке, то лучше для тестирования взаимодействия хостов linux с windows использовать подход, когда основной хост является и клиентом на windows, то есть добавить маршрут во внутреннюю сеть на компьютер на котором установлен virtualbox, как это было сделано выше.

Итак приступим к настройке виртуальной машины. Для этого нам понадобится установленная операционная система windows. Пример установки здесь.

client2_install

Клонируем виртуальную машину из установленной операционной системы. Для этого как мы и делали раньше выделяем левой кнопкой мыши виртуальную машину с установленной windows, нажимаем правой кнопкой мыши на неё и в выпавшем меню выбираем пункт "Клонировать".

client2_install

В открывшемся окне в графе 
Имя: назову client2_corp1
Путь: Или по умолчанию, или прописать свой путь.
Политика MAC-адреса: выбираем Сгенерировать новые MAC-адреса всех сетевых адаптеров.
Нажимаем "Далее".

client2_install

Следующим шагом оставляем всё по умолчанию и нажимаем кнопку "Готово".

client2_install

Начнётся процесс клонирования, который займёт некоторое время. После его завершения заходим в настройки клонированной машины и меняем сеть с сетевого моста на внутреннею сеть, так ка внутренняя сеть у нас называется corp1 прописываю её. Нажимаем "ОК" и запускаем виртуальную машину.

client2_install

После запуска и загрузки, машина должна получить ip по dhcp.

client2_install

На этом создание тестовой сетевой инфраструктуры завершено, в дальнейшем создадим домен первого уровня un и точно такую-же инфраструктуру только corp2.un для взаимодействия между ними.

Хотя настраивать вручную виртуальные машины интересно и полезно, но на десятый раз, порядком надоедает. Поэтому напишем простейшие скрипты по автоматическому конфигурированию виртуальных машин. Понятно, что для этих задач идеально подходит язык программирования ansible,  но для разворачивания этой тестовой инфраструктуры вполне подойдёт и bash.

Скрипт для автоматической настройки виртуальной машины "gate".

Клонируем свеже-установленную виртуальную машину Linux Debian без графического окружения, как мы это делали со всеми В.М. в примерах выше. Назову эту виртуалку gate_corp1.un, сгенерирую новые мак адреса и т.д. вообщем выполню стандартные операции по копированию.

gate_script

После завершения клонирования идём в настройки сетевых адаптеров, ставим у первого адаптера тип подключения "Внутренняя сеть", так как этот адаптер будет с именем enp0s3 и прописываем любое имя этой сети, у меня будет corp1_un, а у Адаптера 2 ставим "Сетевой мост" и незабываем его включить. На этом шаге необходимо включить адаптеры так как показано, иначе настройки после отработки скрипта будут некорректные и сети не заработают.

gate_script
gate_script

Далее запускаем виртуальную машину, заходим в неё в терминале и смотрим ip адрес командой ip a
Если по каким-то причинам она не получила ip по dhcp от роутера, то пробуем получить его вручную

sudo dhclient enp0s8 -v

или просто

sudo dhclient -v

gate_script

Как видно после запроса, моя виртуальна машина получила ip адрес 192.168.1.137
Подключаюсь по ssh через putty к этому ip. Скрипт работает из под root`a поэтому можно сразу перейти в работу из под рута командой sudo -i или запускать его через sudo. Я перейду в работу из под root.

ivan@debian12:~$ sudo -i

Далее копируем текст скрипта, от края до края в буфер обмена, как вам удобно(выделяем весь текст и нажимаем Ctrl+C или Ctrl+Insert или мышкой "Копировать..."
В удалённом терминале putty прописываем

root@debian12:~# vim.tiny gate.sh

что-бы вставить текст из буфера обмена нажимаем Shift+Insert, сохраняем и выходим из vim.tiny, для этого нажимаем :wq

#!/bin/bash

echo 'Enter the hostname(example gate):'
read HOSTNAME
echo 'Enter the domain(example corp1.un):'
read DOMAIN
echo 'Enter the fourth octet of the external ip address(example 31):'
read EXTERNAL_OCTET

echo "$HOSTNAME.$DOMAIN" > /etc/hostname

echo "127.0.0.1 localhost

127.0.1.1 $HOSTNAME.$DOMAIN $HOSTNAME" > /etc/hosts

echo "# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface

auto enp0s8
iface enp0s8 inet static
      address 192.168.1.$EXTERNAL_OCTET/24
      gateway 192.168.1.1

auto enp0s3
iface enp0s3 inet static
      address 172.16.1.1/24" > /etc/network/interfaces

apt update&&apt install isc-dhcp-server sed vim -y
systemctl stop isc-dhcp-server

sed -i'' 's/^INTERFACESv4=""/INTERFACESv4="enp0s3"/g' /etc/default/isc-dhcp-server
sed -i'' 's/^INTERFACESv6=""/#INTERFACESv6=""/g' /etc/default/isc-dhcp-server

echo "ddns-update-style none;
log-facility local7;
authoritative;

default-lease-time 600;
max-lease-time 7200;

option domain-name \"$DOMAIN\";
option domain-name-servers 172.16.1.1;

shared-network LAN1 {
      subnet 172.16.1.0 netmask 255.255.255.0 {
      range 172.16.1.101 172.16.1.254;
      option routers 172.16.1.1;
  }
}" > /etc/dhcp/dhcpd.conf

DEBIAN_FRONTEND=noninteractive apt install iptables iptables-persistent -y

sed -i'' 's/^#net.ipv4.ip_forward=*/net.ipv4.ip_forward=/g' /etc/sysctl.conf
sysctl -f
iptables -t nat -A POSTROUTING -o enp0s8 -s 172.16.1.0/24 -j MASQUERADE
iptables -t nat -A PREROUTING -i enp0s8 --destination 192.168.1.0/24 -p tcp --dport 80 -j DNAT --to-destination 172.16.1.2:80
iptables -t nat -A PREROUTING -i enp0s8 --destination 192.168.1.0/24 -p tcp --dport 443 -j DNAT --to-destination 172.16.1.2:443
iptables -t nat -A PREROUTING -i enp0s8 --destination 192.168.1.0/24 -p tcp --dport 25 -j DNAT --to-destination 172.16.1.2:25
iptables-save > /etc/iptables/rules.v4

apt install bind9 -y

sed -i'' '13,$s/?*\/.*forwarders/forwarders/g' /etc/bind/named.conf.options
sed -i'' 's/?*\/.*0.0.0.0/\t192.168.1.1/' /etc/bind/named.conf.options
sed -i'' 's/?*\/.*};/};/' /etc/bind/named.conf.options
sed -i'' '16a\ \ \ \ \ \ allow-recursion { 192.168.1\/24; 172.16.1\/24; 127\/8; };' /etc/bind/named.conf.options
sed -i'' 's/dnssec-validation auto;/dnssec-validation no;/' /etc/bind/named.conf.options
sed -i'' 's/any/::/' /etc/bind/named.conf.options

echo '$TTL 3h
@ IN SOA ns admin 2024012801 1d 12h 1w 3h
          NS ns
          A 172.16.1.2
          MX 9 mx

ns          IN A 172.16.1.1
gate       IN A 172.16.1.1
server    IN A 172.16.1.2
mx         IN A 172.16.1.2
www      IN A 172.16.1.2' > /etc/bind/$DOMAIN

echo "\$TTL 3h
@ IN SOA ns admin 2024012801 1d 12h 1w 3h
          NS ns
          A 192.168.1.$EXTERNAL_OCTET
          MX 9 mx

ns       IN A 192.168.1.$EXTERNAL_OCTET
mx      IN A 192.168.1.$EXTERNAL_OCTET

www   CNAME ns" > /etc/bind/$DOMAIN.out

echo "zone \"$DOMAIN\" {
         type master;
         file \"/etc/bind/$DOMAIN\";
};" >> /etc/bind/named.conf.local

sed -i'' '9,$d' /etc/bind/named.conf
echo "include \"/etc/bind/named.conf.options\";

view \"inside\" {
           match-clients {
           172.16.1/24;
           127/8;
      };
      include \"/etc/bind/named.conf.local\";
      include \"/etc/bind/named.conf.default-zones\";
};

view \"outside\" {
        zone \"$DOMAIN\" {
           type master;
           file \"/etc/bind/$DOMAIN.out\";
      };
};" >> /etc/bind/named.conf

named-checkconf -z
rndc reload

echo "search $DOMAIN
nameserver 127.0.0.1" > /etc/resolv.conf

init 6 

gate_script

И запускаем файл на выполнение, его не обязательно даже делать выполняемым.

root@debian12:~# bash gate.sh

Последует просьба ввести имя хоста, домен и четвёртый октет ip адреса сети 192.168.1.[сюда будет подставлена цифра которую введём].

имя хоста, пишем: gate и жмём Enter
домен: corp1.un и Enter
четвёртый октет ip адреса: 31 и Enter

Это сделано для более лучшей масштабируемости. Далее начнётся отработка скрипта с настройкой виртуальной машины.

gate_script

После перезагрузки, переподключаемся по ssh уже на ip 192.168.1.31 (если четвёртый октет вводили цифру 31).Машина будет полностью настроена.

gate_script

Скрипт для автоматической настройки виртуальной машины "client1".

Как и ранее клонируем виртуальную машину linux debian из чистого установленного дистрибутива, без графической оболочки. Я назову эту машину для списка в virtualbox client1_corp1.un, далее проходим стандартные шаги по копированию виртуальной машины. 

client1_script

После того как машина скопируется, идём в настройки сетевых адаптеров и отключаем Адаптер 1 если он включен. Далее включаем Адаптер 2, в типе подключения выбираем "Внутренняя сеть". Имя прописываем той сети, название которой придумывали при создании машины "gate", у меня это corp1_un.

client1_script

Применяем настройки и запускаем виртуальную машину. Настроенная  виртуальная машина "gate" должна быть запущена. После запуска, заходим на неё в терминале и смотрим ip командой ip a, если ip нет, то пытаемся получить его: sudo dhclient -v

client1_script

Подключаемся по ssh например при помощи putty к машине "gate", на её "внешний" ip. И с неё на виртуальную машину "client1", так как пользователь ivan существует на обеих машинах, то указывать пользователя при подключении не требуется.

ivan@gate:~$ ssh 172.16.1.102

Последует вопрос о добавлении ключа, пишем yes и жмём Enter.

client1_script

После подключения перехожу в работу из под рута sudo -i, так-же как и на машине "gate" создаём файл с именем например client1.sh при помощи vim.tiny и вставляем туда текст комбинацией клавиш Shift+Insert, далее сохраняем файл и выходим из редактора :wq и Enter.

#!/bin/bash

echo 'Enter the hostname(example client1):'
read HOSTNAME
echo 'Enter the domain(example corp1.un):'
read DOMAIN

echo "$HOSTNAME.$DOMAIN" > /etc/hostname

echo "127.0.0.1 localhost

127.0.1.1 $HOSTNAME.$DOMAIN $HOSTNAME" > /etc/hosts

echo "# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface

auto enp0s8
iface enp0s8 inet dhcp" > /etc/network/interfaces

apt update
DEBIAN_FRONTEND=noninteractive apt -y install xorg xdm dbus-x11 xfce4 xfce4-terminal firefox-esr thunderbird

init 6

client1_script

В результате создастся текстовый файл с именем client1.sh, его и запускаем на выполнение

root@debian12:~# bash client1.sh

Последуют две просьбы ввести имя хоста и домен у меня это client1 и corp1.un ,далее начнётся установка графического окружения и остального п.о.

client1_script
client_script

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

client1_script

Скрипт для автоматической настройки виртуальной машины "server".

Клонируем виртуальную машину из ранее установленного дистрибутива Linux Debian, как мы делали для виртуальной машины "client1". В настройках отключаем сетевой адаптер 1, если он включен, и включаем сетевой адаптер 2. Выбираем пункт "подключения - внутренняя сеть". Имя сети, то которое придумывали для машины "gate", у меня это corp1_un. 

server_script

Применяем настройки и запускаем виртуальную машину. При этом машина "gate" должна быть запущена. Заходим в терминал виртуальной машины и смотрим ip адрес.

ivan@debian12:~$ ip a

Если ip адрес не получен по dhcp от "gate" пробуем сделать запрос вручную.

ivan@debian12:~$ sudo dhclient -v

Как видно у меня полученный ip это 172.16.1.106 

server_script

Так как маршрут во внутреннею сеть у меня не настроен подключаюсь при помощи ssh клиента putty сначала на внешний ip адрес(192.168.1.31) машины "gate", а с неё на эту машину.

server_script
server_script

Пользователь ivan существует на обоих машинах, поэтому подключение можно осуществить без имени пользователя

ivan@gate:~$ ssh 172.16.1.106

Если подключение осуществлять к другому аккаунту или с другого аккаунта, то запись выглядела-бы вот так:

ivan@gate:~$ ssh userX@172.16.1.106

Итак далее копируем текст скрипта от края, до края.

#!/bin/bash

echo 'Enter the hostname(example server):'
read HOSTNAME
echo 'Enter the domain(example corp1.un):'
read DOMAIN
echo 'Enter the fourth octet of ip address(example 2):'
read FOURTH_OCTET

echo "$HOSTNAME.$DOMAIN" > /etc/hostname

echo "127.0.0.1 localhost

127.0.1.1 $HOSTNAME.$DOMAIN $HOSTNAME" > /etc/hosts

echo "search $DOMAIN
nameserver 172.16.1.1" > /etc/resolv.conf

echo "# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface

auto enp0s8
iface enp0s8 inet static
              address 172.16.1.$FOURTH_OCTET/24
              gateway 172.16.1.1" > /etc/network/interfaces

apt update&&DEBIAN_FRONTEND=noninteractive apt install vim sed apache2 postfix dovecot-imapd mariadb-server roundcube roundcube-mysql samba -y

a2dissite 000-default.conf

echo "<VirtualHost *:80>
    ServerName $DOMAIN
    ServerAlias www.$DOMAIN
    DocumentRoot /var/www/html

    <Directory /var/www/html>
         AllowOverride All
         Require all granted
     </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>" > /etc/apache2/sites-available/default.conf

echo "<!DOCTYPE html>
<html>
      <head>
          <meta charset=\"utf-8\">
          <title>Простая HTML-страница</title>
      </head>

      <body>
          <h1>Welcome to $DOMAIN</h1>
           <p>You are on the www.$DOMAIN website</p>
           <!-- <img src=\"image.jpg\" alt=\"Изображение\"> -->

      </body>
</html>" > /var/www/html/index.html

a2ensite default.conf

sed -i'' "/^myhostname*/cmyhostname = mx.$DOMAIN" /etc/postfix/main.cf
sed -i'' "/^mydestination*/cmydestination = \$myhostname, $HOSTNAME.$DOMAIN, localhost.$DOMAIN, $DOMAIN, localhost" /etc/postfix/main.cf
sed -i'' 's/localhost:587/localhost:25/' /etc/roundcube/config.inc.php
sed -i'' 's/%u//' /etc/roundcube/config.inc.php
sed -i'' 's/%p//' /etc/roundcube/config.inc.php

sed -i'' "s/^#\ *Alias/\tAlias/" /etc/apache2/conf-enabled/roundcube.conf

mkdir /var/samba
chown games /var/samba
chmod 755 /var/samba

echo '[global]
         unix charset = UTF-8
         dos charset = cp866
         workgroup = WORKGROUP
         passdb backend = tdbsam
         security = user
         log file = /var/log/samba/log.%m
         max log size = 1000
         panic action = /usr/share/samba/panic-action %d

[storage]
      comment = Corporate file storage
      path = /var/samba
      guest ok = no
      read only = no
      force user = games

[printers]
      comment = All Printers
      browseable = no
      path = /var/tmp
      printable = yes
      guest ok = no
      read only = yes
      create mask = 0700

[print$]
      comment = Printer Drivers
      path = /var/lib/samba/printers
      browseable = yes
      read only = yes
      guest ok = no' > /etc/samba/smb.conf

init 6

Создаём файл при помощи любого текстового редактора, я использую vim.tiny, так-как он установлен по умолчанию, с именем например server.sh

ivan@debian12:~$ vim.tiny server.sh

И вставляем текст из буфера обмена при помощи Shift+Insert, нажимаем :wq и "Enter".

server_script

В результате у нас появится текстовый файл с именем server.sh, в Linux нет понятия расширения файлов, с точки зрения операционной системы все файлы одинаковые, они отличаются друг от друга только способом обработки, а расширения ставятся в основном для людей, чтобы было примерно понятно, что это за файл, а операционная система на расширения никак не ориентируется.

ivan@debian12:~$ ls

Запускаем его на выполнение

ivan@debian12:~$ sudo bash server.sh 

Так как этой командой мы явно указываем интерпретатор bash, для выполнения этого файла, то его не обязательно делать исполняемым. А вот если запускать его по другому, например:

ivan@debian12:~$ sudo ./server.sh

То его сначала надо сделать исполняемым

 ivan@debian12:~$ sudo chmod +x server.sh

После запуска последуют три просьбы:

Ввести имя хоста: server  и нажимаем "Enter"

Ввести суффикс доменного имени: corp1.un  и нажимаем "Enter"

Ввести четвёртый октет ip адреса, то-есть эта цифра будет подставлена в конец ip 172.16.1.[цифра]: 2  и нажимаем "Enter".

Начнётся процесс установки и настройки П.О.

server_script

После перезагрузки виртуальной машины, необходимо будет добавить пользователя ivan в базу данных samba, для этого снова подключаемся к уже настроенной машине "server"с "gate", можно и по имени хоста:

ivan@gate:~$ ssh server

И добавляем пользователя ivan  в samba

ivan@server:~$ sudo smbpasswd -a ivan

Придумываем м вводим пароль на вход в шару, у меня будет linux12345


server_script

Ну и далее можно проверить работоспособность настроенных сервисов. Почты, файлового сервера, веб сервера. Как мы делали выше, при ручной настройке машины "server".

server_script

Проверка samba сервера.

server_install

Проверка страницы сайта.

server_script

Проверка веб страницы почты.

server_script

Проверка оправки письма пользователю root.

server_install

Чтение письма от пользователя ivan: sudo cat /var/mail/root

© Copyright 2022 64-bits.ru - All Rights Reserved

Website Builder Software