<?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>Forem: Hugo | DevOps | Cybersecurity</title>
    <description>The latest articles on Forem by Hugo | DevOps | Cybersecurity (@hugovalters).</description>
    <link>https://forem.com/hugovalters</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1175774%2F8a57b46a-da15-4ac2-ab41-fbe56c6a99a5.jpg</url>
      <title>Forem: Hugo | DevOps | Cybersecurity</title>
      <link>https://forem.com/hugovalters</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hugovalters"/>
    <language>en</language>
    <item>
      <title>Split Tunneling: Performance vs Security in the Remote Work Era</title>
      <dc:creator>Hugo | DevOps | Cybersecurity</dc:creator>
      <pubDate>Sun, 03 May 2026 12:33:03 +0000</pubDate>
      <link>https://forem.com/hugovalters/split-tunneling-performance-vs-security-in-the-remote-work-era-2bmf</link>
      <guid>https://forem.com/hugovalters/split-tunneling-performance-vs-security-in-the-remote-work-era-2bmf</guid>
      <description>&lt;p&gt;I recently sat in a boardroom where a non-technical CISO was pounding the table, demanding that every single byte of data from 500 remote employees be forced through the corporate VPN. "Full Tunneling is the only way to ensure security!" he shouted. &lt;/p&gt;

&lt;p&gt;Meanwhile, back in the server room, the network engineers were watching the office's primary 1Gbps fiber uplink choke to death. Why? Because half the staff was working from home with Netflix running in the background, or downloading 50GB Call of Duty updates, and all that irrelevant, non-business traffic was being hauled across the country into our datacenter, decrypted, inspected by a firewall that was never sized for that much throughput, and then shoved back out to the internet.&lt;/p&gt;

&lt;p&gt;Congratulations. You’ve successfully "secured" your network by making it completely unusable for everyone. &lt;/p&gt;

&lt;p&gt;If your "Security Policy" involves turning your office into a bottlenecked proxy for the entire internet's entertainment traffic, you aren't an architect; you're a glutton for punishment. It’s 2026. We have the tools to be surgical. It’s time to talk about Split Tunneling—the right way.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Mechanics: Full Tunneling (The "Hammer" Approach)
&lt;/h3&gt;

&lt;p&gt;In a Full Tunnel configuration, the VPN client modifies the operating system's routing table to set the "Default Gateway" to the virtual VPN interface. In networking terms, we are pushing a &lt;code&gt;0.0.0.0/0&lt;/code&gt; route into the tunnel.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. The Bottleneck Problem
&lt;/h4&gt;

&lt;p&gt;When a remote worker is on a Full Tunnel, their computer says: "I don't care if I'm looking for a spreadsheet on the internal file server or a cat video on YouTube—send it all to the VPN." &lt;/p&gt;

&lt;p&gt;This creates a massive "tromboning" effect. A packet goes from the user's home in New York, to the office in Chicago, gets inspected, and then goes back out to a server in Virginia. This adds massive latency (RTT) and consumes twice the bandwidth on your corporate circuit—once for the "ingress" from the user, and once for the "egress" to the destination. &lt;/p&gt;

&lt;h4&gt;
  
  
  2. The False Sense of Security
&lt;/h4&gt;

&lt;p&gt;Admins love Full Tunneling because it allows them to use their expensive "Next-Gen" Firewalls to perform Deep Packet Inspection (DPI) on all user traffic. They think they are catching malware. In reality, most malware today is delivered over encrypted HTTPS (TLS 1.3) with Certificate Pinning. Unless you are performing invasive SSL decryption (which breaks half the modern web and opens its own can of privacy worms), your firewall is just watching encrypted blobs fly by. You are killing your performance for a security benefit that is largely theoretical for most remote workloads.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Mechanics: Split Tunneling (The "Scalpel" Approach)
&lt;/h3&gt;

&lt;p&gt;Split Tunneling is the practice of only sending specific, corporate-owned IP ranges through the VPN tunnel. Your internet traffic (Google, YouTube, Office 365) goes out through your local home ISP, while your internal traffic (Jira, GitLab, Database) goes through the VPN.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. The Routing Logic
&lt;/h4&gt;

&lt;p&gt;Instead of &lt;code&gt;0.0.0.0/0&lt;/code&gt;, the VPN client only adds specific routes—like &lt;code&gt;10.0.0.0/8&lt;/code&gt; or &lt;code&gt;192.168.50.0/24&lt;/code&gt;—to the tunnel interface. The OS sees that a request for &lt;code&gt;10.0.5.20&lt;/code&gt; matches the specific VPN route, but a request for &lt;code&gt;8.8.8.8&lt;/code&gt; falls back to the default local gateway.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ DECLASSIFIED / TRUNCATED VERSION&lt;/strong&gt;&lt;br&gt;
You are reading a truncated version of this technical guide. &lt;br&gt;
To read the full, unedited deep-dive (including all configuration files, architecture diagrams, and high-res images), &lt;strong&gt;&lt;a href="https://www.valtersit.com/guides/networking/split-tunneling-performance_vs_security_in_the_remote_work_era/" rel="noopener noreferrer"&gt;visit the original post on Valters IT Docs&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>networking</category>
      <category>vpn</category>
      <category>remotework</category>
      <category>security</category>
    </item>
    <item>
      <title>Tailscale &amp; ZeroTier: Why You're Fighting CGNAT and Losing</title>
      <dc:creator>Hugo | DevOps | Cybersecurity</dc:creator>
      <pubDate>Sat, 02 May 2026 12:33:03 +0000</pubDate>
      <link>https://forem.com/hugovalters/tailscale-zerotier-why-youre-fighting-cgnat-and-losing-4h5c</link>
      <guid>https://forem.com/hugovalters/tailscale-zerotier-why-youre-fighting-cgnat-and-losing-4h5c</guid>
      <description>&lt;p&gt;I recently talked to a developer who spent three days trying to set up a WireGuard tunnel to his home server. He had the config perfect. He had the port forwarded on his router. He had the dynamic DNS updating every five minutes. But no matter what he did, he couldn't get a handshake. &lt;/p&gt;

&lt;p&gt;I told him to check his WAN IP on his router and compare it to what "WhatIsMyIP" told him. Sure enough, his router showed a &lt;code&gt;100.64.x.x&lt;/code&gt; address. &lt;/p&gt;

&lt;p&gt;"You're behind CGNAT," I said. "Your ISP isn't giving you a public IP. You're effectively behind a firewall that you don't own and can't control. You can't forward a port if the port doesn't belong to you."&lt;/p&gt;

&lt;p&gt;If you’re still trying to use traditional "inbound" VPNs in an era where ISPs are hoarding IPv4 addresses like digital dragons, you aren't fighting a technical battle; you're fighting a losing war against the exhaustion of the internet's address space. It’s 2026. If you want to connect your devices without losing your mind to "Double NAT" hell, it’s time to embrace the "magic" of overlay networks like Tailscale and ZeroTier.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Rant: The CGNAT Death Trap
&lt;/h3&gt;

&lt;p&gt;Carrier-Grade NAT (CGNAT), specifically defined in RFC 6598, is the ISP's solution to the fact that we ran out of IPv4 addresses years ago. Instead of giving every customer a unique public IP, the ISP puts thousands of customers behind a single public IP. Your router gets a private address in the &lt;code&gt;100.64.0.0/10&lt;/code&gt; range. &lt;/p&gt;

