<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: prabanjan Sakthibabu</title>
    <description>The latest articles on DEV Community by prabanjan Sakthibabu (@prabanjan_sakthibabu_62e1).</description>
    <link>https://dev.to/prabanjan_sakthibabu_62e1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4092923%2F12e4e98d-568c-4775-90fb-6af97a27c4a3.jpg</url>
      <title>DEV Community: prabanjan Sakthibabu</title>
      <link>https://dev.to/prabanjan_sakthibabu_62e1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prabanjan_sakthibabu_62e1"/>
    <language>en</language>
    <item>
      <title>AI Security Log Auditor</title>
      <dc:creator>prabanjan Sakthibabu</dc:creator>
      <pubDate>Tue, 25 Aug 2026 18:44:35 +0000</pubDate>
      <link>https://dev.to/prabanjan_sakthibabu_62e1/ai-security-log-auditor-548h</link>
      <guid>https://dev.to/prabanjan_sakthibabu_62e1/ai-security-log-auditor-548h</guid>
      <description>&lt;h1&gt;
  
  
  AI Security Log Auditor
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Manual log triage takes 15+ minutes and misses stealthy bursts. This dashboard ingests raw Syslog/Nginx/auth.log/Suricata logs, redacts credentials client-side, clusters anomalies with lightweight heuristics, and streams structured threat JSON (threatLevel, attackVector, mitreTechniqueId, confidence, remediation) into an interactive cyber-terminal for instant iptables/fail2ban/nginx mitigations.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;code&gt;https://ai-security-auditor-one.vercel.app&lt;/code&gt; · &lt;strong&gt;Video:&lt;/strong&gt; &lt;em&gt;(Unlisted YouTube link)&lt;/em&gt; · &lt;strong&gt;Blog:&lt;/strong&gt; &lt;em&gt;(Dev.to/Hashnode link)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fscreenshot-dashboard.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fscreenshot-dashboard.png" alt="Dashboard" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fscreenshot-terminal.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fscreenshot-terminal.png" alt="Terminal" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart LR
  A["Raw Logs&amp;lt;br/&amp;gt;Syslog / Nginx / auth.log"] --&amp;gt; B["Ingestion &amp;amp; Sanitization&amp;lt;br/&amp;gt;redact credentials&amp;lt;br/&amp;gt;cluster anomalies"]
  B --&amp;gt; C["Structured Prompt&amp;lt;br/&amp;gt;threatLevel, attackVector, mitreId"]
  C --&amp;gt; D["AI Inference&amp;lt;br/&amp;gt;Gemini Flash / Ollama"]
  D --&amp;gt; E["Risk &amp;amp; Remediation&amp;lt;br/&amp;gt;Health = 100 - C*25 - W*10"]
  E --&amp;gt; F["Angular Signals&amp;lt;br/&amp;gt;metrics / table / terminal"]
  F --&amp;gt; G["Dark Cyber UI"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pipeline highlight file mapping:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;src/app/models/security.model.ts:1&lt;/code&gt; — &lt;code&gt;LogEntry&lt;/code&gt;, &lt;code&gt;ThreatReport&lt;/code&gt;, &lt;code&gt;MitreTechnique&lt;/code&gt;, &lt;code&gt;RemediationAction&lt;/code&gt;, &lt;code&gt;DashboardMetrics&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/app/services/log-generator.service.ts:32&lt;/code&gt; — &lt;code&gt;getAttackPresets()&lt;/code&gt; / &lt;code&gt;getSampleLogsByPreset()&lt;/code&gt; / &lt;code&gt;parseRawLogLines()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/app/services/ai-auditor.service.ts:18&lt;/code&gt; — &lt;code&gt;ingestLogs()&lt;/code&gt; → &lt;code&gt;mitreMap&lt;/code&gt; (&lt;code&gt;T1110.001&lt;/code&gt;, &lt;code&gt;T1190&lt;/code&gt;, &lt;code&gt;T1046&lt;/code&gt;, &lt;code&gt;T1078&lt;/code&gt;) + &lt;code&gt;buildRemediation()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/app/components/dashboard/dashboard.component.html:20&lt;/code&gt; — metric bar, &lt;code&gt;src/app/components/dashboard/dashboard.component.html:32&lt;/code&gt; drag-drop zone &lt;code&gt;(dragover)/(drop)&lt;/code&gt;, &lt;code&gt;src/app/components/dashboard/dashboard.component.html:145&lt;/code&gt; remediation terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Choice&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Angular 17+ standalone, TypeScript, &lt;code&gt;CommonModule&lt;/code&gt; + &lt;code&gt;FormsModule&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Reactive signals/services, strict types&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styling&lt;/td&gt;
&lt;td&gt;Bootstrap 5.3 + SCSS (&lt;code&gt;src/app/app.scss:1&lt;/code&gt;, &lt;code&gt;src/app/components/dashboard/dashboard.component.scss:1&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Terminal dark theme &lt;code&gt;#0a0f1d&lt;/code&gt;, &lt;code&gt;#1e293b&lt;/code&gt; cards, glowing badges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Icons&lt;/td&gt;
&lt;td&gt;Font Awesome 4.7 (&lt;code&gt;angular.json:36&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;fa-shield&lt;/code&gt;, &lt;code&gt;fa-terminal&lt;/code&gt;, &lt;code&gt;fa-bug&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI&lt;/td&gt;
&lt;td&gt;Gemini 2.0 Flash (cloud) / Ollama Llama 3.1 8B local&lt;/td&gt;
&lt;td&gt;Spec schema: &lt;code&gt;threatLevel&lt;/code&gt;/&lt;code&gt;attackVector&lt;/code&gt;/&lt;code&gt;mitreTechniqueId&lt;/code&gt;/&lt;code&gt;confidenceScore&lt;/code&gt;/&lt;code&gt;remediationCommands&lt;/code&gt; — fallback heuristic already ships&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build&lt;/td&gt;
&lt;td&gt;Angular CLI &lt;code&gt;ng build&lt;/code&gt; / &lt;code&gt;ng test&lt;/code&gt; (Vitest)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;angular.json:43&lt;/code&gt; budgets &lt;code&gt;700kB/14kB&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Recommended models per spec: &lt;strong&gt;Gemini 2.0 Flash&lt;/strong&gt; (1M context, sub-second) for hosted; &lt;strong&gt;Ollama (Qwen 2.5 Coder)&lt;/strong&gt; for air-gapped — logs never leave browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ingestion:&lt;/strong&gt; drag-drop, browse, 6 presets (Full 49 / SSH 15 / SQLi 8 / Recon 5 / API 1 / Clean 20), paste raw text — all via &lt;code&gt;src/app/components/dashboard/dashboard.component.ts:55&lt;/code&gt; &lt;code&gt;onDragOver/onDrop/handleFile&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sanitization:&lt;/strong&gt; client-side redaction before any AI call (&lt;code&gt;sanitizedTokensCount&lt;/code&gt; in header)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metrics:&lt;/strong&gt; Total Ingested / Critical / Warning / Health &lt;code&gt;100-(C×25+W×10)&lt;/code&gt; with conic ring &lt;code&gt;healthColor()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Threat Intel:&lt;/strong&gt; filterable table (search IP/vector/MITRE, severity &amp;amp; vector dropdown) — selectable row opens inspector with &lt;code&gt;aiAnalysis&lt;/code&gt;, MITRE link, IoCs, raw redacted line&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminal:&lt;/strong&gt; per-threat &lt;code&gt;iptables&lt;/code&gt;/&lt;code&gt;fail2ban&lt;/code&gt;/&lt;code&gt;ufw&lt;/code&gt;/&lt;code&gt;nginx&lt;/code&gt; with &lt;strong&gt;Copy&lt;/strong&gt;, &lt;strong&gt;Run (Sim)&lt;/strong&gt;, &lt;strong&gt;Copy All&lt;/strong&gt;, &lt;strong&gt;Export .sh&lt;/strong&gt; (&lt;code&gt;downloadScript()&lt;/code&gt;), simulated stdout&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# prerequisites: Node 20+, npm 10+&lt;/span&gt;
git clone https://github.com/prabanjan127/ai-security-auditor.git
&lt;span class="nb"&gt;cd &lt;/span&gt;ai-security-auditor
npm &lt;span class="nb"&gt;install&lt;/span&gt;          &lt;span class="c"&gt;# installs bootstrap@5.3.8 + font-awesome@4.7.0 per angular.json:33&lt;/span&gt;
ng serve             &lt;span class="c"&gt;# http://localhost:4200 — dashboard auto-loads Full Attack Suite&lt;/span&gt;
ng &lt;span class="nb"&gt;test&lt;/span&gt;              &lt;span class="c"&gt;# 2/2 passing (src/app/app.spec.ts:1)&lt;/span&gt;
npm run build        &lt;span class="c"&gt;# → dist/ai-security-auditor/browser/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Load Sample Attack Logs&lt;/strong&gt; or any preset pill.&lt;/li&gt;
&lt;li&gt;Or drop a &lt;code&gt;.log&lt;/code&gt; (e.g. &lt;code&gt;auth.log&lt;/code&gt; with &lt;code&gt;Failed password for invalid user admin from 203.0.113.5&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Filter by &lt;code&gt;CRITICAL&lt;/code&gt;, search &lt;code&gt;203.0.113&lt;/code&gt;, select a row → copy &lt;code&gt;sudo iptables -A INPUT -s 203.0.113.5 -p tcp --dport 22 -j DROP&lt;/code&gt; from terminal.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Deploy
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Vercel (recommended)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; vercel
vercel &lt;span class="nt"&gt;--prod&lt;/span&gt;  &lt;span class="c"&gt;# uses vercel.json (output: dist/ai-security-auditor/browser)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;vercel.json&lt;/code&gt; already contains SPA rewrite &lt;code&gt;/(.*) → /index.html&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Netlify / GitHub Pages
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;span class="c"&gt;# Netlify: drag dist/ai-security-auditor/browser&lt;/span&gt;
&lt;span class="c"&gt;# GH Pages: npx angular-cli-ghpages --dir=dist/ai-security-auditor/browser&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Project Links (replace before submit)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;code&gt;https://github.com/prabanjan127/ai-security-auditor&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;code&gt;https://ai-security-auditor-one.vercel.app&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blog (Dev.to/Hashnode):&lt;/strong&gt; paste draft from prompt + screenshots above&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Video (Unlisted YouTube):&lt;/strong&gt; 0:00 problem / 0:30 upload demo / 1:30 architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Works (for blog/video)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ingest&lt;/strong&gt; — drop &lt;code&gt;.log&lt;/code&gt; → &lt;code&gt;LogGeneratorService.parseRawLogLines()&lt;/code&gt; clusters anomalies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sanitize&lt;/strong&gt; — &lt;code&gt;sanitizeLine()&lt;/code&gt; redacts &lt;code&gt;Bearer&lt;/code&gt;/&lt;code&gt;api_key&lt;/code&gt; before inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infer&lt;/strong&gt; — structured prompt expects &lt;code&gt;{threatLevel, attackVector, mitreTechniqueId, confidenceScore, remediationCommands}&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Score&lt;/strong&gt; — &lt;code&gt;calculateDashboardMetrics()&lt;/code&gt; → health.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Display&lt;/strong&gt; — &lt;code&gt;DashboardComponent&lt;/code&gt; binds via &lt;code&gt;applyFilters()&lt;/code&gt; / &lt;code&gt;selectReport()&lt;/code&gt;; terminal streams &lt;code&gt;terminalOutput[]&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;MIT — showcase project; not for production firewall automation without review.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>security</category>
    </item>
  </channel>
</rss>
