<?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: Raghavvram Johnson</title>
    <description>The latest articles on DEV Community by Raghavvram Johnson (@raghavvram_johnson).</description>
    <link>https://dev.to/raghavvram_johnson</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%2F2208003%2F4448756f-b64d-4a77-8fbb-6f3f0759cc1b.png</url>
      <title>DEV Community: Raghavvram Johnson</title>
      <link>https://dev.to/raghavvram_johnson</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/raghavvram_johnson"/>
    <language>en</language>
    <item>
      <title>Yara Rule (Malware Detection)</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Fri, 30 Oct 2026 17:23:40 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/yara-rule-malware-detection-4hci</link>
      <guid>https://dev.to/raghavvram_johnson/yara-rule-malware-detection-4hci</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzpbat2hu3mc6gqmyc0a8.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/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzpbat2hu3mc6gqmyc0a8.png" alt=" " width="800" height="948"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  RegEx in Yara
&lt;/h2&gt;

&lt;p&gt;==Yes, regular expressions are fully supported in YARA==.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Use Regex in YARA
&lt;/h3&gt;

&lt;p&gt;In a YARA rule, regular expressions are defined inside the &lt;code&gt;strings&lt;/code&gt; section by enclosing them in forward slashes (&lt;code&gt;/&lt;/code&gt;) instead of double-quotes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rule ExampleRegexRule {
    strings:
        $re1 = /md5: [0-9a-fA-F]{32}/
        $re2 = /state: (on|off)/
    condition:
        $re1 and $re2
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Supported Modifiers
&lt;/h3&gt;

&lt;p&gt;You can attach string modifiers to your regular expressions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;nocase&lt;/code&gt; or the &lt;code&gt;i&lt;/code&gt; flag (placed after the closing slash, e.g., &lt;code&gt;/foo/i&lt;/code&gt;): Ignores case.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;s&lt;/code&gt; flag (e.g., &lt;code&gt;/bar./s&lt;/code&gt;): Allows the dot (&lt;code&gt;.&lt;/code&gt;) character to match newline characters.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ascii&lt;/code&gt; and &lt;code&gt;wide&lt;/code&gt;: Matches ASCII or UTF-16/wide-character equivalents.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fullword&lt;/code&gt;: Ensures the match is not preceded or followed by an alphanumeric character.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Limitations of YARA's Engine
&lt;/h3&gt;

&lt;p&gt;YARA uses its own internal regular expression engine (rather than full PCRE), which has a few important constraints: [1]&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No capture groups: You cannot use backreferences or group-capturing features.&lt;/li&gt;
&lt;li&gt;No POSIX character classes: Classes like &lt;code&gt;[[:alpha:]]&lt;/code&gt; or &lt;code&gt;[[:digit:]]&lt;/code&gt; are not supported (though standard shorthand like &lt;code&gt;\d&lt;/code&gt;, &lt;code&gt;\w&lt;/code&gt;, and &lt;code&gt;\s&lt;/code&gt; work).&lt;/li&gt;
&lt;li&gt;No lookaheads / lookbehinds: Features like negative lookahead (&lt;code&gt;(?!...)&lt;/code&gt;) are not supported and will trigger compilation errors.&lt;/li&gt;
&lt;li&gt;Performance impact: Overly broad regex patterns (especially leading wildcard patterns like &lt;code&gt;.*&lt;/code&gt;) can slow down scanning speeds because YARA has to evaluate them across the target file or memory space.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Wildcard in Yara Strings
&lt;/h2&gt;

&lt;p&gt;In YARA (a tool used for malware research and pattern matching), the question mark (&lt;code&gt;?&lt;/code&gt;) acts as a wildcard that matches any single byte in a hexadecimal string pattern.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example Usage in Hex Strings:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;01 ? 03&lt;/code&gt;: Matches a sequence starting with &lt;code&gt;01&lt;/code&gt;, followed by any single byte, and then &lt;code&gt;03&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AA ?? CC&lt;/code&gt;: Matches &lt;code&gt;AA&lt;/code&gt; followed by any two individual wildcard bytes, and then &lt;code&gt;CC&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Yara for Memory Analysis
&lt;/h2&gt;

&lt;p&gt;Using &lt;a href="https://www.vmray.com/yara-rules-guide/" rel="noopener noreferrer"&gt;YARA&lt;/a&gt; for memory analysis ==allows you to scan RAM dumps, live processes, or memory images for malicious signatures, injected code, and fileless malware==.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Acquire a Memory Dump
&lt;/h3&gt;

&lt;p&gt;Before YARA can scan memory, you need to capture a snapshot of the target system's RAM:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows/Linux/macOS: Use dedicated memory acquisition tools like WinPMem, Volatility (&lt;code&gt;vmem&lt;/code&gt;/&lt;code&gt;raw&lt;/code&gt; dumps), DumpIt, or LiME (Linux Memory Extractor) to save physical memory to a file (e.g., &lt;code&gt;memory.dmp&lt;/code&gt; or &lt;code&gt;ram.raw&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Live Process Scanning (Direct): On supported endpoint protection agents (such as Trend Micro Apex Central), you can run YARA memory scans directly on active processes without manually dumping the full disk/RAM image first.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Write or Obtain a YARA Rule
&lt;/h3&gt;

&lt;p&gt;A YARA rule consists of metadata, pattern strings (text, hex, or regular expressions), and a matching condition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rule Detect_Suspicious_Memory_Pattern {
    meta:
        description = "Detects injection or malicious strings in memory"
        author = "Analyst"
        date = "2026-03-31"
    strings:
        $cmd = "cmd.exe /c powershell" ascii wide
        $hex_pattern = { 4D 5A 90 00 03 00 00 00 } // DOS/PE header or shellcode
    condition:
        any of them
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Run YARA Against a Memory Dump
&lt;/h3&gt;

&lt;p&gt;You can run the standard YARA command-line tool directly against a raw memory dump file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yara &lt;span class="nt"&gt;-s&lt;/span&gt; /path/to/rule.yar /path/to/memory.dmp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;-s&lt;/code&gt;: Prints the matching strings found inside the memory dump.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-p &amp;lt;number&amp;gt;&lt;/code&gt;: Sets the number of threads to speed up large memory image scans.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 4: Use YARA with Memory Forensics Frameworks (E.g., Volatility)
&lt;/h3&gt;

&lt;p&gt;Frameworks like Volatility include built-in plugins to run YARA signatures directly against virtual address spaces or physical memory pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In Volatility 3: Use the &lt;code&gt;yarascan&lt;/code&gt; plugin to search a memory image for matches:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vol &lt;span class="nt"&gt;-f&lt;/span&gt; memory.dmp windows.yarascan.YaraScan &lt;span class="nt"&gt;--yara-file&lt;/span&gt; /path/to/rule.yar
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This scans process memory spaces, kernel memory, and unallocated slack space, outputting the exact virtual addresses, process names (e.g., &lt;code&gt;svchost.exe&lt;/code&gt;), and matching rule names.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Best Practices for Memory Analysis
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Account for Volatility/Structure: Memory is fragmented. Strings might be split across page boundaries, or encoded (XOR/Wide-char ASCII/UTF-16). Use modifiers like &lt;code&gt;wide&lt;/code&gt; and &lt;code&gt;ascii&lt;/code&gt; in your YARA string definitions.&lt;/li&gt;
&lt;li&gt;Filter by Process: Cross-reference YARA memory hits with process lists (&lt;code&gt;pslist&lt;/code&gt; or &lt;code&gt;netscan&lt;/code&gt; in Volatility) to confirm whether the matched memory region belongs to a legitimate service or a rogue/injected process.&lt;/li&gt;
&lt;li&gt;Tune for False Positives: Raw RAM contains vast amounts of normal application data; keep conditions specific to avoid noise from common strings.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>yara</category>
      <category>malware</category>
      <category>detection</category>
      <category>memory</category>
    </item>
    <item>
      <title>Sigma Rule (Detection Logic)</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Fri, 30 Oct 2026 17:20:50 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/sigma-rule-detection-logic-31kh</link>
      <guid>https://dev.to/raghavvram_johnson/sigma-rule-detection-logic-31kh</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhf0mnmo134geoplw7smd.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/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhf0mnmo134geoplw7smd.png" alt=" " width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A Sigma rule is ==a generic, open-source YAML format used in detection engineering to describe suspicious security events in a log-source-agnostic way==. It acts as a universal signature—like Snort for network traffic or YARA for files—allowing defenders to write a detection once and automatically translate it into SIEM queries like Splunk, Microsoft Sentinel, or Elastic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Structure of a Sigma Rule
&lt;/h2&gt;

&lt;p&gt;A standard Sigma rule is divided into several mandatory and optional key-value blocks in YAML:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Header (Metadata)
&lt;/h2&gt;

&lt;p&gt;Provides context, administration, and tracking details for the rule.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;title&lt;/code&gt;: Short, human-readable name of the rule.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;id&lt;/code&gt;: Unique GUID/UUID used to track the rule over time.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;status&lt;/code&gt;: Maturity level (e.g., &lt;code&gt;experimental&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;stable&lt;/code&gt;, &lt;code&gt;deprecated&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;description&lt;/code&gt;: Detailed explanation of what behavior or adversary TTP the rule targets.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;author&lt;/code&gt;: Creator or contributor name.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;date&lt;/code&gt; / &lt;code&gt;modified&lt;/code&gt;: Creation and update timestamps.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;references&lt;/code&gt;: Links to threat intelligence reports, blog posts, or analysis.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tags&lt;/code&gt;: Categorization tags, commonly mapping to MITRE ATT&amp;amp;CK tactics and techniques (e.g., &lt;code&gt;attack.execution&lt;/code&gt;, &lt;code&gt;attack.t1059.001&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;level&lt;/code&gt;: Severity rating (e.g., &lt;code&gt;low&lt;/code&gt;, &lt;code&gt;medium&lt;/code&gt;, &lt;code&gt;high&lt;/code&gt;, &lt;code&gt;critical&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;falsepositives&lt;/code&gt;: Known benign activities or administrative tools that might trigger false alerts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Log Source (&lt;code&gt;logsource&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Tells the translation backend which logs or platforms the rule applies to.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;category&lt;/code&gt;: High-level log type (e.g., &lt;code&gt;process_creation&lt;/code&gt;, &lt;code&gt;network_connection&lt;/code&gt;, &lt;code&gt;file_event&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;product&lt;/code&gt;: Operating system or application (e.g., &lt;code&gt;windows&lt;/code&gt;, &lt;code&gt;linux&lt;/code&gt;, &lt;code&gt;aws&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;service&lt;/code&gt;: Specific service or channel (e.g., &lt;code&gt;security&lt;/code&gt;, &lt;code&gt;sysmon&lt;/code&gt;, &lt;code&gt;dns&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Detection Block (&lt;code&gt;detection&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;The core logic defining what patterns, strings, or field values to look for. It consists of individual search statements (&lt;em&gt;selections&lt;/em&gt; or &lt;em&gt;filters&lt;/em&gt;) combined via a boolean &lt;em&gt;condition&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selections (Lists / Dictionaries):

&lt;ul&gt;
&lt;li&gt;Lists (YAML arrays &lt;code&gt;[ ]&lt;/code&gt;) represent OR logic (matching any item in the list).&lt;/li&gt;
&lt;li&gt;Dictionaries/Maps represent AND logic (matching all key-value pairs simultaneously).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Modifiers: Appended to field names using a pipe (&lt;code&gt;|&lt;/code&gt;) to alter string matching behavior:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;contains&lt;/code&gt;: Matches substring anywhere in the field.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;startswith&lt;/code&gt; / &lt;code&gt;endswith&lt;/code&gt;: Anchors the match to the start or end of the string.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;all&lt;/code&gt;: Changes a list from OR to strict AND.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;re&lt;/code&gt;: Passes the pattern to a regular expression engine. [11]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Condition (&lt;code&gt;condition&lt;/code&gt;): Boolean statement that connects selections and filters (e.g., &lt;code&gt;selection and not filter&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Output Fields (&lt;code&gt;fields&lt;/code&gt;)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Specifies which log attributes should be extracted and displayed when an alert triggers (e.g., &lt;code&gt;CommandLine&lt;/code&gt;, &lt;code&gt;ParentImage&lt;/code&gt;, &lt;code&gt;User&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example Sigma Rule Skeleton
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Suspicious PowerShell Download Cradle&lt;/span&gt;
&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;12345678-1234-1234-1234-1234567890ab&lt;/span&gt;
&lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;experimental&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Detects PowerShell executing a download command from a remote URL&lt;/span&gt;
&lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Detection Engineer&lt;/span&gt;
&lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2026/10/27&lt;/span&gt;
&lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;attack.execution&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;attack.t1059.001&lt;/span&gt;
&lt;span class="na"&gt;level&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;high&lt;/span&gt;
&lt;span class="na"&gt;logsource&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;process_creation&lt;/span&gt;
  &lt;span class="na"&gt;product&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;windows&lt;/span&gt;
&lt;span class="na"&gt;detection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;selection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;Image|endswith&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;\powershell.exe'&lt;/span&gt;
    &lt;span class="na"&gt;CommandLine|contains&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;DownloadString'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;IEX&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;
  &lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;ParentImage|endswith&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;\sccm.exe'&lt;/span&gt;
  &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;selection and not filter&lt;/span&gt;
&lt;span class="na"&gt;fields&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;CommandLine&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;ParentImage&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;User&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;The logsource section in a Sigma rule ==defines where and what kind of logs the detection logic should look through==. It acts as a filter so that conversion tools (backends) know which tables, indexes, or log types in your SIEM (like Splunk, Microsoft Sentinel, or Elastic) to target.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Main Fields
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;logsource&lt;/code&gt; section uses a combination of three primary attributes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;product&lt;/code&gt;: Selects the overall software, operating system, or platform family generating the logs (e.g., &lt;code&gt;windows&lt;/code&gt;, &lt;code&gt;apache&lt;/code&gt;, &lt;code&gt;aws&lt;/code&gt;, &lt;code&gt;linux&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;category&lt;/code&gt;: Selects a standardized, high-level functional type or event class across different products (e.g., &lt;code&gt;process_creation&lt;/code&gt;, &lt;code&gt;file_event&lt;/code&gt;, &lt;code&gt;firewall&lt;/code&gt;, &lt;code&gt;dns&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;service&lt;/code&gt;: Narrows down the logs to a specific sub-service, daemon, or log channel within that product (e.g., &lt;code&gt;sysmon&lt;/code&gt;, &lt;code&gt;sshd&lt;/code&gt;, &lt;code&gt;security&lt;/code&gt;, &lt;code&gt;application&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How They Work Together (from Broad to Specific)
&lt;/h2&gt;

&lt;p&gt;You do not always have to fill out all three fields. You combine them depending on how specific the rule needs to be:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Broad / Generic Category Only:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;logsource&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;process_creation&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- _Meaning:_ Look for process creation events anywhere it is supported, regardless of the underlying product or OS.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Product + Category:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;logsource&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;product&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;windows&lt;/span&gt;
  &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;process_creation&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- _Meaning:_ Look for process creation events specifically coming from Windows systems. [4]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Product + Service + Category (Most Specific):&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;logsource&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;product&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;windows&lt;/span&gt;
  &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sysmon&lt;/span&gt;
  &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;process_creation&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- &lt;em&gt;Meaning:&lt;/em&gt; Specifically target Windows logs generated by the Sysmon service under the process_creation category (Event ID 1).&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Why the Logsource Section Matters&lt;br&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Portability: When you convert a Sigma rule using a translator tool (like &lt;code&gt;sigmac&lt;/code&gt; or pySigma), the backend uses &lt;code&gt;logsource&lt;/code&gt; to map generic field names (like &lt;code&gt;Image&lt;/code&gt; or &lt;code&gt;CommandLine&lt;/code&gt;) to the exact schema of your specific SIEM.&lt;/li&gt;
&lt;li&gt;Efficiency: It prevents your SIEM from running heavy search queries across irrelevant datasets or indexes.&lt;/li&gt;
&lt;li&gt;Standardization: It ensures that whether you write a rule for Linux, Windows, or cloud providers, the target telemetry is clearly labeled and expected.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;The detection block in a Sigma rule is ==the core logic section that tells your security system what specific evidence or patterns to look for in log data==.&lt;/p&gt;

&lt;p&gt;It acts as the "search brain" of the rule and is broken down into three main parts: selections, filters, and a condition.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Selections (What to Find)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What it is: A list of field-and-value pairs or keywords that represent suspicious or specific behavior.&lt;/li&gt;
&lt;li&gt;How it works: You pick log fields (like &lt;code&gt;EventID&lt;/code&gt;, &lt;code&gt;Image&lt;/code&gt;, or &lt;code&gt;CommandLine&lt;/code&gt;) and define what values trigger a match.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;detection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;selection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;EventID&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4625&lt;/span&gt;
    &lt;span class="na"&gt;TargetUserName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;admin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;em&gt;(This selection looks for a Windows event ID &lt;code&gt;4625&lt;/code&gt;—a failed logon—targeting the username "admin".)&lt;/em&gt; [1, 4, 5, 6, 7]&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Filters (What to Ignore)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What it is: Optional criteria used to exclude normal or safe activity (false positives).&lt;/li&gt;
&lt;li&gt;How it works: If a log matches your selection but also matches your filter, it gets dropped so it doesn't trigger a fake alert.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;SourceIpAddress&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;192.168.1.100"&lt;/span&gt; &lt;span class="c1"&gt;# Ignore internal scanner&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Condition (the Boolean Glue)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What it is: A statement that connects your selections and filters using logic like &lt;code&gt;AND&lt;/code&gt;, &lt;code&gt;OR&lt;/code&gt;, &lt;code&gt;NOT&lt;/code&gt;, or parentheses.&lt;/li&gt;
&lt;li&gt;How it works: It tells the engine how to evaluate the matches.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;  &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;selection and not filter&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;em&gt;(This triggers an alert only if the &lt;code&gt;selection&lt;/code&gt; happens, and the &lt;code&gt;filter&lt;/code&gt; does not.)&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Simple Analogy
&lt;/h2&gt;

&lt;p&gt;Think of the detection block like setting a security camera rule:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selection: "Record if &lt;em&gt;anyone&lt;/em&gt; wears a ski mask &lt;em&gt;and&lt;/em&gt; carries a crowbar."&lt;/li&gt;
&lt;li&gt;Filter: "Except if it's Bob from the maintenance crew."&lt;/li&gt;
&lt;li&gt;Condition: "If Selection A is true, &lt;em&gt;and&lt;/em&gt; Filter B is false -&amp;gt; Sound the alarm."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you'd like, share a sample Sigma rule or scenario you are working on, and I can help you break down or write its detection block.&lt;/p&gt;




&lt;p&gt;In Sigma rules, ==selection defines the specific malicious or suspicious indicators you want to find, while filter removes known false positives or expected benign activity==.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Selection
&lt;/h2&gt;

&lt;p&gt;The selection is the core matching logic of a Sigma rule. It tells the SIEM what fields and values to search for in log data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What it does: Captures suspicious attributes (e.g., a specific command-line argument, a unique registry key, or a rare process name).&lt;/li&gt;
&lt;li&gt;Structure: Written as YAML dictionaries (representing logical &lt;code&gt;AND&lt;/code&gt; statements) or YAML lists (representing logical &lt;code&gt;OR&lt;/code&gt; statements).&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;detection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;selection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;Image|endswith&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;\powershell.exe'&lt;/span&gt;
    &lt;span class="na"&gt;CommandLine|contains&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;EncodedCommand'&lt;/span&gt;
  &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;selection&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Meaning:&lt;/em&gt; Match any event where the &lt;code&gt;Image&lt;/code&gt; ends with &lt;code&gt;powershell.exe&lt;/code&gt; AND the &lt;code&gt;CommandLine&lt;/code&gt; contains &lt;code&gt;EncodedCommand&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Filter
&lt;/h2&gt;

&lt;p&gt;The filter (often named &lt;code&gt;filter1&lt;/code&gt;, &lt;code&gt;filter_...&lt;/code&gt;, or handled via standalone Sigma Filters) narrows down the results by excluding normal, authorized, or repetitive administrative behavior.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What it does: Subtracts or ignores benign events that would otherwise trigger a false positive.&lt;/li&gt;
&lt;li&gt;Logic integration: Combined with selections using boolean operators like &lt;code&gt;NOT&lt;/code&gt; or &lt;code&gt;and not&lt;/code&gt; in the &lt;code&gt;condition&lt;/code&gt; line.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;detection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;selection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;Image|endswith&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;\powershell.exe'&lt;/span&gt;
    &lt;span class="na"&gt;CommandLine|contains&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;EncodedCommand'&lt;/span&gt;
  &lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;User&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NT&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;AUTHORITY\SYSTEM'&lt;/span&gt;
  &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;selection and not filter&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Meaning:&lt;/em&gt; Find all encoded PowerShell commands, except when run by &lt;code&gt;NT AUTHORITY\SYSTEM&lt;/code&gt; (assuming that service account runs safe scripts in your environment).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How They Work Together
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Match: The &lt;code&gt;selection&lt;/code&gt; grabs a broad or specific bucket of potentially bad events.&lt;/li&gt;
&lt;li&gt;Prune: The &lt;code&gt;filter&lt;/code&gt; sweeps through that bucket and throws out known-good noise.&lt;/li&gt;
&lt;li&gt;Condition: The &lt;code&gt;condition&lt;/code&gt; statement ties them together (e.g., &lt;code&gt;selection and not filter&lt;/code&gt;) to produce the final alert.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;(Note: You can also use separate, modular &lt;a href="https://sigmahq.io/docs/meta/filters.html" rel="noopener noreferrer"&gt;Sigma Filters&lt;/a&gt; in modern &lt;code&gt;pySigma&lt;/code&gt; workflows to manage environment-wide exclusions externally without editing the base detection rule).&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Here is exactly what happens for each condition, using the security camera analogy (&lt;strong&gt;Selection&lt;/strong&gt; = &lt;em&gt;Someone in a ski mask&lt;/em&gt;, &lt;strong&gt;Filter&lt;/strong&gt; = &lt;em&gt;It is Bob the maintenance worker&lt;/em&gt;):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;condition: selection and not filter&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it means:&lt;/strong&gt; &lt;strong&gt;Trigger an alert only for malicious activity.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What happens:&lt;/strong&gt; The activity you are looking for must happen (&lt;code&gt;selection&lt;/code&gt;), &lt;strong&gt;AND&lt;/strong&gt; it must not be the safe/excluded activity (&lt;code&gt;not filter&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analogy:&lt;/strong&gt; "Sound the alarm if someone in a ski mask shows up, &lt;strong&gt;and&lt;/strong&gt; it is &lt;strong&gt;not&lt;/strong&gt; Bob."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outcome:&lt;/strong&gt; You catch the real bad guy. Bob can walk by in his ski mask freely.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;condition: selection or not filter&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it means:&lt;/strong&gt; &lt;strong&gt;Trigger an alert for almost everything (A dangerous rule).&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What happens:&lt;/strong&gt; The alert fires if the malicious activity happens &lt;strong&gt;OR&lt;/strong&gt; if &lt;em&gt;anything&lt;/em&gt; else happens that doesn't match the filter. Because the "not filter" side is true for 99.9% of all normal network traffic, this rule will completely flood your system with fake alerts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analogy:&lt;/strong&gt; "Sound the alarm if someone is in a ski mask, &lt;strong&gt;or&lt;/strong&gt; if the person is &lt;strong&gt;not&lt;/strong&gt; Bob."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outcome:&lt;/strong&gt; The alarm goes off constantly for every single employee, customer, and delivery person who is not Bob, regardless of what they are wearing.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;condition: selection and filter&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it means:&lt;/strong&gt; &lt;strong&gt;Trigger an alert only when your exception happens.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What happens:&lt;/strong&gt; The alert fires only when the activity matches the suspicious criteria &lt;strong&gt;AND&lt;/strong&gt; simultaneously matches the exclusion criteria.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analogy:&lt;/strong&gt; "Sound the alarm if someone is in a ski mask, &lt;strong&gt;and&lt;/strong&gt; that person &lt;strong&gt;is&lt;/strong&gt; Bob."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outcome:&lt;/strong&gt; You are specifically spying on Bob. You will &lt;em&gt;only&lt;/em&gt; get an alert when Bob wears a ski mask, while an actual criminal in a ski mask will walk right past the camera undetected.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;condition: selection or filter&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What it means:&lt;/strong&gt; &lt;strong&gt;Trigger an alert for either behavior.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What happens:&lt;/strong&gt; The alert fires if the malicious activity happens, &lt;strong&gt;OR&lt;/strong&gt; if the safe/excluded activity happens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analogy:&lt;/strong&gt; "Sound the alarm if someone is in a ski mask, &lt;strong&gt;or&lt;/strong&gt; if Bob walks by (even in his normal uniform)."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outcome:&lt;/strong&gt; You catch the bad guy, but you also generate an annoying alert every single time Bob does his normal daily job.&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>sigma</category>
      <category>detection</category>
      <category>logs</category>
      <category>logic</category>
    </item>
    <item>
      <title>Jenkins Setup in Docker using Docker Compose</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Mon, 26 Oct 2026 16:57:39 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/jenkins-setup-in-docker-using-docker-compose-k1k</link>
      <guid>https://dev.to/raghavvram_johnson/jenkins-setup-in-docker-using-docker-compose-k1k</guid>
      <description>&lt;p&gt;To run Jenkins in Docker, use the following production-ready &lt;code&gt;docker-compose.yml&lt;/code&gt; file. This configuration includes data persistence and mounts the Docker socket so Jenkins can build and run other Docker containers inside your pipelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The &lt;code&gt;docker-compose.yml&lt;/code&gt; File
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;jenkins&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jenkins/jenkins:lts&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jenkins&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;privileged&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;root&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8181:8080"&lt;/span&gt;   &lt;span class="c1"&gt;# Jenkins Web UI&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;50000:50000"&lt;/span&gt; &lt;span class="c1"&gt;# Jenkins inbound agents port&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./jenkins_data:/var/jenkins_home&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/var/run/docker.sock:/var/run/docker.sock&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. How to Start Jenkins
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a directory for your project and navigate into it:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;jenkins-docker &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;jenkins-docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Save the configuration above into a file named &lt;code&gt;docker-compose.yml&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Start the container in the background:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  3. Retrieve the Initial Admin Password
&lt;/h2&gt;

&lt;p&gt;Once the container starts, Jenkins will generate a one-time setup password. Run this command to read it directly from the container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec &lt;/span&gt;jenkins &lt;span class="nb"&gt;cat&lt;/span&gt; /var/jenkins_home/secrets/initialAdminPassword
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the printed code, open your browser to &lt;code&gt;http://localhost:8181&lt;/code&gt;, and paste it in to finish your setup.&lt;/p&gt;

</description>
      <category>jenkins</category>
      <category>docker</category>
      <category>dockercompose</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Host SonarQube Community Edition using Docker Compose</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Mon, 26 Oct 2026 16:30:18 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/host-sonarqube-community-edition-using-docker-compose-1eh9</link>
      <guid>https://dev.to/raghavvram_johnson/host-sonarqube-community-edition-using-docker-compose-1eh9</guid>
      <description>&lt;p&gt;The below is a production-ready &lt;code&gt;docker-compose.yml&lt;/code&gt; file to spin up SonarQube Community Build alongside a persistent PostgreSQL database.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;docker-compose.yml&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;sonarqube&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sonarqube:community&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sonarqube&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;db&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;9111:9000"&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;sonarnet&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SONAR_JDBC_URL=jdbc:postgresql://db:5432/sonar&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SONAR_JDBC_USERNAME=sonar&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SONAR_JDBC_PASSWORD=sonar_secure_password&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;sonarqube_data:/opt/sonarqube/data&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;sonarqube_extensions:/opt/sonarqube/extensions&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;sonarqube_logs:/opt/sonarqube/logs&lt;/span&gt;
    &lt;span class="na"&gt;ulimits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;nofile&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;soft&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;65536&lt;/span&gt;
        &lt;span class="na"&gt;hard&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;65536&lt;/span&gt;

  &lt;span class="na"&gt;db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;postgres:15-alpine&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sonarqube_db&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;sonarnet&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;POSTGRES_USER=sonar&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;POSTGRES_PASSWORD=sonar_secure_password&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;POSTGRES_DB=sonar&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;postgresql_data:/var/lib/postgresql/data&lt;/span&gt;

&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;sonarnet&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bridge&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;sonarqube_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;sonarqube_extensions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;sonarqube_logs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;postgresql_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚠️ Critical Prerequisite (Elasticsearch Fix)
&lt;/h2&gt;

&lt;p&gt;SonarQube bundles an internal Elasticsearch instance. By default, most host operating systems limit the number of virtual memory map counts, which causes the Sonarqube container to crash immediately on startup.&lt;/p&gt;

&lt;p&gt;Before running the compose file, you must run the following command on your host machine to increase this limit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;sysctl &lt;span class="nt"&gt;-w&lt;/span&gt; vm.max_map_count&lt;span class="o"&gt;=&lt;/span&gt;524288
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;To make this change permanent, add &lt;code&gt;vm.max_map_count=524288&lt;/code&gt; to your &lt;code&gt;/etc/sysctl.conf&lt;/code&gt; file.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Start and Access
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Start the services in the background:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wait a minute or two for the database migrations to finish, then navigate to &lt;code&gt;http://localhost:9111&lt;/code&gt; in your browser.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Log in using the default credentials:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Username: &lt;code&gt;admin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Password: &lt;code&gt;admin&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;You will be immediately prompted to change this default password.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>sonarqube</category>
      <category>docker</category>
      <category>dockercompose</category>
      <category>sast</category>
    </item>
    <item>
      <title>Data handlers (CISSP)</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Tue, 13 Oct 2026 17:47:19 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/data-handlers-cissp-4ep2</link>
      <guid>https://dev.to/raghavvram_johnson/data-handlers-cissp-4ep2</guid>
      <description>&lt;h1&gt;
  
  
  Data handlers
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. &lt;strong&gt;Data Subject&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; The individual (natural person) to whom the personal data relates. This is the person whose information is being collected, processed, or stored.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt; They are the rights-holder under privacy regulations (GDPR, CCPA, etc.). They can exercise rights like access, rectification, erasure, and portability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; &lt;strong&gt;Creation/Collection&lt;/strong&gt; — they are the source of data. They also appear at &lt;strong&gt;Disposal&lt;/strong&gt; when exercising the "right to be forgotten."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt; Domain 2 (Asset Security) — understanding whose data you protect; Domain 1 (Security &amp;amp; Risk Management) — legal/regulatory compliance.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. &lt;strong&gt;Data Owner&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; A senior-level individual (often a business unit head or C-level executive) who has ultimate accountability for a specific dataset. They "own" the data from a business perspective.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Determines data classification and sensitivity levels&lt;/li&gt;
&lt;li&gt;Authorizes access and approves data sharing&lt;/li&gt;
&lt;li&gt;Ensures data quality and proper use&lt;/li&gt;
&lt;li&gt;Bears responsibility for data breaches within their domain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; Present across &lt;strong&gt;all stages&lt;/strong&gt;, but most active at &lt;strong&gt;Creation/Collection&lt;/strong&gt; (classification decisions) and &lt;strong&gt;Use/Sharing&lt;/strong&gt; (access authorization).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt; Domain 2 (Asset Security) — data classification and ownership; Domain 5 (Identity &amp;amp; Access Management) — access control decisions.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. &lt;strong&gt;Data Auditor&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; An independent party (internal or external) responsible for reviewing and verifying that data handling practices comply with policies, standards, and regulations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conducts audits of data access logs and processing activities&lt;/li&gt;
&lt;li&gt;Verifies compliance with data protection regulations&lt;/li&gt;
&lt;li&gt;Identifies control gaps and non-compliance&lt;/li&gt;
&lt;li&gt;Produces audit reports for management and regulators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; Primarily active during &lt;strong&gt;Use/Processing&lt;/strong&gt; and &lt;strong&gt;Retention&lt;/strong&gt; stages, but audits can span the entire lifecycle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt; Domain 1 (Security &amp;amp; Risk Management) — governance, risk, and compliance; Domain 7 (Security Operations) — monitoring and auditing.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. &lt;strong&gt;Data Steward&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; Operational-level role responsible for day-to-day management and oversight of data assets on behalf of the Data Owner. They are the "hands-on" custodians.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implements data policies and standards set by the Data Owner&lt;/li&gt;
&lt;li&gt;Manages data quality, metadata, and documentation&lt;/li&gt;
&lt;li&gt;Handles data access requests and user provisioning&lt;/li&gt;
&lt;li&gt;Ensures data is properly labeled, stored, and maintained&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; Active across &lt;strong&gt;all stages&lt;/strong&gt;, particularly &lt;strong&gt;Storage&lt;/strong&gt;, &lt;strong&gt;Use/Processing&lt;/strong&gt;, and &lt;strong&gt;Retention&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt; Domain 2 (Asset Security) — data handling and maintenance; Domain 5 (Identity &amp;amp; Access Management) — operational access control.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. &lt;strong&gt;Data Controller&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; The entity (person, organization, or authority) that determines the &lt;strong&gt;purposes and means&lt;/strong&gt; of processing personal data. They make the "why" and "how" decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decides what data to collect and for what purpose&lt;/li&gt;
&lt;li&gt;Determines legal basis for processing (consent, contract, legitimate interest, etc.)&lt;/li&gt;
&lt;li&gt;Bears primary legal responsibility for data protection compliance&lt;/li&gt;
&lt;li&gt;Must maintain records of processing activities (ROPA)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; &lt;strong&gt;Creation/Collection&lt;/strong&gt; (deciding what to collect and why), &lt;strong&gt;Use/Processing&lt;/strong&gt; (determining how data is used), and &lt;strong&gt;Disposal&lt;/strong&gt; (retention schedules).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt; Domain 1 (Security &amp;amp; Risk Management) — legal/regulatory compliance; Domain 2 (Asset Security) — data governance.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. &lt;strong&gt;Data Processor&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; An entity that processes personal data &lt;strong&gt;on behalf of the Data Controller&lt;/strong&gt;. They do not decide the purpose or means — they execute the Controller's instructions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performs operations like storage, retrieval, analysis, or transmission&lt;/li&gt;
&lt;li&gt;Must process data only per the Controller's documented instructions&lt;/li&gt;
&lt;li&gt;Implements security measures to protect data&lt;/li&gt;
&lt;li&gt;Must notify the Controller of breaches&lt;/li&gt;
&lt;li&gt;Often requires a Data Processing Agreement (DPA)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; Primarily &lt;strong&gt;Storage&lt;/strong&gt;, &lt;strong&gt;Use/Processing&lt;/strong&gt;, and sometimes &lt;strong&gt;Sharing&lt;/strong&gt; (if sub-processors are involved).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt; Domain 2 (Asset Security) — third-party/vendor risk; Domain 1 (Security &amp;amp; Risk Management) — contractual and legal obligations.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. &lt;strong&gt;Data Custodian&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Who they are:&lt;/strong&gt; The technical/IT professional responsible for the &lt;strong&gt;physical and logical protection&lt;/strong&gt; of data assets. Unlike the Data Steward (business-focused) or Data Owner (accountability-focused), the Custodian is &lt;strong&gt;hands-on technical&lt;/strong&gt; — they manage the systems, infrastructure, and controls that house the data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What they do:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implements and maintains security controls (encryption, backups, access controls)&lt;/li&gt;
&lt;li&gt;Manages storage infrastructure, databases, and cloud environments&lt;/li&gt;
&lt;li&gt;Performs backups, recovery, and disaster recovery operations&lt;/li&gt;
&lt;li&gt;Configures and monitors technical access controls (firewalls, permissions, DLP)&lt;/li&gt;
&lt;li&gt;Ensures data availability, integrity, and confidentiality at the technical layer&lt;/li&gt;
&lt;li&gt;Handles data migration, archiving, and secure deletion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data Lifecycle Stage:&lt;/strong&gt; Active across &lt;strong&gt;all stages&lt;/strong&gt;, but most critical during:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt; — managing where and how data resides&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use/Processing&lt;/strong&gt; — maintaining system availability and performance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retention&lt;/strong&gt; — enforcing retention policies and archival&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disposal&lt;/strong&gt; — executing secure deletion, degaussing, or destruction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;CISSP Relevance:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Domain 2 (Asset Security)&lt;/strong&gt; — data handling requirements, classification enforcement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain 3 (Security Architecture &amp;amp; Engineering)&lt;/strong&gt; — designing secure storage and processing systems&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain 7 (Security Operations)&lt;/strong&gt; — backup, recovery, and monitoring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain 5 (Identity &amp;amp; Access Management)&lt;/strong&gt; — technical access control implementation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How Data Custodian Differs from Data Steward
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Data Custodian&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Data Steward&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Focus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Technical protection&lt;/td&gt;
&lt;td&gt;Business/data quality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Responsibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;How&lt;/em&gt; data is secured&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;What&lt;/em&gt; data means and how it's used&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tasks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Backups, encryption, patching&lt;/td&gt;
&lt;td&gt;Metadata, quality rules, access requests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reports to&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;IT/Security leadership&lt;/td&gt;
&lt;td&gt;Data Owner / Business unit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CISSP Domain&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2, 3, 7&lt;/td&gt;
&lt;td&gt;2, 5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Simple analogy:&lt;/strong&gt; The &lt;strong&gt;Data Owner&lt;/strong&gt; is the homeowner, the &lt;strong&gt;Data Steward&lt;/strong&gt; is the property manager who handles tenant rules, and the &lt;strong&gt;Data Custodian&lt;/strong&gt; is the security guard and maintenance crew who physically protect and maintain the building.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Primary Responsibility&lt;/th&gt;
&lt;th&gt;Key Lifecycle Stage&lt;/th&gt;
&lt;th&gt;CISSP Domain&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Subject&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rights-holder&lt;/td&gt;
&lt;td&gt;Creation/Collection&lt;/td&gt;
&lt;td&gt;1, 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Owner&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Accountability &amp;amp; classification&lt;/td&gt;
&lt;td&gt;All (esp. Creation, Use)&lt;/td&gt;
&lt;td&gt;2, 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Auditor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Compliance verification&lt;/td&gt;
&lt;td&gt;Use, Retention&lt;/td&gt;
&lt;td&gt;1, 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Steward&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Operational data management &amp;amp; quality&lt;/td&gt;
&lt;td&gt;All stages&lt;/td&gt;
&lt;td&gt;2, 5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Custodian&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Technical protection &amp;amp; infrastructure&lt;/td&gt;
&lt;td&gt;Storage, Retention, Disposal&lt;/td&gt;
&lt;td&gt;2, 3, 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Controller&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Determines purpose &amp;amp; means&lt;/td&gt;
&lt;td&gt;Creation, Use, Disposal&lt;/td&gt;
&lt;td&gt;1, 2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Processor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Executes processing on behalf&lt;/td&gt;
&lt;td&gt;Storage, Use, Sharing&lt;/td&gt;
&lt;td&gt;1, 2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>cissp</category>
      <category>data</category>
      <category>handlers</category>
    </item>
    <item>
      <title>Apache Kafka</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Tue, 13 Oct 2026 17:44:33 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/apache-kafka-1fo8</link>
      <guid>https://dev.to/raghavvram_johnson/apache-kafka-1fo8</guid>
      <description>&lt;p&gt;Apache Kafka is a powerful open-source distributed event streaming platform designed to handle real-time data feeds. It was originally developed by LinkedIn and is now maintained by the Apache Software Foundation. Kafka is widely used for building real-time data pipelines and streaming applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Core Concepts of Apache Kafka&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Topics&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Kafka topic is a category or feed name to which records are sent by producers.&lt;/li&gt;
&lt;li&gt;Topics are partitioned, meaning each topic can have multiple partitions to allow parallel processing.&lt;/li&gt;
&lt;li&gt;Example: A topic named &lt;code&gt;user_activity&lt;/code&gt; could store logs of user actions on a website.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Partitions&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each topic is divided into partitions, which are ordered, immutable sequences of records.&lt;/li&gt;
&lt;li&gt;Partitions allow Kafka to scale horizontally by distributing data across multiple brokers.&lt;/li&gt;
&lt;li&gt;Each record in a partition is assigned a unique offset.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Producers&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Producers are applications that send data to Kafka topics.&lt;/li&gt;
&lt;li&gt;They can specify which partition to send data to or let Kafka decide based on a partitioning strategy.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consumers&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consumers are applications that read data from Kafka topics.&lt;/li&gt;
&lt;li&gt;They can subscribe to one or more topics and process the data in real-time.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Brokers&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kafka brokers are servers that store data and serve client requests.&lt;/li&gt;
&lt;li&gt;A Kafka cluster consists of multiple brokers, and each broker is identified by a unique ID.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ZooKeeper&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ZooKeeper is used for managing and coordinating Kafka brokers.&lt;/li&gt;
&lt;li&gt;It handles tasks like leader election for partitions and storing metadata.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Offsets&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An offset is a unique identifier for each record within a partition.&lt;/li&gt;
&lt;li&gt;Consumers use offsets to keep track of their position in the topic.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Replication&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kafka replicates data across multiple brokers to ensure fault tolerance.&lt;/li&gt;
&lt;li&gt;Each partition has one leader and multiple replicas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Kafka APIs&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Producer API&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allows applications to send streams of data to topics.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consumer API&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enables applications to read streams of data from topics.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Streams API&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used for building real-time stream processing applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Connect API&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Facilitates integration between Kafka and other systems like databases or file systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>apache</category>
      <category>kafka</category>
    </item>
    <item>
      <title>Bridged, NAT, and Host-Only in Vmware</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Tue, 13 Oct 2026 17:42:10 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/bridged-nat-and-host-only-in-vmware-3k85</link>
      <guid>https://dev.to/raghavvram_johnson/bridged-nat-and-host-only-in-vmware-3k85</guid>
      <description>&lt;p&gt;VMware Workstation Pro provides three main default network modes (&lt;em&gt;Bridged, NAT, and Host-Only&lt;/em&gt;) along with custom and specialized networking options managed through virtual switches (&lt;code&gt;VMnet&lt;/code&gt; interfaces). &lt;/p&gt;

&lt;h2&gt;
  
  
  Main Network Modes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bridged Networking (&lt;code&gt;VMnet0&lt;/code&gt;)

&lt;ul&gt;
&lt;li&gt;How it works: Connects the virtual machine directly to your physical local area network (LAN) using the host's physical network adapter.&lt;/li&gt;
&lt;li&gt;IP address: Receives a distinct IP address directly from your physical router or DHCP server on the same subnet as your host.&lt;/li&gt;
&lt;li&gt;Best for: Running servers, testing network services, or making the VM appear as a separate physical machine on your network. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;NAT (Network Address Translation) Networking (&lt;code&gt;VMnet8&lt;/code&gt;)

&lt;ul&gt;
&lt;li&gt;How it works: Shares the host computer's IP address to access external networks or the internet through a built-in virtual NAT device and virtual DHCP server.&lt;/li&gt;
&lt;li&gt;IP address: Assigned a private IP address by VMware's internal DHCP server; inbound traffic is blocked unless port forwarding is configured.&lt;/li&gt;
&lt;li&gt;Best for: Safe internet access and general lab environments where the VM needs web access without exposing itself directly to the local network.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Host-Only Networking (&lt;code&gt;VMnet1&lt;/code&gt;)

&lt;ul&gt;
&lt;li&gt;How it works: Creates a completely isolated, private network container that links only the host and the virtual machines.&lt;/li&gt;
&lt;li&gt;IP address: Assigned by a virtual DHCP server on a closed internal subnet. The VM has no access to external networks or the internet.&lt;/li&gt;
&lt;li&gt;Best for: Secure sandboxing, offline testing, and practicing multi-machine setups like Active Directory or DNS. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Additional &amp;amp; Custom Options
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Custom Networks (&lt;code&gt;VMnet2&lt;/code&gt; through &lt;code&gt;VMnet255&lt;/code&gt; on Linux / up to 20 on Windows)

&lt;ul&gt;
&lt;li&gt;Allows you to use the Virtual Network Editor to build custom switch configurations (combining custom NAT, Bridged, or Host-Only rules) to isolate specific groups of VMs. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LAN Segments

&lt;ul&gt;
&lt;li&gt;Specialized private networks that operate without a DHCP server or host connectivity.&lt;/li&gt;
&lt;li&gt;Best for: Multi-tier application testing or isolated multi-node cluster simulations. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Advanced Features

&lt;ul&gt;
&lt;li&gt;Custom MAC address assignment, network throttling (simulating bandwidth limits or latency), and "Replicate physical network connection state" for mobile or Wi-Fi roaming laptops.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the comparison table for the three primary network modes in VMware Workstation Pro:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Bridged (&lt;code&gt;VMnet0&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;NAT (&lt;code&gt;VMnet8&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Host-Only (&lt;code&gt;VMnet1&lt;/code&gt;)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IP Address Source&lt;/td&gt;
&lt;td&gt;Physical network router / DHCP&lt;/td&gt;
&lt;td&gt;VMware virtual DHCP&lt;/td&gt;
&lt;td&gt;VMware virtual DHCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Subnet Location&lt;/td&gt;
&lt;td&gt;Same subnet as the host&lt;/td&gt;
&lt;td&gt;Separate private subnet&lt;/td&gt;
&lt;td&gt;Separate private subnet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Internet Access&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (via host IP)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Host Communication&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External Network Visibility&lt;/td&gt;
&lt;td&gt;Visible as a unique device&lt;/td&gt;
&lt;td&gt;Hidden behind host IP&lt;/td&gt;
&lt;td&gt;Completely hidden / Isolated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inbound Connections&lt;/td&gt;
&lt;td&gt;Allowed by default&lt;/td&gt;
&lt;td&gt;Blocked (requires port forwarding)&lt;/td&gt;
&lt;td&gt;Blocked from outside host&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best Use Case&lt;/td&gt;
&lt;td&gt;Server hosting / Network scanning&lt;/td&gt;
&lt;td&gt;Safe web browsing / Software updates&lt;/td&gt;
&lt;td&gt;Malware sandboxing / Private labs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Advanced Connectivity Matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Bridged (&lt;code&gt;VMnet0&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;NAT (&lt;code&gt;VMnet8&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Host-Only (&lt;code&gt;VMnet1&lt;/code&gt;)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VM-to-VM Access&lt;/td&gt;
&lt;td&gt;Yes (If on the same physical network)&lt;/td&gt;
&lt;td&gt;Yes (If on the same &lt;code&gt;VMnet8&lt;/code&gt; switch)&lt;/td&gt;
&lt;td&gt;Yes (If on the same &lt;code&gt;VMnet1&lt;/code&gt; switch)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access from another physical device (Same Network)&lt;/td&gt;
&lt;td&gt;Yes (Directly via VM's IP)&lt;/td&gt;
&lt;td&gt;No (Unless Port Forwarding is configured)&lt;/td&gt;
&lt;td&gt;No (Completely isolated from physical network)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access from the Internet&lt;/td&gt;
&lt;td&gt;Yes (Requires port forwarding on physical router)&lt;/td&gt;
&lt;td&gt;Yes (Requires double port forwarding: router $\rightarrow$ host $\rightarrow$ VM)&lt;/td&gt;
&lt;td&gt;No (Cannot be routed out)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VM Access to Host&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VM Access to Same Network Devices&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (Outbound traffic is NATed via host IP)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VM Access to the Internet&lt;/td&gt;
&lt;td&gt;Yes (Direct outbound)&lt;/td&gt;
&lt;td&gt;Yes (Outbound via host NAT)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Port Forwarding Possible&lt;/td&gt;
&lt;td&gt;N/A (Not needed; it has a direct IP)&lt;/td&gt;
&lt;td&gt;Yes (Built into VMware Virtual Network Editor)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reverse Connection / Reverse Shell Success&lt;/td&gt;
&lt;td&gt;Yes (To any device on the network or internet)&lt;/td&gt;
&lt;td&gt;Yes (To host, network, or internet via NAT)&lt;/td&gt;
&lt;td&gt;Host/Internal Only (Cannot reach external devices)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Key Takeaways for Advanced Control
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reverse Connections: If you are testing reverse shells or callbacks in a security lab, NAT allows the VM to reach out to an external listening device seamlessly, while Host-Only blocks all outbound packets from leaving your local machine.&lt;/li&gt;
&lt;li&gt;The "Vice Versa" Rule: If a VM cannot see a network (like Host-Only looking at the internet), devices on that network cannot see it either. Outbound access usually dictates inbound capability unless explicit translation (NAT/Port Forwarding) is placed in between.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Advanced Capabilities &amp;amp; Performance Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Technical Metric / Feature&lt;/th&gt;
&lt;th&gt;Bridged (&lt;code&gt;VMnet0&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;NAT (&lt;code&gt;VMnet8&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Host-Only (&lt;code&gt;VMnet1&lt;/code&gt;)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DHCP Management&lt;/td&gt;
&lt;td&gt;Handled by external physical router / network team&lt;/td&gt;
&lt;td&gt;Handled internally by VMware DHCP Service&lt;/td&gt;
&lt;td&gt;Handled internally by VMware DHCP Service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bandwidth &amp;amp; Latency Throttling&lt;/td&gt;
&lt;td&gt;Limited by host NIC and physical switch infrastructure&lt;/td&gt;
&lt;td&gt;Controlled via VM Network Adapter advanced settings&lt;/td&gt;
&lt;td&gt;Controlled via VM Network Adapter advanced settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Promiscuous Mode / Packet Sniffing&lt;/td&gt;
&lt;td&gt;Supported (Can capture physical network broadcast traffic)&lt;/td&gt;
&lt;td&gt;Limited (Only captures traffic passing through the NAT gateway)&lt;/td&gt;
&lt;td&gt;Isolated (Only captures traffic within the private host vSwitch)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MAC Address Handling&lt;/td&gt;
&lt;td&gt;Exposes VM MAC directly to the physical network switch&lt;/td&gt;
&lt;td&gt;Masked behind the host’s physical MAC address&lt;/td&gt;
&lt;td&gt;Never exposed to the physical network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP Address Exhaustion Risk&lt;/td&gt;
&lt;td&gt;High (Can exhaust company/home DHCP pool limits)&lt;/td&gt;
&lt;td&gt;None (Uses local private &lt;code&gt;192.168.x.x&lt;/code&gt; scope)&lt;/td&gt;
&lt;td&gt;None (Uses local private &lt;code&gt;192.168.x.x&lt;/code&gt; scope)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Physical Link State Replication&lt;/td&gt;
&lt;td&gt;Supported (VM drops connection if host unplugges Ethernet/Wi-Fi)&lt;/td&gt;
&lt;td&gt;N/A (Virtual switch link stays up even if host loses internet)&lt;/td&gt;
&lt;td&gt;N/A (Completely independent of physical link status)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VLAN Tagging (802.1Q)&lt;/td&gt;
&lt;td&gt;Supported (If host NIC driver allows tagging pass-through)&lt;/td&gt;
&lt;td&gt;Not Supported&lt;/td&gt;
&lt;td&gt;Not Supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Host System Resource Overhead&lt;/td&gt;
&lt;td&gt;Lowest (Packets pass straight to hardware layer)&lt;/td&gt;
&lt;td&gt;Highest (Host CPU translates packet headers via &lt;code&gt;vmnat.exe&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Low (Handled entirely in host kernel RAM/vSwitch)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Contextual Metrics Broken Down
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Security Risk &amp;amp; Network Isolation: In Bridged mode, a misconfigured firewall or a compromised VM exposes your entire physical corporation or home network to risk. NAT offers a default perimeter hardware firewall behavior, while Host-Only offers standard air-gapped sandboxing.&lt;/li&gt;
&lt;li&gt;Wi-Fi / Roaming Stability: Bridged mode frequently drops connections or fails to pull an IP address when your host laptop switches between Wi-Fi access points or moves to an 802.1X authenticated corporate network. NAT eliminates this problem because the VM only cares about its stable link to the host OS.&lt;/li&gt;
&lt;li&gt;Virtual Network Editor Customization: While &lt;code&gt;VMnet0&lt;/code&gt;, &lt;code&gt;VMnet8&lt;/code&gt;, and &lt;code&gt;VMnet1&lt;/code&gt; are default placeholders, you can change the underlying subnets, toggle the local DHCP servers on/off entirely, or restrict IP allocation ranges manually using the VMware Virtual Network Editor utility.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Security &amp;amp; Threat Exposure Matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Security Feature / Metric&lt;/th&gt;
&lt;th&gt;Bridged (&lt;code&gt;VMnet0&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;NAT (&lt;code&gt;VMnet8&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Host-Only (&lt;code&gt;VMnet1&lt;/code&gt;)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Default Isolation Level&lt;/td&gt;
&lt;td&gt;None (Fully exposed to the host's physical network segment)&lt;/td&gt;
&lt;td&gt;Partial (Inbound blocked; outbound allowed via translation)&lt;/td&gt;
&lt;td&gt;High / Strict (Air-gapped from external networks; host-guest only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Attack Surface Exposure&lt;/td&gt;
&lt;td&gt;Highest (VM can be directly targeted by any device on the physical LAN)&lt;/td&gt;
&lt;td&gt;Low (Hidden behind host IP; only targetable via explicit port forwards)&lt;/td&gt;
&lt;td&gt;Lowest (Invisible to the outside world; targetable only by the host or internal VMs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Malware Sandbox Suitability&lt;/td&gt;
&lt;td&gt;Dangerous (Malware can worm/spread to physical devices on your home/office network)&lt;/td&gt;
&lt;td&gt;Risky (Malware can dial out to Command &amp;amp; Control servers or scan the LAN via NAT)&lt;/td&gt;
&lt;td&gt;Excellent (Malware is safely contained within the local virtual switch infrastructure)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network Sniffing Risk (Host Side)&lt;/td&gt;
&lt;td&gt;High (Host machine can easily sniff all VM traffic via local interfaces)&lt;/td&gt;
&lt;td&gt;Medium (Host can sniff traffic passing through the virtual gateway)&lt;/td&gt;
&lt;td&gt;Medium (Host can sniff traffic passing through the virtual gateway)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network Sniffing Risk (LAN Side)&lt;/td&gt;
&lt;td&gt;High (Physical network attackers can capture VM broadcast/multicast packets)&lt;/td&gt;
&lt;td&gt;Protected (Physical LAN attackers only see the host's traffic packets)&lt;/td&gt;
&lt;td&gt;Completely Immune (No data packets ever touch the physical medium)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP/MAC Spoofing Impact&lt;/td&gt;
&lt;td&gt;Severe (A malicious VM can disrupt or poison the physical network's ARP table)&lt;/td&gt;
&lt;td&gt;Contained (Spoofing only breaks or disrupts the internal &lt;code&gt;VMnet8&lt;/code&gt; virtual switch)&lt;/td&gt;
&lt;td&gt;Contained (Spoofing only breaks or disrupts the internal &lt;code&gt;VMnet1&lt;/code&gt; virtual switch)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise Policy Compliance&lt;/td&gt;
&lt;td&gt;Often Violates (Connecting unauthorized VMs directly to corporate ports frequently trips rogue device alerts)&lt;/td&gt;
&lt;td&gt;Usually Allowed (Appears to corporate monitoring tools as standard, single-host traffic)&lt;/td&gt;
&lt;td&gt;Safe (Does not interact with corporate infrastructure, preserving compliance)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Key Security Implementations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Inbound Hardware Barrier: NAT acts as a unidirectional firewall by default. External machines cannot initiate a handshake with a NAT VM unless you intentionally program a rule into the Virtual Network Editor.&lt;/li&gt;
&lt;li&gt;The Threat of Lateral Movement: If you run a vulnerable machine (like an unpatched Windows or Linux target for hacking practice) on Bridged mode, any infected machine on your actual living room or corporate Wi-Fi can attack it, and vice versa.&lt;/li&gt;
&lt;li&gt;True Air-Gapping: To simulate a completely isolated environment (e.g., analyzing ransomware), Host-Only is the baseline standard. To completely sever the host machine from the loop as well, you would transition the VM from Host-Only to an isolated LAN Segment.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vmware</category>
      <category>bridged</category>
      <category>nat</category>
      <category>hostonly</category>
    </item>
    <item>
      <title>Common JS vs ECMAScript Modules</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Tue, 13 Oct 2026 17:39:50 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/common-js-vs-ecmascript-modules-3e09</link>
      <guid>https://dev.to/raghavvram_johnson/common-js-vs-ecmascript-modules-3e09</guid>
      <description>&lt;p&gt;&lt;strong&gt;CommonJS (CJS) and ECMAScript Modules (ESM) are the two main systems used in JavaScript to organize, import, and export code across files.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Key Differences&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Syntax:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;CommonJS uses &lt;code&gt;require()&lt;/code&gt; and &lt;code&gt;module.exports&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;ESM uses &lt;code&gt;import&lt;/code&gt; and &lt;code&gt;export&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Loading Mechanism:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;CommonJS loads modules &lt;strong&gt;synchronously&lt;/strong&gt; (blocking) at runtime.&lt;/li&gt;
&lt;li&gt;ESM loads modules &lt;strong&gt;asynchronously&lt;/strong&gt; and supports top-level &lt;code&gt;await&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standardization:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;CommonJS is the original module format built specifically for Node.js.&lt;/li&gt;
&lt;li&gt;ESM is the official W3C/ECMAScript standard supported natively in modern web browsers and Node.js.&lt;/li&gt;
&lt;li&gt;CommonJS does not support reliable &lt;strong&gt;tree-shaking&lt;/strong&gt; (dead code elimination) because exports are dynamic and not statically analyzable.&lt;/li&gt;
&lt;li&gt;ESM supports static analysis, allowing bundlers to drop unused code cleanly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File Extensions &amp;amp; Config:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;CommonJS uses &lt;code&gt;.cjs&lt;/code&gt; or default &lt;code&gt;.js&lt;/code&gt; (unless overridden).&lt;/li&gt;
&lt;li&gt;ESM uses &lt;code&gt;.mjs&lt;/code&gt;, or &lt;code&gt;.js&lt;/code&gt; when &lt;code&gt;"type": "module"&lt;/code&gt; is declared in &lt;code&gt;package.json&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global Variables:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;CommonJS provides direct access to &lt;code&gt;__dirname&lt;/code&gt; and &lt;code&gt;__filename&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;ESM does not have these globals; instead, it relies on &lt;code&gt;import.meta.url&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feature Comparison&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;CommonJS (CJS)&lt;/th&gt;
&lt;th&gt;ECMAScript Modules (ESM)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Syntax&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;require()&lt;/code&gt; / &lt;code&gt;module.exports&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;import&lt;/code&gt; / &lt;code&gt;export&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Loading&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Synchronous (blocking)&lt;/td&gt;
&lt;td&gt;Asynchronous (non-blocking)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Browser Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No (needs a bundler)&lt;/td&gt;
&lt;td&gt;Yes (native)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tree-Shaking&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Limited / Not supported&lt;/td&gt;
&lt;td&gt;Fully supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Default in Node.js&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes (for &lt;code&gt;.js&lt;/code&gt; files)&lt;/td&gt;
&lt;td&gt;Yes (when configured)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Which Should You Use?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use ESM&lt;/strong&gt; as the default choice for all &lt;strong&gt;new projects&lt;/strong&gt;, modern libraries, and browser-based applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use CommonJS&lt;/strong&gt; primarily when maintaining legacy Node.js codebases, working with older tools that lack ESM support, or when migrating would cause high disruption.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>modules</category>
      <category>commonjs</category>
      <category>ecmascript</category>
    </item>
    <item>
      <title>🚀 Splunk Core deployment Guide: Docker Server &amp; Arch Linux Forwarder</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Tue, 13 Oct 2026 17:38:28 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/splunk-core-deployment-guide-docker-server-arch-linux-forwarder-3mnh</link>
      <guid>https://dev.to/raghavvram_johnson/splunk-core-deployment-guide-docker-server-arch-linux-forwarder-3mnh</guid>
      <description>&lt;p&gt;This reference manual documents the complete architecture, configurations, and commands required to spin up a standalone Splunk indexer and securely ingest host operating system events.&lt;/p&gt;

&lt;p&gt;Part 1: Splunk Enterprise Server (Docker Compose)&lt;/p&gt;

&lt;p&gt;We deployed a permanent &lt;strong&gt;Splunk Free&lt;/strong&gt; environment on the &lt;code&gt;x86_64&lt;/code&gt; architecture. Using Docker volumes ensures all indexed data, search structures, and dashboards persist through restarts.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deployment File Configuration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Create a dedicated working directory and save this file exactly as &lt;strong&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;splunk&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;splunk/splunk:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;splunk_free&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="c1"&gt;# Accept the mandatory Splunk licensing terms&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SPLUNK_START_ARGS=--accept-license&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SPLUNK_GENERAL_TERMS=--accept-sgt-current-at-splunk-com&lt;/span&gt;

      &lt;span class="c1"&gt;# Activates the perpetual 500MB/day Free license immediately&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SPLUNK_LICENSE_URI=Free&lt;/span&gt;

      &lt;span class="c1"&gt;# Required for internal initialization protocols&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SPLUNK_PASSWORD=YourSecurePassword123!&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8000:8000"&lt;/span&gt;   &lt;span class="c1"&gt;# Splunk Web UI Browser Console&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8088:8088"&lt;/span&gt;   &lt;span class="c1"&gt;# HTTP Event Collector (HEC) API Ingestion&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;9997:9997"&lt;/span&gt;   &lt;span class="c1"&gt;# Splunk Indexer - Receiving port for Forwarders&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;splunk_etc:/opt/splunk/etc&lt;/span&gt;  &lt;span class="c1"&gt;# Stores configuration settings and custom apps&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;splunk_var:/opt/splunk/var&lt;/span&gt;  &lt;span class="c1"&gt;# Stores raw indexed log databases&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;splunk_etc&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;splunk_var&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Operational Operations&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start Stack:&lt;/strong&gt; &lt;code&gt;docker compose up -d&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop Stack:&lt;/strong&gt; &lt;code&gt;docker compose down&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web UI URL:&lt;/strong&gt; Access &lt;strong&gt;&lt;code&gt;http://localhost:8000&lt;/code&gt;&lt;/strong&gt; (Free Mode automatically routes directly into the unauthenticated workspace).&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Server Configuration Constraint (Crucial Step)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Before any external machine can communicate with this container, the indexer engine must be instructed to listen on its data pipeline port:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Forwarding and receiving&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Configure receiving&lt;/strong&gt; under the &lt;em&gt;Receive data&lt;/em&gt; column header.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;New Receiving Port&lt;/strong&gt;, enter &lt;strong&gt;&lt;code&gt;9997&lt;/code&gt;&lt;/strong&gt;, and click &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Part 2: Host Node Log Ingestion (Arch Linux)&lt;/p&gt;

&lt;p&gt;Because Arch Linux relies natively on &lt;code&gt;systemd-journald&lt;/code&gt; instead of traditional structural text files (like &lt;code&gt;syslog&lt;/code&gt;), we implemented a direct, low-overhead native script architecture.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the Agent Binary via AUR&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Install the stable binary tracking from the Arch User Repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;paru &lt;span class="nt"&gt;-S&lt;/span&gt; splunkforwarder
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Initial Setup Credentials&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Initialize the runtime parameters to establish the root control passwords:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /opt/splunkforwarder/bin/splunk start &lt;span class="nt"&gt;--accept-license&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(Provide username &lt;code&gt;admin&lt;/code&gt; and create a distinct local agent password when prompted, then stop the session via &lt;code&gt;sudo /opt/splunkforwarder/bin/splunk stop&lt;/code&gt; to return control to systemd).&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Establish System Target Routing&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Map the outbound forwarding path toward the container server. If the agent runs on the same underlying operating system as Docker, target the internal loopback:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /opt/splunkforwarder/bin/splunk add forward-server 127.0.0.1:9997 &lt;span class="nt"&gt;-auth&lt;/span&gt; admin:&amp;lt;YourForwarderPassword&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Overcome Arch Systemd Journal Security Boundaries&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;code&gt;splunk&lt;/code&gt; daemon user created by the package must be explicitly allowed to look inside binary operating system logging streams:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; systemd-journal splunk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Configure Native Journal Ingestion File&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rather than fighting text-file translation limits, manually specify a high-performance native &lt;code&gt;journald&lt;/code&gt; input receiver stream.&lt;/p&gt;

&lt;p&gt;Open the system configuration manager:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nvim /opt/splunkforwarder/etc/system/local/inputs.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Overwrite or append the exact parameters below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[default]&lt;/span&gt;
&lt;span class="py"&gt;host&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;arch-workstation&lt;/span&gt;

&lt;span class="nn"&gt;[journald://system_logs]&lt;/span&gt;
&lt;span class="py"&gt;disabled&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;false&lt;/span&gt;
&lt;span class="py"&gt;index&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;
&lt;span class="py"&gt;sourcetype&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;journald&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Permission Realignment &amp;amp; Service Activation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Force a complete runtime ownership sync on application directories and hand engine lifecycle tracking to the native scheduler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; splunk:splunk /opt/splunkforwarder
&lt;span class="nb"&gt;sudo chmod&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; 755 /opt/splunkforwarder
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; splunkforwarder.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Part 3: Telemetry Analysis&lt;/p&gt;

&lt;p&gt;To confirm telemetry streams are transmitting across isolation boundaries, load the Splunk Search Panel and run the following queries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify Infrastructure Logs Inbound:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index="main" sourcetype="journald"
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Verify Client-to-Server Health Interconnectivity:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;index="_internal" sourcetype="splunkd"
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And Congratulations, you have successfully installed Splunk Free Edition&lt;/p&gt;

</description>
      <category>splunk</category>
      <category>docker</category>
      <category>arch</category>
      <category>linux</category>
    </item>
    <item>
      <title>🔐 Demystifying NIST SP 800-53</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Fri, 02 Oct 2026 12:53:48 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/demystifying-nist-sp-800-53-3m2</link>
      <guid>https://dev.to/raghavvram_johnson/demystifying-nist-sp-800-53-3m2</guid>
      <description>&lt;p&gt;If you’re getting started with &lt;strong&gt;Cybersecurity, GRC, Compliance, or Security Engineering&lt;/strong&gt;, you’ll eventually come across &lt;strong&gt;NIST SP 800-53&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But what exactly is it?&lt;/p&gt;

&lt;h3&gt;
  
  
  🏛️ What is NIST?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;NIST&lt;/strong&gt; stands for the &lt;strong&gt;National Institute of Standards and Technology&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is a &lt;strong&gt;non-regulatory agency of the U.S. Department of Commerce&lt;/strong&gt;, founded in &lt;strong&gt;1901&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;NIST develops standards, guidelines, and frameworks that help organizations manage technology, security, privacy, and risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔐 What is NIST SP 800-53?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;NIST Special Publication 800-53&lt;/strong&gt; is a comprehensive catalog of &lt;strong&gt;security and privacy controls&lt;/strong&gt; for information systems and organizations.&lt;/p&gt;

&lt;p&gt;In simple terms:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NIST 800-53 tells you what security and privacy controls you should consider implementing to manage risk.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is widely used as a foundation for building and assessing security programs, particularly in U.S. federal environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  📌 What does "Revision 5" mean?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Revision 5&lt;/strong&gt; is the fifth major revision of NIST SP 800-53.&lt;/p&gt;

&lt;p&gt;It significantly modernized the publication by:&lt;/p&gt;

&lt;p&gt;• Integrating &lt;strong&gt;privacy controls&lt;/strong&gt;&lt;br&gt;
• Introducing a more flexible, &lt;strong&gt;organization-centric&lt;/strong&gt; approach&lt;br&gt;
• Moving away from controls being tied strictly to specific technologies&lt;br&gt;
• Expanding coverage for modern cybersecurity and supply-chain risks&lt;/p&gt;

&lt;h3&gt;
  
  
  📊 NIST SP 800-53 Rev. 5 — The Numbers
&lt;/h3&gt;

&lt;p&gt;The catalog contains:&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;20 Control Families&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔹 &lt;strong&gt;~1,200 total controls and control enhancements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔹 Approximately &lt;strong&gt;300 base controls&lt;/strong&gt;, with the remainder consisting largely of control enhancements.&lt;/p&gt;

&lt;p&gt;Impact-based baselines are also defined, with controls/enhancements allocated across:&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Low:&lt;/strong&gt; 149&lt;br&gt;
• &lt;strong&gt;Moderate:&lt;/strong&gt; 287&lt;br&gt;
• &lt;strong&gt;High:&lt;/strong&gt; 370&lt;/p&gt;

&lt;h3&gt;
  
  
  🧩 The 4-Level Hierarchy
&lt;/h3&gt;

&lt;p&gt;Think of NIST 800-53 like a tree:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 1 — The Catalog&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The complete NIST SP 800-53 Rev. 5 catalog containing the security and privacy controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 2 — Control Families&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The catalog is organized into &lt;strong&gt;20 families&lt;/strong&gt;, each covering a broad security or privacy domain.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;AC — Access Control&lt;/strong&gt;&lt;br&gt;
• &lt;strong&gt;IR — Incident Response&lt;/strong&gt;&lt;br&gt;
• &lt;strong&gt;SC — System and Communications Protection&lt;/strong&gt;&lt;br&gt;
• &lt;strong&gt;SR — Supply Chain Risk Management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 3 — Base Controls&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These are the foundational requirements within each family.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AC-2 — Account Management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 4 — Control Enhancements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enhancements add additional requirements or rigor to a base control.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AC-2(1) — Automated System Account Management&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So you can think of it as:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NIST SP 800-53&lt;/strong&gt;&lt;br&gt;
→ &lt;strong&gt;Control Family&lt;/strong&gt;&lt;br&gt;
→ &lt;strong&gt;Base Control&lt;/strong&gt;&lt;br&gt;
→ &lt;strong&gt;Control Enhancement&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once you understand this hierarchy, navigating NIST 800-53 becomes much less intimidating.&lt;/p&gt;

&lt;p&gt;🔐 &lt;strong&gt;Cybersecurity isn't just about tools. It's also about understanding the controls, processes, and frameworks that define how security is managed.&lt;/strong&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/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnh2daum36gal94b6tdmb.jpg" 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/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnh2daum36gal94b6tdmb.jpg" alt="Image explain the structure of a single NIST 800-53 control" width="799" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>nist80053</category>
      <category>nist</category>
      <category>infosec</category>
    </item>
    <item>
      <title>Simple TCP Server in Python</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Thu, 01 Oct 2026 16:33:35 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/simple-tcp-server-in-python-20k4</link>
      <guid>https://dev.to/raghavvram_johnson/simple-tcp-server-in-python-20k4</guid>
      <description>&lt;h2&gt;
  
  
  TCP Server
&lt;/h2&gt;

&lt;p&gt;Creating TCP servers in Python is just as easy as creating a client. You might want to use your own TCP server when writing command shells or crafting a proxy (both of which we’ll do later). Let’s start by creating a standard multi-threaded TCP server. Crank out the code below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;threading&lt;/span&gt;

&lt;span class="n"&gt;bind_ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.0.0.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;bind_port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;9999&lt;/span&gt;

&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AF_INET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SOCK_STREAM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;bind_ip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bind_port&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[*] Listening on &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;bind_ip&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;bind_port&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;handle_client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client_socket&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client_socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[*] Received: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;client_socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ACK!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;client_socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;accept&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[*] Accepted connection from: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;client_handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;threading&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;handle_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;,))&lt;/span&gt;
    &lt;span class="n"&gt;client_handler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;To start off, we pass in the IP address and port we want the server to listen on.&lt;/li&gt;
&lt;li&gt;Next we tell the server to start listening with a maximum backlog of connections set to 5.&lt;/li&gt;
&lt;li&gt;We then put the server into its main loop, where it is waiting for an incoming connection.&lt;/li&gt;
&lt;li&gt;When a client connects, we receive the client socket into the client variable, and the remote connection details into the addr variable.&lt;/li&gt;
&lt;li&gt;We then create a new thread object that points to our handle_client function, and we pass it the client socket object as an argument.&lt;/li&gt;
&lt;li&gt;We then start the thread to handle the client connection, and our main server loop is ready to handle another incoming connection.&lt;/li&gt;
&lt;li&gt;The handle_client function performs the recv() and then sends a simple message back to the client.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;

&lt;span class="n"&gt;target_host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;127.0.01&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;target_port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;9999&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AF_INET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SOCK_STREAM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;target_host&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target_port&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AAABBBCCC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you use the TCP client that we built earlier, you can send some test packets to the server and you should see output like the following:&lt;/p&gt;

&lt;p&gt;[&lt;em&gt;] Listening on 0.0.0.0:9999&lt;br&gt;
[&lt;/em&gt;] Accepted connection from: 127.0.0.1:62512&lt;br&gt;
[*] Received: ABCDE&lt;/p&gt;

&lt;p&gt;That’s it! Pretty simple.&lt;/p&gt;

</description>
      <category>tcp</category>
      <category>client</category>
      <category>server</category>
      <category>python</category>
    </item>
    <item>
      <title>Simple UDP Client in Python</title>
      <dc:creator>Raghavvram Johnson</dc:creator>
      <pubDate>Thu, 01 Oct 2026 16:29:28 +0000</pubDate>
      <link>https://dev.to/raghavvram_johnson/simple-udp-client-in-python-55dm</link>
      <guid>https://dev.to/raghavvram_johnson/simple-udp-client-in-python-55dm</guid>
      <description>&lt;p&gt;A Python UDP client is not much different than a TCP client; we need to make only two small changes to get it to send packets in UDP form.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;

&lt;span class="n"&gt;target_host&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;127.0.0.1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;target_port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AF_INET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SOCK_DGRAM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;b&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AAABBBCCC&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target_host&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;target_port&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;addr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recvfrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;As you can see, we change the socket type to &lt;code&gt;SOCK_DGRAM&lt;/code&gt; when creating the socket object.&lt;/li&gt;
&lt;li&gt;The next step is to simply call &lt;code&gt;sendto()&lt;/code&gt;, passing in the data and the server you want to send the data to.&lt;/li&gt;
&lt;li&gt;Because UDP is a connectionless protocol, there is no call to &lt;code&gt;connect()&lt;/code&gt; beforehand.&lt;/li&gt;
&lt;li&gt;The last step is to call &lt;code&gt;recvfrom()&lt;/code&gt; to receive UDP data back.&lt;/li&gt;
&lt;li&gt;You will also notice that it returns both the data and the details of the remote host and port.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>udp</category>
      <category>client</category>
      <category>python</category>
      <category>sockets</category>
    </item>
  </channel>
</rss>
