<?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: Nyra Amsi</title>
    <description>The latest articles on DEV Community by Nyra Amsi (@nyra-amsi).</description>
    <link>https://dev.to/nyra-amsi</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%2F3895600%2Fbc4f8445-ce34-4779-80df-9f6910867430.png</url>
      <title>DEV Community: Nyra Amsi</title>
      <link>https://dev.to/nyra-amsi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nyra-amsi"/>
    <language>en</language>
    <item>
      <title>How to Troubleshoot Blocked Ports on a Dedicated Server</title>
      <dc:creator>Nyra Amsi</dc:creator>
      <pubDate>Fri, 16 Oct 2026 18:30:00 +0000</pubDate>
      <link>https://dev.to/nyra-amsi/how-to-troubleshoot-blocked-ports-on-a-dedicated-server-1gen</link>
      <guid>https://dev.to/nyra-amsi/how-to-troubleshoot-blocked-ports-on-a-dedicated-server-1gen</guid>
      <description>&lt;h2&gt;
  
  
  Understanding Port Errors (Diagnostic Table)
&lt;/h2&gt;

&lt;p&gt;Before executing commands, analyze the exact error message from your client (browser, terminal, or API). This helps narrow down the root cause.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connection Refused&lt;/strong&gt;&lt;br&gt;
The TCP connection attempt reached a destination, but was actively rejected (e.g., via a TCP RST packet).&lt;br&gt;
Service is down, service bound to wrong IP, host firewall REJECT rule, or upstream device rejection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Operation Timed Out&lt;/strong&gt;&lt;br&gt;
The connection attempt received no response within the expected timeframe.&lt;br&gt;
Firewall DROP rule, routing issue, packet loss, or the remote server/interface is unresponsive.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 1: Verify the Application Status
&lt;/h2&gt;

&lt;p&gt;A port cannot accept connections if the underlying application (e.g., Nginx, SSH, MySQL) is stopped or crashed. Check the systemd service status:&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;systemctl status &amp;lt;service_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for Active: &lt;code&gt;active (running)&lt;/code&gt;. However, an active status does not guarantee the service is listening on the expected port. If the service shows as failed, investigate the recent logs to find the exact crash reason before proceeding:&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;journalctl &lt;span class="nt"&gt;-u&lt;/span&gt; &amp;lt;service_name&amp;gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 100 &lt;span class="nt"&gt;--no-pager&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Check Socket States and IP&amp;nbsp;Binding
&lt;/h2&gt;

&lt;p&gt;Your application might be running but configured to accept only local traffic. Use the ss utility (the modern, preferred alternative to netstat) to inspect listening sockets.&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;ss &lt;span class="nt"&gt;-tulnp&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s1"&gt;':&amp;lt;port_number&amp;gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;How to interpret the local address output:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;127.0.0.1:&amp;lt;port&amp;gt;&lt;/code&gt; or &lt;code&gt;[::1]:&amp;lt;port&amp;gt;&lt;/code&gt;: The service is bound to localhost. It will only accept connections from inside the server itself. Note: This is the correct and secure configuration for backend services like databases meant to be accessed only via a local reverse proxy.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;0.0.0.0:&amp;lt;port&amp;gt;&lt;/code&gt; or &lt;code&gt;*:&amp;lt;port&amp;gt;&lt;/code&gt;: The service is bound to all available IPv4 interfaces.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;Public_IP&amp;gt;&lt;/code&gt;:&lt;code&gt;&amp;lt;port&amp;gt;&lt;/code&gt;: The service is explicitly bound to a specific network interface.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If external access is required but the service is bound to 127.0.0.1, you must update the application's configuration file to bind to the appropriate public-facing interface or 0.0.0.0.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Inspect OS-Level Firewalls
&lt;/h2&gt;

&lt;p&gt;If the service is running and properly bound, the host operating system's firewall may be blocking the connection. Ensure you only allow the specific protocol (TCP or UDP) your application requires.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For Ubuntu / Debian (UFW):&lt;/strong&gt;&lt;br&gt;
First, check the current active rules:&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;ufw status verbose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the required rule is missing, add it (e.g., for TCP port 80):&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;ufw allow 80/tcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For RHEL / AlmaLinux / Rocky Linux (Firewalld):&lt;/strong&gt;&lt;br&gt;
Check the active rules for your default zone:&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;firewall-cmd &lt;span class="nt"&gt;--list-all&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the port is missing, add it permanently and reload the runtime configuration. (Note: If your public interface is assigned to a specific zone, append --zone=public to the command).&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;firewall-cmd &lt;span class="nt"&gt;--add-port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;80/tcp &lt;span class="nt"&gt;--permanent&lt;/span&gt; 
&lt;span class="nb"&gt;sudo &lt;/span&gt;firewall-cmd &lt;span class="nt"&gt;--reload&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Docker Port Publishing (If Applicable)
&lt;/h2&gt;

&lt;p&gt;If your application runs inside a Docker container, you must publish the internal container port to the host machine. Inspect the specific container's mappings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker port &amp;lt;container_name_or_id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Security Warning&lt;/strong&gt;: When you publish a port using &lt;code&gt;-p 8080:80&lt;/code&gt;, Docker binds to &lt;code&gt;0.0.0.0&lt;/code&gt; by default and actively modifies iptables, often bypassing UFW rules. If the service should not be publicly accessible, bind it specifically to localhost (&lt;code&gt;-p 127.0.0.1:8080:80&lt;/code&gt;) or manage it through a dedicated Docker network.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Verify Upstream Network Filtering
&lt;/h2&gt;

&lt;p&gt;If the host firewall is configured correctly, the restriction may exist outside your OS. As a dedicated server user, check your provider's control panel.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Locate Security Groups, Hardware Firewalls, or Network ACLs in your client dashboard.&lt;/li&gt;
&lt;li&gt;Verify that an inbound rule exists allowing the correct destination port and specific protocol (TCP or UDP).&lt;/li&gt;
&lt;li&gt;If no provider firewall is active, the issue could involve upstream routing, missing public IP configurations, or an ISP block.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 6: Advanced Diagnostics with&amp;nbsp;TCPDump
&lt;/h2&gt;

&lt;p&gt;To definitively prove where a connection is failing, use tcpdump to capture network traffic arriving at your server.&lt;/p&gt;

&lt;p&gt;Run this command on your server (monitoring all interfaces for a specific TCP port):&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;tcpdump &lt;span class="nt"&gt;-ni&lt;/span&gt; any &lt;span class="s1"&gt;'tcp port &amp;lt;port_number&amp;gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While this runs, attempt to connect to the port from your local workstation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to read the capture:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incoming SYN packets are visible: The TCP connection attempt is reaching your server. The issue lies within the server itself (check listening sockets, host firewall drops, and outbound routing for the response).&lt;/li&gt;
&lt;li&gt;SYN followed by a RST packet: The connection is reaching the server but being actively rejected. Re-verify the IP/port binding and check for firewall REJECT rules.&lt;/li&gt;
&lt;li&gt;SYN arrives, but no response is sent: The packet reached the server, but the system dropped it. Check the host firewall DROP rules or kernel routing behavior.&lt;/li&gt;
&lt;li&gt;No packets are captured: The filter may be incorrect, the client may be querying the wrong IP/IPv6 address, or the traffic is being blocked upstream (provider network firewall, routing failure, or client-side ISP).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why is my port 80 or 443&amp;nbsp;blocked?&lt;/strong&gt;&lt;br&gt;
If you cannot access your web server, you must verify the web server's listening state, ensure the host firewall allows traffic, and check your provider's network filtering policies. For HTTPS (443), you must also independently verify your TLS/SSL configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is netstat deprecated in&amp;nbsp;Linux?&lt;/strong&gt;&lt;br&gt;
While netstat (part of net-tools) may still be available on some systems, ss is generally preferred for modern Linux socket troubleshooting. It provides faster execution, deeper TCP state information, and is actively maintained.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does a reboot fix a blocked&amp;nbsp;port?&lt;/strong&gt;&lt;br&gt;
Generally, no. A reboot may resolve transient crashes or stuck processes, but it will not fix misconfigured bind addresses, missing firewall rules, or incorrect Docker port mappings. Always check system logs and network states before relying on a reboot.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>networking</category>
      <category>devops</category>
      <category>sysadmin</category>
    </item>
    <item>
      <title>KNOD Explained: How Linux Uses AMD GPUs to Bypass CPU Network Bottlenecks</title>
      <dc:creator>Nyra Amsi</dc:creator>
      <pubDate>Fri, 16 Oct 2026 04:39:17 +0000</pubDate>
      <link>https://dev.to/nyra-amsi/knod-explained-how-linux-uses-amd-gpus-to-bypass-cpu-network-bottlenecks-33c4</link>
      <guid>https://dev.to/nyra-amsi/knod-explained-how-linux-uses-amd-gpus-to-bypass-cpu-network-bottlenecks-33c4</guid>
      <description>&lt;p&gt;Modern data centers are routinely pushing link speeds of 100Gbps to 400Gbps, creating a massive bottleneck for server infrastructure. While network interfaces can ingest data at blistering speeds, processing those packets—inspecting headers, applying L4 load balancing, or running IPsec decryption—historically falls on the CPU. At these velocities, dedicating CPU cores purely to network polling can become an expensive waste of compute resources.&lt;/p&gt;

&lt;p&gt;To address this, Linux networking developers are looking toward a new hardware accelerator: the GPU.&lt;/p&gt;

&lt;p&gt;Recently detailed at the Linux Plumbers Conference 2026 in Prague by developers Hoyeon Lee and Taehee Yoo, a new open-source project called KNOD (In-Kernel Network Offload Device) is turning heads. Instead of relying exclusively on expensive SmartNICs or Data Processing Units (DPUs), KNOD allows the Linux kernel to offload heavy network packet processing directly to consumer-grade AMD GPUs.&lt;/p&gt;

