Установка GVM (Greenbone Vulnerability Management) 23.* на Debian 12
Greenbone — это программное обеспечение для сканирования уязвимостей и управления ими с открытым исходным кодом. Оно предоставляет набор тестов на сетевую уязвимость для поиска лазеек безопасности в системах и приложениях.
Установка зависимостей
Устанавливаем необходимые пакеты зависимостей.
apt-get install build-essential cmake pkg-config gnupg curl libglib2.0-dev libgpgme-dev libgnutls28-dev uuid-dev libssh-gcrypt-dev libhiredis-dev libxml2-dev libpcap-dev libnet1-dev libpaho-mqtt-dev libldap2-dev libradcli-dev libpq-dev libical-dev xsltproc libbsd-dev libssl-dev libmicrohttpd-dev gcc-mingw-w64 libpopt-dev libunistring-dev heimdal-dev perl-base bison libgcrypt20-dev libksba-dev rsync nmap libjson-glib-dev libcjson-dev libcurl4-gnutls-dev libsnmp-dev mosquitto python3 python3-pip python3-setuptools python3-packaging python3-wrapt python3-cffi python3-psutil python3-lxml python3-defusedxml python3-paramiko python3-redis python3-gnupg python3-impacket python3-paho-mqtt postgresql postgresql-contrib postgresql-server-dev-15 -y
Debian 11
, то нужно устанавливать пакет postgresql-server-dev-13
, который доступен в репозиториях.Создание пользователя
Создаем пользователя от которого будет работать GVM службы.
useradd -r -M -U -s /usr/sbin/nologin -c "GVM User" gvm
Сборка и установка компонентов
Скачиваем последние версии исходников пакетов входящих в состав системы GVM 23.* и распаковываем их.
Актуальные версии пакетов можно узнать по ссылкам:
- Releases · greenbone/gvm-libs
- Releases · greenbone/gvmd
- Releases · greenbone/pg-gvm
- Releases · greenbone/gsa
- Releases · greenbone/gsad
- Releases · greenbone/openvas-smb
- Releases · greenbone/openvas-scanner
- Releases · greenbone/ospd-openvas
mkdir -p /opt/gvm-source
cd /opt/gvm-source/
export GVM_LIBS_VERSION=22.14.0
export GVMD_VERSION=24.0.0
export PG_GVM_VERSION=22.6.5
export GSA_VERSION=24.0.1
export GSAD_VERSION=24.0.0
export OPENVAS_SMB_VERSION=22.5.6
export OPENVAS_SCANNER_VERSION=23.11.1
export OSPD_OPENVAS_VERSION=22.7.1
curl -f -L https://github.com/greenbone/gvm-libs/archive/refs/tags/v$GVM_LIBS_VERSION.tar.gz -o gvm-libs-$GVM_LIBS_VERSION.tar.gz
curl -f -L https://github.com/greenbone/gvmd/archive/refs/tags/v$GVMD_VERSION.tar.gz -o gvmd-$GVMD_VERSION.tar.gz
curl -f -L https://github.com/greenbone/pg-gvm/archive/refs/tags/v$PG_GVM_VERSION.tar.gz -o pg-gvm-$PG_GVM_VERSION.tar.gz
curl -f -L https://github.com/greenbone/gsa/archive/refs/tags/v$GSA_VERSION.tar.gz -o gsa-$GSA_VERSION.tar.gz
curl -f -L https://github.com/greenbone/gsa/releases/download/v$GSA_VERSION/gsa-dist-$GSA_VERSION.tar.gz -o gsa-$GSA_VERSION.tar.gz
curl -f -L https://github.com/greenbone/gsad/archive/refs/tags/v$GSAD_VERSION.tar.gz -o gsad-$GSAD_VERSION.tar.gz
curl -f -L https://github.com/greenbone/openvas-smb/archive/refs/tags/v$OPENVAS_SMB_VERSION.tar.gz -o openvas-smb-$OPENVAS_SMB_VERSION.tar.gz
curl -f -L https://github.com/greenbone/openvas-scanner/archive/refs/tags/v$OPENVAS_SCANNER_VERSION.tar.gz -o openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz
curl -f -L https://github.com/greenbone/ospd-openvas/archive/refs/tags/v$OSPD_OPENVAS_VERSION.tar.gz -o ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz
tar -xvzf gvm-libs-$GVM_LIBS_VERSION.tar.gz && mv gvm-libs-$GVM_LIBS_VERSION gvm-libs
tar -xvzf gvmd-$GVMD_VERSION.tar.gz && mv gvmd-$GVMD_VERSION gvmd
tar -xvzf pg-gvm-$PG_GVM_VERSION.tar.gz && mv pg-gvm-$PG_GVM_VERSION pg-gvm
mkdir gsa && tar -C "gsa" -xvzf gsa-$GSA_VERSION.tar.gz
tar -xvzf gsad-$GSAD_VERSION.tar.gz && mv gsad-$GSAD_VERSION gsad
tar -xvzf openvas-smb-$OPENVAS_SMB_VERSION.tar.gz && mv openvas-smb-$OPENVAS_SMB_VERSION openvas-smb
tar -xvzf openvas-scanner-$OPENVAS_SCANNER_VERSION.tar.gz && mv openvas-scanner-$OPENVAS_SCANNER_VERSION openvas-scanner
tar -xvzf ospd-openvas-$OSPD_OPENVAS_VERSION.tar.gz && mv ospd-openvas-$OSPD_OPENVAS_VERSION ospd-openvas
Далее последовательно собираем и устанавливаем пакеты.
gvm-libs
cd gvm-libs
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DSYSCONFDIR=/etc -DLOCALSTATEDIR=/var
make
make install
cd ../..
gvmd
cd gvmd
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DLOCALSTATEDIR=/var -DSYSCONFDIR=/etc -DGVM_DATA_DIR=/var -DGVMD_RUN_DIR=/run/gvmd -DOPENVAS_DEFAULT_SOCKET=/run/ospd/ospd-openvas.sock -DGVM_FEED_LOCK_PATH=/var/lib/gvm/feed-update.lock -DSYSTEMD_SERVICE_DIR=/lib/systemd/system -DDEFAULT_CONFIG_DIR=/etc/default -DLOGROTATE_DIR=/etc/logrotate.d
make
make install
cd ../..
pg-gvm
cd pg-gvm
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
make install
cd ../..
gsa
cd gsa
mkdir -p /usr/local/share/gvm/gsad/web
cp -rv * /usr/local/share/gvm/gsad/web
cd ..
gsad
cd gsad
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DSYSCONFDIR=/etc -DLOCALSTATEDIR=/var -DGVMD_RUN_DIR=/run/gvmd -DGSAD_RUN_DIR=/run/gsad -DLOGROTATE_DIR=/etc/logrotate.d
make
make install
cd ../..
openvas-smb
cd openvas-smb
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release
make
make install
cd ../..
openvas-scanner
cd openvas-scanner
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release -DINSTALL_OLD_SYNC_SCRIPT=OFF -DSYSCONFDIR=/etc -DLOCALSTATEDIR=/var -DOPENVAS_FEED_LOCK_PATH=/var/lib/openvas/feed-update.lock -DOPENVAS_RUN_DIR=/run/ospd
make
make install
cd ../..
ospd-openvas
cd ospd-openvas
python3 -m pip install . --prefix=/usr --no-warn-script-location
cd ..
openvasd
Устанавливаем язык программирования Rust
необходимый для сборки openvasd
.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
Собираем и устанавливаем.
cd openvas-scanner/rust
cargo build --release
cd target/release/
cp -rv openvasd /usr/local/bin/
cp -rv scannerctl /usr/local/bin/
cd ../../../..
greenbone-feed-sync
python3 -m pip install --prefix=/usr --no-warn-script-location greenbone-feed-sync
gvm-tools
python3 -m pip install --prefix=/usr --no-warn-script-location gvm-tools
Настройка системы
Настройка Redis
Установка сервера Redis.
apt-get install redis-server -y
Добавление конфигурации для запуска сервера Redis
для сканера.
cp /opt/gvm-source/openvas-scanner/config/redis-openvas.conf /etc/redis/
chown redis:redis /etc/redis/redis-openvas.conf
echo "db_address = /run/redis-openvas/redis.sock" | tee -a /etc/openvas/openvas.conf
Запускаем службу Redis
и добавляем ее в автозагрузку.
systemctl start redis-server@openvas.service
systemctl enable redis-server@openvas.service
Добавление пользователя gvm
в группу redis
, чтобы иметь доступ к сокету redis unix по адресу /run/redis-openvas/redis.sock
usermod -aG redis gvm
Настройка разрешений
Настройка прав доступа на каталоги относящиеся к системе GVM.
mkdir -p /var/lib/notus
mkdir -p /run/gvmd
chown -R gvm:gvm /var/lib/gvm
chown -R gvm:gvm /var/lib/openvas
chown -R gvm:gvm /var/lib/notus
chown -R gvm:gvm /var/log/gvm
chown -R gvm:gvm /run/gvmd
chmod -R g+srw /var/lib/gvm
chmod -R g+srw /var/lib/openvas
chmod -R g+srw /var/log/gvm
chown gvm:gvm /usr/local/sbin/gvmd
chmod 6750 /usr/local/sbin/gvmd
Импорт ключа подписи
Для проверки целостности загруженных исходных файлов используется GnuPG используется открытый ключ подписи сообщества Greenbone
импортированный в связку ключей текущего пользователя. Импортируем его.
curl -f -L https://www.greenbone.net/GBCommunitySigningKey.asc -o /tmp/GBCommunitySigningKey.asc
export GNUPGHOME=/tmp/openvas-gnupg
mkdir -p $GNUPGHOME
gpg --import /tmp/GBCommunitySigningKey.asc
echo "8AE4BE429B60A59B311C2E739823FAA60ED1E580:6:" | gpg --import-ownertrust
export OPENVAS_GNUPG_HOME=/etc/openvas/gnupg
sudo mkdir -p $OPENVAS_GNUPG_HOME
sudo cp -r /tmp/openvas-gnupg/* $OPENVAS_GNUPG_HOME/
sudo chown -R gvm:gvm $OPENVAS_GNUPG_HOME
Настройка sudo
Для того чтобы пользователи группы gvm
запускали приложение openvas-scanner
от имени пользователя root
через sudo
, добавим соответствующее разрешение.
echo "gvm ALL = NOPASSWD: $(which openvas)" >> /etc/sudoers.d/gvm
Настройка PostgreSQL
Настройка PostgreSQL. Создание пользователя и базы данных, настройка разрешений и расширений базы данных.
sudo -Hiu postgres createuser gvm
sudo -Hiu postgres createdb -O gvm gvmd
sudo -Hiu postgres psql -c 'create role dba with superuser noinherit;' gvmd
sudo -Hiu postgres psql -c 'grant dba to gvm;' gvmd
Настройка пользователя Admin
Создаем учетную запись администратора и настраиваем ее на выполнение функций владельца импорта каналов.
sudo gvmd --create-user=admin --password='<password>'
sudo gvmd --modify-setting 78eceaec-3385-11ea-b237-28d24461215b --value `sudo gvmd --get-users --verbose | grep admin | awk '{print $2}'`
Настройка служб для Systemd
ospd-openvas
cat << EOF > /etc/systemd/system/ospd-openvas.service
[Unit]
Description=OSPd Wrapper for the OpenVAS Scanner (ospd-openvas)
Documentation=man:ospd-openvas(8) man:openvas(8)
After=network.target networking.service redis-server@openvas.service mosquitto.service
Wants=redis-server@openvas.service mosquitto.service notus-scanner.service
ConditionKernelCommandLine=!recovery
[Service]
Type=exec
User=gvm
Group=gvm
RuntimeDirectory=ospd
RuntimeDirectoryMode=2775
PIDFile=/run/ospd/ospd-openvas.pid
ExecStart=/usr/local/bin/ospd-openvas --foreground --unix-socket /run/ospd/ospd-openvas.sock --pid-file /run/ospd/ospd-openvas.pid --log-file /var/log/gvm/ospd-openvas.log --lock-file-dir /var/lib/openvas --socket-mode 0o770 --mqtt-broker-address localhost --mqtt-broker-port 1883 --notus-feed-dir /var/lib/notus/advisories
SuccessExitStatus=SIGKILL
Restart=always
RestartSec=60
[Install]
WantedBy=multi-user.target
EOF
gvmd
cat << EOF > /lib/systemd/system/gvmd.service
[Unit]
Description=Greenbone Vulnerability Manager daemon (gvmd)
After=network.target networking.service postgresql.service ospd-openvas.service
Wants=postgresql.service ospd-openvas.service
Documentation=man:gvmd(8)
ConditionKernelCommandLine=!recovery
[Service]
Type=forking
User=gvm
Group=gvm
PIDFile=/run/gvmd/gvmd.pid
RuntimeDirectory=gvmd
RuntimeDirectoryMode=2775
ExecStart=/usr/local/sbin/gvmd --osp-vt-update=/run/ospd/ospd-openvas.sock --listen-group=gvm
Restart=always
TimeoutStopSec=10
[Install]
WantedBy=multi-user.target
EOF
gsad
cat << EOF > /etc/systemd/system/gsad.service
[Unit]
Description=Greenbone Security Assistant daemon (gsad)
Documentation=man:gsad(8) https://www.greenbone.net
After=network.target gvmd.service
Wants=gvmd.service
[Service]
Type=forking
User=gvm
Group=gvm
RuntimeDirectory=gsad
RuntimeDirectoryMode=2775
PIDFile=/run/gsad/gsad.pid
ExecStart=/usr/local/sbin/gsad --listen=0.0.0.0 --port=9392 --http-only
Restart=always
TimeoutStopSec=10
[Install]
WantedBy=multi-user.target
Alias=greenbone-security-assistant.service
EOF
openvasd
cat << EOF > /etc/systemd/system/openvasd.service
[Unit]
Description=OpenVAS Daemon
Documentation=https://github.com/greenbone/openvas-scanner
After=ospd-openvas.service
Wants=ospd-openvas.service
ConditionKernelCommandLine=!recovery
[Service]
Type=exec
User=gvm
RuntimeDirectory=openvasd
RuntimeDirectoryMode=2775
PIDFile=/run/openvasd/openvasd.pid
ExecStart=/usr/local/bin/openvasd --feed-path /var/lib/openvas/plugins --feed-check-interval 3600 --api-key some_api_key --ospd-socket /run/ospd/ospd-openvas.sock --read-timeout 1 --result-check-interval 1 --listening 127.0.0.1:3000 --storage-type inmemory
SuccessExitStatus=SIGKILL
Restart=always
RestartSec=60
[Install]
WantedBy=multi-user.target
EOF
Информирование systemd
о новых служебных файлах.
systemctl daemon-reload
Первичная синхронизации каналов
Перед запуском служб, необходимо выполнить первичную синхронизацию данных, которые предоставляются Greenbone Community Feed
.
Синхронизация всегда состоит из двух этапов:
- Загрузка изменений с помощью скрипта
greenbone-feed-sync
- Загрузка изменений в память и базу данных демоном
Выполняем первичную синхронизацию.
sudo -u gvm greenbone-feed-sync
После завершения синхронизации, добавим задание в cron
(в моем случае задания добавлены для root пользователя
) выполнение синхронизаций один раз в день.
# Update Feed data from Greenbone Community Feed
0 23 * * * sudo -u gvm greenbone-feed-sync 2>&1
Запуск служб
Включаем запуск служб при каждом запуске системы.
systemctl enable ospd-openvas
systemctl enable gvmd
systemctl enable gsad
systemctl enable openvasd
Запускаем службы.
systemctl start ospd-openvas
systemctl start gvmd
systemctl start gsad
systemctl start openvasd
Проверка состояния служб.
systemctl status ospd-openvas
systemctl status gvmd
systemctl status gsad
systemctl status openvasd
Тюнинг
Для повышение производительности системы, рекомендую выполнить следующие настройки системы.
Эти настройки повышают устойчивость сервера под нагрузкой, увеличивая очередь подключений и позволяя более гибко управлять памятью.
echo 'net.core.somaxconn = 1024' >> /etc/sysctl.conf
echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
sysctl -p
Эта настройка отключает поддержку Transparent Huge Pages (THP) для улучшения производительности некоторых приложений, снижая накладные расходы памяти.
cat > /etc/systemd/system/disable_thp.service << 'EOL'
[Unit]
Description=Disable Kernel Support for Transparent Huge Pages (THP)
[Service]
Type=simple
ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
EOL
systemctl daemon-reload
systemctl enable --now disable_thp
Обсуждение
Нет комментариев.