В современной корпоративной среде инфраструктура редко ограничивается одним сервером. В типовом сценарии мы имеем маршрутизаторы, DNS-серверы, контроллеры домена, веб-серверы, системы мониторинга, резервное копирование и разграничение прав доступа. Задача администратора — не просто запустить эти службы, а связать их в единую, отказоустойчивую и защищённую экосистему. Особенно остро вопрос встаёт при необходимости внедрения доменной структуры, централизованной аутентификации, разграничения прав пользователей, организации сетевых хранилищ и автоматизации управления конфигурациями. В этой статье мы на практическом примере разберём развёртывание полного цикла корпоративной ИТ-инфраструктуры: от настройки Samba DC как контроллера домена до создания RAID-массива, NFS-шары, системы мониторинга, контейнеризации и защищённых туннелей. Все действия выполняются на операционных системах семейства RedOS (EL-совместимых дистрибутивах).
Глава 2
Теперь, когда общая картина корпоративной инфраструктуры ясна, переходим к непосредственной настройке. Весь дальнейший материал представляет собой пошаговое руководство, разбитое на логические блоки. Мы будем двигаться последовательно: сначала изменим стандартные порты SSH для повышения безопасности, затем настроим DNS-записи для наших будущих веб-сервисов. Далее нас ждёт ключевой этап — поднятие контроллера домена на базе Samba, ввод клиентской машины в домен, настройка Kerberos и SSSD для централизованной аутентификации. После этого мы создадим RAID0 из двух дисков, организуем NFS-экспорт и примонтируем общую папку на клиенте. Отдельное внимание уделим синхронизации времени через собственный NTP-сервер, настройке Ansible для управления всеми хостами, развёртыванию контейнеров с веб-приложением и классическому LAMP-стеку. В конце настроим проброс портов на маршрутизаторах, установим reverse-прокси на ISP и финально проверим доступность всех сервисов.
Важное замечание: перед выполнением команд убедитесь, что:
- Все виртуальные машины имеют сетевую доступность друг к другу согласно схеме;
- Образ Additional.iso подключён к тем машинам, где это указано;
- Пользователи sshuser, username, net_admin созданы и имеют пароль P@ssw0rd.
Начинаем с базовых настроек SSH и DNS.
на серверах HQ-SRV и BR- SRV
nano /etc/ssh/sshd_config
меняем Port 2026
Разрешаем подключение по порту 2026
semanage port -a -t ssh_port_t -p tcp 2026
Перезапускаем ssh
systemctl restart sshd
НА HQ-SRV
cd /opt/dns
nano au-team.irpo
ВОТ ЭТИ СТРОЧКИ ПОМЕНЯЙ НА
wiki CNAME hq-rtr.au-team.irpo.
moodle CNAME hq-rtr.au-team.irpo.
НА ЭТИ СТРОЧКИ
docker A 172.16.2.1
web A 172.16.1.1
ПЕРЕЗАПУСКАЕМ NAMED НА HQ-SRV
systemctl restart named
1) на BR-SRV
dnf install samba* krb5* docker-ce docker-compose -y
dnf install -y samba* krb5* -y
mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
mv /etc/krb5.conf /etc/krb5.conf.bak
nano /etc/krb5.conf.d/crypto-policies
Изменяем файл следующим образом: ставим курсор на существующую строчку permitted_enctypes,
нажимаем CTRL+K и три раза CTRL+U
ТАК БУДЕТ ВЫГЛЯДЕТ ПРИМЕРНО
default_tgs_enctypes
default_tkt_enctypes
permitted_enctypes
samba-tool domain provision --use-rfc2307 --interactive
Жмём Enter 3 раза ENTER. Далее на моменте DNS backend пишем “NONE”. Затем указываем
пароль администратора: P@ssw0rd
BACKEND NONE
P@ssw0rd
cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
nano /etc/krb5.conf
В realms добавляем kdc:
после default_domain
kdc = br-srv.au-team.irpo
ПОСЛЕ В DOMAIN_REALM:
br-srv = AU-TEAM.IRPO
systemctl enable --now samba
ЭТО ТОЖЕ НА BR-SRV
kinit administrator@AU-TEAM.IRPO
ПАРОЛЬ ВВОДИМ P@ssw0rd
Переходим на HQ-CLI
sudo -i
ПАРОЛЬ ВВОДИМ
echo "172.30.100.2 au-team.irpo" >> /etc/hosts
realm join -U -v Administrator@AU-TEAM.IRPO ( если не работает systemctl restart sssd НА HQ-CLI)
В конце добавления должна появиться надпись “Successfully enrolled machine in realm”
на BR-SRV
samba-tool group add hq
for i in {1..5}; do samba-tool user add hquser$i P@ssw0rd; samba-tool group addmembers hq hquser$i; done
Проверяем:
samba-tool group listmembers hq
на HQ-CLI
sudo -i
nano /etc/sssd/sssd.conf
Меняем значение ad_server 2 СТРОЧКА ПОСЛЕ [domain/]на br-srv.au-team.irpo
systemctl restart sssd
nano /etc/krb5.conf
Приводим файл к следующему виду:
В [realms] ниже закоменченных строк добавляем
AU-TEAM.IRPO = {
kdc = br-srv.au-team.irpo
admin_server = br-srv.au-team.irpo
}
В [domain_realm]
.au-team.irpo = AU-TEAM.IRPO
au-team.irpo = AU-TEAM.IRPO
Далее переходим в «Настройки» - «Сетевые учетные записи».
Выбираем Kerberos 2 пункт, вводим administrator@AU-TEAM.IRPO и P@ssw0rd.
ИЛИ В КОНСОЛИ ПИШЕМ kinit administrator@AU-TEAM.IRPO и пароль
sss_cache -E
visudo
ВТАВЛЯЕМ В ПЕРВУЮ ПУСТУЮ СТРОКУ
%hq@au-team.irpo ALL=(ALL) /bin/cat, /bin/grep, /bin/id
Выходим: нажимаем ctrl+x, затем y
id hquser1@AU-TEAM.IRPO
su - hquser1@AU-TEAM.IRPO
sudo cat /etc/hosts | grep au-team
ПАРОЛЬ ВВОДИМ
id
exit
2) на HQ-SRV
Тип диска - SATA СОЗДАТЬ В НАСТРОЙКАХ МАШИНЫ, “Create a new virtual disk”, Maximum disk size - 1. В
имени диска меняем цифру на конце на 10, 11 соответственно для 2 дисков.
ПРИМЕР: HQ-SRV-11.vmdk
Нажимаем Finish.
Проверяем наличие дисков. . Должны быть sdb, sdc
lsblk
fdisk /dev/sdb уже потом sdc
g
n
Жмем Enter 3 раза
W
mdadm --create /dev/md0 --level=0 --raid-device=2 /dev/sdb1 /dev/sdc1
Далее проверяем, у md0 в типе должно быть написано raid0
lsblk
mdadm --detail --scan --verbose >> /etc/mdadm.conf
mkfs.ext4 /dev/md0
mkdir /raid
nano /etc/fstab
В конец добавляем следующую строчку: не обяз ее ровнять
/dev/md0 /raid ext4 defaults 0 0
systemctl daemon-reload
mount -a
df -h
Должна быть строчка с примонтированной директорией /raid
3) на HQ-SRV dnf install nfs4-acl-tools -y
dnf install nfs4-acl-tools mariadb-server httpd php php-mysqlnd php-cli -y
ЕСЛИ ВЫХОДИТ ХРЕНЬ с PID И НОМЕР ТО ПИШЕМ
kill -9 и этот номер и снова скачиваем
mkdir /raid/nfs
chown nobody:nobody /raid/nfs
chmod 777 /raid/nfs
nano /etc/exports
Добавляем в него следующую строчку
/raid/nfs 192.168.200.0/28 (rw)
Выходим из nano: нажимаем ctrl+x, затем y
exportfs -a
systemctl enable --now nfs-server
На HQ-CLI: если ты не вышел с hquser1 выйди в root
mkdir /mnt/nfs
nano /etc/fstab
Добавляем следующую строчку: можно не ровнять
192.168.100.2:/raid/nfs /mnt/nfs nfs auto 0 0
Выходим из nano: нажимаем ctrl+x, затем y
systemctl daemon-reload
mount -a
df -h должна была появиться запись
4) На ISP
nano /etc/chrony.conf
Добавляем # к трём любым строчкам, начинающимся с server ntp и дописываем ещё три строчки
local stratum 5
allow 0/0
hwtimestamp *
Выходим из nano: нажимаем ctrl+x, затем y
systemctl restart chronyd
chronyc sources
На HQ-SRV, HQ-CLI, BR-RTR, BR-SRV:
nano /etc/chrony.conf
Комментируем все сервера и добавляем созданный:
server 172.16.1.1 iburst prefer
Выходим из nano: нажимаем ctrl+x, затем y
systemctl restart chronyd
chronyc sources
5) На BR-SRV:
nano /etc/ansible/demo.ini
[all]
hq-srv ansible_host=192.168.100.2 ansible_user=sshuser ansible_port=2026
hq-cli ansible_host=192.168.200.2 ansible_user=username
hq-rtr ansible_host=192.168.100.1 ansible_user=net_admin
br-rtr ansible_host=172.30.100.1 ansible_user=net_admin
Выходим из nano: нажимаем ctrl+x, затем y
ssh-keygen -t rsa
Жмем Enter всегда до конца выполнения команды
Далее копируем ключи. На вопрос с сохранием отпечатка пишем yes,
все пароли – P@ssw0rd
ЭТО ДЕЛАЕМ ТУТ ЖЕ В ТЕРМИНАЛЕ
ssh-copy-id -p 2026 sshuser@192.168.100.2
ssh-copy-id username@192.168.200.2
ssh-copy-id net_admin@192.168.100.1
ssh-copy-id net_admin@172.30.100.1
nano /etc/ansible/ansible.cfg
[defaults]
Inventory = /etc/ansible/demo.ini
ask_pass = False
host_ket_cheking = False
interpreter_python=/usr/bin/python
Выходим из nano: нажимаем ctrl+x, затем y
ansible -m ping all
6) На BR-SRV:
Перед развертыванием выполняем монтирование ISO образа с необходимыми Docker-образами.
Для этого переходим через VMWare WorkStation в настройки виртуальной машины.
Там выбираем CD/DVD driver 1 > Use ISO image file > Browse > Additional.iso > Open > OK.
После этого заново заходим в настройки BR-SRV, выбираем CD/DVD driver 1 > Connected > OK.
На BR-SRV:
mount /dev/cdrom /mnt
dnf install docker-ce docker-compose -y
systemctl enable --now docker
docker --version
docker load < /mnt/docker/site_latest.tar
docker load < /mnt/docker/mariadb_latest.tar
Проверка:
docker images
nano site.yml
ВСТАВЛЯЕМ ЭТО:
services:
db:
image: mariadb:10.11
container_name: db
environment:
MARIADB_DATABASE: testdb
MARIADB_USER: test
MARIADB_PASSWORD: Passw0rd
MARIADB_ROOT_PASSWORD: Passw0rd
volumes:
- db_data:/var/lib/mysql
restart: unless-stopped
testapp:
image: site
container_name: testapp
environment:
DB_TYPE: maria
DB_HOST: db
DB_NAME: testdb
DB_USER: test
DB_PASS: Passw0rd
DB_PORT: 3306
ports:
- "8080:8000"
depends_on:
- db
restart: unless-stopped
volumes:
db_data:
Выходим из nano: нажимаем ctrl+x, затем y
docker-compose -f site.yml up -d
На HQ-CLI:
Открываем браузер и заходим на 172.30.100.2:8080
7) На HQ-SRV:
Перед развертыванием выполняем монтирование ISO образа с необходимыми Docker-образами.
Для этого переходим через VMWare WorkStation в настройки виртуальной машины.
Там выбираем CD/DVD driver 1 > Use ISO image file > Browse > Additional.iso > Open < OK.
После этого заново заходим в настройки HQ-SRV, выбираем CD/DVD driver 1 > Connected > OK.
mount /dev/cdrom /mnt
dnf install mariadb-server httpd php php-mysqlnd php-cli -y
systemctl enable --now mariadb httpd
Для проверки на hq-cli открываем в браузере 192.168.100.2
mysql_secure_installation
P@ssw0rd
n
n
y
y
y
y
mysql -u root -p
P@ssw0rd
CREATE USER 'web'@'localhost' IDENTIFIED BY 'P@ssw0rd';
CREATE DATABASE webdb DEFAULT CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON webdb.* TO 'web'@'localhost';
flush privileges;
\q
mysql -u root -p webdb < /mnt/web/dump.sql
P@ssw0rd
cp /mnt/web/index.php /var/www/html
cp /mnt/web/logo.png /var/www/html
nano /var/www/html/index.php
Меняем значения:
$servername = “localhost”; также ост
$username = “web”; меняем
$password = “P@ssw0rd”; меняем
$dbname = “webdb”; меняем
Выходим из nano: нажимаем ctrl+x, затем y
systemctl restart httpd
На hq-cli снова открываем в браузере 192.168.100.2
8) На BR-RTR:
firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" destination address="172.16.2.2" forward-port port="2026" protocol="tcp" to-port="2026" to-addr="172.30.100.2"' --permanent
firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" destination address="172.16.2.2" forward-port port="8080" protocol="tcp" to-port="8080" to-addr="172.30.100.2"' --permanent
firewall-cmd --reload
systemctl restart firewalld
На hq-cli в браузере открываем 172.16.2.2:8080, должен открыться сайт как в задании 6.
Пробуем подключиться по ssh, должно подключить к br-srv:
ssh sshuser@172.16.2.2 -p 2026
На HQ-RTR:
firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" destination address="172.16.1.2" forward-port port="2026" protocol="tcp" to-port="2026" to-addr="192.168.100.2"' --permanent
firewall-cmd --zone=trusted --add-rich-rule='rule family="ipv4" destination address="172.16.1.2" forward-port port="8080" protocol="tcp" to-port="80" to-addr="192.168.100.2"' --permanent
firewall-cmd --reload
systemctl restart firewalld
На hq-cli в браузере открываем 172.16.1.2:8080, должен открыться сайт как в задании 7.
Пробуем подключиться по ssh, должно подключить к hq-srv:
ssh sshuser@172.16.1.2 -p 2026
9) На ISP:
dnf install nginx httpd-tools -y
dnf install nginx -y
systemctl enable --now nginx
htpasswd -c /etc/nginx/.htpasswd WEB
P@ssw0rd
P@ssw0rd
nano /etc/nginx/nginx.conf
В файле комментируем созданный по умолчанию сервер и добавляем
в него 2 других сервера:
server {
listen 80;
server_name docker.au-team.irpo;
location / {
proxy_pass http://172.16.5.2:8080;
}
}
server {
listen 80;
server_name web.au-team.irpo;
location / {
proxy_pass http://172.16.4.2:8080;
}
}
server {
listen 80;
server_name docker.au-team.irpo;
location / {
proxy_pass http://172.16.2.2:8080;
}
}
server {
listen 80;
server_name web.au-team.irpo;
location / {
proxy_pass http://172.16.1.2:8080;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
systemctl restart nginx
nano /etc/selinux/config
Меняем параметр SELINUX на disabled
На hq-cli в браузере открываем http://docker.au-team.irpo, должен открыться сайт из задания 6.
Открываем http://web.au-team.irpo, там сайт из задания 7.
10) на ISP:
dnf install httpd-tools -y
htpasswd -c /etc/nginx/.htpasswd WEB
P@ssw0rd
P@ssw0rd
nano /etc/nginx/nginx.conf
Добавляем строчки auth_basic на 2 сервере ПОСЛЕ Location и перед proxy_pass
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
Проверяем:
nginx -t
systemctl restart nginx
На hq-cli в браузере открываем web.au-team.irpo
логин - WEB, пароль - P@ssw0rd. Должен открыться сайт из задания 7.
11) Установка Яндекс Браузера:
Заходим в «Окно настройки РЕДОС», переходим во вкладку «Партнерские приложения» и нажимаем на Яндекс браузер. После загрузки нажимаем на клавишу WIN и выбираем «Другие приложения».
Переходим на вторую страницу и запускаем браузер. это не надо
На HQ-CLI:
sudo -i
dnf install yandex-browser-stable
ГЛАВА 3
Безопасность корпоративной сети — это не только межсетевые экраны и сложные пароли. Ключевым элементом защиты является шифрование трафика и управление цифровыми сертификатами. В изолированных или гибридных инфраструктурах использование публичных удостоверяющих центров часто невозможно или экономически нецелесообразно. На помощь приходит собственный центр сертификации (CA), который позволяет выпускать сертификаты для внутренних веб-серверов, почтовых систем и VPN-шлюзов. Но создание CA — лишь половина дела. Сертификаты нужно правильно применить: настроить веб-серверы на HTTPS, защитить IP-туннели с помощью IPsec, разграничить трафик межсетевым экраном, организовать централизованный сбор логов и мониторинг, а также защитить SSH от брутфорса с помощью fail2ban. В этой статье мы на реальных примерах разберём полный цикл: от импорта пользователей в домен до настройки защищённого веб-доступа, шифрованных туннелей, логирования, мониторинга и инвентаризации через Ansible.
Переходим к практической реализации. Наш сценарий разбит на девять логических этапов, каждый из которых является обязательным кирпичиком в общей архитектуре безопасности и управляемости инфраструктуры.
Что мы сделаем:
- Импортируем пользователей из CSV-файла в домен au-team.irpo с помощью bash-скрипта;
- Развернём центр сертификации на базе OpenSSL с поддержкой российских криптоалгоритмов ГОСТ;
- Настроим веб-сервер Nginx на использование выпущенных сертификатов для HTTPS;
- Установим и настроим КриптоПро на клиентской машине для доверия к нашему CA;
- Перенастроим IP-туннель с базового на шифрованный с использованием StrongSwan (IPsec);
- Настроим межсетевой экран (firewalld) на маршрутизаторах с зонами internal/external;
- Организуем централизованный сбор логов всех устройств на сервер через rsyslog с ротацией через logrotate;
- Развернём систему мониторинга Prometheus + Grafana и подключим к ней узлы;
- Реализуем инвентаризацию машин через Ansible и защиту SSH с помощью fail2ban.
Перед началом выполнения команд убедитесь, что:
- Образ Additional.iso подключён к BR-SRV и HQ-CLI;
- Все хосты имеют корректные IP-адреса из задания;
- На HQ-SRV уже установлен и настроен DNS-сервер.
Начнём с импорта пользователей в домен. Открываем терминал на BR-SRV.
1) Выполните импорт пользователей в домен au-team.irpo:
на BR-SRV:
Монтируем образ Additional.iso
mount /dev/cdrom /mnt
cat /mnt/Users.csv
nano import.sh
пишем скрипт
#!/bin/bash
tail -n +2 /mnt/Users.csv | while IFS=';' read -r firstName lastName _ _ ou _ _ _ _ password
do
if ! samba-tool ou list | grep -q "OU=$ou"; then
samba-tool ou create "OU=$ou"
fi
samba-tool user create "${firstName}${lastName}" "$password" \
--userou="OU=$ou"
done
chmod +x import.sh
./import.sh
samba-tool user setpassword MalachiAlexander
На HQ-CLI попробовать зайти по данным:
Логин: MalachiAlexander@au-team.irpo
Пароль: P@ssw0rd1
2) Выполните настройку центра сертификации на базе HQ-SRV:
на HQ-SRV
dnf install openssl-gost-engine
openssl-switch-config gost
update-crypto-policies --set GOST-ONLY:GOST
update-crypto-policies --show
openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out CA.key
openssl req -new -x509 -md_gost12_256 -days 365 -key CA.key -out CA.crt -subj "/C=RU/ST=Russia/L=Kazan/O=MCK-KTITS/OU=MCK-KTITS CA/CN=MCK-KTITS CA Root"
openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out au-team.irpo.key
nano au-team.irpo.ext
И добавляем туда следующее:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = au-team.irpo
DNS.2 = docker.au-team.irpo
DNS.3 = web.au-team.irpo
IP.1 = 172.16.1.2
IP.2 = 172.16.2.2
openssl req -new -md_gost12_256 -key au-team.irpo.key -out au-team.irpo.csr -subj "/C=RU/L=Kazan/O=AU-TEAM Site GOST/CN=*.au-team.irpo"
openssl x509 -req -in au-team.irpo.csr -CA CA.crt -CAkey CA.key -CAcreateserial -out au-team.irpo.crt -days 30 -extfile au-team.irpo.ext
cat au-team.irpo.crt CA.crt > fullchain.crt
openssl-switch-config default
update-crypto-policies --set DEFAULT
mkdir -p /home/sshuser/certs
cp fullchain.crt /home/sshuser/certs
cp au-team.irpo.key /home/sshuser/certs
cp CA.crt /home/sshuser/certs
chmod 755 -R /home/sshuser/certs
на ISP
dnf install openssl-gost-engine -y
openssl-switch-config gost
update-crypto-policies --set GOST-ONLY:GOST
update-crypto-policies --show
mkdir -p /etc/ssl/site
scp -P 2026 sshuser@172.16.1.2:/home/sshuser/certs/* /etc/ssl/site
nano /etc/nginx/nginx.conf
добавляем серверы https после http
серверов:
server {
listen 443 ssl;
server_name docker.au-team.irpo;
ssl_certificate /etc/ssl/site/fullchain.crt;
ssl_certificate_key /etc/ssl/site/au-team.irpo.key;
ssl_ciphers GOST2012-GOST8912-GOST8912:HIGH:MEDIUM;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://172.16.2.2:8080;
}
}
server {
listen 443 ssl;
server_name web.au-team.irpo;
ssl_certificate /etc/ssl/site/fullchain.crt;
ssl_certificate_key /etc/ssl/site/au-team.irpo.key;
ssl_ciphers GOST2012-GOST8912-GOST8912:HIGH:MEDIUM;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://172.16.1.2:8080;
}
}
nginx -t
systemctl restart nginx
на HQ-CLI:
Монтируем Additional.iso:
mount /dev/cdrom /mnt
cp -r /mnt/cryptopro/linux-amd64/ .
scp -P 2026 sshuser@192.168.100.2:/home/sshuser/certs/CA.crt /home/username
chmod +x linux-amd64/*.sh
./linux-amd64/install_gui.sh
Открывается установщик КриптоПро, нажимаем далее:
Здесь необходимо выбрать все пакеты с помощью пробел и
нажимаем далее:
Начинаем установку пакетов КриптоПро:
В процесс установки необходимо подтвердить установку пакетов:
При запросе лицензионного ключа, выбираем позже:
Выходим из установщика:
Находим приложение «Инструменты КриптоПро» и запускаем его:
После открытия приложения необходимо перемещать мышь в окне
или нажимать клавиши для генерации случайной последовательности:
Добавляем корневой сертификат во вкладку «Сертификаты», выбрав
хранилище сертификатов «Доверенные корневые центры сертификации»
и «Устанавливаем сертификат».
Выйдет уведомление о добавление сертификата, нажимаем «ОК».
И добавляем сертификат центра, который копировали ранее: CA.crt
Проверяем наличие сертификата в хранилище:
Запускаем браузер Яндекс.Браузер и проверяем сайты
https://web.au-team.irpo и https://docker.au-team.irpo, что подключения защищены:
3) Перенастройте ip-туннель с базового до уровня туннеля,
обеспечивающего шифрование трафика
Устанавливаем strongswan на HQ-RTR и BR-RTR:
dnf install strongswan -y
systemctl enable --now strongswan
на HQ-RTR:
nano /etc/strongswan/swanctl/conf.d/swanctl.conf
Добавляем конфигурацию IPSec:
connections {
my-tunnel {
local_addrs = 172.16.1.2
remote_addrs = 172.16.2.2
local {
auth = psk
}
remote {
auth = psk
}
children {
net {
mode = transport
esp_proposals = aes256-sha256
}
}
}
}
secrets {
ike-1 {
secret = "P@ssw0rd"
}
}
systemctl restart strongswan
на BR-RTR
nano /etc/strongswan/swanctl/conf.d/swanctl.conf
Добавляем конфигурацию IPSec:
connections {
my-tunnel {
local_addrs = 172.16.2.2
remote_addrs = 172.16.1.2
local {
auth = psk
}
remote {
auth = psk
}
children {
net {
mode = transport
esp_proposals = aes256-sha256
}
}
}
}
secrets {
ike-1 {
secret = "P@ssw0rd"
}
}
systemctl restart strongswan
Принудительно инициируем соединение (BR-RTR или HQ-RTR):
swanctl --initiate --child net
swanctl --list-conns
с HQ-RTR:
tcpdump -i ens33 -n host 172.16.2.2
4) Настройте межсетевой экран на маршрутизаторах HQ-RTR и
BR-RTR на сеть в сторону ISP
На HQ-RTR:
firewall-cmd --permanent --zone=external --change-interface=ens33
firewall-cmd --permanent --zone=internal --change-interface=ens34
firewall-cmd --permanent --zone=internal --change-interface=ens34.100
firewall-cmd --permanent --zone=internal --change-interface=ens34.200
firewall-cmd --permanent --zone=internal --add-interface=tun0
firewall-cmd --permanent --new-policy int-to-ext
firewall-cmd --permanent --policy int-to-ext --add-ingress-zone=internal
firewall-cmd --permanent --policy int-to-ext --add-egress-zone=external
firewall-cmd --permanent --policy int-to-ext --set-target=ACCEPT
firewall-cmd --permanent --zone=external --add-service=http
firewall-cmd --permanent --zone=external --add-service=https
firewall-cmd --permanent --zone=external --add-service=dns
firewall-cmd --permanent --zone=external --add-service=ntp
firewall-cmd --permanent --zone=external --add-port=2026/tcp
firewall-cmd --permanent --zone=external --add-port=8080/tcp
firewall-cmd --permanent --zone=external --add-protocol=gre
firewall-cmd --permanent --zone=external --add-port=500/udp
firewall-cmd --permanent --zone=external --add-port=4500/udp
firewall-cmd --permanent --zone=external --add-protocol=esp
firewall-cmd --permanent --zone=external --add-protocol=ah
firewall-cmd --permanent --zone=internal --add-protocol=ospf
firewall-cmd --permanent --zone=external --add-forward-port=port=2026:proto=tcp:toport=2026:toaddr=192.168.100.2
firewall-cmd --permanent --zone=external --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.100.2
firewall-cmd --permanent --direct --add-passthrough ipv4 -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
firewall-cmd --reload
На BR-RTR:
firewall-cmd --permanent --zone=external --change-interface=ens33
firewall-cmd --permanent --zone=internal --change-interface=ens34
firewall-cmd --permanent --zone=internal --add-interface=tun0
firewall-cmd --permanent --new-policy int-to-ext
firewall-cmd --permanent --policy int-to-ext --add-ingress-zone=internal
firewall-cmd --permanent --policy int-to-ext --add-egress-zone=external
firewall-cmd --permanent --policy int-to-ext --set-target=ACCEPT
firewall-cmd --permanent --zone=external --add-service=http
firewall-cmd --permanent --zone=external --add-service=https
firewall-cmd --permanent --zone=external --add-service=dns
firewall-cmd --permanent --zone=external --add-service=ntp
firewall-cmd --permanent --zone=external --add-port=2026/tcp
firewall-cmd --permanent --zone=external --add-port=8080/tcp
firewall-cmd --permanent --zone=external --add-protocol=gre
firewall-cmd --permanent --zone=external --add-port=500/udp
firewall-cmd --permanent --zone=external --add-port=4500/udp
firewall-cmd --permanent --zone=external --add-protocol=esp
firewall-cmd --permanent --zone=external --add-protocol=ah
firewall-cmd --permanent --zone=internal --add-protocol=ospf
firewall-cmd --permanent --zone=external --add-forward-port=port=2026:proto=tcp:toport=2026:toaddr=172.30.100.2
firewall-cmd --permanent --zone=external --add-forward-port=port=8080:proto=tcp:toport=8080:toaddr=172.30.100.2
firewall-cmd --permanent --direct --add-passthrough ipv4 -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
firewall-cmd --reload
5) Настройте принт-сервер cups на сервере HQ-SRV
на HQ-SRV:
dnf install cups cups-pdf -y --nogpgcheck
systemctl enable --now cups
nano /etc/cups/cupsd.conf
В строке Listen localhost:631 меняем localhost на *:
В строках с доступом на сервер и с доступом на страницу админа
добавляем строки Allow all после deny:
#Restrict access to the server
#Restrict access to the admin pages
systemctl restart cups
на HQ-SRV:
lpadmin -x Virtual_PDF
lpadmin -p PDF -E -v cups-pdf:/ -m "CUPS-PDF_noopt.ppd"
lpstat -p
Переходим в настройки на HQ-CLI и добавляем принтер. Для этого
сначала необходимо разблокировать доступ к добавлению и изменению
настроек:
Вводим IP-адрес сервера HQ-SRV 192.168.100.2 и выбираем принтер:
После
добавления принтера, настраиваем принтер для
использования по умолчанию, необходимо, что появилась галочка у пункта
«Использовать по умолчанию».
После этого, дополнительно проверяем, выбрав пункт «Сведения о
принтере», что принтер действительно с HQ-SRV. Должен быть IP HQ-SRV.
6) Реализуйте логирование при помощи rsyslog на устройствах HQRTR, BR-RTR, BR-SRV:
на HQ-SRV:
nano /etc/rsyslog.conf
Необходимо расскоментировать строки связанные с udp (module и
input):
В конце добавляем шаблон для записи логов с удаленных серверов
в /opt и исключения hq-srv из записи в папку /opt:
$template RemoteLogs,"/opt/%HOSTNAME%/%HOSTNAME%.log"
if $hostname != 'hq-srv' then {
*.warning ?RemoteLogs
& stop
}
На клиентах HQ-RTR, BR-RTR, BR-SRV в файле /etc/rsyslog.conf
добавляем запись, для отправки логов на сервер логов (можно также в
конце):
nano /etc/rsyslog.conf
*.warning @192.168.100.2:514
На HQ-RTR, BR-RTR, BR-SRV, HQ-SRV перезапускаем службу rsyslog:
systemctl restart rsyslog
На HQ-SRV
nano /etc/logrotate.d/remote_logs
/opt/*/*.log {
weekly
rotate 4
compress
minsize 10M
missingok
notifempty
sharedscripts
postrotate
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}
На HQ-RTR, BR-RTR, BR-SRV, HQ-SRV
systemctl restart logrotate
7) На сервере HQ-SRV реализуйте мониторинг устройств с
помощью открытого программного обеспечения
на сервере HQ-SRV
dnf install -y grafana prometheus prometheus-node_exporter --nogpgcheck
nano /etc/prometheus/prometheus.yml
Редактируем там строчку, добавив адреса 192.168.100.2:9100 и
172.30.100.2:9100:
static_configs: - targets: ["localhost:9090","192.168.100.2:9100","172.30.100.2:9100"]
systemctl enable --now grafana-server
systemctl enable --now prometheus
systemctl enable --now node_exporter
на BR-SRV
dnf install -y prometheus-node_exporter
systemctl enable --now node_exporter
Переходим на HQ-CLI для настройки Grafana. Открываем браузер и
переходим по адресу http://192.168.100.2:3000
admin:admin
Задаём новый пароль P@ssw0rd
Добавляем подключение к Prometheus. Для этого переходим во
вкладку Connections и добавляем новое подключение через «Add new
connection»
Находим в DataSources Prometheus
В connection пишем адрес Prometheus – http://localhost:9090
После чего Datasource Prometheus должно успешно добавиться.
Добавляем Dashboard, выбрав вкладку Dashboards и создаём
дашборд «Create Dashboard»
Импортируем Dashboard, выбрав «Import Dashboard» dashboard 11074 и загружаем его «Load» снизу выбираем прометеус и import
на HQ-SRV
nano /opt/dns/au-team.irpo
mon A 192.168.100.2
systemctl restart named
Теперь открываем мониторинг на HQ-CLI через адрес http://mon.au-team.irpo:3000
8) Реализуйте механизм инвентаризации машин HQ-SRV и HQCLI через Ansible на BR-SRV:
Монтируем образ Additional.iso:
mount /dev/cdrom /mnt
на BR-SRV
cp /mnt/playbook/get_hostname_address.yml /etc/ansible
nano /etc/ansible/demo.ini
[inventory]
hq-cli ansible_host=192.168.200.2 ansible_user=username
hq-srv ansible_host=192.168.100.2 ansible_port=2026 ansible_user=sshuser
nano /etc/ansible/get_hostname_address.yml
---
- name: Inventory of HQ-SRV and HQ-CLI
hosts: inventory
gather_facts: yes
tasks:
- name: получение данных с хоста
copy:
dest: /etc/ansible/PC-INFO/{{ ansible_hostname }}.yml
content: |
Hostname: {{ ansible_hostname }}
IP_Address: {{ ansible_default_ipv4.address }}
delegate_to: localhost
mkdir -p /etc/ansible/PC-INFO
cd /etc/ansible
ansible-playbook get_hostname_address.yml -i demo.ini
ls /etc/ansible/PC-INFO
cat /etc/ansible/PC-INFO/hq-cli.yml
cat /etc/ansible/PC-INFO/hq-srv.yml
9) На HQ-SRV настройте программное обеспечение fail2ban для
защиты ssh
на HQ-SRV
dnf install fail2ban -y --nogpgcheck
nano /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 2026
filter = sshd
maxretry = 3
bantime = 60
findtime = 120
systemctl restart fail2ban
systemctl enable --now fail2ban
fail2ban-client status sshd
* systemctl restart chronyd