&lt;p&gt;This works fine for 99% of people who just want to browse TikTok. But the moment you want to host a VPN, a Minecraft server, or a Plex instance, you hit a brick wall. Because you don't have a unique public IP, there is no way for a packet from the outside world to "find" your router. Traditional port forwarding is dead. &lt;/p&gt;

&lt;p&gt;You can call your ISP and beg for a "Static IP" (which they will happily charge you $15/month for), or you can stop living in the past and use a mesh VPN that was designed to handle this exact nightmare.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Mechanics: How the "Magic" Works
&lt;/h3&gt;

&lt;p&gt;Tailscale and ZeroTier are often described as "magic" because you just install them, log in, and suddenly your devices can talk to each other as if they were on the same switch, regardless of firewalls, NAT, or CGNAT. &lt;/p&gt;

&lt;p&gt;This isn't magic; it's sophisticated orchestration using three core technologies: &lt;strong&gt;STUN&lt;/strong&gt;, &lt;strong&gt;TURN&lt;/strong&gt;, and &lt;strong&gt;UDP Hole Punching&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. STUN (Finding the Exit)
&lt;/h4&gt;

&lt;p&gt;STUN (Session Traversal Utilities for NAT) is how a device finds out what it "looks like" to the outside world. Your server sends a packet to a STUN server on the public internet. The STUN server replies: "Hey, I saw your packet coming from public IP &lt;code&gt;203.0.113.5&lt;/code&gt; on port &lt;code&gt;54321&lt;/code&gt;." &lt;/p&gt;

&lt;p&gt;Now your server knows its external "mapped" address.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. UDP Hole Punching (The Handshake)
&lt;/h4&gt;

&lt;p&gt;This is the brilliant part. Most firewalls are "stateful." They block incoming packets by default, but they allow outgoing packets. Crucially, if you send an outgoing UDP packet to a destination, the firewall opens a temporary "hole" to allow a response from that same destination to come back in.&lt;/p&gt;

&lt;p&gt;Tailscale’s coordination server tells both Peer A and Peer B: "Okay, both of you send a UDP packet to each other's mapped STUN addresses &lt;em&gt;at the same time&lt;/em&gt;." &lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ DECLASSIFIED / TRUNCATED VERSION&lt;/strong&gt;&lt;br&gt;
You are reading a truncated version of this technical guide. &lt;br&gt;
To read the full, unedited deep-dive (including all configuration files, architecture diagrams, and high-res images), &lt;strong&gt;&lt;a href="https://www.valtersit.com/guides/networking/tailscale_zerotier-why_youre_fighting_cgnat-and-losing/" rel="noopener noreferrer"&gt;visit the original post on Valters IT Docs&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>networking</category>
      <category>vpn</category>
      <category>tailscale</category>
      <category>cgnat</category>
    </item>
    <item>
      <title>The MTU Nightmare: Why Your VPN Connection is Fragmenting to Death</title>
      <dc:creator>Hugo | DevOps | Cybersecurity</dc:creator>
      <pubDate>Fri, 01 May 2026 12:33:04 +0000</pubDate>
      <link>https://forem.com/hugovalters/the-mtu-nightmare-why-your-vpn-connection-is-fragmenting-to-death-4he7</link>
      <guid>https://forem.com/hugovalters/the-mtu-nightmare-why-your-vpn-connection-is-fragmenting-to-death-4he7</guid>
      <description>&lt;p&gt;I’ve lost count of how many times I’ve had to explain this to "Senior" DevOps engineers who think they’ve discovered a ghost in the machine. The symptoms are always the same: The VPN tunnel is "Up." You can ping the remote gateway. You can even SSH into the server. But the moment you run &lt;code&gt;ls -al&lt;/code&gt; in a directory with 500 files, or try to &lt;code&gt;scp&lt;/code&gt; a database dump, the terminal just... hangs. &lt;/p&gt;

&lt;p&gt;The website starts to load—you see the favicon and the title in the tab—and then it spins forever, eventually timing out with a "Connection Reset." &lt;/p&gt;

&lt;p&gt;You check the logs. Nothing. You check the CPU. Idle. You check the bandwidth. Plenty. &lt;/p&gt;

&lt;p&gt;Congratulations. You aren't being hacked, and your app isn't buggy. You are suffering from an &lt;strong&gt;MTU mismatch&lt;/strong&gt;, and your packets are being ruthlessly discarded by a "black hole" router that someone—likely a junior security admin with an itchy trigger finger—configured to block the very protocol meant to prevent this exact disaster.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Mechanics: The 1500-Byte Delusion
&lt;/h3&gt;

&lt;p&gt;To understand why your VPN is dying, you have to understand the &lt;strong&gt;Maximum Transmission Unit (MTU)&lt;/strong&gt;. On a standard Ethernet network, the MTU is almost universally 1500 bytes. This is the largest frame that can be sent across the physical wire without being broken into pieces.&lt;/p&gt;

&lt;p&gt;When your application sends a packet, it assumes it has 1500 bytes of "room." It builds a 1500-byte IP packet. But your application is inside a VPN tunnel.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. The VPN Tax (Overhead)
&lt;/h4&gt;

&lt;p&gt;A VPN is an encapsulation protocol. It takes your original 1500-byte packet and wraps it inside &lt;em&gt;another&lt;/em&gt; packet (the tunnel header) to send it across the internet. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WireGuard&lt;/strong&gt; adds roughly 60-80 bytes of overhead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenVPN&lt;/strong&gt; or &lt;strong&gt;IPsec&lt;/strong&gt; can add 60 to 100+ bytes depending on the cipher and padding.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your original packet was already 1500 bytes, and you add 80 bytes of WireGuard headers, you now have a 1580-byte packet. When that packet hits the physical network interface, the OS realizes it’s too big for the 1500-byte limit of the physical wire.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Fragmentation vs. The "Don't Fragment" Bit
&lt;/h4&gt;