&lt;p&gt;By leveraging the parallel execution lanes of a graphics card, early KNOD tests have reported impressive benchmarks, reaching up to 70 million packets per second (Mpps) on a Katran-derived XDP workload using an AMD Radeon PRO V620. More importantly, it does this by avoiding userspace runtimes like CUDA or ROCm in the data path.&lt;/p&gt;

&lt;p&gt;In this guide, we will break down exactly how KNOD works, why its current reference implementation targets AMD hardware, and what this experimental shift means for the future of &lt;a href="https://www.servers99.com/dedicated-server/" rel="noopener noreferrer"&gt;dedicated server hosting&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Problem: Why CPUs Struggle with High-Speed Network Traffic
&lt;/h2&gt;

&lt;p&gt;At the heart of the network bottleneck is a fundamental architecture mismatch. Server CPUs—whether AMD EPYC or Intel Xeon—are engineering marvels designed for low-latency, complex serial execution. They excel at running operating systems, managing databases, and executing dynamic web applications.&lt;/p&gt;

&lt;p&gt;Traditional CPU-based packet processing can consume substantial compute resources at high packet rates. Although Linux networking already supports parallel processing across CPU cores and NIC queues (using mechanisms like RSS and NAPI), offloading selected per-packet operations to an accelerator may significantly reduce host CPU overhead for suitable workloads.&lt;/p&gt;

&lt;p&gt;For data centers and dedicated server providers, CPU-bound packet processing creates several operational challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Core Starvation&lt;/strong&gt;: To process traffic at line-rate speeds without dropping packets, system administrators often pin multiple CPU cores exclusively to network polling tasks.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Reduced Server ROI&lt;/strong&gt;: Every CPU core dedicated to sorting network traffic is a core that cannot be monetized. For hosting providers, those are resources that could have been allocated to client Virtual Machines (VMs) or resource-heavy applications.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Vulnerability to Traffic Spikes&lt;/strong&gt;: During massive traffic surges, CPU resources can become exhausted just managing network interrupts and filtering packets, which can lead to service degradation for the actual applications hosted on the server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The networking industry has long known that to scale efficiently, per-packet compute needs to be offloaded. This is where the KNOD project steps in, offering a software-driven framework that repurposes GPU hardware for networking workloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter KNOD: What is the In-Kernel Network Offload Device?
&lt;/h2&gt;

&lt;p&gt;To reduce CPU overhead, Linux developers looked at the architecture of a graphics card. A GPU features thousands of smaller execution lanes designed to run the exact same operation across large batches of data simultaneously (SIMT). This hardware profile maps naturally onto high-volume network filtering.&lt;/p&gt;

&lt;p&gt;KNOD (In-Kernel Network Offload Device) is an experimental Linux kernel framework designed to treat the GPU as a natively integrated networking accelerator.&lt;/p&gt;

&lt;p&gt;Here is how the KNOD architecture routes and processes network traffic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Direct Memory Access (DMA)&lt;/strong&gt;: In supported configurations, the Network Interface Card (NIC) DMAs incoming packets directly into memory that the GPU can access, avoiding unnecessary CPU-mediated copies.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Kernel-Level Compilation&lt;/strong&gt;: The Linux kernel takes the supported packet-handling program (like specific XDP routines) and JIT-compiles it directly into AMD GPU machine code.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Parallel Execution&lt;/strong&gt;: The GPU runs this networking program across a batch of packets simultaneously.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;The Verdict&lt;/strong&gt;: The GPU returns the processing result to the CPU—such as an XDP verdict to pass, drop, or redirect the packet—along with the specific packets destined for the host system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Game-Changing Feature&lt;/strong&gt;: A Data Path Without Userspace GPU packet processing has been studied for over a decade, but earlier attempts typically routed data through userspace runtimes (like CUDA or ROCm), introducing latency overhead.&lt;/p&gt;

&lt;p&gt;What makes KNOD unique is that it avoids these userspace intermediaries in the packet-processing data path. Kernel-managed execution handles the offloaded workload, while configuration and management can still utilize standard userspace Netlink control tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AMD GPUs First? (The Implementation Context)
&lt;/h2&gt;

&lt;p&gt;A common question surrounding KNOD is why its current RFC heavily focuses on AMD hardware. The answer comes down to current kernel integration and driver architectures.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;The AMD Integration&lt;/strong&gt;: KNOD's current implementation relies heavily on the open-source amdgpu driver stack and AMD's GPU compute infrastructure. Because the driver is already integrated into the Linux mainline kernel, the developers were able to build the necessary memory management and execution queues. Active development largely centers on newer RDNA2 architectures (like the RX 6600) rather than older GCN hardware due to specific technical requirements like 64-bit atomics.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;The Broader Ecosystem&lt;/strong&gt;: While NVIDIA hardware is not currently supported by KNOD, this reflects the project's current implementation status rather than an absolute impossibility for future open-source development.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;The Hardware Roadmap&lt;/strong&gt;: The developer presentation indicates an interest in exploring future support for Intel Arc graphics and AMD integrated GPUs (APUs). If APU support proves viable, it could offer a highly power-efficient way to offload networking tasks, though the motherboard compatibility and opportunity costs of using the iGPU would still need to be evaluated.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Potential Applications for Servers &amp;amp; Data Centers
&lt;/h2&gt;

&lt;p&gt;For dedicated server providers and data center engineers, KNOD’s theoretical architecture hints at several valuable applications, provided the framework reaches production maturity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;DDoS Mitigation Offload&lt;/strong&gt;: GPU-based XDP offload could help reduce CPU overhead for supported packet-filtering workloads. While KNOD's current benchmarks do not establish production-grade DDoS mitigation effectiveness or guarantee service availability during an attack, shifting filtering logic to the GPU shows strong potential for preserving CPU cycles.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;High-Speed L4 Load Balancing&lt;/strong&gt;: Modern load balancers rely on XDP to inspect Layer 4 headers and route traffic. In developer tests, KNOD demonstrated up to 70 Mpps on a Katran-derived XDP workload, proving the framework can handle complex routing logic in a benchmark environment.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Receive-Side IPsec Decryption&lt;/strong&gt;: KNOD's current proof of concept offloads inbound IPsec packet processing to an AMD GPU. The reported implementation reaches up to 80 Gbit/s in RX IPsec testing. (Note: Transmit-side offload and bidirectional production readiness should not be inferred from these results).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Potential Hardware Cost Reduction&lt;/strong&gt;: If proven stable, repurposing consumer-grade graphics cards could offer a more accessible alternative to premium SmartNICs or DPUs, though total cost of ownership (including power draw and hardware integration) will need real-world validation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Challenges and Limitations of KNOD
&lt;/h2&gt;

&lt;p&gt;Because KNOD fundamentally alters how the Linux kernel can handle network traffic, it introduces several unique engineering challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;** Hardware Lock-In**: KNOD is currently bound to specific AMD GPU architectures. Server infrastructures relying on other GPU vendors cannot test this framework at this time.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;GPU Multitasking Constraints&lt;/strong&gt;: While a GPU could technically process network packets and handle compute tasks (like AI training) simultaneously, doing so in a production environment is highly discouraged. Resource contention will cause latency spikes, leading to dropped packets. As a production engineering recommendation, a GPU used for KNOD should be dedicated solely to network offloading.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Kernel Stability&lt;/strong&gt;: Because KNOD operates entirely inside the kernel, any bugs within the module have the potential to trigger a Kernel Panic, bringing the host offline. The code must be flawlessly audited before it can be trusted in live environments.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;PCIe Bus Bottlenecks&lt;/strong&gt;: While a modern PCIe 5.0 x16 slot offers a theoretical bandwidth of roughly 64 GB/s per direction (more than enough for a 400 Gbps / 50 GB/s link), actual throughput depends heavily on packet size, DMA overhead, and other active motherboard traffic (like NVMe storage).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Current Status: When Will KNOD Be Available?
&lt;/h2&gt;

&lt;p&gt;While the benchmark numbers are promising, KNOD remains highly experimental. It is currently in the Request For Comments (RFC) stage on the Linux kernel mailing list.&lt;/p&gt;

&lt;p&gt;Before it becomes a mainline Linux feature, it must pass rigorous upstream review across multiple complex kernel boundaries—including networking, BPF, and GPU driver subsystems.&lt;/p&gt;

&lt;p&gt;KNOD's upstream integration is not guaranteed. Any future availability in major enterprise distributions such as Ubuntu, Debian, or AlmaLinux will depend entirely on upstream acceptance, kernel versioning, supported GPU drivers, and distribution packaging decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: The Future of Server Networking
&lt;/h2&gt;

&lt;p&gt;The KNOD project represents a brilliant experimental shift in Linux networking. By recognizing that certain per-packet processing tasks can benefit from parallel execution lanes, developers are exploring a future where standard graphics cards serve as native, kernel-managed network accelerators.&lt;/p&gt;

&lt;p&gt;For the hosting industry, this research points toward a future where reducing host CPU overhead doesn't strictly require proprietary networking hardware—potentially reclaiming valuable CPU cores to do what they do best: running your core applications.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devops</category>
      <category>networking</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How to Tune Linux Kernel Parameters for High-Performance Servers</title>
      <dc:creator>Nyra Amsi</dc:creator>
      <pubDate>Fri, 11 Sep 2026 09:59:59 +0000</pubDate>
      <link>https://dev.to/nyra-amsi/how-to-tune-linux-kernel-parameters-for-high-performance-servers-4k33</link>
      <guid>https://dev.to/nyra-amsi/how-to-tune-linux-kernel-parameters-for-high-performance-servers-4k33</guid>
      <description>&lt;p&gt;Linux is designed to work reliably across a vast range of hardware and workloads. Its default kernel parameters provide a sensible starting point for general-purpose systems. However, high-concurrency, network-intensive, or latency-sensitive workloads—such as thousands of concurrent HTTP connections, long-lived WebSockets, high-volume APIs, or massive database transactions—often encounter resource limits that aren't obvious under normal load.&lt;/p&gt;

