- Início
- Gerador de tráfego
- Runner
Runner
Visão Geral
Seção intitulada “Visão Geral”runner.sh é o orquestrador de suítes que executa todos os scripts numerados em um diretório de suíte em ordem, captura a saída e registra os metadados dos resultados. Ele é instalado em /opt/traffic-generator/suites/runner.sh na VM.
runner.sh <suite-name> [--dry-run]Argumentos:
| Argumento | Obrigatório | Descrição |
|---|---|---|
suite-name | Sim | Nome do diretório da suíte (ex.: web-app-attacks, api-attacks) |
--dry-run | Não | Exibe o que seria executado sem rodar nenhum script |
Exemplos:
# Executar a suíte web-app-attacks/opt/traffic-generator/suites/runner.sh web-app-attacks
# Dry-run para visualizar os scripts de api-attacks/opt/traffic-generator/suites/runner.sh api-attacks --dry-run
# Executar simulação de bot/opt/traffic-generator/suites/runner.sh bot-simulationConfiguração
Seção intitulada “Configuração”config.env
Seção intitulada “config.env”O runner lê a configuração de /opt/traffic-generator/config.env:
# Obrigatório: FQDN de destino (domínio do load balancer F5 XC)TARGET_FQDN=demo.example.com
# Opcional: IP de origem direta para testes de linha de base (ignora o F5 XC)TARGET_ORIGIN_IP=Este arquivo é gravado automaticamente durante o provisionamento do Terraform a partir das variáveis target_fqdn e target_origin_ip. Para alterar o destino após a implantação, edite este arquivo diretamente na VM.
Substituição de Variáveis de Ambiente
Seção intitulada “Substituição de Variáveis de Ambiente”Qualquer variável em config.env pode ser substituída exportando-a antes de executar a suíte:
# Substituir o FQDN de destino para uma única execuçãoTARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh web-app-attacks
# Substituir via exportexport TARGET_FQDN=staging.example.com/opt/traffic-generator/suites/runner.sh web-app-attacksO caminho do próprio arquivo de configuração também pode ser substituído:
CONFIG_FILE=/tmp/my-config.env /opt/traffic-generator/suites/runner.sh web-app-attacksModo Dry-Run
Seção intitulada “Modo Dry-Run”O sinalizador --dry-run exibe cada script que seria executado sem de fato executá-lo:
/opt/traffic-generator/suites/runner.sh web-app-attacks --dry-runSaída:
=== 01-sqli.sh ===[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/01-sqli.sh demo.example.com=== 02-xss.sh ===[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/02-xss.sh demo.example.com=== 03-command-injection.sh ===[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/03-command-injection.sh demo.example.com=== 04-path-traversal.sh ===[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/04-path-traversal.sh demo.example.com=== 05-nikto-scan.sh ===[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/05-nikto-scan.sh demo.example.com=== 06-nuclei-scan.sh ===[DRY-RUN] Would execute: /opt/traffic-generator/suites/web-app-attacks/06-nuclei-scan.sh demo.example.com=== Suite Complete ===Passed: 0 | Failed: 0 | Skipped: 6Results: /opt/traffic-generator/results/20260425-143000-web-app-attacksUse o dry-run para verificar a estrutura da suíte após a implantação ou antes de executá-la contra um novo destino.
Diretório de Resultados
Seção intitulada “Diretório de Resultados”Cada execução de suíte cria um diretório de resultados com timestamp:
/opt/traffic-generator/results/<YYYYMMDD-HHMMSS>-<suite-name>/Estrutura:
/opt/traffic-generator/results/20260425-143000-web-app-attacks/ meta.json 01-sqli.sh.log 02-xss.sh.log 03-command-injection.sh.log 04-path-traversal.sh.log 05-nikto-scan.sh.log 06-nuclei-scan.sh.logA saída padrão (stdout) e a saída de erro (stderr) de cada script são capturadas em um arquivo .log nomeado de acordo com o script.
Formato do meta.json
Seção intitulada “Formato do meta.json”O arquivo meta.json registra os metadados de execução da suíte:
{ "suite": "web-app-attacks", "target": "demo.example.com", "started": "2026-04-25T14:30:00Z", "completed": "2026-04-25T14:45:23Z", "status": "completed", "passed": 5, "failed": 1, "skipped": 0}| Campo | Descrição |
|---|---|
suite | Nome da suíte |
target | FQDN de destino utilizado na execução |
started | Timestamp UTC de quando a suíte foi iniciada |
completed | Timestamp UTC de quando a suíte foi concluída |
status | running durante a execução, completed ao finalizar |
passed | Número de scripts que saíram com código 0 |
failed | Número de scripts que saíram com código diferente de zero |
skipped | Número de scripts ignorados (não executáveis ou dry-run) |
Executando Scripts Individualmente
Seção intitulada “Executando Scripts Individualmente”Cada script pode ser executado de forma independente sem o runner:
# Executar um único script diretamente/opt/traffic-generator/suites/web-app-attacks/01-sqli.sh demo.example.com
# Executar um ataque específico de API/opt/traffic-generator/suites/api-attacks/01-vampi-owasp-top10.sh demo.example.comOs scripts aceitam o FQDN de destino como primeiro argumento posicional. Eles não leem config.env diretamente — somente o runner faz isso. Ao executar de forma independente, você deve passar o FQDN explicitamente.
Executando Todas as Suítes em Sequência
Seção intitulada “Executando Todas as Suítes em Sequência”Para executar todas as suítes em sequência:
for suite in web-app-attacks api-attacks bot-simulation reconnaissance ssl-scanning javascript-exploits traffic-generation; do echo "=========================================" echo "Starting suite: ${suite}" echo "=========================================" /opt/traffic-generator/suites/runner.sh "$suite" echo ""doneIsso gera tráfego abrangente para todos os recursos de segurança do F5 XC. Espere que a execução completa leve de 45 a 80 minutos, dependendo dos tempos de resposta do destino.
Execução Remota via SSH
Seção intitulada “Execução Remota via SSH”Execute suítes a partir da sua máquina local sem manter uma sessão SSH:
TGEN_IP=$(terraform output -raw public_ip)
# Executar uma única suítessh azureuser@${TGEN_IP} '/opt/traffic-generator/suites/runner.sh web-app-attacks'
# Executar uma suíte com substituição de destinossh azureuser@${TGEN_IP} 'TARGET_FQDN=staging.example.com /opt/traffic-generator/suites/runner.sh api-attacks'
# Executar em segundo plano (seguro contra desconexão)ssh azureuser@${TGEN_IP} 'nohup /opt/traffic-generator/suites/runner.sh web-app-attacks > /tmp/web-app-attacks.log 2>&1 &'
# Verificar resultados posteriormentessh azureuser@${TGEN_IP} 'ls -la /opt/traffic-generator/results/ | tail -5'ssh azureuser@${TGEN_IP} 'cat /opt/traffic-generator/results/$(ls -t /opt/traffic-generator/results/ | head -1)/meta.json'Para suítes de longa duração, use nohup ou tmux para evitar que a desconexão do SSH encerre o processo:
ssh azureuser@${TGEN_IP} 'tmux new-session -d -s traffic "/opt/traffic-generator/suites/runner.sh reconnaissance"'
# Reconectar posteriormente para acompanhar o progressossh -t azureuser@${TGEN_IP} 'tmux attach-session -t traffic'Fluxo de Execução
Seção intitulada “Fluxo de Execução”-
Carregar configuração — O runner lê o
config.env(ou a substituição viaCONFIG_FILE), e em seguida verifica oTARGET_FQDNno ambiente. -
Validar suíte — Confirma que o diretório de suíte nomeado existe sob o diretório de suítes. Lista as suítes disponíveis caso não seja encontrado.
-
Criar diretório de resultados — Cria
/opt/traffic-generator/results/<timestamp>-<suite>/e grava ometa.jsoninicial comstatus: running. -
Executar scripts — Itera pelos arquivos que correspondem a
[0-9]*no diretório da suíte, ordenados por nome. Ignora arquivos não executáveis. PassaTARGET_FQDNcomo primeiro argumento. Captura a saída em<script-name>.log. -
Registrar resultados — Atualiza o
meta.jsoncom o timestamp de conclusão e as contagens de aprovações/falhas/ignorados.