Используемые термины: Svacer , Rocky , Linux .
Мы рассмотрим процесс установки, настройки и использования веб-портала Svacer на Rocky Linux. Мы будем использовать следующие программные продукты:
- Система Rocky Linux 9.
- СУБД PostgreSQL 15.
- HTTP-прокси NGINX.
В итоге, мы получим:
- Рабочий веб-портал Svacer для просмотра и обработки результатов статического анализа.
- Проксирование запросов через nginx с использованием https.
Приступим.
Подготовка системы
Установка и запуск СУБД
Установка Svacer
Использование NGINX для проксирования запросов
Настройка https
Дополнительные материалы
Предварительная настройка
Прежде чем перейти к настройке, подготовим нашу систему.
Время
1. Устанавливаем часовой пояс:
timedatectl set-timezone Europe/Moscow
* данной командой мы установим часовой пояс по московскому времени.
Посмотреть все доступные часовые пояса можно командой:
timedatectl list-timezones
2. Устанавливаем и запускаем службу для автоматической синхронизации времени:
dnf install chrony
systemctl enable chronyd —now
Настройка безопасности
Для корректной работы портала по сети, нам необходимо уделить внимание некоторым аспектам безопасности.
1. Настройка SELinux:
Вводим команду:
setsebool -P httpd_can_network_connect on
* данное правило разрешает httpd-сервису и веб-скриптам подключение по сети.
Или мы можем отключить SELinux , но желательно, ограничиться вышеописанной политикой.
2. Открываем необходимые порты в брандмауэре :
firewall-cmd —permanent —add-service={http,https}
firewall-cmd —reload
* где http и https — сервисы для веб-сервера (порты 80 и 443).
Читайте подробнее про настройку firewalld .
Установка и настройка PostgreSQL
В качестве СУБД мы должны использовать PostgreSQL. В нашем примере это будет версия 15. В Rocky Linux нужная версия сервера баз данных может быть установлена с использованием модулей репозитория postgresql. Разрешаем его использование:
dnf module disable postgresql
dnf module enable postgresql:15
* первой командой мы отключили любой используемый модуль postgresql , если он был включен. Вторая команда разрешает использование репозитория для PostgreSQL версии 15.
Выполняем установку postgresql:
dnf install postgresql-server postgresql-contrib
Инициализируем базу:
postgresql-setup initdb
Разрешаем и стартуем сервис, проверяем, что он запущен:
systemctl enable postgresql —now
systemctl status postgresql
Открываем командную строку postgresql:
sudo -upostgres psql
Создаем базу данных и пользователя:
> create database svace;
> create user svace with encrypted password ‘svace’;
* мы создали базу svace , а также одноименного пользователя с таким же паролем.
Предоставляем пользователю svace все права на базу svace :
> grant all privileges on database svace to svace;
Также сделаем его суперпользователем (необходимо для создания расширений в PostgreSQL):
> alter user svace superuser;
С настройкой базы закончили. Выходим из SQL оболочки:
> quit
Открываем конфигурационный файл:
vi /var/lib/pgsql/data/pg_hba.conf
После IPv4 local connections добавляем строку (отмечено желтым):
# IPv4 local connections:
host svace svace 127.0.0.1/32 md5
host all all 127.0.0.1/32 ident
* важно, чтобы данная строка была выше строки host all all … Она разрешает подключения к базе данных svace пользователю svace с проверкой пароля, хэш которого md5 .
Перезапускаем сервис postgresql:
systemctl restart postgresql
С базой мы закончили.
Установка и запуск Svacer
Устанавливаем curl. Он понадобится для загрузки файла с настройкой репозитория:
dnf install curl
Скачиваем файл репозитория и переносим его в каталог /etc/yum.repos.d :
curl -sLO https://repo.ispras.ru/rpm/ispras.repo
mv ispras.repo /etc/yum.repos.d/
Устанавливаем svacer:
dnf install svacer
* на все запросы подтверждения отвечаем Y .
Проверяем, чтобы в файле конфигурации svacer были выставлены правильные значения для подключения к СУБД:
vi /etc/default/svacer
SVACER_ARGS=»—pg postgres:// svace : svace @127.0.0.1:5432/ svace —store /var/lib/svacer/object_store»
* отмечено желтым, слева направо — имя пользователя и пароль для подключения к СУБД, имя базы данных.
При необходимости, эти значения необходимо поменять.
Теперь можно запустить svacer:
systemctl enable svacer —now
Не забываем проверить, запустилась ли служба:
systemctl status svacer
На порту 8080 запустится веб-приложение. Мы можем отправить запрос для проверки:
curl http://127.0.0.1:8080
В ответ должно вернуться что-то на подобие:
<!doctype html><html lang=»en»><head><meta charset=»utf-8″/><link rel=»icon» href=»/favicon.png»/><meta name=»viewport» content=»width=device-width,initial-scale=1″/><meta name=»theme-color» content=»#000000″/><meta name=»description» content=»Svace History Server Web UI»/><link rel=»manifest» href=»/manifest.json»/><script type=»text/javascript» src=»/api/auth_init.js»></script><title>Connecting to Svace Server</title><script defer=»defer» src=»/static/js/main.d895a63b.js»></script><link href=»/static/css/main.87a4d6b9.css» rel=»stylesheet»></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id=»root»></div></body></html>
Svacer запущен и работает.
Проксирование через NGINX
Следующим шагом настроить веб-прокси, чтобы обеспечить доступ по стандартным веб-портам.
Устанавливаем веб-сервер:
dnf install nginx
Сразу запустим его службу и разрешим автозапуск:
systemctl enable nginx —now
Создаем конфигурационный файл:
vi /etc/nginx/conf.d/svacer.conf
server {
listen 80 default_server;
server_name svacer.remontka.com;
client_max_body_size 0;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection «upgrade»;
proxy_pass http://127.0.0.1:8080;
}
}
* где server_name может быть любым (так как у нас данные виртуальный домен является default_server ), но лучше указать адрес, по которому пользователи будут заходить на портал.
Проверяем корректность конфигурационного файла и перечитываем конфигурацию nginx:
nginx -t && nginx -s reload
Открываем браузер и переходим по адресу http://<адрес сервера svacer> — должна открыться страница аутентификации Svacer. Вводим логин admin и пароль admin , чтобы войти в систему.
Настройка SSL
Теперь добьемся, чтобы наш портал работал по https. Для начала, нам нужно получить сертификат. Есть несколько способов это сделать:
- Сгенерировать самоподписанный сертификат (рекомендуется только для тестирования).
- Купить.
- Запросить у внутреннего центра сертификации ( например, у AD CS ).
- Получить бесплатно через Let’s Encrypt .
Как писалось выше, для тестирования нам подойдет сгенерированный самоподписанный сертификат. Сформируем для начала последовательность центра сертификации:
openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/ca.key -x509 -days 3650 -subj «/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=ca» -out /etc/ssl/ca.crt
Создадим каталог для хранения сертификатов nginx:
mkdir /etc/nginx/ssl
Сгенерируем файл запроса сертификата и закрытый ключ:
openssl req -newkey rsa:2048 -keyout /etc/nginx/ssl/svacer.key -out /etc/nginx/ssl/svacer.csr -nodes -days 731 -subj «/CN=svacer»
Выдадим клиентский сертификат, заверив его ключом центра сертификации:
openssl x509 -req -in /etc/nginx/ssl/svacer.csr -out /etc/nginx/ssl/svacer.crt -CA /etc/ssl/ca.crt -CAkey /etc/ssl/ca.key -CAcreateserial -days 731
* будет сформирован ключ svacer.crt . Мы используем ключи центра сертификации ca.crt и ca.key , которые сформировали ранее, а открытый ключ указали в nginx для аутентификации клиентов.
Открываем конфигурационный файл nginx:
vi /etc/nginx/conf.d/svacer.conf
Вносим изменения в настроки:
server {
listen 443 ssl default_server;
server_name svacer.remontka.com;
ssl_certificate /etc/nginx/ssl/svacer.crt;
ssl_certificate_key /etc/nginx/ssl/svacer.key;
…
* мы изменили порт 80 на 443 ssl, а также прописали открытый и закрытый ключи сгенерированных сертификатов. В боевой среде данные пути должны быть до ключей сертификата, купленного или полученного у доверенного центра сертификации.
Также добавим блок:
server {
listen 80;
server_name svacer.remontka.com;
return 301 https://$host$request_uri;
}
* данная настройка позволит перебросить все запросы с порта 80 на защищенный 443.
Проверяем конфигурацию и перечитываем ее:
nginx -t && nginx -s reload
Открываем браузер и переходим по адресу https://<адрес сервера svacer> — мы увидим предупреждение безопасности, если используем самоподписанный сертификат. Игнорируем и загружаем страницу.
Читайте также
1. Правильная настройка SSL в NGINX .