&lt;p&gt;Linux kernel tuning is the process of adjusting runtime parameters through &lt;code&gt;sysctl&lt;/code&gt; and the &lt;code&gt;/proc/sys&lt;/code&gt; interface. Done carefully, it improves resource utilization, reduces contention, and makes server behavior highly predictable.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ Pre-Tuning System Checks
&lt;/h2&gt;

&lt;p&gt;Before changing parameters, record your current system configuration to establish a baseline. Tuning blindly without understanding your current state is dangerous.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check Kernel Version&lt;/strong&gt;: &lt;code&gt;uname -r&lt;/code&gt; (Parameters vary significantly between kernel versions).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check Available Memory&lt;/strong&gt;: &lt;code&gt;free -h&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check CPU Resources&lt;/strong&gt;: &lt;code&gt;lscpu&lt;/code&gt; or &lt;code&gt;nproc&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Check TCP Statistics&lt;/strong&gt;: &lt;code&gt;ss -s&lt;/code&gt; (Overview of established, listening, and orphaned sockets).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Inspect Current Settings&lt;/strong&gt;: &lt;code&gt;sysctl -a&lt;/code&gt; (View all current settings, use this as a diagnostic reference, do not change everything it returns).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧠 Memory Management Optimization
&lt;/h2&gt;

&lt;p&gt;Linux automatically manages memory using page caches, anonymous memory, reclaim mechanisms, and swap. The goal is to understand how your workload interacts with them, not to disable them completely.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Swappiness &lt;code&gt;(vm.swappiness)&lt;/code&gt;&lt;/strong&gt;: Controls the kernel's relative preference for swapping versus reclaiming filesystem-backed pages. The default is usually 60. For latency-sensitive application servers where keeping active memory resident is critical, a lower value (e.g., 10) is a good starting point to force the kernel to prefer RAM over swap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;VFS Cache Pressure &lt;code&gt;(vm.vfs_cache_pressure)&lt;/code&gt;&lt;/strong&gt;: Controls how aggressively Linux reclaims memory used by directory-entry and inode caches. Lowering the default from 100 to 50 may help workloads that repeatedly access large numbers of files, as it encourages the kernel to retain filesystem metadata caches longer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dirty Page Writeback&lt;/strong&gt;: Linux holds write operations in memory as "dirty pages" before flushing them to storage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;vm.dirty_background_ratio&lt;/strong&gt;: When background kernel writeback begins (e.g., 5%).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;vm.dirty_ratio&lt;/strong&gt;: When a process generating writes is forced to participate in writeback (blocking I/O) (e.g., 10%).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Pro Tip&lt;/strong&gt;: For servers with massive amounts of RAM, use byte-based controls (&lt;code&gt;vm.dirty_bytes&lt;/code&gt;) instead of percentages to avoid massive I/O spikes.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🌐 Network and TCP Stack Tuning
&lt;/h2&gt;

&lt;p&gt;Increasing network queues does not magically increase throughput if the application cannot accept connections quickly enough.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TCP Congestion Control&lt;/strong&gt;: Google's BBR can be excellent for bandwidth- and latency-sensitive workloads, but it is not universally faster than the default CUBIC. You should test it using benchmark-based validation for your specific network path. (Requires the fq queueing discipline: net.core.default_qdisc=fq).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TCP Listen Backlogs&lt;/strong&gt;: High-concurrency servers can receive massive bursts of new connection requests. Setting net.ipv4.tcp_max_syn_backlog = 8192 and net.core.somaxconn = 65535 are solid example values. You must also ensure your application's listen() backlog (e.g., in Nginx or Node.js) is configured to utilize these higher OS limits based on actual connection pressure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ephemeral Port Exhaustion&lt;/strong&gt;: Reverse proxies making large numbers of outbound connections can exhaust local ports. You can expand the range: net.ipv4.ip_local_port_range="1024 65535".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Understanding TIME_WAIT&lt;/strong&gt;: High connection churn naturally creates TIME_WAIT sockets. This is normal TCP behavior. Current Linux documentation advises caution regarding tcp_tw_reuse=1. Only consider enabling it after measuring actual outbound ephemeral-port pressure and validating your kernel/application behavior. (Never use tcp_tw_recycle as it breaks connections for users behind NAT).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📁 Linux File Descriptor Limits
&lt;/h2&gt;

&lt;p&gt;High-concurrency apps run into file descriptor limits long before CPU or RAM limits are hit, often resulting in &lt;code&gt;Too many open files&lt;/code&gt; errors. However, do not treat high limits as a universal baseline—increase them only after observing actual file-handle exhaustion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System-Wide Limit&lt;/strong&gt;: Example for increasing the global ceiling (if usage dictates):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;fs&lt;/span&gt;.&lt;span class="n"&gt;file&lt;/span&gt;-&lt;span class="n"&gt;max&lt;/span&gt; = &lt;span class="m"&gt;2097152&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Per-Process Limit&lt;/strong&gt;: Edit &lt;code&gt;/etc/security/limits.conf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;* &lt;span class="n"&gt;soft&lt;/span&gt; &lt;span class="n"&gt;nofile&lt;/span&gt; &lt;span class="m"&gt;65535&lt;/span&gt;
* &lt;span class="n"&gt;hard&lt;/span&gt; &lt;span class="n"&gt;nofile&lt;/span&gt; &lt;span class="m"&gt;65535&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Systemd Limits:&lt;/strong&gt; Add LimitNOFILE=65535 under the [Service] block of your application's systemd unit file, then run:&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;systemctl daemon-reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚙️ Example Production Baseline Configuration
&lt;/h2&gt;

&lt;p&gt;To make changes persistent, create a configuration file. Do not copy this blindly—validate each setting against your workload.&lt;/p&gt;

&lt;p&gt;Create &lt;code&gt;/etc/sysctl.d/99-server-tuning.conf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;# Memory Management (Starting points)
&lt;/span&gt;&lt;span class="n"&gt;vm&lt;/span&gt;.&lt;span class="n"&gt;swappiness&lt;/span&gt; = &lt;span class="m"&gt;10&lt;/span&gt;
&lt;span class="n"&gt;vm&lt;/span&gt;.&lt;span class="n"&gt;vfs_cache_pressure&lt;/span&gt; = &lt;span class="m"&gt;50&lt;/span&gt;

&lt;span class="c"&gt;# TCP / Network (Ensure BBR is available and benchmarked first)
&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;.&lt;span class="n"&gt;core&lt;/span&gt;.&lt;span class="n"&gt;default_qdisc&lt;/span&gt; = &lt;span class="n"&gt;fq&lt;/span&gt;
&lt;span class="n"&gt;net&lt;/span&gt;.&lt;span class="n"&gt;ipv4&lt;/span&gt;.&lt;span class="n"&gt;tcp_congestion_control&lt;/span&gt; = &lt;span class="n"&gt;bbr&lt;/span&gt;

&lt;span class="c"&gt;# Example connection queue limits (tune application listen() to match)
&lt;/span&gt;&lt;span class="n"&gt;net&lt;/span&gt;.&lt;span class="n"&gt;ipv4&lt;/span&gt;.&lt;span class="n"&gt;tcp_max_syn_backlog&lt;/span&gt; = &lt;span class="m"&gt;8192&lt;/span&gt;
&lt;span class="n"&gt;net&lt;/span&gt;.&lt;span class="n"&gt;core&lt;/span&gt;.&lt;span class="n"&gt;somaxconn&lt;/span&gt; = &lt;span class="m"&gt;65535&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply the configuration:&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;--system&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📊 Verify After Tuning
&lt;/h2&gt;

&lt;p&gt;Always verify that your changes are actively loaded and monitor the impact on your system.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sysctl vm.swappiness
sysctl net.ipv4.tcp_congestion_control
sysctl net.core.somaxconn
ss &lt;span class="nt"&gt;-s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When running HTTP benchmarks to test your changes (e.g., using &lt;code&gt;wrk&lt;/code&gt;), never benchmark against public domains like &lt;code&gt;example.com&lt;/code&gt;. Always use a staging/test endpoint you own:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wrk &lt;span class="nt"&gt;-t4&lt;/span&gt; &lt;span class="nt"&gt;-c400&lt;/span&gt; &lt;span class="nt"&gt;-d30s&lt;/span&gt; https://test-endpoint.yourdomain.com/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🛑 When Kernel Tuning Is NOT the Solution
&lt;/h2&gt;

&lt;p&gt;Kernel tuning cannot compensate for underlying architecture bottlenecks or poorly optimized applications. Before modifying sysctl, ensure you aren't barking up the wrong tree:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CPU-bound&lt;/strong&gt;: If top shows 100% CPU usage, no TCP buffer adjustment will help. Focus on CPU profiling, application code optimization, or vertical scaling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Disk-bound&lt;/strong&gt;: If iostat shows high iowait, you need storage/I/O optimization, faster drives, or better caching strategies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Database-bound&lt;/strong&gt;: Slow response times are often due to missing indexes or inefficient queries. Focus on query optimization and database caching.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Network-bound&lt;/strong&gt;: If you are maxing out your NIC, you need bandwidth analysis, MTU adjustments, RSS tuning, or simply a larger network pipe.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Need hardware that handles extreme workloads without breaking a sweat?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://www.servers99.com/" rel="noopener noreferrer"&gt;Servers99&lt;/a&gt;, we provide bare-metal dedicated servers built for high-concurrency environments. Check out our high-performance server options at!&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devops</category>
      <category>sysadmin</category>
      <category>performance</category>
    </item>
    <item>
      <title>The High-Performance Stack: Mastering KVM Virtualization on Bare Metal</title>
      <dc:creator>Nyra Amsi</dc:creator>
      <pubDate>Thu, 27 Aug 2026 08:02:15 +0000</pubDate>
      <link>https://dev.to/nyra-amsi/the-high-performance-stack-mastering-kvm-virtualization-on-bare-metal-4n06</link>
      <guid>https://dev.to/nyra-amsi/the-high-performance-stack-mastering-kvm-virtualization-on-bare-metal-4n06</guid>
      <description>&lt;p&gt;When scaling your IT infrastructure, moving from a standard Virtual Private Server (VPS) to a &lt;a href="https://www.servers99.com/blog/kvm-dedicated-server-guide/" rel="noopener noreferrer"&gt;dedicated server&lt;/a&gt; is a major milestone. However, running a single operating system on a powerful bare-metal server often leads to underutilized hardware.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;Kernel-based Virtual Machine (KVM)&lt;/strong&gt; comes into play. By deploying KVM, you can transform a single physical machine into a robust hypervisor, partitioning raw hardware into multiple, fully isolated virtual machines (VMs).&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is KVM?
