Настройка центра сертификации (ЦС) на базе HQ-SRV
Задачи:
- Использовать отечественные алгоритмы шифрования.
- Выдавать сертификаты на 365 дней.
- Обеспечить доверие сертификатам для HQ-CLI.
- Выдать сертификаты для веб-серверов (Moodle, Wiki, NGINX).
- Перенастроить веб-сервисы на HTTPS с доверенными сертификатами.
Шаги для выполнения:
Для генерации сертификатов мы будем использовать библиотеку openssl
Организацию CA начнем со следующей команды:
openssl req -newkey rsa:4096 -nodes -keyout ca.key -x509 -days 365 -out ca.crt
Generating a RSA private key .................+++++ .............................................................+++++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [RU]: RU State or Province Name (full name) []: Tatarstan Locality Name (eg, city) []: Kazan Organization Name (eg, company) []: KIT KAI Organizational Unit Name (eg, section) []: DEMO Common Name (e.g., your name or your server's hostname) []: AU-Team CA Email Address []: example@gmail.com
Теперь мы имеем закрытый ключ, и сам сертификат (файла csr при этом не будет)
[root@hq-srv ~]# ls -l total 12 -rw-r--r-- 1 root root 1159 Feb 28 15:57 ca.crt -rw------- 1 root root 1708 Feb 28 15:56 ca.key
Создание сертификата для веб-сервера
Создаем закрытый ключ:
openssl genrsa -out web.key 4096
Запрос на подпись:
openssl req -key web.key -new -out web.csr
Здесь так же начнется ввод параметров:
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: RU State or Province Name (full name) [Some-State]: Tatarstan Locality Name (eg, city) []: Kazan Organization Name (eg, company) [Internet Widgits Pty Ltd]: KIT KAI Organizational Unit Name (eg, section) []:DEMO Common Name (e.g. server FQDN or YOUR name) []:*.au-team.irpo Email Address []: example@gmail.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password P@ssw0rd An optional company name []:
Мы использовали wildcard домен *.au-team.irpo, чтобы не генерировать сертификаты отдельно под wiki и moodle. Создайте файл openssl.cnf:
[req] req_extensions = req_ext [req_ext] #Эту строку указывать необязательно, так как Common Name сертификата wildcard subjectAltName = DNS:wiki.au-team.irpo, DNS:moodle.au-team.irpo extendedKeyUsage = serverAuth keyUsage = digitalSignature
Этот файл указывает, что сертификат можно будет использовать для создания TLS на веб-сервере Теперь подписываем этот запрос через наш CA:
openssl x509 -req -in web.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out web.crt -days 365 -sha256 -extfile openssl.cnf -extensions req_ext
Получаем:
[root@hq-srv ~]# ls -l total 24 ca.crt ca.key ca.srl web.crt web.csr web.key
Перенастройка веб-серверов на HTTPS
Для каждого веб-сервиса (Moodle, Wiki):
# Скопируйте сертификаты и ключи на серверы: scp /home/student/web.crt net_admin@:/home/net_admin scp /home/student/web.key net_admin@ :/home/net_admin mv /home/user/web.* /etc/nginx # Настройте конфигурацию NGINX: sudo nano /etc/nginx/sites-available/reverse-proxy.conf # Добавьте или измените секцию: server { listen 443 ssl; server_name moodle.au-team.irpo; ssl_certificate /etc/nginx/ssl/web.crt; ssl_certificate_key /etc/nginx/ssl/web.key; location / { proxy_pass http://192.168.10.2/moodle/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_redirect off; } } server { listen 443 ssl; server_name wiki.au-team.irpo; ssl_certificate /etc/nginx/ssl/web.crt; ssl_certificate_key /etc/nginx/ssl/web.key; location / { proxy_pass http://192.168.10.2/moodle/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; } } server { listen 80; server_name moodle.au-team.irpo; return 301 https://\$host\$request_uri; } server { listen 80; server_name wiki.au-team.irpo; return 301 https://\$host\$request_uri; } # Перезапустите веб-сервер: sudo systemctl restart nginx
Подправим moodle
HQ-SRV: nano /var/www/html/moodle/config.php: $CFG->wwwroot = 'https://moodle.au-team.irpo'; $CFG->sslproxy = true; nano /etc/apache2/sites-available/moodle.conf: ServerName 192.168.10.2 directory Options +FollowSymLinks systemctl restart apache2
Обеспечение доверия сертификатам на HQ-CLI
# Скопируйте корневой сертификат на HQ-CLI: scp /home/student/ca.crt user@ip_hq_cli:/home/user mv /home/user/ca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates
Проверка HTTPS-соединений
curl -k https://<доменное_имя> # Убедитесь, что предупреждений браузера нет.
Настройка принт-сервера CUPS на сервере HQ-SRV
Задачи:
- Настроить виртуальный PDF-принтер на HQ-SRV.
- Подключить виртуальный принтер на клиенте HQ-CLI и установить его как принтер по умолчанию.
Шаги для выполнения:
1. Установка CUPS на HQ-SRV
sudo apt update sudo apt install cups cups-pdf -y sudo systemctl start cups sudo systemctl enable cups
2. Настройка CUPS
# Откройте конфигурационный файл CUPS: sudo nano /etc/cups/cupsd.conf # Внесите изменения для разрешения удалённого доступа: # Найдите и измените строки: Listen localhost:631 # Замените на: Listen *:631 # Найдите все секции <Location /> и добавьте Allow all, Пример: <Location /> Order allow,deny Allow all <Location> # Сохраните изменения и перезапустите CUPS: sudo systemctl restart cups
Доступ к веб-интерфейсу CUPS:
Откройте в браузере hq-cli: https://hq-srv.au-team.irpo:631
Для удалённого управления убедитесь, что CUPS настроен для доступа через веб.
Зайдите на вкладку Администрирование, залогиньтесь под root P@ssw0rd. Добавить принтер --> CUPS-PDF (Virtual PDF Printer) --> поставить галочку на разрешить совместный доступ к этому принтеру --> Создать HP --> HP DesignJet 750c pcl, 1.0 (en) --> Добавить принтер
Переходим в настройки --> Добавить принтер ipp://hq-srv.au-team.irpo и выбираем наш принтер, делаем его по умолчанию и отправляем тестовую печать, переходим в веб --> Задания и смотрим все задания, если все сделано правильно то там должно быть отправленое наше задание
Реализуйте механизм инвентаризации машин HQ-SRV и HQ-CLI через Ansible на BR-SRV
Задачи:
- Плейбук должен собирать информацию о рабочих местах:
- Имя компьютера.
- IP-адрес компьютера.
- Отчёты, собранные с машин, должны быть размещены в каталоге
/etc/ansible/PC_INFO
в формате.yml
. Название файла соответствует имени инвентаризованного компьютера. - Рабочий каталог Ansible должен быть расположен в
/etc/ansible
.
Установка и настройка Ansible
На сервере BR-SRV выполните:
sudo apt update sudo apt install ansible -y
Перейдите в каталог /etc/ansible
:
cd /etc/ansible
Создайте файл инвентаря inventory.yml
sudo nano /etc/ansible/inventory.yml
Создание плейбука
Создайте файл плейбука inventory.yml
:
sudo nano /etc/ansible/inventory.yml
Добавьте следующий контент:
--- - name: Collect workstation information hosts: all gather_facts: yes tasks: - name: Gather computer name and IP address set_fact: computer_name: "{{ inventory_hostname }}" ip_address: "{{ ansible_default_ipv4.address }}" - name: Save inventory data to YAML file on the remote machine copy: content: | computer_name: "{{ computer_name }}" ip_address: "{{ ip_address }}" dest: "/tmp/{{ computer_name }}.yml" mode: '0644' - name: Create directory on BR-SRV for storing PC info delegate_to: localhost run_once: true file: path: "/etc/ansible/PC_INFO" state: directory mode: '0755' - name: Fetch inventory data to BR-SRV fetch: src: "/tmp/{{ computer_name }}.yml" dest: "/etc/ansible/PC_INFO/" flat: yes
Запуск плейбука
Запустите плейбук для выполнения инвентаризации:
ansible-playbook -i hosts /etc/ansible/inventory.yml
Проверка отчётов
Убедитесь, что файлы отчётов созданы в каталоге /etc/ansible/PC_INFO
:
ls /etc/ansible/PC_INFO cat /etc/ansible/PC_INFO/HQ-SRV.yml cat /etc/ansible/PC_INFO/HQ-CLI.yml
Исправление предупреждения интерпретатора Python
Добавьте в файл инвентаря явный путь к интерпретатору Python для HQ-CLI:
HQ-CLI: ansible_host: 192.168.200.2 ansible_user: user ansible_python_interpreter: /usr/bin/python3
Или добавьте в глобальную конфигурацию Ansible:
sudo nano /etc/ansible/ansible.cfg
Добавьте строки:
[defaults] interpreter_python = /usr/bin/python3
Реализация механизма резервного копирования конфигурации для HQ-RTR и BR-RTR через Ansible на BR-SRV
Задачи:
- Собрать информацию о конфигурации сетевых устройств HQ-RTR и BR-RTR.
- Создать резервные копии конфигураций:
- Файлы конфигурации динамической маршрутизации (например, FRR).
- Настройки межсетевого экрана (iptables).
- Параметры настройки сети (интерфейсы).
- Настройки DHCP.
- Сохранить резервные копии в папке
NETWORK_INFO
на BR-SRV.
Шаги для выполнения:
Плейбук для резервного копирования
sudo nano /etc/ansible/rtr.yml
Добавьте следующий контент:
--- - name: Backup network configuration hosts: rtr gather_facts: yes become: yes tasks: - name: Gather OSPF configuration (FRR) fetch: src: /etc/frr/frr.conf dest: /etc/ansible/NETWORK_INFO/{{ inventory_hostname }}/frr.conf flat: yes - name: Gather firewall rules (iptables) fetch: src: /etc/iptables.rules.v4 dest: /etc/ansible/NETWORK_INFO/{{ inventory_hostname }}/iptables_rules.v4 flat: yes - name: Gather network settings (interfaces) fetch: src: /etc/network/interfaces dest: /etc/ansible/NETWORK_INFO/{{ inventory_hostname }}/interfaces flat: yes - name: Gather DHCP settings fetch: src: /etc/dhcp/dhcpd.conf dest: /etc/ansible/NETWORK_INFO/{{ inventory_hostname }}/dhcpd.conf flat: yes when: inventory_hostname == "hq-rtr" - name: Ensure NETWORK_INFO directory exists on BR-SRV delegate_to: localhost run_once: true file: path: "/etc/ansible/NETWORK_INFO" state: directory mode: '0755'
Запуск плейбука
Запустите плейбук для резервного копирования:
ansible-playbook -i hosts /etc/ansible/rtr.yml
Проверка результатов
Убедитесь, что файлы конфигурации сохранены в папке NETWORK_INFO
:
ls /etc/ansible/NETWORK_INFO/HQ-RTR ls /etc/ansible/NETWORK_INFO/BR-RTR
Откройте файлы для проверки содержимого:
cat /etc/ansible/NETWORK_INFO/HQ-RTR/ospfd.conf cat /etc/ansible/NETWORK_INFO/HQ-RTR/iptables_rules.v4
Примечания
Если файл конфигурации отсутствует на удалённой машине, плейбук продолжит выполнение из-за использования ignore_errors: yes
.
Настройка мониторинга устройств на сервере HQ-SRV с помощью NetData
Задачи:
- Мониторить устройства: HQ-RTR, HQ-SRV, BR-RTR и BR-SRV.
- Отображать в визуальном интерфейсе:
- Нагрузка на ЦП.
- Объем занятой оперативной памяти.
- Использование основного накопителя.
- Обеспечить доступность по URL:
https://mon.au-team.irpo
. - Установить логин и пароль для доступа:
admin
/P@ssw0rd
.