Для MSP с 45 клиентами ручное управление задачами невозможно. Мы автоматизировали всё через GVM API (GMP protocol):
#!/usr/bin/env python3
# gvm_automation.py — автоматическое создание задач для новых клиентов
from gvm.connections import UnixSocketConnection
from gvm.protocols.gmp import Gmp
from gvm.transforms import EtreeTransform
def create_client_scan(client_name, hosts, ssh_login, ssh_password, schedule_day):
"""Создаёт полный набор для нового клиента: credentials, target, task, schedule"""
connection = UnixSocketConnection(path='/run/gvmd/gvmd.sock')
transform = EtreeTransform()
with Gmp(connection=connection, transform=transform) as gmp:
gmp.authenticate('admin', 'SecureP@ssw0rd_2026')
# 1. Создаём SSH credentials
cred_response = gmp.create_credential(
name=f"{client_name} - SSH",
credential_type=gmp.types.CredentialType.USERNAME_PASSWORD,
login=ssh_login,
password=ssh_password
)
cred_id = cred_response.get('id')
# 2. Создаём target с credentials
target_response = gmp.create_target(
name=f"{client_name} - All servers",
hosts=hosts,
ssh_credential_id=cred_id,
alive_test=gmp.types.AliveTest.CONSIDER_ALIVE
)
target_id = target_response.get('id')
# 3. Создаём задачу
task_response = gmp.create_task(
name=f"{client_name} - Weekly Full Scan",
config_id='daba56c8-73ec-11df-a475-002264764cea', # Full and Fast
target_id=target_id,
scanner_id='08b69003-5fc2-4037-a479-93b440211c73'
)
task_id = task_response.get('id')
print(f"Created scan task for {client_name}: {task_id}")
return task_id
# Добавляем нового клиента одной командой
create_client_scan(
client_name="Логистика Плюс",
hosts=["172.16.0.0/24", "172.16.1.10-172.16.1.30"],
ssh_login="gvm-scanner",
ssh_password="ScanP@ss_2026",
schedule_day="Thursday"
)
Для масштабирования сканирования на 200+ хостов важна оптимизация параметров:
# /etc/openvas/openvas.conf — оптимизация производительности
max_hosts = 20 # Сканируем до 20 хостов параллельно
max_checks = 4 # До 4 NVT-проверок на хост одновременно
be_nice = yes # Снижаем приоритет CPU для сканера
test_alive_hosts_only = yes # Пропускаем недоступные хосты
auto_enable_dependencies = yes
network_timeout = 15 # Таймаут сетевых проверок (секунды)
# Ограничиваем ресурсы Docker
# docker-compose.yml:
# deploy:
# resources:
# limits:
# cpus: '4'
# memory: 8G
Оставить комментарий