<?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: eServers</title>
    <description>The latest articles on DEV Community by eServers (e_servers).</description>
    <link>https://dev.to/e_servers</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%2Forganization%2Fprofile_image%2F12371%2F2164e2fa-34f5-4121-a327-ad0dad3f6f2c.png</url>
      <title>DEV Community: eServers</title>
      <link>https://dev.to/e_servers</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/e_servers"/>
    <language>en</language>
    <item>
      <title>Setting Up Wazuh SIEM for Server Log Monitoring on Linux</title>
      <dc:creator>olivia Millie</dc:creator>
      <pubDate>Fri, 11 Sep 2026 10:44:22 +0000</pubDate>
      <link>https://dev.to/e_servers/setting-up-wazuh-siem-for-server-log-monitoring-on-linux-7eg</link>
      <guid>https://dev.to/e_servers/setting-up-wazuh-siem-for-server-log-monitoring-on-linux-7eg</guid>
      <description>&lt;p&gt;A firewall stops unwanted traffic from getting in. It tells you nothing about what happens after something gets past it — a compromised WordPress plugin, a leaked SSH key, a cron job that shouldn't be there. That's the gap a SIEM fills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Wazuh&lt;/strong&gt; is the most widely deployed open-source option for self-hosted server monitoring and intrusion detection. Hosting it on a &lt;a href="https://www.eservers.uk/bare-metal-servers/" rel="noopener noreferrer"&gt;Bare Metal Server&lt;/a&gt; gives the OpenSearch indexer the RAM it needs to process logs rapidly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install the Central Components
&lt;/h3&gt;

