#!/bin/bash # dummy.sh # # Dummy auth API noise generator # Runs indefinitely # 1) Sends random auth API requests every ~20 mins to simulate OpenVPN key renegotiations # 2) Sends random OpenVPN session up/down API calls at random intervals to simulate those # This will probably be extended later to do noise generation for other things too # API_URL=$(< /etc/api) MAX_JOBS=15 # Limit number of concurrent dummy jobs # Run forever while true; do # ---- AUTH dummy every ~20 mins to simulate real key renegotiations ---- while [ "$(jobs -r | wc -l)" -ge "$MAX_JOBS" ]; do sleep 1; done ( sleep $((RANDOM % 240 + 960)) # 16 to 20 mins (jittered) dummy_hash=$(head -c 64 /dev/urandom | sha512sum | awk '{print $1}') curl --http2 --silent --max-time 8 --connect-timeout 8 "https://$API_URL?token=$dummy_hash" >/dev/null 2>&1 ) & # ---- Random session dummy (up/down/auth) ---- while [ "$(jobs -r | wc -l)" -ge "$MAX_JOBS" ]; do sleep 1; done ( sleep $((RANDOM % 900 + 120)) # 2 to 17 mins dummy_hash=$(head -c 64 /dev/urandom | sha512sum | awk '{print $1}') case $((RANDOM % 3)) in 0) dummy_url="https://$API_URL?token=$dummy_hash" ;; 1) dummy_url="https://$API_URL?token=$dummy_hash&action=up" ;; 2) dummy_url="https://$API_URL?token=$dummy_hash&action=down" ;; esac curl --http2 --silent --max-time 8 --connect-timeout 8 "$dummy_url" >/dev/null 2>&1 ) & # ---- Burst mode ---- # In the real API requests, there's sometimes a spike of users connecting/disconnecting at busy hours. # This "burst mode" simulates that. if (( RANDOM % 6 == 0 )); then # ~1 in 6 iterations count=$((RANDOM % 4 + 2)) # 2-5 dummies for i in $(seq 1 $count); do while [ "$(jobs -r | wc -l)" -ge "$MAX_JOBS" ]; do sleep 1; done ( sleep $((RANDOM % 180)) # 0-3 mins dummy_hash=$(head -c 64 /dev/urandom | sha512sum | awk '{print $1}') case $((RANDOM % 3)) in 0) dummy_url="https://$API_URL?token=$dummy_hash" ;; 1) dummy_url="https://$API_URL?token=$dummy_hash&action=up" ;; 2) dummy_url="https://$API_URL?token=$dummy_hash&action=down" ;; esac curl --http2 --silent --max-time 8 --connect-timeout 8 "$dummy_url" >/dev/null 2>&1 ) & done fi # Loop every 2-5 minutes before repeating sleep $((RANDOM % 180 + 120)) done