&lt;p&gt;In a perfect world, the router would just "fragment" the packet—break it into two smaller pieces. But modern TCP/IP implementations almost always set the &lt;strong&gt;DF (Don't Fragment)&lt;/strong&gt; bit. Why? Because fragmentation is computationally expensive and introduces massive latency. &lt;/p&gt;

&lt;p&gt;When a 1580-byte packet with the DF bit set hits a router with a 1500-byte MTU, the router is supposed to drop the packet and send back an ICMP message: &lt;strong&gt;Type 3, Code 4: "Destination Unreachable, Fragmentation Needed and DF set."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This message includes the "Next-Hop MTU," telling the sender exactly how small the packet needs to be to fit. This process is called &lt;strong&gt;Path MTU Discovery (PMTUD)&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Black Hole" Router: A Security Admin's Crime
&lt;/h3&gt;

&lt;p&gt;Here is where the nightmare begins. Many "security-conscious" admins think that ICMP is "scary" or "dangerous." They configure their firewalls to &lt;code&gt;DROP&lt;/code&gt; all ICMP traffic, thinking they are hiding from pings. &lt;/p&gt;

&lt;p&gt;By dropping all ICMP, they have effectively blinded the network. Your server sends the 1580-byte packet. The intermediate router drops it and sends the "Fragmentation Needed" message. Your firewall sees the ICMP message, thinks it’s an attack, and drops it. &lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ DECLASSIFIED / TRUNCATED VERSION&lt;/strong&gt;&lt;br&gt;
You are reading a truncated version of this technical guide. &lt;br&gt;
To read the full, unedited deep-dive (including all configuration files, architecture diagrams, and high-res images), &lt;strong&gt;&lt;a href="https://www.valtersit.com/guides/networking/the-mtu-nightmare-why_your_vpn_connection_is_fragmenting_to_death/" rel="noopener noreferrer"&gt;visit the original post on Valters IT Docs&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>networking</category>
      <category>vpn</category>
      <category>mtu</category>
      <category>troubleshooting</category>
    </item>
    <item>
      <title>VLAN Segmentation: Why Your Smart Fridge Shouldn't Talk to Your File Server</title>
      <dc:creator>Hugo | DevOps | Cybersecurity</dc:creator>
      <pubDate>Tue, 28 Apr 2026 12:33:04 +0000</pubDate>
      <link>https://forem.com/hugovalters/vlan-segmentation-why-your-smart-fridge-shouldnt-talk-to-your-file-server-2j63</link>
      <guid>https://forem.com/hugovalters/vlan-segmentation-why-your-smart-fridge-shouldnt-talk-to-your-file-server-2j63</guid>
      <description>&lt;p&gt;I recently audited a homelab belonging to a "Senior Developer" who had over $10,000 worth of enterprise-grade server hardware. He had a 100TB ZFS storage array, three Proxmox nodes, and a dedicated Opnsense firewall. But when I looked at his network map, I nearly walked out. &lt;/p&gt;

&lt;p&gt;Everything—his production database, his high-end workstation, his guest's iPhones, and thirty-five unpatched, $5 Chinese-made smart lightbulbs—was sitting on a single, flat &lt;code&gt;192.168.1.0/24&lt;/code&gt; subnet. &lt;/p&gt;

&lt;p&gt;"It makes it easier for the apps to find the devices," he told me. &lt;/p&gt;

&lt;p&gt;If your definition of "easier" is providing a friction-less, high-speed highway for a Russian botnet to move from your $12 smart fridge to your corporate file server, then sure, a flat network is "convenient." But in the world of modern network architecture, a flat network is a sign of fundamental laziness. If you aren't segmenting your traffic, you aren't running a secure network; you're just hosting a digital mosh pit where the guy with the most infectious disease gets to hug everyone else.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Mechanics: The "Inside-Out" Attack
&lt;/h3&gt;

&lt;p&gt;To understand why a flat network is a disaster, you have to understand the concept of &lt;strong&gt;Lateral Movement&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Most hobbyists and junior admins think of security as a "perimeter" problem. They build a big, thick wall at the edge of the network (the firewall) and assume everything inside the wall is "trusted." This is an archaic 1990s mentality. &lt;/p&gt;

&lt;h4&gt;
  
  
  1. The IoT Trojan Horse
&lt;/h4&gt;

&lt;p&gt;IoT devices—your smart cameras, lightbulbs, vacuum cleaners, and fridges—are notorious for having the security posture of a wet paper bag. They run ancient, unpatched Linux kernels (often 2.6.x), they have hardcoded "backdoor" credentials for manufacturer testing, and they almost never receive security updates. &lt;/p&gt;

&lt;p&gt;When an attacker finds a vulnerability in that $12 Wi-Fi camera you bought on a whim, they don't use it to watch you sleep. They use it as a persistent, low-power pivot point. Because that camera is on the same subnet as your file server, the attacker is already "inside." They don't have to bypass your $500 firewall. They are already standing in your living room.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. ARP Spoofing and Scanning
&lt;/h4&gt;

&lt;p&gt;Once an attacker has a foothold on a single "dirty" device in a flat network, the entire subnet is at their mercy. They can perform &lt;strong&gt;ARP Spoofing&lt;/strong&gt; (Man-in-the-Middle) to intercept your unencrypted traffic. They can run &lt;code&gt;nmap&lt;/code&gt; scans to find every open port on your NAS. They can attempt to exploit known vulnerabilities in your PC. &lt;/p&gt;

&lt;p&gt;In a flat network, there is no internal gatekeeper. Every device can "see" every other device. A compromise of the least secure device on your network is, by extension, a compromise of the most secure device on your network.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Mechanics of the Fix: 802.1Q and Isolation
&lt;/h3&gt;

&lt;p&gt;The Senior Network Architect's fix is &lt;strong&gt;Micro-Segmentation via VLANs (Virtual Local Area Networks)&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Using the IEEE 802.1Q standard, we can take a single physical switch and "slice" it into multiple logical networks. Each slice is a separate broadcast domain. A device on VLAN 10 cannot even "see" a device on VLAN 20 unless you explicitly configure a router (and a firewall) to allow that traffic.&lt;/p&gt;

&lt;h4&gt;
  
  
  The 3-VLAN Blueprint
&lt;/h4&gt;

&lt;p&gt;For a secure home or small office, you need a minimum of three distinct zones:&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ DECLASSIFIED / TRUNCATED VERSION&lt;/strong&gt;&lt;br&gt;
You are reading a truncated version of this technical guide. &lt;br&gt;
To read the full, unedited deep-dive (including all configuration files, architecture diagrams, and high-res images), &lt;strong&gt;&lt;a href="https://www.valtersit.com/guides/networking/vlan_segmentation-why_your_smart_fridge_shouldn-t_talk_to_your_file-server/" rel="noopener noreferrer"&gt;visit the original post on Valters IT Docs&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>networking</category>
      <category>vlan</category>
      <category>iot</category>
      <category>security</category>
    </item>
    <item>
      <title>WireGuard vs OpenVPN: Why You're Still Driving a Tractor in a Formula 1 World</title>
      <dc:creator>Hugo | DevOps | Cybersecurity</dc:creator>
      <pubDate>Mon, 27 Apr 2026 12:33:03 +0000</pubDate>
      <link>https://forem.com/hugovalters/wireguard-vs-openvpn-why-youre-still-driving-a-tractor-in-a-formula-1-world-115b</link>
      <guid>https://forem.com/hugovalters/wireguard-vs-openvpn-why-youre-still-driving-a-tractor-in-a-formula-1-world-115b</guid>
      <description>&lt;p&gt;I recently consulted for a mid-sized enterprise where the "Standard Operating Procedure" for remote work involved a 50MB OpenVPN client that took exactly 32 seconds to complete a handshake. Every time a user moved from their home WiFi to a 5G connection, the tunnel would collapse, and they’d have to sit through the "Initializing..." loop all over again. &lt;/p&gt;

&lt;p&gt;I asked the Head of Infrastructure why they were still using a protocol designed in 2001 to solve 2026 problems. His answer? "It’s what we’ve always used, and it has so many configuration options."&lt;/p&gt;

&lt;p&gt;If your definition of a "feature" is a 100,000-line codebase filled with legacy C spaghetti and enough configuration toggles to accidentally downgrade your encryption to 1990s standards, then sure, OpenVPN is "feature-rich." But if you care about throughput, battery life, and a verifiable attack surface, you are driving a tractor in a Formula 1 world. &lt;/p&gt;

&lt;p&gt;It is time to nuke the OpenVPN profiles and move to WireGuard.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Mechanics: The Bloat vs. The Blade
&lt;/h3&gt;

&lt;p&gt;To understand why WireGuard is objectively superior, you have to look at the codebase. OpenVPN (including its reliance on OpenSSL) is a behemoth. We are talking about hundreds of thousands of lines of code. &lt;/p&gt;

&lt;p&gt;In the world of cybersecurity, &lt;strong&gt;code is liability.&lt;/strong&gt; Every line of code is a potential buffer overflow, a memory leak, or a logic error waiting for a zero-day. Auditing OpenVPN is a multi-month academic project that very few people have actually completed.&lt;/p&gt;

&lt;p&gt;WireGuard, by contrast, is roughly &lt;strong&gt;4,000 lines of code.&lt;/strong&gt; It is so small that a single, highly-competent security researcher can read the entire thing in an afternoon and actually understand every single state transition. It lives in the Linux kernel (as of 5.6), meaning it isn't just a "program" running on your OS; it is a fundamental part of the networking stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Mechanics of Speed: User-Space vs. Kernel-Space
&lt;/h3&gt;

&lt;p&gt;Why is OpenVPN so slow? It’s not just the encryption; it’s the &lt;strong&gt;Context Switching&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;OpenVPN operates in "User-Space." When a packet arrives at your network card, the kernel has to context-switch to the OpenVPN process, let it decrypt the packet, and then context-switch back to the kernel to route that packet to the application. This "bounce" happens for every single packet. On high-speed 1Gbps+ links, this overhead becomes a massive bottleneck, pinning your CPU and introducing jitter.&lt;/p&gt;

&lt;p&gt;WireGuard operates entirely in &lt;strong&gt;Kernel-Space&lt;/strong&gt;. It uses the &lt;code&gt;udp_tunnel&lt;/code&gt; infrastructure and high-performance cryptographic primitives (ChaCha20-Poly1305) that are optimized for modern CPU instruction sets. There is no bouncing. There is no context switching. This is why a $35 Raspberry Pi can push 800Mbps+ through a WireGuard tunnel while it chokes at 60Mbps on OpenVPN.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Security: Cryptographic Agility is a Bug
&lt;/h3&gt;

&lt;p&gt;OpenVPN fans love to brag about "Cryptographic Agility"—the ability to choose between 50 different encryption ciphers and hash functions. &lt;/p&gt;

&lt;p&gt;As a Senior Engineer, I tell you: &lt;strong&gt;Agility is a vulnerability.&lt;/strong&gt; When you have 50 options, you have the "Downgrade Attack" problem. An attacker can potentially trick your client and server into negotiating a weaker, broken cipher. WireGuard eliminates this by using a "Fixed Cryptographic Suite." It uses Curve25519 for key exchange, ChaCha20 for encryption, and Poly1305 for data authentication. &lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ DECLASSIFIED / TRUNCATED VERSION&lt;/strong&gt;&lt;br&gt;
You are reading a truncated version of this technical guide. &lt;br&gt;
To read the full, unedited deep-dive (including all configuration files, architecture diagrams, and high-res images), &lt;strong&gt;&lt;a href="https://www.valtersit.com/guides/networking/wireguard_vs_openvpn-why_youre_still_driving_a_tractor_in_a_formula-1-world/" rel="noopener noreferrer"&gt;visit the original post on Valters IT Docs&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>networking</category>
      <category>vpn</category>
      <category>wireguard</category>
      <category>openvpn</category>
    </item>
    <item>
      <title>VLAN Segmentation: Because Your 'Smart' Toaster is a Moron (and a Security Risk)</title>
      <dc:creator>Hugo | DevOps | Cybersecurity</dc:creator>
      <pubDate>Sat, 25 Apr 2026 12:33:03 +0000</pubDate>
      <link>https://forem.com/hugovalters/vlan-segmentation-because-your-smart-toaster-is-a-moron-and-a-security-risk-1h7e</link>
      <guid>https://forem.com/hugovalters/vlan-segmentation-because-your-smart-toaster-is-a-moron-and-a-security-risk-1h7e</guid>
      <description>&lt;p&gt;This isn't a suggestion; it's a mandate. If you're running consumer-grade IoT junk on your primary network, you're not just inviting trouble, you're hand-delivering the keys to your entire digital kingdom. We're going to put that garbage in a cage, where it belongs. This guide details how to build that cage, because waiting for a patch from a company that went bust three years ago isn't a strategy, it's a death wish.&lt;/p&gt;




&lt;h1&gt;
  
  
  VLAN Segmentation: Because Your "Smart" Toaster is a Moron (and a Security Risk)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introduction: The Unvarnished Truth About Your "Smart" Devices
&lt;/h2&gt;

&lt;p&gt;Let's cut the marketing fluff. Your "smart" home is a collection of poorly engineered, minimally secured, and often abandoned devices. From thermostats to light bulbs, these gadgets are security vulnerabilities waiting to happen. They're built for convenience, not resilience, and certainly not with your network's integrity in mind. If you're treating them as trusted endpoints on your main LAN, you've already lost. This guide is about damage control: segmenting these digital delinquents into their own isolated VLANs, because the alternative is a compromised network and a long, painful cleanup. We're going to build firewalls, not trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  The IoT Cesspool: A Litany of Flaws You Can't Ignore
&lt;/h2&gt;

&lt;p&gt;The security posture of most Internet of Things devices is abysmal. This isn't an exaggeration; it's a fact. You're deploying embedded systems, often running ancient Linux kernels or custom RTOS variants, designed by junior engineers for minimum bill-of-materials, not maximum security. Understanding these inherent flaws is crucial to grasping why isolation is non-negotiable.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ DECLASSIFIED / TRUNCATED VERSION&lt;/strong&gt;&lt;br&gt;
You are reading a truncated version of this technical guide. &lt;br&gt;
To read the full, unedited deep-dive (including all configuration files, architecture diagrams, and high-res images), &lt;strong&gt;&lt;a href="https://www.valtersit.com/guides/networking/vlan-segmentation-because-your-smart-toaster-is-a-moron-and-a-security-risk/" rel="noopener noreferrer"&gt;visit the original post on Valters IT Docs&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>networking</category>
      <category>security</category>
      <category>vlan</category>
      <category>iot</category>
    </item>
    <item>
      <title>VLAN Segmentation: Securing IoT Devices from the Main Network</title>
      <dc:creator>Hugo | DevOps | Cybersecurity</dc:creator>
      <pubDate>Fri, 24 Apr 2026 12:33:03 +0000</pubDate>
      <link>https://forem.com/hugovalters/vlan-segmentation-securing-iot-devices-from-the-main-network-4mbn</link>
      <guid>https://forem.com/hugovalters/vlan-segmentation-securing-iot-devices-from-the-main-network-4mbn</guid>
      <description>&lt;p&gt;This isn't about making your network "smart"; it's about making it resilient to the inevitable stupidity of your "smart" devices. If you've got cheap junk phoning home on your primary network, you're not just inviting trouble, you're leaving the front door unlocked with a giant "Hack Me" sign outside. Let's fix that.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;I. Introduction: Your "Smart" Toaster Is a Security Liability, and Here's How to Contain It&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Let's get one thing straight: the vast majority of "smart" devices you've crammed into your home or small business network are not intelligent; they are security liabilities masquerading as convenience. Your network hygiene is likely appalling if you haven't tackled this head-on.&lt;/p&gt;

&lt;p&gt;IoT devices are not merely insecure; they are often abandoned hardware running ancient, unpatched software, designed for rapid deployment, not robust security. Assume every single one is compromised or compromise-able the moment it touches your network. It's not &lt;em&gt;if&lt;/em&gt; it gets owned, but &lt;em&gt;when&lt;/em&gt;. The "smart" illusion leads most users, even IT pros who should know better, to plonk these devices directly onto their main network. This means your "smart" bulb can potentially sniff traffic from your workstation, or your compromised camera can pivot directly to your NAS, your financial data, or your corporate VPN session. This isn't just a risk; it's negligence, pure and simple.&lt;/p&gt;

&lt;p&gt;The basic premise is this: VLANs are not a panacea, nor are they "advanced" networking arcana reserved for enterprise data centers. They are the absolute minimum, foundational step in containing the blast radius when [not if] these gadgets inevitably become part of a botnet, a cryptocurrency miner, or a backdoor into your sensitive data. If you haven't done this, you're playing Russian roulette with your digital assets. It’s 2024; this isn’t optional. This isn't theoretical best practice; it's basic, common-sense survival in a hostile digital landscape.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;II. The Problem with "Smart": A Security Hellscape by Design&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The term "smart" in IoT should raise immediate red flags, not expectations of brilliance. The reality is a security hellscape, born from vendor apathy and user complacency.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Vendor Negligence is the Standard:&lt;/strong&gt; Manufacturers couldn't care less about security. Their business model is often built on racing to market with the cheapest possible hardware, slapping together outdated kernels, hardcoded credentials, and insecure protocols, then abandoning the device without a single firmware update after the sale. "Planned obsolescence" now includes security: your [smart] lightbulb from 3 years ago is running code riddled with [known] CVEs that will never be patched. These devices are frequently deployed with vulnerable versions of Linux, ancient libraries, and often contain backdoors or unauthenticated API endpoints. They phone home, they transmit telemetry, and they rarely offer any meaningful security controls to the end-user.&lt;/li&gt;
&lt;/ul&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ DECLASSIFIED / TRUNCATED VERSION&lt;/strong&gt;&lt;br&gt;
You are reading a truncated version of this technical guide. &lt;br&gt;
To read the full, unedited deep-dive (including all configuration files, architecture diagrams, and high-res images), &lt;strong&gt;&lt;a href="https://www.valtersit.com/guides/networking/vlan-segmentation-securing-iot-devices-from-the-main-network/" rel="noopener noreferrer"&gt;visit the original post on Valters IT Docs&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>iot</category>
      <category>security</category>
      <category>vlan</category>
      <category>networksegmentation</category>
    </item>
    <item>
      <title>What Is Tailscale? The VPN That Doesn't Suck</title>
      <dc:creator>Hugo | DevOps | Cybersecurity</dc:creator>
      <pubDate>Wed, 22 Apr 2026 12:33:03 +0000</pubDate>
      <link>https://forem.com/hugovalters/what-is-tailscale-the-vpn-that-doesnt-suck-4pi1</link>
      <guid>https://forem.com/hugovalters/what-is-tailscale-the-vpn-that-doesnt-suck-4pi1</guid>
      <description>&lt;h2&gt;
  
  
  The VPN Struggle Is Real
&lt;/h2&gt;

&lt;p&gt;If you've ever tried to set up a traditional VPN — OpenVPN, WireGuard, IPsec — you probably know how it goes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It takes hours (or days) to configure&lt;/li&gt;
&lt;li&gt;Something always breaks with firewalls or DNS&lt;/li&gt;
&lt;li&gt;You spend more time managing the VPN than doing real work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enter Tailscale. It's a tool that feels like magic the first time you use it. &lt;br&gt;
But it's not magic. It's just smart engineering.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🖼️ &lt;strong&gt;&lt;a href="https://www.valtersit.com/what-is-tailscale-the-vpn-that-doesnt-suck/" rel="noopener noreferrer"&gt;Image: 'Tailscale VPN Dashboard' available in the full article here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  So... What Is Tailscale?
&lt;/h2&gt;

&lt;p&gt;Tailscale is a zero-config VPN built on top of WireGuard.&lt;/p&gt;

&lt;p&gt;It creates a secure, private network between your devices — no matter where they are.&lt;/p&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your phone can talk to your server at home.&lt;/li&gt;
&lt;li&gt;Your laptop can SSH into your Raspberry Pi on a mobile hotspot.&lt;/li&gt;
&lt;li&gt;Your Docker containers can reach your NAS over a Tailscale subnet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All without touching a firewall or router. And yes — it just works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It's a Game-Changer
&lt;/h2&gt;

&lt;p&gt;Tailscale isn't "just another VPN". It's more like a trusted mesh network across all your devices.&lt;/p&gt;

&lt;p&gt;Here's what makes it different:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Traditional VPN:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Painful to set up&lt;/li&gt;
&lt;li&gt;Needs port forwarding&lt;/li&gt;
&lt;li&gt;Breaks in restrictive networks&lt;/li&gt;
&lt;li&gt;Shared secrets&lt;/li&gt;
&lt;li&gt;No visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tailscale:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1-minute install&lt;/li&gt;
&lt;li&gt;No port forwarding&lt;/li&gt;
&lt;li&gt;Works over NAT, firewalls, CGNAT&lt;/li&gt;
&lt;li&gt;Uses OAuth (Google, GitHub, Microsoft)&lt;/li&gt;
&lt;li&gt;Admin console for ACLs &amp;amp; devices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You get end-to-end encrypted connections, no central server required, and identity-based access control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Case: Why I Can't Live Without It
&lt;/h2&gt;

&lt;p&gt;In my setup, I manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A few Hetzner VPS servers&lt;/li&gt;
&lt;li&gt;My homelab (ZimaBlade + Raspberry Pi)&lt;/li&gt;
&lt;li&gt;A laptop, desktop, phone, and tablet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before Tailscale, I was juggling SSH keys, port forwards, and DNS hacks. Now?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I can run &lt;code&gt;tailscale up&lt;/code&gt; on a new server, and boom — it's part of my private network.&lt;/li&gt;
&lt;li&gt;I can access &lt;code&gt;192.168.x.x&lt;/code&gt; home devices remotely via Tailscale subnet routing.&lt;/li&gt;
&lt;li&gt;I use &lt;code&gt;tailscale serve&lt;/code&gt; to spin up secure HTTPS dashboards in seconds.&lt;/li&gt;
&lt;li&gt;I don't worry about firewalls. I don't need a static IP.&lt;/li&gt;
&lt;li&gt;I don't even need to remember where my stuff is — it all just works.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Great for Developers, Freelancers, and Teams
&lt;/h2&gt;

&lt;p&gt;Tailscale isn't just for homelab nerds.&lt;/p&gt;

&lt;p&gt;If you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Work remotely with sensitive code or production servers&lt;/li&gt;
&lt;li&gt;Need to share secure access with clients or teammates&lt;/li&gt;
&lt;li&gt;Want to avoid exposing ports to the open internet&lt;/li&gt;
&lt;li&gt;Need a simple way to access internal dashboards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then you'll love Tailscale. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bonus:&lt;/em&gt; You can even share access with people outside your team via ACLs and ephemeral auth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrations I Love
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions:&lt;/strong&gt; Auto-provision servers that join Tailscale immediately&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caddy + Tailscale Serve:&lt;/strong&gt; Instant HTTPS reverse proxy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rancher over Tailscale:&lt;/strong&gt; Secure K8s access without public exposure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Syncthing + Tailscale:&lt;/strong&gt; Secure file sync across all devices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prometheus:&lt;/strong&gt; Monitoring over encrypted tunnels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tailscale becomes the glue for everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Coming Next?
&lt;/h2&gt;

&lt;p&gt;This is only the beginning. In the next article and upcoming YouTube videos, I'll show you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How to install and configure Tailscale on Linux (including headless)&lt;/li&gt;
&lt;li&gt;How to expose internal web UIs securely using &lt;code&gt;tailscale serve&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;How to combine Tailscale with Rancher, Docker, and Caddy for powerful, secure infrastructure&lt;/li&gt;
&lt;li&gt;How to automate Tailscale onboarding in your CI/CD pipeline&lt;/li&gt;
&lt;/ol&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ DECLASSIFIED / TRUNCATED VERSION&lt;/strong&gt;&lt;br&gt;
You are reading a truncated version of this technical guide. &lt;br&gt;
To read the full, unedited deep-dive (including all configuration files, architecture diagrams, and high-res images), &lt;strong&gt;&lt;a href="https://www.valtersit.com/what-is-tailscale-the-vpn-that-doesnt-suck/" rel="noopener noreferrer"&gt;visit the original post on Valters IT Docs&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>networking</category>
      <category>tailscale</category>
      <category>vpn</category>
      <category>wireguard</category>
    </item>
    <item>
      <title>WireGuard vs OpenVPN: Kernel Space vs User Space – A Reality Check</title>
      <dc:creator>Hugo | DevOps | Cybersecurity</dc:creator>
      <pubDate>Mon, 20 Apr 2026 12:33:04 +0000</pubDate>
      <link>https://forem.com/hugovalters/wireguard-vs-openvpn-kernel-space-vs-user-space-a-reality-check-25ho</link>
      <guid>https://forem.com/hugovalters/wireguard-vs-openvpn-kernel-space-vs-user-space-a-reality-check-25ho</guid>
      <description>&lt;h2&gt;
  
  
  WireGuard vs OpenVPN: Kernel Space vs User Space – A Reality Check
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Introduction: The Unavoidable Truth of VPNs
&lt;/h3&gt;

&lt;p&gt;Let's be blunt: nobody &lt;em&gt;wants&lt;/em&gt; a VPN. We use them because the underlying network infrastructure is either hostile, insecure, or poorly managed. It's a workaround for a broken world, a necessary evil. For years, OpenVPN has been the ubiquitous answer, a Swiss Army knife that did &lt;em&gt;everything&lt;/em&gt; – often with the elegance of a brick. It was the default, the venerable solution, and for a long time, the only truly robust, open-source contender for flexible VPN deployments.&lt;/p&gt;

&lt;p&gt;Now we have WireGuard, a newcomer that doesn't pretend to be more than it is: a fast, secure, simple layer 3 tunnel. It's a specialized tool, meticulously crafted for a single purpose, and it excels at it. This isn't just about "new shiny syndrome"; it's about a fundamental shift in design philosophy, rooted in the very execution context of the VPN daemon itself. We're talking kernel space versus user space, and the implications are significant, not just for theoretical performance metrics, but for your actual throughput, latency, CPU utilization, and ultimately, your sanity when trying to debug why "the VPN is slow." If you're still relying on solutions from the early 2000s, it's time to understand why you might be sacrificing performance, introducing unnecessary complexity, and perpetuating a configuration nightmare that modern alternatives have long since eradicated. The difference isn't just a detail; it's a foundational architectural decision with direct, measurable impact.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. OpenVPN: The Grand Old Dame (User Space - And All Its Baggage)
&lt;/h3&gt;

&lt;p&gt;OpenVPN arrived in a different era, one where kernel module development was less standardized, less portable across various operating systems, and often viewed with a healthy dose of suspicion by many administrators. The idea of running arbitrary, complex network code &lt;em&gt;inside&lt;/em&gt; the kernel was concerning. Its design reflects this: a robust, flexible, but ultimately user-space application that leverages existing OS mechanisms for networking. It's mature, it's auditable (having been picked apart by countless eyes for nearly two decades), and it's slow – relatively speaking. This slowness isn't due to poor coding; it's an inherent limitation of its architectural choice.&lt;/p&gt;

&lt;h4&gt;
  
  
  2.1. Architectural Overview: The User Space Slog
&lt;/h4&gt;

&lt;p&gt;OpenVPN operates primarily in user space. The &lt;code&gt;openvpn&lt;/code&gt; daemon handles everything: key exchange (via the TLS/SSL protocol, typically using OpenSSL), data encryption/decryption (also via OpenSSL), packet encapsulation/decapsulation, and interaction with the virtual network interface (&lt;code&gt;tun&lt;/code&gt; for IP packets, &lt;code&gt;tap&lt;/code&gt; for Ethernet frames).&lt;/p&gt;

&lt;p&gt;This user-space approach means that every single packet flowing through the VPN must traverse the user-kernel boundary multiple times. This is the crux of its performance limitation, the architectural "tax" you pay for its flexibility and historical context. Let's trace a packet:&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ DECLASSIFIED / TRUNCATED VERSION&lt;/strong&gt;&lt;br&gt;
You are reading a truncated version of this technical guide. &lt;br&gt;
To read the full, unedited deep-dive (including all configuration files, architecture diagrams, and high-res images), &lt;strong&gt;&lt;a href="https://www.valtersit.com/guides/networking/wireguard-vs-openvpn-kernel-space-vs-user-space--a-reality-check/" rel="noopener noreferrer"&gt;visit the original post on Valters IT Docs&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>vpn</category>
      <category>wireguard</category>
      <category>openvpn</category>
      <category>networking</category>
    </item>
    <item>
      <title>Exposing SSH to 0.0.0.0: The Fast Track to a Brute-Force Apocalypse</title>
      <dc:creator>Hugo | DevOps | Cybersecurity</dc:creator>
      <pubDate>Sun, 19 Apr 2026 12:33:03 +0000</pubDate>
      <link>https://forem.com/hugovalters/exposing-ssh-to-0000-the-fast-track-to-a-brute-force-apocalypse-4lo7</link>
      <guid>https://forem.com/hugovalters/exposing-ssh-to-0000-the-fast-track-to-a-brute-force-apocalypse-4lo7</guid>
      <description>&lt;p&gt;Every day, a junior developer spins up a $5 DigitalOcean droplet, leaves port 22 exposed to &lt;code&gt;0.0.0.0/0&lt;/code&gt;, enables password authentication, and sets the root password to &lt;code&gt;Company2026!&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;A week later, they are posting on Reddit, utterly baffled as to why their server's CPU has been pinned at 100% for five days and their &lt;code&gt;/var/log/auth.log&lt;/code&gt; is suddenly 50 gigabytes. &lt;/p&gt;

&lt;p&gt;Congratulations. You didn't deploy a web server; you successfully deployed a new worker node for a Russian crypto-mining botnet. Leaving SSH wide open with default configurations is the absolute fastest way to lose control of a Linux machine. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Mechanics: The Background Radiation of the Internet
&lt;/h3&gt;

&lt;p&gt;There is a constant, ambient background radiation of malicious scanning on the internet. Within approximately 45 seconds of your server acquiring a public IPv4 address, automated scanners will find it. &lt;/p&gt;

&lt;p&gt;These botnets don't care who you are. They are blindly hammering port 22 with millions of dictionary attacks and credential stuffing payloads. If your &lt;code&gt;sshd_config&lt;/code&gt; allows &lt;code&gt;root&lt;/code&gt; logins with a password, you have already done half their job for them—they don't even have to guess the username. &lt;/p&gt;

&lt;p&gt;They will throw &lt;code&gt;admin&lt;/code&gt;, &lt;code&gt;root&lt;/code&gt;, &lt;code&gt;ubuntu&lt;/code&gt;, and &lt;code&gt;test&lt;/code&gt; at your daemon ten times a second until the server either crashes from the IO overhead of writing failed auth logs, or they guess the password. Once they have a root shell, they drop a persistence script in &lt;code&gt;/etc/cron.d&lt;/code&gt;, alter your authorized keys, and start hunting for AWS credentials in your environment variables.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Fix: Kill Passwords and Jail the Noise
&lt;/h3&gt;

&lt;p&gt;The Senior Sysadmin approach to SSH is uncompromising: &lt;strong&gt;Passwords are dead.&lt;/strong&gt; If you are using a password to authenticate to a production Linux server in the current year, you are doing it wrong. You must enforce public key authentication (specifically Ed25519 keys, stop using weak RSA), disable root login entirely, and disable password authentication. &lt;/p&gt;

&lt;p&gt;As a secondary layer, you implement Fail2Ban or CrowdSec. While dropping passwords makes brute-forcing mathematically impossible, the botnets will still try, filling your disk with garbage logs. Fail2Ban monitors those logs and automatically drops a firewall block on any IP that fails authentication 5 times. &lt;/p&gt;

&lt;p&gt;Finally, move SSH off port 22. It is not "security," it is security through obscurity—but changing the port to &lt;code&gt;50222&lt;/code&gt; will instantly filter out 98% of the automated script-kiddie noise hitting your daemon.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Code &amp;amp; Config
&lt;/h3&gt;

&lt;p&gt;Here is the default garbage you usually find in &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# THE BAD WAY (A Botnet Welcome Mat)
Port 22
PermitRootLogin yes
PasswordAuthentication yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the hardened, DevSecOps-approved configuration. Open &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;, make these changes, and run &lt;code&gt;systemctl restart sshd&lt;/code&gt;. (Make sure your SSH key is actually installed before you do this, or you will lock yourself out).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# THE REAL ENGINEER'S WAY (Zero Trust SSH)

# Move the port to drop the automated noise
Port 50222

# Only allow Protocol 2 (Usually default, but be explicit)
Protocol 2

# THE FIX: Kill root login and password auth entirely
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes

# Optional: Only allow specific users to even attempt login
AllowUsers deploy_user admin_user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To stop the log spam, install Fail2Ban (&lt;code&gt;apt install fail2ban&lt;/code&gt;) and drop this configuration into &lt;code&gt;/etc/fail2ban/jail.local&lt;/code&gt;:&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ DECLASSIFIED / TRUNCATED VERSION&lt;/strong&gt;&lt;br&gt;
You are reading a truncated version of this technical guide. &lt;br&gt;
To read the full, unedited deep-dive (including all configuration files, architecture diagrams, and high-res images), &lt;strong&gt;&lt;a href="https://www.valtersit.com/guides/security/exposing-ssh-to-0_0_0_0-the-fast-track-to-a-brute-force-apocalypse/" rel="noopener noreferrer"&gt;visit the original post on Valters IT Docs&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>cybersecurity</category>
      <category>linux</category>
      <category>ssh</category>
      <category>serverhardening</category>
    </item>
    <item>
      <title>Hardcoded Passwords in Scripts: That's Not Automation, That's a Breach</title>
      <dc:creator>Hugo | DevOps | Cybersecurity</dc:creator>
      <pubDate>Sat, 18 Apr 2026 12:33:03 +0000</pubDate>
      <link>https://forem.com/hugovalters/hardcoded-passwords-in-scripts-thats-not-automation-thats-a-breach-26kg</link>
      <guid>https://forem.com/hugovalters/hardcoded-passwords-in-scripts-thats-not-automation-thats-a-breach-26kg</guid>
      <description>&lt;p&gt;There is a special place in infrastructure hell for sysadmins who write "automation" scripts with &lt;code&gt;$AdminPassword = "CompanyAdmin2026!"&lt;/code&gt; right at the top. &lt;/p&gt;

&lt;p&gt;You usually find these masterpieces sitting on a globally readable network share like &lt;code&gt;\\fs01\IT_Scripts\NewUserSetup.ps1&lt;/code&gt;, or worse, pushed to a public GitHub repository because someone didn't understand how &lt;code&gt;.gitignore&lt;/code&gt; works. &lt;/p&gt;

&lt;p&gt;Let’s get one thing straight: if your script contains a plain-text password, you didn't write an automation script. You wrote a self-service portal for threat actors. You are doing the attacker's job for them.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Mechanics: The String Search
&lt;/h3&gt;

&lt;p&gt;When a threat actor or an automated worm breaches a low-level workstation on your network, they don't immediately start dropping zero-days. They live off the land. One of the very first enumeration steps is mounting available network shares and running a recursive search for files ending in &lt;code&gt;.ps1&lt;/code&gt;, &lt;code&gt;.sh&lt;/code&gt;, &lt;code&gt;.bat&lt;/code&gt;, or &lt;code&gt;.py&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Once they find those files, they just grep for strings like &lt;code&gt;password&lt;/code&gt;, &lt;code&gt;pwd&lt;/code&gt;, &lt;code&gt;credential&lt;/code&gt;, or &lt;code&gt;api_key&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;If anyone with read access to that file share can read the script, anyone can own the domain. It doesn't matter how complex the password is if you leave it written on a digital Post-it note attached to the execution file. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Fix: DPAPI and Secret Vaults
&lt;/h3&gt;

&lt;p&gt;Stop hardcoding secrets. If you need a script to run unattended, you have to decouple the credential from the code.&lt;/p&gt;

&lt;p&gt;For enterprise environments, the correct answer is a dedicated secrets engine like HashiCorp Vault, Azure Key Vault, or AWS Secrets Manager. Your script authenticates via a managed identity or machine certificate, pulls the secret dynamically into memory, uses it, and dumps it.&lt;/p&gt;

&lt;p&gt;If you don't have a vault, you can still secure local automation using the Windows Data Protection API (DPAPI). PowerShell's &lt;code&gt;Export-Clixml&lt;/code&gt; cmdlet can serialize a credential object and encrypt it using a key tied specifically to the Windows user account and the machine executing the script. If an attacker copies the XML file to another machine, or tries to read it as a different user, it fails to decrypt.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Code
&lt;/h3&gt;

&lt;p&gt;Here is the script that guarantees your Domain Controller gets encrypted by Friday:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# THE BAD WAY (A breach waiting to happen)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Anyone who can read this file owns the hypervisor&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;$Username&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin@corp.local"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$Password&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SuperSecretAdmin123!"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nv"&gt;$Cred&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;New-Object&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;System.Management.Automation.PSCredential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$Username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ConvertTo-SecureString&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$Password&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-AsPlainText&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="n"&gt;Connect-VMHost&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vcenter.corp.local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Credential&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$Cred&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the Senior Sysadmin approach using local DPAPI encryption. &lt;/p&gt;

&lt;p&gt;First, as a one-time setup step logged in as the service account running the automation, you prompt for the password and encrypt it to disk:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# ONE-TIME SETUP (Run as the Service Account on the execution machine)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Get-Credential&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Export-Clixml&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\SecureScripts\Credentials\vcenter_cred.xml"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, your actual automation script just imports that encrypted object. No plain-text secrets in the code, no hardcoded strings for malware to scrape.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# THE REAL ENGINEER'S WAY (Decoupled and Encrypted)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# The credential can only be decrypted by the specific Service Account on this specific machine.&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;$CredPath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\SecureScripts\Credentials\vcenter_cred.xml"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-Not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Test-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$CredPath&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;Write-Error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Credential file missing. Cannot authenticate."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="kr"&gt;exit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ DECLASSIFIED / TRUNCATED VERSION&lt;/strong&gt;&lt;br&gt;
You are reading a truncated version of this technical guide. &lt;br&gt;
To read the full, unedited deep-dive (including all configuration files, architecture diagrams, and high-res images), &lt;strong&gt;&lt;a href="https://www.valtersit.com/guides/security/hardcoded-passwords-in-scripts-thats-not-automation-thats-a-breach/" rel="noopener noreferrer"&gt;visit the original post on Valters IT Docs&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>cybersecurity</category>
      <category>scripting</category>
      <category>powershell</category>
      <category>devsecops</category>
    </item>
    <item>
      <title>MFA Fatigue: Why Your 'Secure' Push Notifications Are Getting You Hacked</title>
      <dc:creator>Hugo | DevOps | Cybersecurity</dc:creator>
      <pubDate>Fri, 17 Apr 2026 12:33:04 +0000</pubDate>
      <link>https://forem.com/hugovalters/mfa-fatigue-why-your-secure-push-notifications-are-getting-you-hacked-16h9</link>
      <guid>https://forem.com/hugovalters/mfa-fatigue-why-your-secure-push-notifications-are-getting-you-hacked-16h9</guid>
      <description>&lt;p&gt;Companies will spend $50,000 a year on a premium Identity Provider (IdP) tier, roll out an authenticator app to the entire org, and proudly declare themselves "unhackable" at the next board meeting. &lt;/p&gt;

&lt;p&gt;Then Kevin in Sales gets his password scraped by an infostealer. At 2:14 AM on a Tuesday, his phone buzzes. He ignores it. At 2:15 AM, it buzzes 30 more times in rapid succession. Bleary-eyed, irritated, and just wanting the screen to go dark so he can go back to sleep, Kevin hits "Approve". &lt;/p&gt;

&lt;p&gt;Congratulations. Your multi-million dollar security perimeter was just breached because Kevin was tired. &lt;/p&gt;

&lt;p&gt;Basic push notifications are not a security boundary; they are an annoyance threshold. If your security architecture relies on a binary "Yes/No" from an exhausted human, it is structurally flawed.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Mechanics: Prompt Bombing
&lt;/h3&gt;

&lt;p&gt;This attack vector is known as "MFA Fatigue" or "Prompt Bombing," and it is the primary way threat actors like Lapsus$ and Scattered Spider have been breaching Fortune 500s. &lt;/p&gt;

&lt;p&gt;The attacker already has the valid username and password—usually bought for $5 on a darknet market or phished via a fake Office 365 login page. The only thing standing between them and your corporate VPN is the MFA prompt. So, they script the login portal to fire authentication requests repeatedly. &lt;/p&gt;

&lt;p&gt;Sometimes they don't even rely on pure fatigue. They will hit the user with three prompts, then immediately call the user's phone, spoofing the caller ID to look like the internal Helpdesk. "Hi, this is IT. We're doing an overnight server migration and need you to acknowledge the prompt on your phone to keep your account active."&lt;/p&gt;

&lt;p&gt;The user taps "Approve", the attacker gets the session token, and they are in. It relies entirely on human psychology, requiring zero technical sophistication once the password is known.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Fix: Kill the "Approve" Button
&lt;/h3&gt;

&lt;p&gt;The modern Zero-Trust approach dictates that you must immediately disable simple "Approve/Deny" push notifications. &lt;/p&gt;

&lt;p&gt;You must enforce &lt;strong&gt;Number Matching&lt;/strong&gt;. With Number Matching, the login screen displays a randomly generated 2-digit number. The user cannot simply tap "Approve"; they &lt;em&gt;must&lt;/em&gt; open their authenticator app and manually type that specific number. You cannot type the number if you aren't the one looking at the login screen. It completely neutralizes MFA fatigue.&lt;/p&gt;

&lt;p&gt;For highly privileged accounts (Domain Admins, Global Admins), you should deprecate phone-based MFA entirely. Mandate FIDO2 hardware keys (like YubiKeys). FIDO2 is cryptographically bound to the TLS session and the specific domain being accessed, making it mathematically phishing-resistant.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Code &amp;amp; Config
&lt;/h3&gt;

&lt;p&gt;If you are using Microsoft Entra ID (formerly Azure AD), Number Matching is now the default, but if you have legacy policies overriding it, you are vulnerable. Here is the Microsoft Graph API payload to strictly enforce Number Matching, along with application context and geographic location display.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;THE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;REAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ENGINEER'S&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;WAY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(Enforce&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Number&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Matching&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;via&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;MS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Graph&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;API)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;PATCH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;https://graph.microsoft.com/v&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="err"&gt;/policies/authenticationMethodsPolicy/authenticationMethodConfigurations/microsoftAuthenticator&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;(https://graph.microsoft.com/v&lt;/span&gt;&lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="err"&gt;/policies/authenticationMethodsPolicy/authenticationMethodConfigurations/microsoftAuthenticator)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ DECLASSIFIED / TRUNCATED VERSION&lt;/strong&gt;&lt;br&gt;
You are reading a truncated version of this technical guide. &lt;br&gt;
To read the full, unedited deep-dive (including all configuration files, architecture diagrams, and high-res images), &lt;strong&gt;&lt;a href="https://www.valtersit.com/guides/security/mfa-fatigue-why-your-secure-push-notifications-are-getting-you-hacked/" rel="noopener noreferrer"&gt;visit the original post on Valters IT Docs&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>cybersecurity</category>
      <category>identity</category>
      <category>mfa</category>
      <category>phishing</category>
    </item>
  </channel>
</rss>
