nuclei -u https://yoursite.com -t cves/ -t misconfigurations/ -severity critical,high -o results.txt
nuclei -u https://yoursite.com -t cves/ -t misconfigurations/ -severity critical,high -o results.txt
nuclei -u https://yoursite.com -t cves/ -t misconfigurations/ -severity critical,high -o results.txt
trivy image your-app:latest --severity CRITICAL,HIGH
trivy fs /path/to/project --severity CRITICAL,HIGH
trivy image your-app:latest --severity CRITICAL,HIGH
trivy fs /path/to/project --severity CRITICAL,HIGH
trivy image your-app:latest --severity CRITICAL,HIGH
trivy fs /path/to/project --severity CRITICAL,HIGH
lynis audit system --quick
lynis audit system --quick
lynis audit system --quick
Management VM
├── Nuclei (daily, web targets)
├── Trivy (daily, container images)
├── OpenVAS (weekly, network hosts)
├── Lynis (monthly, server audit)
└── Report aggregator (sends summary)
Management VM
├── Nuclei (daily, web targets)
├── Trivy (daily, container images)
├── OpenVAS (weekly, network hosts)
├── Lynis (monthly, server audit)
└── Report aggregator (sends summary)
Management VM
├── Nuclei (daily, web targets)
├── Trivy (daily, container images)
├── OpenVAS (weekly, network hosts)
├── Lynis (monthly, server audit)
└── Report aggregator (sends summary)
#!/bin/bash
# daily-web-scan.sh
DATE=$(date +%Y-%m-%d)
TARGETS="/opt/scanning/targets/web-targets.txt"
OUTPUT="/opt/scanning/results/${DATE}-nuclei.json" nuclei -l "$TARGETS" \ -t cves/ -t misconfigurations/ -t exposures/ \ -severity critical,high \ -json-export "$OUTPUT" \ -silent # Count findings
CRITICAL=$(grep -c '"severity":"critical"' "$OUTPUT" 2>/dev/null || echo 0)
HIGH=$(grep -c '"severity":"high"' "$OUTPUT" 2>/dev/null || echo 0) if [ "$CRITICAL" -gt 0 ] || [ "$HIGH" -gt 0 ]; then echo "ALERT: ${CRITICAL} critical, ${HIGH} high findings" | \ mail -s "Security Scan Alert - ${DATE}" [email protected]
fi
#!/bin/bash
# daily-web-scan.sh
DATE=$(date +%Y-%m-%d)
TARGETS="/opt/scanning/targets/web-targets.txt"
OUTPUT="/opt/scanning/results/${DATE}-nuclei.json" nuclei -l "$TARGETS" \ -t cves/ -t misconfigurations/ -t exposures/ \ -severity critical,high \ -json-export "$OUTPUT" \ -silent # Count findings
CRITICAL=$(grep -c '"severity":"critical"' "$OUTPUT" 2>/dev/null || echo 0)
HIGH=$(grep -c '"severity":"high"' "$OUTPUT" 2>/dev/null || echo 0) if [ "$CRITICAL" -gt 0 ] || [ "$HIGH" -gt 0 ]; then echo "ALERT: ${CRITICAL} critical, ${HIGH} high findings" | \ mail -s "Security Scan Alert - ${DATE}" [email protected]
fi
#!/bin/bash
# daily-web-scan.sh
DATE=$(date +%Y-%m-%d)
TARGETS="/opt/scanning/targets/web-targets.txt"
OUTPUT="/opt/scanning/results/${DATE}-nuclei.json" nuclei -l "$TARGETS" \ -t cves/ -t misconfigurations/ -t exposures/ \ -severity critical,high \ -json-export "$OUTPUT" \ -silent # Count findings
CRITICAL=$(grep -c '"severity":"critical"' "$OUTPUT" 2>/dev/null || echo 0)
HIGH=$(grep -c '"severity":"high"' "$OUTPUT" 2>/dev/null || echo 0) if [ "$CRITICAL" -gt 0 ] || [ "$HIGH" -gt 0 ]; then echo "ALERT: ${CRITICAL} critical, ${HIGH} high findings" | \ mail -s "Security Scan Alert - ${DATE}" [email protected]
fi
#!/bin/bash
# daily-container-scan.sh
DATE=$(date +%Y-%m-%d)
IMAGES=$(docker image ls --format '{{.Repository}}:{{.Tag}}' | grep -v '<none>') for IMAGE in $IMAGES; do trivy image "$IMAGE" --severity CRITICAL,HIGH --format json \ >> "/opt/scanning/results/${DATE}-trivy.json"
done
#!/bin/bash
# daily-container-scan.sh
DATE=$(date +%Y-%m-%d)
IMAGES=$(docker image ls --format '{{.Repository}}:{{.Tag}}' | grep -v '<none>') for IMAGE in $IMAGES; do trivy image "$IMAGE" --severity CRITICAL,HIGH --format json \ >> "/opt/scanning/results/${DATE}-trivy.json"
done
#!/bin/bash
# daily-container-scan.sh
DATE=$(date +%Y-%m-%d)
IMAGES=$(docker image ls --format '{{.Repository}}:{{.Tag}}' | grep -v '<none>') for IMAGE in $IMAGES; do trivy image "$IMAGE" --severity CRITICAL,HIGH --format json \ >> "/opt/scanning/results/${DATE}-trivy.json"
done
# Daily scans at 02:00
0 2 * * * /opt/scanning/daily-web-scan.sh
0 3 * * * /opt/scanning/daily-container-scan.sh # Weekly network scan on Sunday at 01:00
0 1 * * 0 /opt/scanning/weekly-network-scan.sh # Monthly hardening audit on 1st at 04:00
0 4 1 * * /opt/scanning/monthly-lynis-audit.sh
# Daily scans at 02:00
0 2 * * * /opt/scanning/daily-web-scan.sh
0 3 * * * /opt/scanning/daily-container-scan.sh # Weekly network scan on Sunday at 01:00
0 1 * * 0 /opt/scanning/weekly-network-scan.sh # Monthly hardening audit on 1st at 04:00
0 4 1 * * /opt/scanning/monthly-lynis-audit.sh
# Daily scans at 02:00
0 2 * * * /opt/scanning/daily-web-scan.sh
0 3 * * * /opt/scanning/daily-container-scan.sh # Weekly network scan on Sunday at 01:00
0 1 * * 0 /opt/scanning/weekly-network-scan.sh # Monthly hardening audit on 1st at 04:00
0 4 1 * * /opt/scanning/monthly-lynis-audit.sh - The scan runs, produces 4,000 findings, and nobody has time to look at them. A vulnerability scanner that generates noise you cannot act on is worse than no scanner at all. It creates a false sense of security.
- The tool sits idle after the initial excitement wears off. Without a dedicated person to maintain scan schedules, update plugins and chase remediation, the scanner becomes shelfware.
- You spend your entire security budget on detection and have nothing left for remediation. Finding vulnerabilities is only half the job. Fixing them is where the real work happens. - All public-facing domains and subdomains
- All internal IP ranges and subnets
- All container images you deploy
- All servers and network devices - Critical findings: drop everything and fix these today
- High findings: plan remediation this week
- Delta from yesterday: are things getting better or worse? - What was found and when
- Who is responsible for fixing it
- The target remediation date
- When it was actually fixed - Install Nuclei on any Linux machine. It is a single binary with no dependencies. Scan your public-facing domains tonight.
- Install Trivy and scan your Docker images. You will likely find critical CVEs in base images you have not updated.
- Set up a cron job to run both scans daily. Even without fancy reporting, the scan results accumulate and give you a baseline.
- Create a simple target list. Every IP address, every domain, every container image. You cannot scan what you have not listed.