&lt;/h2&gt;

&lt;p&gt;KVM is an open-source virtualization technology built directly into the Linux kernel. By utilizing KVM, a standard Linux OS functions directly as a hypervisor. Because it is a native part of the kernel, every VM you create is implemented as a regular Linux process and managed by the standard scheduler. This deep integration means KVM constantly benefits from the latest advancements in Linux performance, memory management, and security.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bare-Metal Architecture
&lt;/h2&gt;

&lt;p&gt;To master KVM, you need to understand how the virtualization stack flows efficiently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Hardware Foundation:&lt;/strong&gt; Powered by physical bare-metal processors with built-in hardware virtualization (Intel VT-x or AMD-V).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Linux Kernel + KVM Module:&lt;/strong&gt; Safely partitions physical CPU and memory resources.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;QEMU (Hardware Emulation):&lt;/strong&gt; Emulates the remaining hardware components, like network cards and disk controllers.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;VirtIO (Optimized I/O):&lt;/strong&gt; Allows VMs to bypass full hardware emulation for disk and network operations, delivering near-bare-metal speeds.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;libvirt:&lt;/strong&gt; An open-source API toolkit acting as the management bridge for VMs, storage, and networks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  KVM vs. Standard VPS
&lt;/h2&gt;

&lt;p&gt;If you are currently using a standard VPS, you are essentially renting a single virtual machine on a provider's shared hardware, with zero control over "noisy neighbors." Upgrading to a KVM dedicated server flips the script. You become the master of the host machine, carving out custom VMs from your own dedicated resource pool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Advantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Near-Native Performance:&lt;/strong&gt; Processing overhead is incredibly low thanks to kernel-level operation and VirtIO drivers.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Granular Resource Control:&lt;/strong&gt; Allocate specific amounts of RAM, storage, and bandwidth. You can even use CPU pinning to bind virtual CPUs to specific physical cores.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Advanced Security:&lt;/strong&gt; Every VM operates as a strictly isolated process. If one VM crashes, the host and neighboring VMs remain completely unaffected.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;OS Flexibility:&lt;/strong&gt; Run various Linux distributions, Windows Server, and BSD simultaneously on the exact same physical machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deploying KVM is a strategic move that provides the perfect balance of bare-metal computing power and cloud-like flexibility. Ensure your underlying server is equipped with high-speed NVMe storage and robust network connectivity to prevent I/O bottlenecks.&lt;/p&gt;

</description>
      <category>linux</category>
      <category>devops</category>
      <category>sysadmin</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How to Unlock True 10Gbps Speeds on a Linux Dedicated Server 🚀</title>
      <dc:creator>Nyra Amsi</dc:creator>
      <pubDate>Fri, 21 Aug 2026 07:27:26 +0000</pubDate>
      <link>https://dev.to/nyra-amsi/how-to-unlock-true-10gbps-speeds-on-a-linux-dedicated-server-3hhg</link>
      <guid>https://dev.to/nyra-amsi/how-to-unlock-true-10gbps-speeds-on-a-linux-dedicated-server-3hhg</guid>
      <description>&lt;p&gt;You just provisioned a shiny 10Gbps bare-metal dedicated server. You boot it up, run a test, and hit a wall at 2.5 Gbps.&lt;/p&gt;

&lt;p&gt;Having a 10GbE network port does not automatically guarantee 10Gbps of real-world application throughput. Out of the box, Linux kernel defaults and improper hardware configurations will severely throttle your network performance.&lt;/p&gt;

&lt;p&gt;Here is how we at Servers99 identify and fix the most common 10Gbps network bottlenecks.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Verify the Physical Link
&lt;/h3&gt;

&lt;p&gt;Before tweaking Linux networking configurations, confirm your hardware is actually negotiating at 10Gbps. A faulty SFP+ module or switch misconfiguration can force a 1Gbps link.&lt;/p&gt;

&lt;p&gt;Run &lt;code&gt;ethtool&lt;/code&gt; to check your negotiated speed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Bash

&lt;span class="nb"&gt;sudo &lt;/span&gt;ethtool eth0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Note: Replace eth0 with your actual interface (e.g., eno1, ens18).&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the output says &lt;code&gt;Speed: 1000Mb/s&lt;/code&gt;, you have a physical layer issue. Stop software tuning and check your cables!&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Stop Choking a Single CPU Core
&lt;/h3&gt;

&lt;p&gt;At 10Gbps, your server processes millions of packets per second. If all hardware interrupts (IRQs) hit a single CPU core (usually &lt;code&gt;CPU0&lt;/code&gt;), that core will hit 100% utilization and bottleneck your entire network stack.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Receive-Side Scaling (RSS)&lt;/em&gt;&lt;/strong&gt;: Ensure your multi-queue NIC is distributing traffic across multiple queues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;IRQ Balance&lt;/em&gt;&lt;/strong&gt;: Check if interrupts are distributed properly:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Bash

&lt;span class="c"&gt;# Check CPU interrupt distribution&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; eth0 /proc/interrupts

&lt;span class="c"&gt;# Ensure irqbalance is running&lt;/span&gt;
systemctl status irqbalance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Tune TCP Buffers Safely
&lt;/h3&gt;

&lt;p&gt;High-bandwidth connections, especially over geographic distances, require larger TCP socket buffers than standard local networks. Instead of blindly pasting massive buffer sizes, start with a controlled baseline in &lt;code&gt;/etc/sysctl.d/99-10gbps.conf&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;Plaintext

net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply with &lt;code&gt;sudo sysctl --system&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Benchmark with Multi-Stream iperf3
&lt;/h3&gt;

