<?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 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>