&lt;p&gt;Wazuh provides an all-in-one installation script that deploys the manager, indexer, and dashboard together:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
curl -sO [https://packages.wazuh.com/4.x/wazuh-install.sh](https://packages.wazuh.com/4.x/wazuh-install.sh)
sudo bash ./wazuh-install.sh -a


Save the auto-generated admin credentials!

Step 2 &amp;amp; 3: Firewall Configuration
Open the required ports: 443 (Dashboard), 55000 (API), and 1514/1515 (Agent communication).

Step 4: Install and Enroll an Agent
On each server you want monitored:

curl -sO [https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.x_amd64.deb](https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.x_amd64.deb)
sudo WAZUH_MANAGER='your-manager-ip' dpkg -i ./wazuh-agent_4.x_amd64.deb
sudo systemctl daemon-reload
sudo systemctl enable --now wazuh-agent

Step 5: Enable File Integrity Monitoring (FIM)
Edit /var/ossec/etc/ossec.conf on the agent to watch specific directories for webshells or unwanted changes:

XML
&amp;lt;syscheck&amp;gt;
  &amp;lt;directories check_all="yes" report_changes="yes"&amp;gt;/etc,/bin,/sbin&amp;lt;/directories&amp;gt;
  &amp;lt;directories check_all="yes"&amp;gt;/var/www/html&amp;lt;/directories&amp;gt;
&amp;lt;/syscheck&amp;gt;
Restart the agent: sudo systemctl restart wazuh-agent.

To see how to deliberately trigger SSH brute-force alerts to test the system and how to reduce dashboard noise, read the full tutorial here: https://www.eservers.uk/tutorials/howto/setup-wazuh-siem-ubuntu-debian/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>security</category>
      <category>linux</category>
      <category>sysadmin</category>
      <category>wazuh</category>
    </item>
    <item>
      <title>Self-Hosted Kubernetes (K3s) on Bare Metal: Skip Proxmox Overhead</title>
      <dc:creator>olivia Millie</dc:creator>
      <pubDate>Fri, 11 Sep 2026 10:07:03 +0000</pubDate>
      <link>https://dev.to/e_servers/self-hosted-kubernetes-k3s-on-bare-metal-skip-proxmox-overhead-44lp</link>
      <guid>https://dev.to/e_servers/self-hosted-kubernetes-k3s-on-bare-metal-skip-proxmox-overhead-44lp</guid>
      <description>&lt;p&gt;Proxmox and VMware virtualize hardware into separate machines. Kubernetes orchestrates containers within machines. If what you actually need is to run and scale containerized workloads, installing a hypervisor first and Kubernetes on top of it is often unnecessary overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;K3s&lt;/strong&gt;, a lightweight Kubernetes distribution, lets you skip the virtualization layer entirely and run directly on &lt;a href="https://www.eservers.uk/bare-metal-servers/" rel="noopener noreferrer"&gt;Bare Metal Servers&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install K3s on the Control Plane
&lt;/h3&gt;

&lt;p&gt;K3s ships a single install script that handles the setup, including a bundled containerd runtime and Traefik ingress.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
curl -sfL [https://get.k3s.io](https://get.k3s.io) | sh -
sudo systemctl status k3s
sudo k3s kubectl get nodes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>linux</category>
      <category>proxmox</category>
    </item>
    <item>
      <title>cPanel vs Plesk vs Webmin: Which Dedicated Server Panel is Best in 2026?</title>
      <dc:creator>olivia Millie</dc:creator>
      <pubDate>Fri, 11 Sep 2026 08:18:11 +0000</pubDate>
      <link>https://dev.to/e_servers/cpanel-vs-plesk-vs-webmin-which-dedicated-server-panel-is-best-in-2026-4kgp</link>
      <guid>https://dev.to/e_servers/cpanel-vs-plesk-vs-webmin-which-dedicated-server-panel-is-best-in-2026-4kgp</guid>
      <description>&lt;p&gt;Choosing the right control panel is one of the first real decisions you make after ordering a dedicated server. It decides how fast you can deploy websites, how easy email and DNS management will be, and how much time your team spends on routine admin.&lt;/p&gt;

&lt;h3&gt;
  
  
  cPanel/WHM: The Industry Standard
&lt;/h3&gt;

&lt;p&gt;cPanel remains the best fit for agencies and hosting resellers who need a mature, widely-documented Linux panel. WebHost Manager (WHM) sits above individual cPanel accounts, letting you package hosting plans and allocate resources per account. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Trade-off:&lt;/strong&gt; It is Linux-only, and it is resource-hungry compared to lighter panels.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Plesk: The Cross-Platform Alternative
&lt;/h3&gt;

&lt;p&gt;Plesk is the stronger choice if you run mixed Linux/Windows environments or lean heavily on WordPress management. It was built to solve the problem cPanel can't: managing Windows and Linux servers from the same interface.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Strength:&lt;/strong&gt; It features a built-in WordPress Toolkit for bulk updates, staging, security hardening, and cloning.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Webmin: The Free, Technical Route
&lt;/h3&gt;

&lt;p&gt;Webmin (often paired with Virtualmin) is the right call for technical teams who want a free, highly configurable panel and don't mind a steeper learning curve. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Strength:&lt;/strong&gt; It has zero licensing cost and a lightweight footprint, which frees up more RAM and CPU headroom for actual workloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Hosting on eServers UK
&lt;/h3&gt;

&lt;p&gt;If you're deploying on &lt;a href="https://www.eservers.uk/bare-metal-servers/" rel="noopener noreferrer"&gt;Bare Metal Servers&lt;/a&gt;, control panel choice matters when paired with local latency. UK data centre placement keeps latency low for UK/EU traffic, which makes panel responsiveness faster.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Read the full side-by-side comparison here: &lt;a href="https://www.eservers.uk/blogs/cpanel-vs-plesk-vs-webmin-dedicated-servers/" rel="noopener noreferrer"&gt;https://www.eservers.uk/blogs/cpanel-vs-plesk-vs-webmin-dedicated-servers/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webhosting</category>
      <category>sysadmin</category>
      <category>cpanel</category>
      <category>plesk</category>
    </item>
    <item>
      <title>Self-Hosted MinIO Object Storage on Bare Metal: An AWS S3 Alternative</title>
      <dc:creator>olivia Millie</dc:creator>
      <pubDate>Wed, 09 Sep 2026 11:50:19 +0000</pubDate>
      <link>https://dev.to/e_servers/self-hosted-minio-object-storage-on-bare-metal-an-aws-s3-alternative-2pdp</link>
      <guid>https://dev.to/e_servers/self-hosted-minio-object-storage-on-bare-metal-an-aws-s3-alternative-2pdp</guid>
      <description>&lt;p&gt;Most teams reach for AWS S3 by default because it's the API everyone knows. The problem isn't the API — it's the bill. Object storage on public cloud platforms charges for storage and for every byte that leaves the network. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MinIO&lt;/strong&gt; solves this by giving you the exact same S3 API running on &lt;a href="https://www.eservers.uk/bare-metal-servers/" rel="noopener noreferrer"&gt;Bare Metal Servers&lt;/a&gt;. Point any S3-compatible application at your MinIO endpoint instead of &lt;code&gt;s3.amazonaws.com&lt;/code&gt;, and nothing else needs to change.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Prepare the Storage Disk
&lt;/h3&gt;

&lt;p&gt;Identify the disk you'll dedicate to MinIO and format it using XFS (recommended for large files):&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
lsblk
sudo mkfs.xfs /dev/sdb
sudo mkdir -p /mnt/minio-data
sudo mount /dev/sdb /mnt/minio-data
echo "/dev/sdb /mnt/minio-data xfs defaults 0 2" | sudo tee -a /etc/fstab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>linux</category>
      <category>aws</category>
      <category>storage</category>
      <category>devops</category>
    </item>
    <item>
      <title>WireGuard VPN Setup on a Dedicated Server: Secure Remote Access</title>
      <dc:creator>olivia Millie</dc:creator>
      <pubDate>Wed, 09 Sep 2026 11:25:29 +0000</pubDate>
      <link>https://dev.to/e_servers/wireguard-vpn-setup-on-a-dedicated-server-secure-remote-access-104b</link>
      <guid>https://dev.to/e_servers/wireguard-vpn-setup-on-a-dedicated-server-secure-remote-access-104b</guid>
      <description>&lt;p&gt;Exposing SSH, database ports, or admin panels directly to the public internet is one of the most common ways dedicated servers get compromised. A VPN closes that exposure: instead of opening ports to the world, you open them only to devices connected through an encrypted tunnel.&lt;/p&gt;

&lt;p&gt;WireGuard operates at the kernel level on Linux, meaning connection setup and throughput are noticeably faster than userspace VPNs like OpenVPN. Setting this up on a &lt;a href="https://www.eservers.uk/bare-metal-servers/" rel="noopener noreferrer"&gt;Bare Metal Server&lt;/a&gt; gives WireGuard a dedicated network stack with no noisy-neighbour contention.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install WireGuard
&lt;/h3&gt;

&lt;p&gt;Ubuntu 24.04 ships WireGuard in the default repositories:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
sudo apt update
sudo apt install wireguard -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>linux</category>
      <category>security</category>
      <category>networking</category>
      <category>sysadmin</category>
    </item>
    <item>
      <title>How to Set Up Postfix with DKIM, SPF, and DMARC on Ubuntu 24.04</title>
      <dc:creator>olivia Millie</dc:creator>
      <pubDate>Fri, 04 Sep 2026 06:46:31 +0000</pubDate>
      <link>https://dev.to/e_servers/how-to-set-up-postfix-with-dkim-spf-and-dmarc-on-ubuntu-2404-5f7b</link>
      <guid>https://dev.to/e_servers/how-to-set-up-postfix-with-dkim-spf-and-dmarc-on-ubuntu-2404-5f7b</guid>
      <description>&lt;p&gt;If you've ever sent an email from your own server and watched it land in someone's spam folder, the cause is almost always the same: nothing on the receiving end can verify the mail actually came from you. &lt;/p&gt;

&lt;p&gt;On a &lt;a href="https://www.eservers.uk/bare-metal-servers/" rel="noopener noreferrer"&gt;Bare Metal Server&lt;/a&gt;, the reputation of your outbound IP is entirely yours. A new IP sending unauthenticated mail looks exactly like spam. SPF, DKIM, and DMARC are how you build trust deliberately.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Ubuntu 24.04 LTS with Postfix installed.&lt;/li&gt;
&lt;li&gt;  A clean reverse DNS (PTR) record pointing your server's IP back to your mail hostname.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1: Set Up SPF
&lt;/h3&gt;

&lt;p&gt;SPF is a DNS TXT record that authorizes your MX servers. Add a TXT record at your domain's root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yourdomain.com.   IN TXT   "v=spf1 mx ~all"


Step 2 &amp;amp; 3: Install OpenDKIM and Generate Keys
Postfix has no DKIM signing built in; it requires a milter.

Bash
sudo apt update
sudo apt install -y opendkim opendkim-tools
sudo mkdir -p /etc/opendkim/keys/yourdomain.com
sudo opendkim-genkey -b 2048 -d yourdomain.com -D /etc/opendkim/keys/yourdomain.com -s mail -v
sudo chown -R opendkim:opendkim /etc/opendkim/keys
Step 4: Configure OpenDKIM
Edit /etc/opendkim.conf to set the domain, selector (mail), and keyfile. You must also create the socket directory so Postfix's chroot can reach it:

Bash
sudo mkdir -p /var/spool/postfix/opendkim
sudo chown opendkim:postfix /var/spool/postfix/opendkim
sudo chmod 750 /var/spool/postfix/opendkim
sudo usermod -a -G opendkim postfix
Step 5: Connect OpenDKIM to Postfix
Append to /etc/postfix/main.cf:

Ini, TOML
milter_protocol = 6
milter_default_action = accept
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
Restart services:

Bash
sudo systemctl restart opendkim
sudo systemctl restart postfix
Step 7: Publish a DMARC Record
Start with a monitoring policy (p=none):

Plaintext
_dmarc.yourdomain.com.   IN TXT   "v=DMARC1; p=none; rua=mailto:dmarc-reports@yourdomain.com; pct=100"
For the complete DNS setup and testing commands, read the full tutorial here: https://www.eservers.uk/tutorials/howto/setup-postfix-dkim-spf-dmarc-ubuntu-24-04/


---

### 12. Hashnode (Technical Focus - Commercial Content Removed)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
markdown&lt;/p&gt;

&lt;h1&gt;
  
  
  Infrastructure Engineering: Authenticating Postfix with SPF, DKIM, and DMARC
&lt;/h1&gt;

&lt;p&gt;When provisioning a new mail server, mailbox providers like Gmail and Outlook do not inherently trust your outbound IP address. Without cryptographic verification, your outbound mail will be flagged as suspicious and routed directly to the spam folder.&lt;/p&gt;

&lt;p&gt;To establish sender reputation and guarantee deliverability, you must implement three distinct DNS and cryptographic checks: SPF, DKIM, and DMARC. This guide details their implementation on a Postfix server running Ubuntu 24.04 LTS.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Authentication Trinity
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;SPF (Sender Policy Framework):&lt;/strong&gt; A DNS record specifying which IP addresses are authorized to send mail on behalf of your domain.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;DKIM (DomainKeys Identified Mail):&lt;/strong&gt; Cryptographically signs each outgoing message utilizing a private key.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;DMARC:&lt;/strong&gt; The policy layer instructing receiving servers how to handle messages that fail SPF or DKIM checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prerequisite:&lt;/strong&gt; You must have a valid Reverse DNS (PTR) record configured for your server's IP address pointing to your mail hostname. DKIM and SPF cannot compensate for a missing PTR record.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 1: SPF Implementation
&lt;/h2&gt;

&lt;p&gt;Add a TXT record to your domain's root zone:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
text
yourdomain.com.   IN TXT   "v=spf1 mx ~all"
Note: Use ~all (softfail) during initial testing to monitor failures without dropping legitimate mail. Transition to -all (hardfail) once verified.

Step 2: OpenDKIM Installation and Key Generation
Postfix requires a milter to handle DKIM signing. Install OpenDKIM:

Bash
sudo apt update
sudo apt install -y opendkim opendkim-tools
Generate a 2048-bit key (1024-bit is deprecated):

Bash
sudo mkdir -p /etc/opendkim/keys/yourdomain.com
sudo opendkim-genkey -b 2048 -d yourdomain.com -D /etc/opendkim/keys/yourdomain.com -s mail -v
sudo chown -R opendkim:opendkim /etc/opendkim/keys
Step 3: Milter Configuration
Edit /etc/opendkim.conf to declare your domain and keys:

Ini, TOML
Syslog              yes
Mode                sv
Canonicalization    relaxed/simple
Domain              yourdomain.com
Selector            mail
KeyFile             /etc/opendkim/keys/[yourdomain.com/mail.private](https://yourdomain.com/mail.private)
Socket              local:/var/spool/postfix/opendkim/opendkim.sock
Because Postfix runs in a chroot environment, the socket must be accessible:

Bash
sudo mkdir -p /var/spool/postfix/opendkim
sudo chown opendkim:postfix /var/spool/postfix/opendkim
sudo chmod 750 /var/spool/postfix/opendkim
sudo usermod -a -G opendkim postfix
Step 4: Postfix Integration
Append the milter configuration to /etc/postfix/main.cf:

Ini, TOML
milter_protocol = 6
milter_default_action = accept
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
Restart the services:

Bash
sudo systemctl restart opendkim
sudo systemctl restart postfix
Step 5: Publishing DNS Records
Print your public key (cat /etc/opendkim/keys/yourdomain.com/mail.txt) and add it as a TXT record at mail._domainkey.yourdomain.com.

Finally, publish your DMARC monitoring policy:

Plaintext
_dmarc.yourdomain.com.   IN TXT   "v=DMARC1; p=none; rua=mailto:reports@yourdomain.com; pct=100"
After analyzing the aggregate reports sent to your email, tighten the policy from p=none to p=quarantine, and eventually p=reject.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>linux</category>
      <category>sysadmin</category>
      <category>ubuntu</category>
      <category>security</category>
    </item>
    <item>
      <title>Setting Up a PostgreSQL Cluster with Patroni on Bare Metal</title>
      <dc:creator>olivia Millie</dc:creator>
      <pubDate>Fri, 04 Sep 2026 05:21:51 +0000</pubDate>
      <link>https://dev.to/e_servers/setting-up-a-postgresql-cluster-with-patroni-on-bare-metal-1b0h</link>
      <guid>https://dev.to/e_servers/setting-up-a-postgresql-cluster-with-patroni-on-bare-metal-1b0h</guid>
      <description>&lt;p&gt;For enterprise applications, SaaS platforms, and large e-commerce sites, a database outage means catastrophic revenue loss. Relying on a single database server is a single point of failure.&lt;/p&gt;

&lt;p&gt;To ensure true 100% uptime, you need a PostgreSQL High Availability (HA) Cluster. In this architecture, multiple database servers run in sync. If the primary master server crashes, the system automatically detects the failure and promotes a standby server to take over in seconds, with zero manual intervention.&lt;/p&gt;

&lt;p&gt;This tutorial covers setting up a robust PostgreSQL HA cluster on Ubuntu 24.04 bare-metal servers using Patroni (for failover management), etcd (for distributed consensus), and HAProxy (for routing client traffic).&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Architecture &amp;amp; Prerequisites
&lt;/h3&gt;

&lt;p&gt;To prevent a "split-brain" scenario where two servers both think they are the primary, a highly available cluster requires an odd number of nodes to maintain a quorum. Therefore, this setup requires three bare-metal servers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Node 1 (db1):&lt;/strong&gt; 10.0.0.11&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Node 2 (db2):&lt;/strong&gt; 10.0.0.12&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Node 3 (db3):&lt;/strong&gt; 10.0.0.13&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Install PostgreSQL &amp;amp; Dependencies
&lt;/h3&gt;

&lt;p&gt;On all three nodes, install PostgreSQL, Python3, and etcd:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
apt install -y postgresql postgresql-contrib python3-pip python3-venv etcd curl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>postgres</category>
      <category>database</category>
      <category>sysadmin</category>
      <category>linux</category>
    </item>
    <item>
      <title>Bulletproof Disaster Recovery: Automating Encrypted Backups Using BorgBackup on Linux</title>
      <dc:creator>olivia Millie</dc:creator>
      <pubDate>Thu, 03 Sep 2026 07:02:42 +0000</pubDate>
      <link>https://dev.to/e_servers/bulletproof-disaster-recovery-automating-encrypted-backups-using-borgbackup-on-linux-4ai7</link>
      <guid>https://dev.to/e_servers/bulletproof-disaster-recovery-automating-encrypted-backups-using-borgbackup-on-linux-4ai7</guid>
      <description>&lt;p&gt;A common misconception in server management is that RAID constitutes a backup. It does not. RAID protects against hardware drive failure, but it will seamlessly and instantly replicate accidental file deletions, corrupted database tables, or ransomware encryption across all your mirrored drives.&lt;/p&gt;

&lt;p&gt;For true disaster recovery on your &lt;a href="https://www.eservers.uk/bare-metal-servers/" rel="noopener noreferrer"&gt;Bare Metal Servers&lt;/a&gt;, you need an isolated, versioned, and encrypted backup strategy.&lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;BorgBackup (Borg)&lt;/strong&gt;. Borg is an open-source, deduplicating backup program that offers authenticated encryption. It only stores the changes made since your last backup, saving massive amounts of disk space.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install BorgBackup
&lt;/h3&gt;

&lt;p&gt;This guide uses Ubuntu 24.04 LTS. Run as root:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
apt update
apt install -y borgbackup
borg --version
Step 2: Initialize the Encrypted Repository
A "repository" is where Borg stores your archives. We will create a local repository at /backup/borg-repo.

Bash
mkdir -p /backup/borg-repo
borg init --encryption=repokey /backup/borg-repo
You will be prompted to enter a passphrase. Do not lose this passphrase.

Step 3: Running Your First Backup
Let's back up /var/www/html and /etc:

Bash
borg create --stats --progress \
    /backup/borg-repo::"Backup-{now:%Y-%m-%d_%H:%M}" \
    /var/www/html /etc
Step 4: Automating Backups with a Bash Script &amp;amp; Cron
Create a bash script: nano /usr/local/bin/borg-backup.sh

Bash
#!/bin/bash
export BORG_PASSPHRASE="YOUR_SUPER_SECRET_PASSPHRASE"
REPOSITORY="/backup/borg-repo"
LOG="/var/log/borg-backup.log"

echo "Starting backup: $(date)" &amp;gt;&amp;gt; $LOG

borg create --stats \
    $REPOSITORY::"Auto-Backup-{now:%Y-%m-%d_%H:%M}" \
    /var/www/html /etc &amp;gt;&amp;gt; $LOG 2&amp;gt;&amp;amp;1

borg prune --list --keep-daily=7 --keep-weekly=4 $REPOSITORY &amp;gt;&amp;gt;$LOG 2&amp;gt;&amp;amp;1

echo "Backup finished: $(date)" &amp;gt;&amp;gt; $LOG
Make it executable and add to crontab to run at 2:00 AM:

Bash
chmod +x /usr/local/bin/borg-backup.sh
crontab -e
# Add: 0 2 * * * /usr/local/bin/borg-backup.sh
Step 5: How to Restore Your Data
List available archives:

Bash
borg list /backup/borg-repo
Extract the files into a recovery folder:

Bash
mkdir /tmp/recovery &amp;amp;&amp;amp; cd /tmp/recovery
borg extract /backup/borg-repo::"Auto-Backup-2026-06-01_02:00"
Conclusion
To fulfill the 3-2-1 backup strategy, you must move these backups off-site. Pushing your encrypted Borg repositories to a secure London Data Centre ensures true disaster recovery.

Read the original tutorial here: https://www.eservers.uk/tutorials/howto/automate-encrypted-backups-borgbackup-linux/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>linux</category>
      <category>sysadmin</category>
      <category>bash</category>
      <category>security</category>
    </item>
    <item>
      <title>Building an eBPF Layer 7 DDoS Firewall with XDP</title>
      <dc:creator>olivia Millie</dc:creator>
      <pubDate>Thu, 03 Sep 2026 04:52:58 +0000</pubDate>
      <link>https://dev.to/e_servers/building-an-ebpf-layer-7-ddos-firewall-with-xdp-3j35</link>
      <guid>https://dev.to/e_servers/building-an-ebpf-layer-7-ddos-firewall-with-xdp-3j35</guid>
      <description>&lt;h3&gt;
  
  
  What is Layer 7 DDoS and Why Is It Harder to Stop?
&lt;/h3&gt;

&lt;p&gt;A Layer 7 DDoS attack (also called an application-layer DDoS or HTTP flood) overwhelms a web server by sending enormous volumes of seemingly legitimate HTTP requests rather than raw network packets.&lt;/p&gt;

&lt;p&gt;Unlike Layer 3/4 floods, Layer 7 attacks complete a full TCP three-way handshake — making them indistinguishable from real users at the network level. They bypass standard iptables rate-limiting rules without exhausting CPU resources first. Modern botnets frequently use this technique because traditional firewalls cannot inspect HTTP headers without terminating the TCP connection — an operation that is far too expensive at high traffic volumes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why XDP + eBPF Is the Right Tool
&lt;/h3&gt;

&lt;p&gt;eBPF (Extended Berkeley Packet Filter) allows you to run sandboxed programs inside the Linux kernel without modifying kernel source code. Paired with XDP (eXpress Data Path), these programs execute directly inside the NIC driver — the earliest possible point in the networking stack.&lt;/p&gt;

&lt;p&gt;XDP is the fastest software-based mitigation available on Linux. On a 10Gbps unmetered &lt;a href="https://www.eservers.uk/bare-metal-servers/" rel="noopener noreferrer"&gt;Bare Metal Servers&lt;/a&gt;, an XDP program can process and drop packets faster than the OS can schedule a user-space process to even acknowledge them.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Challenge: Parsing All Four Network Layers in eBPF
&lt;/h3&gt;

&lt;p&gt;XDP operates at the lowest level of the Linux networking stack. To reach Layer 7 (HTTP data), your eBPF program must manually walk the entire packet structure: Ethernet (14 bytes), IPv4 (20 bytes), and TCP (20 bytes). The Linux kernel eBPF verifier performs strict bounds checking on every memory access.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Write the eBPF C Program
&lt;/h3&gt;

&lt;p&gt;This guide is tested on Ubuntu 24.04 LTS. Create a file named &lt;code&gt;l7_firewall.c&lt;/code&gt;. When it detects a malicious HTTP signature, it returns &lt;code&gt;XDP_DROP&lt;/code&gt;, discarding the packet instantly at the NIC level.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
c
#include &amp;lt;linux/bpf.h&amp;gt;
#include &amp;lt;linux/if_ether.h&amp;gt;
#include &amp;lt;linux/ip.h&amp;gt;
#include &amp;lt;linux/tcp.h&amp;gt;
#include &amp;lt;linux/in.h&amp;gt;
#include &amp;lt;bpf/bpf_helpers.h&amp;gt;

SEC("xdp")
int xdp_l7_filter(struct xdp_md *ctx) {
    void *data_end = (void *)(long)ctx-&amp;gt;data_end;
    void *data     = (void *)(long)ctx-&amp;gt;data;

    struct ethhdr *eth = data;
    if ((void *)(eth + 1) &amp;gt; data_end) return XDP_PASS;
    if (eth-&amp;gt;h_proto != __constant_htons(ETH_P_IP)) return XDP_PASS;

    struct iphdr *ip = (void *)(eth + 1);
    if ((void *)(ip + 1) &amp;gt; data_end) return XDP_PASS;
    if (ip-&amp;gt;protocol != IPPROTO_TCP) return XDP_PASS;

    struct tcphdr *tcp = (void *)ip + (ip-&amp;gt;ihl * 4);
    if ((void *)(tcp + 1) &amp;gt; data_end) return XDP_PASS;

    unsigned char *payload = (unsigned char *)tcp + (tcp-&amp;gt;doff * 4);
    if ((void *)(payload + 14) &amp;gt; data_end) return XDP_PASS;

    if (payload[0] == 'G' &amp;amp;&amp;amp; payload[1] == 'E' &amp;amp;&amp;amp; payload[2] == 'T' &amp;amp;&amp;amp;
        payload[3] == ' ' &amp;amp;&amp;amp; payload[4] == '/' &amp;amp;&amp;amp; payload[5] == 'a' &amp;amp;&amp;amp;
        payload[6] == 't' &amp;amp;&amp;amp; payload[7] == 't' &amp;amp;&amp;amp; payload[8] == 'a' &amp;amp;&amp;amp;
        payload[9] == 'c' &amp;amp;&amp;amp; payload[10] == 'k') {
        return XDP_DROP;
    }
    return XDP_PASS;
}
char _license[] SEC("license") = "GPL";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>ebpf</category>
      <category>linux</category>
      <category>cybersecurity</category>
      <category>networking</category>
    </item>
    <item>
      <title>How to Set Up RAID on a Bare Metal Server: Hardware vs. Software RAID (2026 Guide)</title>
      <dc:creator>olivia Millie</dc:creator>
      <pubDate>Fri, 21 Aug 2026 07:14:19 +0000</pubDate>
      <link>https://dev.to/e_servers/how-to-set-up-raid-on-a-bare-metal-server-hardware-vs-software-raid-2026-guide-593a</link>
      <guid>https://dev.to/e_servers/how-to-set-up-raid-on-a-bare-metal-server-hardware-vs-software-raid-2026-guide-593a</guid>
      <description>&lt;p&gt;In the enterprise landscape, data integrity and uptime are non-negotiable. When deploying &lt;a href="https://www.eservers.uk/bare-metal-servers/" rel="noopener noreferrer"&gt;Bare Metal Servers&lt;/a&gt;, configuring RAID (Redundant Array of Independent Disks) is the most critical step in protecting your data against hardware failure while optimizing disk performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Hardware RAID vs. Software RAID: The Technical Verdict
&lt;/h3&gt;

&lt;p&gt;The choice between Hardware and Software RAID depends on your specific workload, budget, and acceptable CPU overhead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Hardware RAID:&lt;/strong&gt; Superior performance utilizing a dedicated onboard processor and cache. High reliability managed independently by the RAID controller.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Software RAID:&lt;/strong&gt; Highly cost-effective and portable. Managed directly by the OS kernel (such as Linux &lt;code&gt;mdadm&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Selecting the Best RAID Level
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;RAID 0 (Striping):&lt;/strong&gt; Maximum performance. No redundancy; if one drive fails, all data is lost.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;RAID 1 (Mirroring):&lt;/strong&gt; Ideal for OS drives. Data is cloned onto two disks.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;RAID 5 (Parity):&lt;/strong&gt; Requires at least 3 disks. Balances capacity and redundancy.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;RAID 10 (1+0):&lt;/strong&gt; The gold standard for databases running on &lt;a href="https://www.eservers.uk/gpu-servers/" rel="noopener noreferrer"&gt;NVMe Dedicated Servers&lt;/a&gt;. Combines RAID 0 speed with RAID 1 safety (minimum 4 disks).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Step-by-Step: Setting Up Hardware RAID (BIOS/UEFI)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Enter the RAID BIOS:&lt;/strong&gt; Restart the server and press &lt;code&gt;Ctrl+R&lt;/code&gt;, &lt;code&gt;F2&lt;/code&gt;, or &lt;code&gt;Del&lt;/code&gt; during boot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a Virtual Drive:&lt;/strong&gt; Select the physical target drives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configure RAID Level:&lt;/strong&gt; Choose RAID 1, 5, or 10.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Initialize &amp;amp; Save:&lt;/strong&gt; Perform a Fast Initialization and exit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. Step-by-Step: Setting Up Software RAID on Linux (mdadm)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Install &lt;code&gt;mdadm&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
sudo apt update &amp;amp;&amp;amp; sudo apt install mdadm -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>linux</category>
      <category>sysadmin</category>
      <category>devops</category>
      <category>storage</category>
    </item>
    <item>
      <title>The SSH Security Hardening Checklist for Dedicated Servers</title>
      <dc:creator>olivia Millie</dc:creator>
      <pubDate>Fri, 14 Aug 2026 06:49:36 +0000</pubDate>
      <link>https://dev.to/e_servers/the-ssh-security-hardening-checklist-for-dedicated-servers-412i</link>
      <guid>https://dev.to/e_servers/the-ssh-security-hardening-checklist-for-dedicated-servers-412i</guid>
      <description>&lt;p&gt;When you rent a dedicated server, you get full root access — which also means SSH is the front door to your entire infrastructure. Unlike shared hosting, there's no provider-managed layer sitting between an attacker and your operating system. If SSH is left on default settings, it becomes the single easiest way for automated bots to get in.&lt;/p&gt;

&lt;p&gt;This checklist walks through the practical steps for hardening SSH on &lt;a href="https://www.eservers.uk/bare-metal-servers/" rel="noopener noreferrer"&gt;Bare Metal Servers&lt;/a&gt;, why each step matters, and where responsibility sits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why SSH Security Matters More on a Dedicated Server
&lt;/h3&gt;

&lt;p&gt;On a dedicated server, you are the system administrator. Every internet-facing dedicated server with SSH open on port 22 will see automated login attempts within hours of going live. The good news: fixing default ports, password-only logins, and root access closes the majority of the attack surface.&lt;/p&gt;

&lt;h3&gt;
  
  
  The SSH Hardening Checklist
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Disable direct root login&lt;/strong&gt;&lt;br&gt;
Root is the most targeted username. Create a separate administrative user with sudo privileges, then set &lt;code&gt;PermitRootLogin no&lt;/code&gt; in &lt;code&gt;sshd_config&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Switch to key-based authentication&lt;/strong&gt;&lt;br&gt;
SSH keys are far harder to brute-force than passwords. Generate an SSH key pair and install the public key on the server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Disable password authentication entirely&lt;/strong&gt;&lt;br&gt;
Once key-based login is working, set &lt;code&gt;PasswordAuthentication no&lt;/code&gt;. This alone eliminates brute-force password guessing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Change the default SSH port&lt;/strong&gt;&lt;br&gt;
Moving off port 22 won't stop a targeted attacker, but it dramatically cuts down the noise from automated scanners. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Restrict SSH access by IP address&lt;/strong&gt;&lt;br&gt;
Use firewall rules or &lt;code&gt;AllowUsers&lt;/code&gt;/&lt;code&gt;Match Address&lt;/code&gt; directives to only permit SSH from known IP ranges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Use fail2ban or equivalent&lt;/strong&gt;&lt;br&gt;
Fail2ban watches your logs and automatically bans IPs after repeated failed login attempts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Set an idle session timeout&lt;/strong&gt;&lt;br&gt;
Configure &lt;code&gt;ClientAliveInterval&lt;/code&gt; and &lt;code&gt;ClientAliveCountMax&lt;/code&gt; so idle SSH sessions disconnect automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Limit which users can use SSH&lt;/strong&gt;&lt;br&gt;
Use &lt;code&gt;AllowUsers&lt;/code&gt; or &lt;code&gt;AllowGroups&lt;/code&gt; in &lt;code&gt;sshd_config&lt;/code&gt; to explicitly list who is permitted to connect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Keep OpenSSH and the OS patched&lt;/strong&gt;&lt;br&gt;
Apply OS and OpenSSH security updates promptly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Monitor and log SSH access&lt;/strong&gt;&lt;br&gt;
Review &lt;code&gt;/var/log/auth.log&lt;/code&gt; (Debian/Ubuntu) or &lt;code&gt;/var/log/secure&lt;/code&gt; (RHEL-based) periodically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11. Consider two-factor authentication (2FA)&lt;/strong&gt;&lt;br&gt;
For servers handling sensitive databases on &lt;a href="https://www.eservers.uk/gpu-servers/" rel="noopener noreferrer"&gt;NVMe Dedicated Servers&lt;/a&gt;, adding 2FA via Google Authenticator PAM modules provides a second layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Combining SSH Hardening with Network-Level Protection
&lt;/h3&gt;

&lt;p&gt;SSH hardening works best alongside a dedicated hardware firewall. Hosting your infrastructure in a secure &lt;a href="https://www.eservers.uk/datacenter-london/" rel="noopener noreferrer"&gt;London Data Centre&lt;/a&gt; with edge-level DDoS mitigation reduces the volume of malicious traffic your SSH daemon ever has to deal with.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Read the original guide here: &lt;a href="https://www.eservers.uk/blogs/ssh-security-hardening-checklist/" rel="noopener noreferrer"&gt;https://www.eservers.uk/blogs/ssh-security-hardening-checklist/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>cybersecurity</category>
      <category>sysadmin</category>
      <category>devops</category>
    </item>
    <item>
      <title>IPv4 vs IPv6: A Complete Guide for UK Dedicated Servers</title>
      <dc:creator>olivia Millie</dc:creator>
      <pubDate>Fri, 14 Aug 2026 06:30:04 +0000</pubDate>
      <link>https://dev.to/e_servers/ipv4-vs-ipv6-a-complete-guide-for-uk-dedicated-servers-10io</link>
      <guid>https://dev.to/e_servers/ipv4-vs-ipv6-a-complete-guide-for-uk-dedicated-servers-10io</guid>
      <description>&lt;p&gt;Every server on the internet needs an address, known as an IP address. Right now there are two versions in use: IPv4 and IPv6. If you're managing &lt;a href="https://www.eservers.uk/bare-metal-servers/" rel="noopener noreferrer"&gt;Bare Metal Servers&lt;/a&gt;, the version you use affects hosting cost, email delivery, SEO, and customer accessibility. &lt;/p&gt;

&lt;h3&gt;
  
  
  What Is IPv4?
&lt;/h3&gt;

&lt;p&gt;IPv4 (Internet Protocol version 4) is the original addressing system, built in the early 1980s, using a 32-bit format. There are only about 4.3 billion possible addresses, which ran out years ago. This is why IPv4 addresses now have to be bought or leased, and this scarcity is reflected in hosting prices. Almost every dedicated server still ships with at least one IPv4 address because older software and corporate networks still depend on it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is IPv6?
&lt;/h3&gt;

&lt;p&gt;IPv6 uses a 128-bit format, meaning the number of possible addresses is enormous and exhaustion is not a concern. However, IPv6 adoption is still uneven, meaning some networks cannot reach IPv6-only servers. &lt;/p&gt;

&lt;h3&gt;
  
  
  Why the IP Version Matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Email deliverability:&lt;/strong&gt; A dedicated IPv4 address with a clean history is the standard for sending email reliably.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;SEO and geo-targeting:&lt;/strong&gt; Search engines use IPv4 ranges to determine where a server is physically based.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Network segmentation:&lt;/strong&gt; IPv6's huge address space makes it easier to assign internal addresses to containers or microservices without running out.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Do You Need IPv4, IPv6, or Both?
&lt;/h3&gt;

&lt;p&gt;For almost every UK business running a dedicated server, the answer is dual stack — both IPv4 and IPv6 running side by side. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Website or e-commerce store:&lt;/strong&gt; Keep IPv4 for compatibility and SEO, and add IPv6.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Email server:&lt;/strong&gt; IPv4 is essential to protect sender reputation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Network Matters
&lt;/h3&gt;

&lt;p&gt;An IP address is only as good as the network carrying it. Hosting your server in a premium &lt;a href="https://www.eservers.uk/datacenter-london/" rel="noopener noreferrer"&gt;London Data Centre&lt;/a&gt; with direct peering at major UK internet exchanges ensures traffic routes efficiently, reducing latency. To support high throughput, deploying &lt;a href="https://www.eservers.uk/gpu-servers/" rel="noopener noreferrer"&gt;NVMe Dedicated Servers&lt;/a&gt; alongside an optimized dual stack network guarantees maximum performance.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Read the original post: &lt;a href="https://www.eservers.uk/blogs/ipv4-vs-ipv6-dedicated-servers-uk/" rel="noopener noreferrer"&gt;https://www.eservers.uk/blogs/ipv4-vs-ipv6-dedicated-servers-uk/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>networking</category>
      <category>infrastructure</category>
      <category>webhosting</category>
      <category>sysadmin</category>
    </item>
  </channel>
</rss>