&lt;p&gt;Never use browser-based speed tests for a 10Gbps server. The browser overhead will skew your results. Test raw TCP throughput using &lt;code&gt;iperf3&lt;/code&gt; with parallel streams (&lt;code&gt;-P 8&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Bash

iperf3 &lt;span class="nt"&gt;-c&lt;/span&gt; &amp;lt;REMOTE_SERVER_IP&amp;gt; &lt;span class="nt"&gt;-P&lt;/span&gt; 8 &lt;span class="nt"&gt;-t&lt;/span&gt; 30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If 8 streams hit 9.5Gbps, but a single stream tops out at 2.5Gbps, your network hardware is fine, and your per-flow TCP window needs further tuning.&lt;/p&gt;

&lt;h3&gt;
  
  
  📖 Read the Full 17-Step Optimization Guide
&lt;/h3&gt;

&lt;p&gt;Optimizing a high-capacity server is about making one controlled change at a time. We’ve published a complete, 17-step command-line guide covering MTU 9000 (Jumbo Frames), NIC offloading, and packet drop troubleshooting.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.servers99.com/tutorials/howto/optimize-10gbps-dedicated-server/" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;👉 Read the Full 10Gbps Optimization Guide on Servers99&lt;/a&gt;
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>CCPA vs. GDPR: Why Your Infrastructure Needs Bare Metal Dedicated Hosting</title>
      <dc:creator>Nyra Amsi</dc:creator>
      <pubDate>Thu, 20 Aug 2026 09:42:47 +0000</pubDate>
      <link>https://dev.to/nyra-amsi/ccpa-vs-gdpr-why-your-infrastructure-needs-bare-metal-dedicated-hosting-4mp9</link>
      <guid>https://dev.to/nyra-amsi/ccpa-vs-gdpr-why-your-infrastructure-needs-bare-metal-dedicated-hosting-4mp9</guid>
      <description>&lt;p&gt;Imagine your company getting hit with a massive compliance fine just because the shared server hosting your database got compromised. In 2026, dealing with the California Consumer Privacy Act (CCPA) and the General Data Protection Regulation (GDPR) is a harsh reality for developers and IT teams handling user data.&lt;/p&gt;

&lt;p&gt;Whether you are deploying an e-commerce backend or a healthcare SaaS, relying on standard public cloud platforms or cheap shared servers is no longer a risk worth taking.&lt;/p&gt;

&lt;h2&gt;
  
  
  💸 The Cost of Bad Infrastructure
&lt;/h2&gt;

&lt;p&gt;Privacy fines compound exponentially during a single data breach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CCPA&lt;/strong&gt;: Up to $7,500 per intentional violation. The CPRA amendments eliminated the 30-day "right to cure," meaning immediate regulatory scrutiny.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GDPR&lt;/strong&gt;: Fines can hit up to €20 million or 4% of annual global turnover for severe breaches of data processing principles.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⚖️ CCPA vs. GDPR: Quick Comparison
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Geographic Scope&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;CCPA (California)&lt;/strong&gt;: California residents&lt;br&gt;
&lt;strong&gt;GDPR (EU)&lt;/strong&gt;: Individuals in the EU&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Consumer Rights&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;CCPA (California)&lt;/strong&gt;: Opt-out of data sale, right to delete&lt;br&gt;
&lt;strong&gt;GDPR (EU)&lt;/strong&gt;: Access, rectification, erasure, portability&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maximum Fine&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;CCPA (California)&lt;/strong&gt;: $7,500 per intentional violation&lt;br&gt;
&lt;strong&gt;GDPR (EU)&lt;/strong&gt;: €20M or 4% of global annual revenue&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Breach Notification&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;CCPA (California)&lt;/strong&gt;: Without unreasonable delay&lt;br&gt;
&lt;strong&gt;GDPR (EU)&lt;/strong&gt;: Mandatory within 72 hours&lt;/p&gt;

&lt;h2&gt;
  
  
  🛑 Why Multi-Tenant &amp;amp; Shared Hosting Put You at Risk
&lt;/h2&gt;

&lt;p&gt;As developers, we love the scalability of the cloud. But multi-tenant environments introduce severe infrastructure risks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hypervisor Flaws &amp;amp; Noisy Neighbors:&lt;/strong&gt; In a multi-tenant environment, you share computing resources (CPU, RAM). Hypervisor vulnerabilities and side-channel attacks can allow hackers targeting a weak tenant to break through logical partitions into your environment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Residency Misconfigurations:&lt;/strong&gt; Complex cloud architectures frequently lead to accidental extraterritorial data exposures. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lack of Root Access:&lt;/strong&gt; Shared environments restrict your ability to deploy custom Intrusion Detection Systems (IDS), custom kernels, or hardware-level encryption.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Shared IP Blacklisting:&lt;/strong&gt; If another tenant on your server hosts malicious content, your shared IP gets blacklisted, destroying email deliverability and flagging your domain.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🛡️ Building a Compliance-Ready Foundation with Bare Metal
&lt;/h2&gt;

&lt;p&gt;Smart engineering teams are migrating to bare metal dedicated servers to build a secure infrastructure foundation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;100% Physical Data Isolation:&lt;/strong&gt; A strict single-tenant environment removes the need to share resources, killing the cross-tenant exposure risk.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Data Localization Control:&lt;/strong&gt; You select the exact physical USA datacenter location, ensuring strict data residency compliance.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Root-Level Security Control:&lt;/strong&gt; Full hardware control allows sysadmins to deploy hardware firewalls, custom access controls, and strict encryption.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Audit-Ready Logging:&lt;/strong&gt; Real-time logging and immediate incident response capabilities help you meet GDPR’s strict 72-hour breach notification requirement.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do not risk your production data on shared infrastructure. By migrating to &lt;a href="https://www.servers99.com/dedicated-server/" rel="noopener noreferrer"&gt;bare metal dedicated servers&lt;/a&gt;, you can ensure complete physical isolation, utilize enterprise-grade hardware, and maintain the robust network protection required for today’s strict privacy workloads. Secure your infrastructure from the ground up before the compliance audits begin.&lt;/p&gt;

</description>
      <category>security</category>
      <category>devops</category>
      <category>cloud</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Build Your Own S3-Compatible Object Storage with MinIO on Ubuntu 24.04</title>
      <dc:creator>Nyra Amsi</dc:creator>
      <pubDate>Fri, 31 Jul 2026 05:36:40 +0000</pubDate>
      <link>https://dev.to/nyra-amsi/build-your-own-s3-compatible-object-storage-with-minio-on-ubuntu-2404-4hb0</link>
      <guid>https://dev.to/nyra-amsi/build-your-own-s3-compatible-object-storage-with-minio-on-ubuntu-2404-4hb0</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Stop paying unpredictable egress fees! Here is how to host your own scalable, high-performance object storage for AI, RAG, and enterprise workloads.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While storing data in public cloud object storage is relatively inexpensive, data transfer, cross-region traffic, and internet egress charges can become a massive burden as workloads grow. With the continuous rise of AI datasets, LLM training, RAG pipelines, and Kubernetes clusters in 2026, many organizations are realizing the cost-efficiency of moving their large datasets back to private infrastructure.&lt;/p&gt;

&lt;p&gt;The solution? &lt;strong&gt;Self-hosted Object Storage&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;By running MinIO on a dedicated server, you get full Amazon S3-compatible API support for the vast majority of applications—without the unpredictable egress fees.&lt;/p&gt;

&lt;p&gt;In this guide, we will walk you through deploying a secure MinIO server on Ubuntu 24.04 that provides a solid foundation for production deployments.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before getting our hands dirty with the terminal, ensure you have:&lt;/p&gt;

&lt;p&gt;A Linux storage server running Ubuntu 24.04 (Need powerful bare-metal? Check out Servers99).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo&lt;/code&gt; privileges.&lt;/p&gt;

&lt;p&gt;A registered domain name (optional, but highly recommended for production HTTPS).&lt;/p&gt;

&lt;p&gt;Update your system first to ensure all packages are current:&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;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 1: Download and Install MinIO
&lt;/h2&gt;

&lt;p&gt;MinIO is shipped as a single binary, making installation incredibly simple. Download the latest 64-bit Linux executable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://dl.min.io/server/minio/release/linux-amd64/minio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make the downloaded file executable and move it to your system’s binaries directory so it can be run globally:&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;chmod&lt;/span&gt; +x minio
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;minio /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Create a Secure User and Directory
&lt;/h2&gt;

&lt;p&gt;Running services as the &lt;code&gt;root&lt;/code&gt; user is a major security risk. We will create a dedicated system user with no login privileges, along with a secure directory for your data.&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;groupadd &lt;span class="nt"&gt;-r&lt;/span&gt; minio-user
&lt;span class="nb"&gt;sudo &lt;/span&gt;useradd &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /usr/sbin/nologin &lt;span class="nt"&gt;-g&lt;/span&gt; minio-user minio-user
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the data directory (e.g., &lt;code&gt;/mnt/data&lt;/code&gt;) and set strict permissions:&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 mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /mnt/data
&lt;span class="nb"&gt;sudo chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; minio-user:minio-user /mnt/data
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;750 /mnt/data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Configure the UFW Firewall
&lt;/h2&gt;

&lt;p&gt;MinIO uses port 9000 for the S3-compatible API and port 9001 for the Web Console. If you are using UFW (Uncomplicated Firewall), allow these ports before starting the service:&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;ufw allow 9000/tcp
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 9001/tcp
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw reload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Create the Systemd Service
&lt;/h2&gt;

&lt;p&gt;To manage MinIO like a standard background service, create a &lt;code&gt;systemd&lt;/code&gt; configuration file:&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;nano /etc/systemd/system/minio.service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste the following configuration.&lt;/p&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Security Warning&lt;/strong&gt;: Replace the &lt;code&gt;MINIO_ROOT_PASSWORD&lt;/code&gt; with a long, random password generated by a password manager. Do not use default or weak passwords!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight systemd"&gt;&lt;code&gt;&lt;span class="k"&gt;[Unit]&lt;/span&gt;
&lt;span class="nt"&gt;Description&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;MinIO High Performance Object Storage
&lt;span class="nt"&gt;Documentation&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;https://docs.min.io
&lt;span class="nt"&gt;Wants&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;network-online.target
&lt;span class="nt"&gt;After&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;network-online.target

&lt;span class="k"&gt;[Service]&lt;/span&gt;
&lt;span class="nt"&gt;User&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;minio-user
&lt;span class="nt"&gt;Group&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;minio-user
&lt;span class="nt"&gt;WorkingDirectory&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;/mnt/data

&lt;span class="c"&gt;# Environment Variables for easy configuration&lt;/span&gt;
&lt;span class="nt"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;"MINIO_VOLUMES=/mnt/data"
&lt;span class="nt"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;"MINIO_OPTS=--console-address :9001"
&lt;span class="nt"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;"MINIO_ROOT_USER=admin"
&lt;span class="nt"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;"MINIO_ROOT_PASSWORD=ReplaceWithYourSecurePassword!"

&lt;span class="nt"&gt;ExecStart&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;/usr/local/bin/minio server $MINIO_VOLUMES $MINIO_OPTS

&lt;span class="nt"&gt;Restart&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;always
&lt;span class="nt"&gt;RestartSec&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;5

&lt;span class="c"&gt;# Security restrictions&lt;/span&gt;
&lt;span class="nt"&gt;CapabilityBoundingSet&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;CAP_NET_BIND_SERVICE
&lt;span class="nt"&gt;AmbientCapabilities&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;CAP_NET_BIND_SERVICE
&lt;span class="nt"&gt;NoNewPrivileges&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;true

&lt;span class="k"&gt;[Install]&lt;/span&gt;
&lt;span class="nt"&gt;WantedBy&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;multi-user.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save and exit (&lt;code&gt;Ctrl+O&lt;/code&gt;, &lt;code&gt;Enter&lt;/code&gt;, &lt;code&gt;Ctrl+X&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Start and Verify the Service
&lt;/h2&gt;

&lt;p&gt;Reload &lt;code&gt;systemd&lt;/code&gt; to detect the new service, then start and enable MinIO to launch on boot:&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;systemctl daemon-reload
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start minio
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;minio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check if the service is running without errors:&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;systemctl status minio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To confirm that MinIO is actively listening on the correct ports (&lt;code&gt;9000&lt;/code&gt; and &lt;code&gt;9001&lt;/code&gt;), run:&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;ss &lt;span class="nt"&gt;-tulpn&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;minio
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6: Access the MinIO Console &amp;amp; Set Policies
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Now for the fun part!&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your web browser and navigate to: &lt;code&gt;http://YOUR_SERVER_IP:9001&lt;/code&gt; (Note: Use 9001 for the console).&lt;/li&gt;
&lt;li&gt;Log in with your configured Root User and Password.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Buckets&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Create a Bucket&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Access Control: By default, buckets are Private. In the console, you can configure Anonymous Rules (if you want public read access for assets) or generate Access Keys (for your applications to connect securely).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 7: Install the MinIO Client (&lt;code&gt;mc&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;For command-line management, the MinIO Client (&lt;code&gt;mc&lt;/code&gt;) is an essential tool. It functions as a modern alternative to UNIX commands like &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;, and &lt;code&gt;cp&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Install it using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://dl.min.io/client/mc/release/linux-amd64/mc
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x mc
&lt;span class="nb"&gt;sudo mv &lt;/span&gt;mc /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Connect mc to your new local MinIO server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mc &lt;span class="nb"&gt;alias set &lt;/span&gt;local_s3 http://127.0.0.1:9000 admin ReplaceWithYourSecurePassword!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can list your buckets or create a new one directly from the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mc &lt;span class="nb"&gt;ls &lt;/span&gt;local_s3
mc mb local_s3/my-new-bucket
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔒 Production and Security Best Practices
&lt;/h2&gt;

&lt;p&gt;If you are using this MinIO setup for production data, please implement the following before going live:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enable HTTPS (SSL)&lt;/strong&gt;: Never send API requests in plain text over the public internet. Use a reverse proxy like Nginx, Caddy, or Traefik with a free Let's Encrypt SSL certificate to route traffic securely to ports 9000 and 9001.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remember, MinIO is Not a Backup&lt;/strong&gt;: If your server's single hard drive fails, your data dies. Always have an off-site backup strategy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High Availability&lt;/strong&gt;: For enterprise workloads, consider deploying MinIO in a distributed cluster across multiple drives (RAID) or multiple servers to ensure fault tolerance and data redundancy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.servers99.com/storage-dedicated-server/" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Looking for robust, high-performance infrastructure to host your AI datasets and MinIO storage? Explore our Server Solutions.&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>devops</category>
      <category>cloud</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Bare Metal Automation in 2026: A Blueprint for Provisioning and Lifecycle Management</title>
      <dc:creator>Nyra Amsi</dc:creator>
      <pubDate>Thu, 30 Jul 2026 05:14:11 +0000</pubDate>
      <link>https://dev.to/nyra-amsi/bare-metal-automation-in-2026-a-blueprint-for-provisioning-and-lifecycle-management-5gij</link>
      <guid>https://dev.to/nyra-amsi/bare-metal-automation-in-2026-a-blueprint-for-provisioning-and-lifecycle-management-5gij</guid>
      <description>&lt;p&gt;Bare metal servers remain the critical foundation for workloads that demand predictable performance, strict hardware isolation, and zero-overhead compute power. In 2026, as enterprise AI platforms, high-performance computing (HPC), and distributed edge networks rapidly scale, the reliance on dedicated physical infrastructure has surged. &lt;/p&gt;

&lt;p&gt;However, operating physical servers at this scale exposes a major bottleneck: &lt;strong&gt;manual hardware management.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Provisioning, configuring, updating, and retiring physical servers through manual intervention introduces configuration drift, slows deployment pipelines, and creates significant auditing gaps. Bare metal automation solves these operational challenges by transforming raw physical infrastructure into programmable assets. &lt;/p&gt;


&lt;div class="crayons-card c-embed"&gt;

  &lt;br&gt;
&lt;strong&gt;The Core Premise:&lt;/strong&gt;&lt;br&gt;
By connecting initial OS provisioning, out-of-band management, and secure decommissioning into repeatable automated workflows, engineering teams can manage physical hardware with the same agility as virtualized cloud environments.&lt;br&gt;

&lt;/div&gt;


&lt;p&gt;This blueprint explores the exact mechanics of bare metal automation in 2026. We will break down the core provisioning processes, hardware lifecycle management, security protocols, and how modern Infrastructure-as-Code (IaC) toolchains interact directly with the metal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Anatomy of Bare Metal Automation
&lt;/h2&gt;

&lt;p&gt;Bare metal automation fundamentally differs from virtual machine orchestration. Because no hypervisor sits between the workload and the underlying hardware, automation tools cannot simply rely on virtualization APIs to spin up instant compute nodes. &lt;/p&gt;

&lt;p&gt;Instead, the provisioning logic must interact directly with the physical machine's internal components—firmware, network interface cards (NICs), storage controllers, and power systems. This requires a specialized operational scope that securely manages physical state transitions, transforming an unconfigured, powered-off rack server into a fully functional, network-attached node.&lt;/p&gt;

&lt;h3&gt;
  
  
  Baseboard Management Controllers (BMC) &amp;amp; Out-of-Band Access
&lt;/h3&gt;

&lt;p&gt;Before an operating system is even installed on the drives, infrastructure teams need a mechanism to interact with the raw hardware. This is where &lt;strong&gt;Out-of-Band (OOB) management&lt;/strong&gt; becomes critical. Every enterprise-grade physical server is equipped with a Baseboard Management Controller (BMC).&lt;/p&gt;

&lt;p&gt;Historically, data center administrators relied on the Intelligent Platform Management Interface (IPMI). However, modern bare metal automation pipelines have transitioned to the &lt;strong&gt;Redfish API&lt;/strong&gt;. Redfish provides a secure, RESTful interface to the BMC. This allows automation scripts and control planes to programmatically manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Power states&lt;/li&gt;
&lt;li&gt;BIOS/UEFI settings&lt;/li&gt;
&lt;li&gt;Boot orders&lt;/li&gt;
&lt;li&gt;Virtual media mounting&lt;/li&gt;
&lt;li&gt;Hardware telemetry extraction (via standard JSON payloads)
### Network Booting and OS Provisioning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once the BMC powers on the server and applies the correct boot order, the automated operating system installation sequence begins via the network. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;DHCP Assignment:&lt;/strong&gt; The physical server initializes and sends a broadcast request; the infrastructure control plane responds by assigning an IP address.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PXE / iPXE Handover:&lt;/strong&gt; iPXE allows the bare metal server to fetch bootloaders and installation images dynamically and securely over HTTP/HTTPS rather than relying on slower TFTP protocols.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unattended Execution:&lt;/strong&gt; Configuration files like &lt;em&gt;Kickstart (RHEL)&lt;/em&gt;, &lt;em&gt;Preseed (Debian)&lt;/em&gt;, or &lt;em&gt;Cloud-Init&lt;/em&gt; are injected. They automatically execute disk partitioning, inject root SSH keys, apply baseline security rules, and install the base OS without requiring a single human keystroke.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Full Server Lifecycle: From Rack to Retirement
&lt;/h2&gt;

&lt;p&gt;Effective bare metal automation extends far beyond the initial OS deployment. It governs the entire operational lifespan through a strictly defined state machine: &lt;br&gt;
&lt;code&gt;Discovered&lt;/code&gt; ➡️ &lt;code&gt;Commissioned&lt;/code&gt; ➡️ &lt;code&gt;Provisioned&lt;/code&gt; ➡️ &lt;code&gt;Active&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If hardware faults occur, the control plane shifts the node into &lt;strong&gt;Maintenance&lt;/strong&gt; or &lt;strong&gt;Quarantine&lt;/strong&gt;. This ensures Configuration Management Databases (CMDB) remain a real-time source of truth.&lt;/p&gt;
&lt;h3&gt;
  
  
  Zero-Touch Provisioning (ZTP) and Hardware Validation
&lt;/h3&gt;

&lt;p&gt;Before a physical node is deemed production-ready, it must pass rigorous hardware validation via ZTP workflows. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inventory Check:&lt;/strong&gt; Automation scripts extract hardware inventory to verify CPU core counts, memory capacity, and storage health against the expected rack manifest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firmware Baseline:&lt;/strong&gt; The control plane flashes BIOS and component firmware to globally approved baseline versions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage Config:&lt;/strong&gt; Hardware RAID controllers or NVMe pools are configured via API. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a degraded DIMM or outdated NIC driver is detected, the node is halted before OS installation begins.&lt;/p&gt;
&lt;h3&gt;
  
  
  Secure Decommissioning and Data Sanitization
&lt;/h3&gt;

&lt;p&gt;When a node reaches end-of-life, automated data sanitization workflows execute cryptographic erasures or multi-pass disk wipes adhering to &lt;strong&gt;NIST 800-88&lt;/strong&gt; standards. The automation toolchain programmatically revokes IP addresses, removes SSH keys, and resets the BMC credentials back to factory defaults before securely updating the CMDB to reflect the asset as permanently &lt;strong&gt;Retired&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Toolchain: IaC and Configuration Management
&lt;/h2&gt;

&lt;p&gt;By leveraging &lt;strong&gt;Bare Metal as a Service (BMaaS)&lt;/strong&gt; platforms (like &lt;em&gt;Canonical MAAS, Tinkerbell, Metal3, or OpenStack Ironic&lt;/em&gt;), organizations interact with physical hardware entirely through API endpoints. This enables GitOps workflows for physical servers.&lt;/p&gt;
&lt;h3&gt;
  
  
  Terraform for Infrastructure State
&lt;/h3&gt;

&lt;p&gt;Terraform does not execute the internal OS installation. Instead, it interacts directly with the BMaaS provider's API to request physical server profiles, allocate MAC addresses, and assign network parameters. It also dynamically updates IPAM systems, configures firewalls, and attaches nodes to upstream load balancers.&lt;/p&gt;
&lt;h3&gt;
  
  
  Ansible for OS Baseline and Security
&lt;/h3&gt;

&lt;p&gt;Once bootstrapped via Cloud-Init, Ansible takes over. Through idempotent playbooks, Ansible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enforces strict OS hardening (SSH daemon policies, disabling root logins).&lt;/li&gt;
&lt;li&gt;Applies Center for Internet Security (CIS) compliance benchmarks.&lt;/li&gt;
&lt;li&gt;Handles workload-specific kernel parameter tuning.&lt;/li&gt;
&lt;li&gt;Installs monitoring dependencies (Prometheus node exporters, security agents).&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Engineering High-Performance Workloads
&lt;/h2&gt;

&lt;p&gt;Bare metal automation provides the flexibility to tailor physical nodes for extreme computational performance.&lt;/p&gt;
&lt;h3&gt;
  
  
  AI and GPU-Dense Clusters
&lt;/h3&gt;

&lt;p&gt;Provisioning a GPU cluster for LLM training involves complex dependency chains. Workflows must orchestrate flashing precise GPU firmware, configuring PCIe lanes for NVLink, and injecting specific CUDA drivers. &lt;/p&gt;

&lt;p&gt;Furthermore, high-density AI servers push Thermal Design Power (TDP) boundaries. Automated control planes validate rack-level power budgets, airflow limits, and liquid cooling capacities &lt;em&gt;before&lt;/em&gt; dispatching workloads to prevent thermal throttling.&lt;/p&gt;
&lt;h3&gt;
  
  
  Edge Computing Operations
&lt;/h3&gt;

&lt;p&gt;Edge computing pushes bare metal into distributed environments (telecom towers, retail backrooms). Because of limited bandwidth and no on-site IT, automation pipelines rely on immutable OS images. If a remote headless server fails, the control plane uses OOB access to automatically trigger self-healing workflows—forcing reboots or mounting local recovery images.&lt;/p&gt;


&lt;h2&gt;
  
  
  Security Protocols for Bare Metal Workflows
&lt;/h2&gt;

&lt;p&gt;Because these tools can rewrite firmware and wipe drives, securing the orchestration control plane is paramount. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enforce &lt;strong&gt;Role-Based Access Control (RBAC)&lt;/strong&gt; and &lt;strong&gt;MFA&lt;/strong&gt; across CI/CD pipelines.&lt;/li&gt;
&lt;li&gt;Segregate management traffic (Redfish API, PXE payloads) into dedicated, &lt;strong&gt;air-gapped management VLANs&lt;/strong&gt; using TLS encryption.&lt;/li&gt;
&lt;li&gt;Integrate secrets vaulting (like &lt;strong&gt;HashiCorp Vault&lt;/strong&gt;) to dynamically inject credentials, ensuring no plaintext passwords exist in state files.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Conclusion: Building a Repeatable Infrastructure
&lt;/h2&gt;

&lt;p&gt;Transitioning to a fully automated lifecycle is an operational necessity. Bare metal automation transforms static physical hardware into repeatable, immutable infrastructure, drastically reducing deployment times.&lt;/p&gt;

&lt;p&gt;However, effective automation requires an underlying physical infrastructure designed to be programmatically controlled from day one. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.servers99.com/dedicated-server/" class="crayons-btn crayons-btn--primary" rel="noopener noreferrer"&gt;Ready to optimize workloads without the hypervisor tax? Explore our Dedicated Server Solutions.&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>hardware</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Use Snort on Ubuntu Dedicated Servers to Detect SSH Brute-Force Attacks</title>
      <dc:creator>Nyra Amsi</dc:creator>
      <pubDate>Fri, 03 Jul 2026 10:56:22 +0000</pubDate>
      <link>https://dev.to/nyra-amsi/how-to-use-snort-on-ubuntu-dedicated-servers-to-detect-ssh-brute-force-attacks-386g</link>
      <guid>https://dev.to/nyra-amsi/how-to-use-snort-on-ubuntu-dedicated-servers-to-detect-ssh-brute-force-attacks-386g</guid>
      <description>&lt;p&gt;SSH brute-force attacks are among the most common threats targeting Linux dedicated servers. Attackers use automated tools to repeatedly attempt username and password combinations in an effort to gain unauthorized access. Even when login attempts fail, excessive authentication requests can clutter logs, consume resources, and make it harder to identify legitimate security events.&lt;/p&gt;

&lt;p&gt;While traditional firewalls can block unwanted traffic, they often do not provide detailed visibility into suspicious connection patterns. This is where Snort can help.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ Note&lt;/strong&gt;: This guide uses Snort 2 from the official Ubuntu repositories for a quick, beginner-friendly setup. For Snort 3, a manual source compilation is required.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Problem&lt;br&gt;
Consider a dedicated server that exposes SSH on port 22 for remote administration. Over time, the server may receive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automated login attempts from unknown IP addresses&lt;/li&gt;
&lt;li&gt;Credential stuffing attacks&lt;/li&gt;
&lt;li&gt;Bot-driven password guessing campaigns&lt;/li&gt;
&lt;li&gt;Large volumes of connection attempts from multiple sources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although SSH logs record these events, manually reviewing log files can be time-consuming, especially on busy servers. A network intrusion detection system such as Snort can monitor traffic in real-time and generate alerts whenever suspicious SSH activity is detected.&lt;/p&gt;
&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before starting, ensure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu 24.04 LTS&lt;/li&gt;
&lt;li&gt;Root or sudo access&lt;/li&gt;
&lt;li&gt;A dedicated server with SSH enabled&lt;/li&gt;
&lt;li&gt;Internet connectivity for package installation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Update the system first:&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;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 1: Install Snort
&lt;/h2&gt;

&lt;p&gt;Install Snort directly from the standard Ubuntu repositories:&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;apt &lt;span class="nb"&gt;install &lt;/span&gt;snort &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ Note:&lt;/strong&gt; During installation, you may be prompted to enter your network interface and IP range.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Verify the installation:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;snort &lt;span class="nt"&gt;-V&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see version information confirming that Snort (version 2.9.x) is installed successfully.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Identify Your Network Interface
&lt;/h2&gt;

&lt;p&gt;List your available network interfaces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip addr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will see output containing names like eth0, ens3, or ens18. Make a note of the interface connected to the public network.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Configure Snort
&lt;/h2&gt;

&lt;p&gt;Open the main Snort configuration file:&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;nano /etc/snort/snort.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Locate the network variable section. Look for ipvar HOME_NET and set it to your server's IP subnet, or for broad monitoring:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;ipvar&lt;/span&gt; &lt;span class="n"&gt;HOME_NET&lt;/span&gt; &lt;span class="n"&gt;any&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file and exit the editor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Create a Local Rule File
&lt;/h2&gt;

&lt;p&gt;Ensure the rules directory exists (it usually does by default):&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 mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /etc/snort/rules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the local rules file to add your custom alert:&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;nano /etc/snort/rules/local.rules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 5: Create a Brute-Force Detection Rule&lt;br&gt;
To accurately detect a brute-force attack (and avoid flooding your logs with normal SSH logins), we need to use a threshold (or detection filter). This tells Snort to only trigger an alert if a single IP address makes too many connection attempts within a short timeframe.&lt;/p&gt;

&lt;p&gt;Add the following rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;alert&lt;/span&gt; &lt;span class="n"&gt;tcp&lt;/span&gt; &lt;span class="k"&gt;any&lt;/span&gt; &lt;span class="k"&gt;any&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;HOME_NET&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;"Possible SSH Brute Force Attack Detected"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;detection_filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;track&lt;/span&gt; &lt;span class="n"&gt;by_src&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;count&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;seconds&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;sid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1000001&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;rev&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How this rule works:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;flags:S; looks for the initial connection attempt (SYN packet).&lt;/li&gt;
&lt;li&gt;detection_filter:track by_src, count 5, seconds 60; ensures an alert is ONLY generated if the same source IP attempts to connect more than 5 times within 60 seconds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Save the file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Load the Rule
&lt;/h2&gt;

&lt;p&gt;Ensure Snort knows to look at your local rules. Open the configuration file again:&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;nano /etc/snort/snort.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add or ensure this line is uncommented:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;include&lt;/span&gt; $&lt;span class="n"&gt;RULE_PATH&lt;/span&gt;/&lt;span class="n"&gt;local&lt;/span&gt;.&lt;span class="n"&gt;rules&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate the configuration to ensure there are no syntax errors:&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;snort &lt;span class="nt"&gt;-T&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; /etc/snort/snort.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A successful validation output indicates that Snort can load the rule correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Start Snort
&lt;/h2&gt;

&lt;p&gt;Run Snort in alerting mode. Replace eth0 with your actual network interface noted in Step 2:&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;snort &lt;span class="nt"&gt;-i&lt;/span&gt; eth0 &lt;span class="nt"&gt;-c&lt;/span&gt; /etc/snort/snort.conf &lt;span class="nt"&gt;-A&lt;/span&gt; console
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Note&lt;/strong&gt;: Using -A console will print alerts directly to your screen. For background logging in production, use -A fast.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 8: Generate Test Traffic
&lt;/h2&gt;

&lt;p&gt;From another system, initiate multiple SSH connections rapidly to trigger the threshold:&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="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;1..6&lt;span class="o"&gt;}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;ssh &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;ConnectTimeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 user@server-ip&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Snort will detect the rapid connection attempts and output an alert:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[**] [1:1000001:1] Possible SSH Brute Force Attack Detected [**]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Understanding the Results&lt;br&gt;
By using a detection filter, your alerts will specifically highlight high-frequency connection attempts rather than normal administrator logins. Not every alert represents a successful compromise, but it provides visibility into aggressive automated bot activity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reducing False Positives
&lt;/h2&gt;

&lt;p&gt;To improve server security:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Restrict SSH access to trusted IP addresses only.&lt;/li&gt;
&lt;li&gt;Change SSH to key-based authentication and disable password logins.&lt;/li&gt;
&lt;li&gt;Adjust the count and seconds in your Snort rule based on your server's normal traffic baseline.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Snort Is Useful on Dedicated Servers
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.servers99.com/dedicated-server/" rel="noopener noreferrer"&gt;Dedicated servers&lt;/a&gt; often host websites, APIs, databases, and remote management services that are continuously exposed to the internet. Snort provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time network monitoring&lt;/li&gt;
&lt;li&gt;Intrusion detection capabilities&lt;/li&gt;
&lt;li&gt;Custom alert rules with rate-limiting&lt;/li&gt;
&lt;li&gt;Unmatched traffic visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By identifying brute-force attempts early, administrators can investigate and respond before minor events develop into larger security incidents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Monitoring SSH traffic with Snort adds a critical layer of visibility for Ubuntu dedicated servers. Instead of relying solely on standard logs, administrators gain real-time insights into aggressive network behavior.&lt;/p&gt;

&lt;p&gt;This proactive approach becomes especially important for servers running public-facing services, where continuous exposure to automated scanning is common. Robust network monitoring is highly suitable for enterprise-grade dedicated server setups, ensuring stable performance and secure deployments.&lt;/p&gt;

&lt;p&gt;A layered security approach is always recommended, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A properly configured firewall (UFW or equivalent)&lt;/li&gt;
&lt;li&gt;Strong SSH authentication using key-based access&lt;/li&gt;
&lt;li&gt;Intrusion detection tools such as Snort&lt;/li&gt;
&lt;li&gt;Automated protection tools like Fail2Ban&lt;/li&gt;
&lt;li&gt;Regular system and package updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When these components are implemented together, the server becomes significantly more resilient against common network-based attacks while maintaining full control and visibility for administrators.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>linux</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Dedicated Server Security Checklist: Complete Linux Server Hardening</title>
      <dc:creator>Nyra Amsi</dc:creator>
      <pubDate>Sat, 20 Jun 2026 09:00:04 +0000</pubDate>
      <link>https://dev.to/nyra-amsi/dedicated-server-security-checklist-complete-linux-server-hardening-4idc</link>
      <guid>https://dev.to/nyra-amsi/dedicated-server-security-checklist-complete-linux-server-hardening-4idc</guid>
      <description>&lt;p&gt;When a Linux dedicated server receives a public IP address, it immediately becomes visible to internet-wide scanners and automated attack bots.&lt;/p&gt;

&lt;p&gt;Many administrators focus on performance optimization, but security fundamentals are often overlooked until an incident occurs.&lt;/p&gt;

&lt;p&gt;A secure production environment requires multiple layers of defense, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSH hardening and key-based authentication&lt;/li&gt;
&lt;li&gt;Multi-factor authentication (MFA)&lt;/li&gt;
&lt;li&gt;Firewall configuration and access control&lt;/li&gt;
&lt;li&gt;Intrusion prevention with CrowdSec and Fail2Ban&lt;/li&gt;
&lt;li&gt;Runtime threat detection using eBPF technologies&lt;/li&gt;
&lt;li&gt;Web Application Firewalls (WAF)&lt;/li&gt;
&lt;li&gt;File integrity monitoring&lt;/li&gt;
&lt;li&gt;Kernel hardening&lt;/li&gt;
&lt;li&gt;Backup and disaster recovery planning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One important point often missed by server administrators is that moving SSH to a non-standard port is not a security control. While it may reduce automated log noise, strong authentication and access restrictions remain the real protection mechanisms.&lt;/p&gt;

&lt;p&gt;Modern Linux security is also shifting toward kernel-level observability with tools such as Falco, Tetragon, and Tracee, providing deeper visibility into suspicious activity with minimal overhead.&lt;/p&gt;

&lt;p&gt;Servers99 recently created a comprehensive guide covering these topics in detail, including practical recommendations for Ubuntu, AlmaLinux, and other Linux server environments.&lt;/p&gt;

&lt;p&gt;Read the full guide: &lt;a href="https://www.servers99.com/blog/dedicated-server-security-checklist/" rel="noopener noreferrer"&gt;Dedicated Server Security Checklist: Complete Linux Server Hardening Guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What security control do you consider absolutely mandatory on every production Linux server?&lt;/p&gt;

</description>
      <category>linux</category>
      <category>security</category>
      <category>devops</category>
      <category>sysadmin</category>
    </item>
    <item>
      <title>Why a Clean CI/CD Scan Isn't Enough: The Kubernetes Runtime Blind Spot</title>
      <dc:creator>Nyra Amsi</dc:creator>
      <pubDate>Thu, 18 Jun 2026 07:48:37 +0000</pubDate>
      <link>https://dev.to/nyra-amsi/why-a-clean-cicd-scan-isnt-enough-the-kubernetes-runtime-blind-spot-3mmd</link>
      <guid>https://dev.to/nyra-amsi/why-a-clean-cicd-scan-isnt-enough-the-kubernetes-runtime-blind-spot-3mmd</guid>
      <description>&lt;p&gt;If your container passes a CI/CD vulnerability scan, is it safe to run in production? Many engineering teams assume the answer is yes. But a clean image scan is just a green light to deploy—it is &lt;em&gt;not&lt;/em&gt; a lifetime guarantee.&lt;/p&gt;

&lt;p&gt;Pre-deployment gates like static configuration checks and vulnerability scanning are entirely predictive. They are great for catching known risks (published CVEs) before your code goes live. However, they leave a massive blind spot once the container is actively running. &lt;/p&gt;

&lt;p&gt;A static scan cannot protect you from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zero-day exploits&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration drift and memory injections&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compromised third-party dependencies&lt;/strong&gt; executing malicious behavior at runtime&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Insider threats&lt;/strong&gt; leveraging legitimate system tools to move laterally&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Static security stops at the deployment line. True Zero-Trust requires active surveillance of your live environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Shift to Kernel-Level Security with eBPF
&lt;/h3&gt;

&lt;p&gt;Instead of relying on easily bypassed user-space tools, the industry is shifting toward kernel-level security using &lt;strong&gt;eBPF (Extended Berkeley Packet Filter)&lt;/strong&gt; and &lt;strong&gt;Cilium Tetragon&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;By moving security monitoring directly into the Linux kernel, infrastructure teams can correlate process execution with network activity in real-time. For example, if a routine &lt;code&gt;nginx&lt;/code&gt; binary suddenly spawns a &lt;code&gt;bash&lt;/code&gt; shell to run &lt;code&gt;curl&lt;/code&gt;, eBPF detects this at the system-call level and instantly terminates the process via &lt;code&gt;SIGKILL&lt;/code&gt; before the payload even executes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dive Deeper into K8s Runtime Security
&lt;/h3&gt;

&lt;p&gt;We have put together a comprehensive architectural breakdown on the modern Kubernetes threat model and how to implement active runtime enforcement. &lt;/p&gt;

&lt;p&gt;In our full guide, we cover:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The 5 primary attack vectors inside a K8s cluster (including DNS Tunneling).&lt;/li&gt;
&lt;li&gt;How eBPF sensors (&lt;code&gt;kprobes&lt;/code&gt;, &lt;code&gt;tracepoints&lt;/code&gt;) provide deep visibility without performance latency.&lt;/li&gt;
&lt;li&gt;How to write and deploy Tetragon &lt;code&gt;TracingPolicy&lt;/code&gt; rules.&lt;/li&gt;
&lt;li&gt;Achieving PCI-DSS (File Integrity Monitoring) and SOC 2 compliance using kernel-native visibility.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://www.servers99.com/blog/kubernetes-runtime-security-guide/" rel="noopener noreferrer"&gt;Read the Full Architectural Breakdown and Interactive Guide Here&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>security</category>
      <category>cloudnative</category>
    </item>
    <item>
      <title>💻 Windows vs Linux Dedicated Server: A Technical Breakdown for 2026</title>
      <dc:creator>Nyra Amsi</dc:creator>
      <pubDate>Fri, 24 Apr 2026 08:29:40 +0000</pubDate>
      <link>https://dev.to/nyra-amsi/windows-vs-linux-dedicated-server-a-technical-breakdown-for-2026-42ll</link>
      <guid>https://dev.to/nyra-amsi/windows-vs-linux-dedicated-server-a-technical-breakdown-for-2026-42ll</guid>
      <description>&lt;p&gt;Hey everyone! 👋 &lt;/p&gt;

&lt;p&gt;If you are upgrading your backend infrastructure or moving away from shared hosting, choosing between a &lt;strong&gt;Windows&lt;/strong&gt; and &lt;strong&gt;Linux&lt;/strong&gt; dedicated server is one of the most critical decisions you'll make. It dictates your licensing costs, administrative overhead, security posture, and application compatibility for years.&lt;/p&gt;

&lt;p&gt;I recently did a deep dive into this, and instead of biased opinions, I wanted to share some raw technical facts and benchmarks that can help you choose the right &lt;a href="https://www.servers99.com/dedicated-server/" rel="noopener noreferrer"&gt;bare-metal infrastructure&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ The Quick Verdict
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Go with Linux&lt;/strong&gt; if you need raw performance, zero licensing fees, containerization (Docker/Kubernetes), and native support for PHP, Python, or open-source stacks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Go with Windows&lt;/strong&gt; if your operations rely on ASP.NET, Microsoft SQL Server, Active Directory, or if your team requires a familiar graphical user interface (GUI) for server management.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🐧 Linux: Performance and Flexibility
&lt;/h3&gt;

&lt;p&gt;Linux is open-source and renowned for its lightweight kernel architecture. Since it doesn't need a GUI to run, practically 100% of the server's computing power goes straight to your applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why developers love it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero Licensing Costs:&lt;/strong&gt; Distros like Ubuntu, Debian, and AlmaLinux are free. You avoid per-core licensing fees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Superior Resource Efficiency:&lt;/strong&gt; Benchmarks show Linux can process up to &lt;strong&gt;3x more web requests per gigabyte of RAM&lt;/strong&gt; compared to GUI-heavy alternatives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Web Standard:&lt;/strong&gt; It is the absolute standard for LAMP/LEMP stacks, WordPress, Node.js, and Python frameworks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;The Catch:&lt;/em&gt; It is heavily CLI-driven. If your sysadmins aren't comfortable with Bash or SSH, the learning curve is real.&lt;/p&gt;




&lt;h3&gt;
  
  
  🪟 Windows: Enterprise Integration
&lt;/h3&gt;

&lt;p&gt;Built on the Windows NT kernel, a Windows server is designed for deep integration with Microsoft’s enterprise ecosystem. It provides a familiar GUI via Remote Desktop Protocol (RDP).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why enterprises choose it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Native Microsoft Compatibility:&lt;/strong&gt; If you are running legacy ASP.NET or MSSQL, Windows is the only logical choice. MSSQL runs with deep kernel-level tuning here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Active Directory:&lt;/strong&gt; Unmatched for enterprise identity management across massive organizational networks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ease of Management:&lt;/strong&gt; The visual Server Manager makes deploying roles (like IIS or Hyper-V) point-and-click easy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;The Catch:&lt;/em&gt; Licensing fees (around $40+ extra depending on the provider) and the GUI consumes baseline RAM and CPU.&lt;/p&gt;




&lt;h3&gt;
  
  
  🤔 How to Choose?
&lt;/h3&gt;

&lt;p&gt;Don't just pick what's "popular." Ask yourself:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;What is your stack?&lt;/strong&gt; (Docker/K8s = Linux | Exchange/SharePoint = Windows)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What are your team's skills?&lt;/strong&gt; (Bash/Ansible = Linux | PowerShell/Dashboards = Windows)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What is your budget?&lt;/strong&gt; (Max hardware for the price = Linux | Need SLA-backed OS support = Windows)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ultimately, it’s all about reducing operational friction for your specific use case. &lt;/p&gt;

&lt;p&gt;What is your go-to OS for bare-metal servers? Let me know in the comments! 👇&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>linux</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
