Rå Nmap-utdata är användbar, men det är inget du kan klistra in i ett mejl och förvänta dig att folk agerar på. Du slutar med att copy-pasta portar, googla CVE:er och skriva om samma ”risköversikt” för tionde gången.
Den här automatiseringen för Nmap CVE-rapporter träffar SecOps-team först, ärligt talat. Men IT-chefer och konsulter som gör kundrevisioner känner också av det, för det är i rapporteringen tiden försvinner.
Det här arbetsflödet kör en scan, berikar fynd från NVD, genererar en lösenordsskyddad PDF och skickar den via e-post (och Telegram om du vill). Du ser vad det automatiserar, vad du får ut av det och vad du ska se upp med när du driftsätter det.
Så fungerar automatiseringen
Hela n8n-arbetsflödet, från trigger till slutlig leverans:
n8n Workflow Template: Nmap till e-post, delningsklara CVE-pdf:er
flowchart LR
subgraph sg0["Scheduled Automation Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Scheduled Automation Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Execution Start", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Preset Target Host", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/form.svg' width='40' height='40' /></div><br/>Form Submission Trigger"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Inbound Webhook Trigger"]
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Initialize Scan Settings", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "Install Nmap Helper", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Optional Scan Flags", pos: "b", h: 48 }
n8@{ icon: "mdi:cog", form: "rounded", label: "Run Nmap Scan Command", pos: "b", h: 48 }
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Extract Service Details"]
n10@{ icon: "mdi:cog", form: "rounded", label: "Store Raw Scan File", pos: "b", h: 48 }
n11["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Enrich Vulnerability Data"]
n12@{ icon: "mdi:cog", form: "rounded", label: "Save Enriched Results", pos: "b", h: 48 }
n13@{ icon: "mdi:cog", form: "rounded", label: "Combine Scan Records", pos: "b", h: 48 }
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Build Report Dataset"]
n15["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Compose HTML Report"]
n16@{ icon: "mdi:cog", form: "rounded", label: "Write Report HTML File", pos: "b", h: 48 }
n17@{ icon: "mdi:cog", form: "rounded", label: "Load Report HTML File", pos: "b", h: 48 }
n18@{ icon: "mdi:cog", form: "rounded", label: "Convert HTML to PDF", pos: "b", h: 48 }
n19@{ icon: "mdi:cog", form: "rounded", label: "Load PDF Report File", pos: "b", h: 48 }
n20["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/telegram.svg' width='40' height='40' /></div><br/>Send Report via Telegram"]
n21@{ icon: "mdi:message-outline", form: "rounded", label: "Email Report via SMTP", pos: "b", h: 48 }
n4 --> n5
n1 --> n2
n2 --> n5
n6 --> n7
n0 --> n2
n5 --> n6
n3 --> n5
n8 --> n9
n12 --> n13
n13 --> n14
n11 --> n12
n7 --> n8
n16 --> n17
n15 --> n16
n10 --> n11
n17 --> n18
n14 --> n15
n19 --> n20
n19 --> n21
n9 --> n10
n18 --> n19
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0,n1,n3 trigger
class n4 api
class n9,n11,n14,n15 code
classDef customIcon fill:none,stroke:none
class n3,n4,n9,n11,n14,n15,n20 customIcon
Problemet: Nmap-resultat leder inte till åtgärd
En Nmap-scan visar vad som är öppet och vad som körs. Den säger inte vad som är viktigast. Så det riktiga arbetet börjar efter scannen: mappa tjänster till CPE:er, söka CVE:er, bedöma allvarlighetsgrad och sedan paketera allt i något som en intressent faktiskt läser. Det är också här misstagen smyger sig in. En missad CVE, ett felaktigt antagande om version, en rapport som skickas utan kontext. Och när du behöver detta varje vecka eller månad blir det en återkommande tidsskatt.
Var för sig känns de här uppgifterna små. Tillsammans gör de ”kör en scan” till ett halvdagsjobb.
- Att hitta CVE:er tjänst för tjänst tvingar fram repetitiv research och inkonsekventa sammanfattningar.
- Intressenter får rå utdata, vilket ofta betyder fördröjd åtgärd eller ingen åtgärd alls.
- PDF-rapporter byggs ofta manuellt, så formatering och severity-märkning varierar från scan till scan.
- Att skicka resultaten till rätt personer är ytterligare ett manuellt steg som ofta hoppas över när det är mycket.
Lösningen: automatiserad Nmap-scanning + CVE-berikning + PDF-leverans
Det här arbetsflödet gör ”scan-utdata” till en färdig sårbarhetsrapport du kan dela. Det kan starta från en schemalagd körning, en manuell körning, ett webhook-anrop eller ett enkelt webbformulär. När det triggas kör det en Nmap-scan med service-/versionsdetektering mot ditt mål, extraherar servicedetaljer och använder datan för att slå upp relaterade CVE:er i National Vulnerability Database (NVD). Därefter bygger det ett strukturerat dataset (värdar, portar, tjänster, CVE-ID:n, CVSS-poäng, beskrivningar och referenser), genererar en professionell HTML-rapport och konverterar den till en lösenordsskyddad PDF med Prince XML. Till sist levererar det PDF:en via e-post, med valfri Telegram-sändning för snabb intern synlighet.
Arbetsflödet börjar med din valda trigger och ett målnät/IP. Därifrån scannar Nmap, NVD berikar och rapportgenereringen paketerar allt i en ledningssammanfattning plus detaljerade fynd. Leveransen sker i slutet, så du får en konsekvent rapport utan att behöva passa processen.
Det du får: automatisering vs. resultat
| Vad det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du kör en veckoscan för ett litet kontorssubnät och skickar resultat till tre personer. Manuellt kan du lägga cirka 30 minuter på att köra och kontrollera scannen, sedan ungefär 2 timmar på att slå upp CVE:er och skriva om en sammanfattning, plus ytterligare 10 minuter för export och mejl av rapporten. Med det här arbetsflödet tar det en minut att skicka in målet via formulär eller webhook, scannen kör i bakgrunden (ofta 10–30 minuter beroende på omfattning) och den färdiga PDF:en landar i inkorgen automatiskt. Du gör i princip bara granskning och fördelar åtgärder.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Nmap för att köra service- och versionsdetektering.
- Prince XML för att konvertera HTML till skyddade PDF:er.
- SMTP- eller Gmail-uppgifter (konfigureras i n8n Credentials).
- Telegram Bot-token (valfritt) (hämta den från BotFather i Telegram).
Kompetensnivå: Medel. Du konfigurerar credentials, sätter scan-mål på ett ansvarsfullt sätt och är bekväm med att köra kommando-baserade noder på din n8n-host.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En scan-begäran kommer in. Arbetsflödet kan starta på schema, från en manuell testkörning, från ett webhook-anrop eller från ett enkelt webbformulär där någon skriver in målnätet.
Arbetsflödet förbereder scan-miljön. Det sätter parametrar som mål och PDF-lösenord och säkerställer sedan att hjälptygen finns tillgängliga så att scan-utdata kan göras om till strukturerad data.
Nmap körs, sedan berikas CVE:er. Efter att Nmap upptäckt portar och tjänster extraherar arbetsflödet servicedetaljer och frågar NVD API för att hämta CVE-ID:n, beskrivningar och CVSS-allvarlighetsgrad där matchningar finns. Rate limiting respekteras, vilket är viktigt när du scannar större nät.
En rapport genereras och levereras. Fynd slås ihop till ett rapportdataset, renderas till HTML, konverteras till en lösenordsskyddad PDF och skickas sedan via SMTP (och Telegram om det är aktiverat).
Du kan enkelt justera scan-flaggorna för att snäva in eller bredda täckningen efter behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera den schemalagda automationstriggern
Konfigurera arbetsflödets startpunkter för schemalagda, manuella, formulär- och webhook-baserade skanningar.
- Öppna Scheduled Automation Trigger och ställ in schemaregeln så att den körs dagligen vid
1(Trigger At Hour). - Låt Manual Execution Start vara aktiverad för ad hoc-testning och manuella skanningskörningar.
- Konfigurera Form Submission Trigger med Form Title satt till
Add scan parametersoch Path satt tilltargetså att användare kan skicka in ett målnätverk. - Konfigurera Inbound Webhook Trigger med HTTP Method satt till
POSToch Path satt tille1e1da83-efe3-4f81-8428-09f31ad3531a. - Verifiera att svarsdata från Inbound Webhook Trigger är
Process started!för externa anropare.
Steg 2: Koppla mål och skanningsinställningar
Definiera standardmålet och centrala skanningsvariabler som används i hela arbetsflödet.
- I Preset Target Host ställer ni in värdet network till
scanme.nmap.orgsom standardmål. - I Initialize Scan Settings ställer ni in network till
={{ $json.network }}{{ $json.body.network }}. - I Initialize Scan Settings ställer ni in timestamp till
={{ $now.format('yyyyMMdd_HHmmss') }}. - I Initialize Scan Settings ställer ni in report_password till
[CONFIGURE_YOUR_PASSWORD]för PDF-kryptering. - I Set Optional Scan Flags konfigurerar ni följande värden: setter
-, max-retriesmax-retries 2, min-parallelismmin-parallelism 40, max-parallelismmax-parallelism 250och timing-T4.
[CONFIGURE_YOUR_PASSWORD] kommer steget för PDF-konvertering att misslyckas. Ersätt det med ett riktigt lösenord.Steg 3: Installera och kör nätverksskanningen
Installera beroenden och kör Nmap-skanningskommandot som genererar den råa skanningsutdata.
- I Install Nmap Helper ställer ni in Command till
=apk add --no-cache git make rust cargo cd /tmp git clone https://github.com/net-shaper/nmap-helper.git cd nmap-helper make make install. - I Run Nmap Scan Command ställer ni in Command till
=installdependencies=$(apk add util-linux-misc ncurses nmap nmap-scripts) runnmapscan=$(script -q -c "nmap -sV -sC -p- -sS {{ $json.timing }} {{ $json.setter }}{{ $json.setter }}{{ $json['min-parallelism'] }} {{ $json.setter }}{{ $json.setter }}{{ $json['max-parallelism'] }} {{ $json.setter }}{{ $json.setter }}{{ $json['max-retries'] }} -oX /tmp/nmap_{{ $('Initialize Scan Settings').item.json.timestamp }}.xml {{ $('Initialize Scan Settings').item.json.network }}" /dev/null) correctxml=$(sed -i 's/type="user"/type="USER"/g' /tmp/nmap_{{ $('Initialize Scan Settings').item.json.timestamp }}.xml) convertxmltojson=$( /tmp/nmap-helper/target/release/nmap-helper convert /tmp/nmap_{{ $('Initialize Scan Settings').item.json.timestamp }}.xml -o /tmp/nmap_{{ $('Initialize Scan Settings').item.json.timestamp }}.json) tput reset cat /tmp/nmap_{{ $('Initialize Scan Settings').item.json.timestamp }}.json. - Bekräfta flödet: Initialize Scan Settings → Install Nmap Helper → Set Optional Scan Flags → Run Nmap Scan Command.
apk (Alpine) och skalåtkomst. Säkerställ att er n8n-miljö tillåter dessa operationer.Steg 4: Tolka och berika skanningsresultat
Extrahera servicedetaljer från Nmap-utdata, berika sårbarheter från NVD och aggregera resultaten.
- I Extract Service Details behåller ni JavaScript-koden som den är för att tolka öppna portar och bygga servicerecords.
- Konfigurera Store Raw Scan File med Operation
write, File Name=/tmp/scan_data_{{ $('Initialize Scan Settings').item.json.timestamp }}.jsonoch Data Property Name=data. - I Enrich Vulnerability Data behåller ni JavaScript-koden för att fråga NVD API och bygga berikad CVE-data per service.
- Konfigurera Save Enriched Results med Operation
write, File Name=/tmp/enriched_data_{{ $('Initialize Scan Settings').item.json.timestamp }}.jsonoch Data Property Name=data. - Ställ in Combine Scan Records till Include
specifiedFields, AggregateaggregateAllItemDataoch Fields To Includeenriched, services.
Steg 5: Bygg HTML- och PDF-rapporterna
Omvandla den berikade skanningsdatan till en detaljerad HTML-rapport och konvertera den till en PDF.
- I Build Report Dataset behåller ni JavaScript-logiken som bygger rapportmetadata, statistik och värdsammanfattningar.
- I Compose HTML Report behåller ni HTML-mallgeneratorn som skapar
vulnerability_report.html. - Konfigurera Write Report HTML File med Operation
write, File Name=/tmp/vulnerability_report_{{ $('Initialize Scan Settings').item.json.timestamp }}.htmloch Data Property Name=data. - Konfigurera Load Report HTML File med File Selector
=/tmp/vulnerability_report_{{ $('Initialize Scan Settings').item.json.timestamp }}.html. - I Convert HTML to PDF ställer ni in Command till
=apk add --no-cache wget tar giflib libwebp libwebpdemux libavif lcms2 fontconfig cd /tmp wget https://www.princexml.com/download/prince-16.1-alpine3.20-x86_64.tar.gz tar -xf prince-16.1-alpine3.20-x86_64.tar.gz /tmp/prince-16.1-alpine3.20-x86_64/lib/prince/bin/prince /tmp/vulnerability_report_{{ $('Initialize Scan Settings').item.json.timestamp }}.html -o /tmp/vulnerability_report_{{ $('Initialize Scan Settings').item.json.timestamp }}.pdf --media=print --encrypt --user-password={{ $('Initialize Scan Settings').item.json.report_password }} --css-dpi=128. - Konfigurera Load PDF Report File med File Selector
=/tmp/vulnerability_report_{{ $('Initialize Scan Settings').item.json.timestamp }}.pdfoch Data Property Name=vulnerability_report.
wget, eller ersätt detta steg med en PDF-konverterare som finns tillgänglig i er infrastruktur.Steg 6: Konfigurera utdata för leverans av rapport
Skicka PDF-rapporten via Telegram och e-post när rapporten har genererats.
- I Send Report via Telegram ställer ni in Chat ID till
[YOUR_ID], aktiverar Binary Data och ställer in Binary Property Name till=vulnerability_report. - Autentiseringsuppgifter krävs: Koppla era telegramApi-autentiseringsuppgifter till Send Report via Telegram.
- I Email Report via SMTP ställer ni in To Email till
[YOUR_EMAIL]och From Email till[YOUR_EMAIL]. - Ställ in Subject till
=Automatic NMAP Report for '{{ $('Initialize Scan Settings').item.json.network }}'och Text till=The requested Automatic NMAP Scan finished, we attached the Report for '{{ $('Initialize Scan Settings').item.json.network }}'. - Autentiseringsuppgifter krävs: Koppla era smtp-autentiseringsuppgifter till Email Report via SMTP.
- Bekräfta parallell körning: Load PDF Report File skickar utdata till både Send Report via Telegram och Email Report via SMTP parallellt.
Steg 7: Testa och aktivera ert arbetsflöde
Validera end-to-end-körning och aktivera arbetsflödet för schemalagd användning.
- Använd Manual Execution Start för att köra en fullständig testskanning och bekräfta flödet från Preset Target Host via Email Report via SMTP och Send Report via Telegram.
- Verifiera att filer skapas i
/tmpmed tidsstämplade namn för skannings-JSON, HTML-rapport och PDF-rapport. - Bekräfta att ett Telegram-dokument och ett SMTP-mejl anländer med PDF-bilagan namngiven från Load PDF Report File.
- Aktivera arbetsflödet så att Scheduled Automation Trigger, Form Submission Trigger och Inbound Webhook Trigger kan köras i produktion.
Vanliga fallgropar
- SMTP- eller Gmail-uppgifter kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera först teststatusen för n8n Credentials och din e-postleverantörs inställningar för ”app-lösenord”.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Prince XML och kommandoexekvering beror på miljön på din n8n-host. Om PDF-konverteringen misslyckas, kontrollera serverloggar och bekräfta att Prince-binära filen är installerad och kan nås från noden Execute Command.
Vanliga frågor
Cirka en timme om din n8n-host är redo att köra kommandoradsverktyg.
Nej, ingen kodning krävs för att köra den. Du gör viss konfiguration och kan justera några rapportfält om du vill ha egen branding.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna med Prince XML-licensiering för produktionsbruk.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är enkelt. Inaktivera eller ta bort noden ”Send Report via Telegram” och behåll noden ”Email Report via SMTP” aktiv. Vanliga anpassningar är att ändra ämnesrad i mejlet, lägga till flera mottagare, uppdatera rapporttiteln i kodnoden som bygger rapporten och byta standardlösenordet för PDF i noden ”Initialize Scan Settings”.
Oftast är det inte ”Nmap” i sig, utan miljön. Execute Command-noderna behöver behörighet att köra binärer på n8n-hosten, och Nmap måste vara installerat och nåbart i PATH. Om scannen fungerar men berikningen är tom kan servicedatan sakna en användbar CPE för NVD-uppslag, eller så kan du slå i NVD:s rate limits vid större scannar.
Det beror mer på scan-tid och NVD:s rate limits än på n8n i sig. På n8n Cloud Starter är du begränsad av månatliga körningar, medan self-hosting inte har någon plattformsgräns för körningar (serverresurserna blir flaskhalsen). I praktiken kör många team detta dagligen eller veckovis för några subnät och håller omfattningen rimlig så att scannen avslutas stabilt och NVD-uppslag inte köar i evighet.
För det här användningsfallet, ja. Zapier och Make är bra för SaaS-till-SaaS, men det här arbetsflödet bygger på att köra kommandoradsscannar, läsa/skriva lokala filer och konvertera HTML till PDF, vilket är betydligt mer naturligt i n8n. Du får också branching, filhantering och self-hosting på ett ställe, så du kan ha säkerhetsverktygen närmare ditt nät. Om du bara behöver ”skicka ett mejl när något händer” kan det vara överdrivet, men för riktig scan-till-rapport-leverans passar det. Prata med en automationsexpert om du vill ha en second opinion på bästa upplägg.
När det här väl är igång blir scannen den enkla delen igen. Arbetsflödet sköter paketering och leverans så att du kan fokusera på att åtgärda det som spelar roll.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.