Установка и настройка Svacer на Rocky Linux
Используемые термины: 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.dmosk.ru;
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.dmosk.ru;
ssl_certificate /etc/nginx/ssl/svacer.crt;
ssl_certificate_key /etc/nginx/ssl/svacer.key;
...
* мы изменили порт 80 на 443 ssl, а также прописали открытый и закрытый ключи сгенерированных сертификатов. В боевой среде данные пути должны быть до ключей сертификата, купленного или полученного у доверенного центра сертификации.
Также добавим блок:
server {
listen 80;
server_name svacer.dmosk.ru;
return 301 https://$host$request_uri;
}
* данная настройка позволит перебросить все запросы с порта 80 на защищенный 443.
Проверяем конфигурацию и перечитываем ее:
nginx -t && nginx -s reload
Открываем браузер и переходим по адресу https://<адрес сервера svacer> — мы увидим предупреждение безопасности, если используем самоподписанный сертификат. Игнорируем и загружаем страницу.
Читайте также
1. Правильная настройка SSL в NGINX.