<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Sysadmin on My IT Journal</title>
    <link>https://my-it-blog.netlify.app/tags/sysadmin/</link>
    <description>Recent content in Sysadmin on My IT Journal</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 17 Jun 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://my-it-blog.netlify.app/tags/sysadmin/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Linux Firewall &amp; DMX Networking Lab</title>
      <link>https://my-it-blog.netlify.app/posts/dmz-networking/</link>
      <pubDate>Wed, 17 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/dmz-networking/</guid>
      <description>&lt;h2 id=&#34;objective&#34;&gt;Objective&lt;/h2&gt;
&lt;p&gt;The lab focuses on troubleshooting real-world network failures by systematically isolating issues at each layer of the network stack.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;network-topology&#34;&gt;Network Topology&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;LAN (User Network)		DMZ (Service Network)
192.168.10.0/24			192.168.20.0/24
__________________		_____________________

Client VM			Server VM
192.168.10.101			192.168.20.10
	|				|
	|				|
	________ Firewall VM ___________
		(Router + Firewall)
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id=&#34;issue-1-no-connectivity-between-networks&#34;&gt;Issue 1: No connectivity between networks&lt;/h2&gt;
&lt;p&gt;Failure to connect to the webserver&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;issue&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/dmz-networking/issue.png&#34;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;troubleshooting-workflow&#34;&gt;Troubleshooting Workflow&lt;/h2&gt;
&lt;h3 id=&#34;step-1---verify-the-service-exists&#34;&gt;Step 1 - Verify the service exists&lt;/h3&gt;
&lt;p&gt;From Server:&lt;/p&gt;</description>
    </item>
    <item>
      <title>DMZ Network Lab - Firewall, Routing, and nftables</title>
      <link>https://my-it-blog.netlify.app/posts/dmz/</link>
      <pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/dmz/</guid>
      <description>&lt;h2 id=&#34;objective&#34;&gt;Objective&lt;/h2&gt;
&lt;p&gt;The goal of this lab is to design and implement a basic DMZ (Demilitarized Zone) network using Linux virtual machines, understand routing between network segments, and apply nftables as a stateful firewall.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;network-topology&#34;&gt;Network Topology&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;LAN (User Network)		DMZ (Service Network)
192.168.10.0/24			192.168.20.0/24
__________________		_____________________

Client VM			Server VM
192.168.10.101			192.168.20.10
	|				|
	|				|
	________ Firewall VM ___________
		(Router + Firewall)
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id=&#34;vm--routing-configuration&#34;&gt;VM &amp;amp; Routing Configuration&lt;/h2&gt;
&lt;h3 id=&#34;client-vm&#34;&gt;Client VM&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;client-config&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/dmz/client-conf.png&#34;&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo netplan try
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo netplan apply
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;firewall-vm-core-router&#34;&gt;Firewall VM (Core Router)&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;firewall-config&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/dmz/frw-conf.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux nftables Firewall Fundamentals Lab</title>
      <link>https://my-it-blog.netlify.app/posts/nftables/</link>
      <pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/nftables/</guid>
      <description>&lt;h2 id=&#34;objective&#34;&gt;Objective&lt;/h2&gt;
&lt;hr&gt;
&lt;h2 id=&#34;lab-environment&#34;&gt;Lab Environment&lt;/h2&gt;
&lt;p&gt;Client VM 1 - 192.168.10.101
Client VM 2 - 192.168.10.102
Server VM - 192.168.10.10&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;server-setup&#34;&gt;Server Setup&lt;/h2&gt;
&lt;h3 id=&#34;step-1---run-web-server&#34;&gt;Step 1 - Run web server&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python3 -m http.server &lt;span style=&#34;color:#ae81ff&#34;&gt;8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ss -tln | grep :8080
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;web-server&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/nftables/web-server.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;step-2---base-firewall-configuration&#34;&gt;Step 2 - Base firewall configuration&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo nft add table inet filter
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo nft add chain inet filter input &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;{ type filter hook input priority 0; policy drop; }&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo nft add rule inet filter input iif lo accept
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo nft add rule inet filter input ct state established,related accept
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;ruleset&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/nftables/basenft_ruleset.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>LUKS Full Disk Encryption Lab (Attack &amp; Defense)</title>
      <link>https://my-it-blog.netlify.app/posts/luks-encryption-lab/</link>
      <pubDate>Fri, 12 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/luks-encryption-lab/</guid>
      <description>&lt;h3 id=&#34;objective&#34;&gt;Objective&lt;/h3&gt;
&lt;p&gt;This lab demonstrates how Linux Full Disk Encryption (LUKS) works and what it protects against.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;part-1---attack-scenario-unencrypted-disk&#34;&gt;Part 1 - Attack Scenario (Unencrypted Disk)&lt;/h2&gt;
&lt;h3 id=&#34;step-1---identify-disk&#34;&gt;Step 1 - Identify disk&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsblk
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step-2---create-filesystem-no-ecnryption&#34;&gt;Step 2 - Create filesystem (no ecnryption)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo mkfs.ext4 /dev/sdc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;sdc&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/luks-encryption-lab/sdc.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;step-3---mount-disk&#34;&gt;Step 3 - Mount disk&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo mkdir /mnt/test
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo mount /dev/sdc /mnt/test
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;mount_sdc&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/luks-encryption-lab/mount_sdc.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;step-4---add-sensitive-data&#34;&gt;Step 4 - Add sensitive data&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sensitive data&amp;#34;&lt;/span&gt; | sudo tee /mount/test/secret.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;attack-simulation&#34;&gt;ATTACK SIMULATION&lt;/h2&gt;
&lt;h3 id=&#34;step-1---direct-mount-attempt&#34;&gt;Step 1 - Direct mount attempt&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo mkdir /mnt/attack; sudo mount /dev/sdc /mnt/attack
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ls -l /mnt/attack
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cat /mnt/attack/secret.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;exposed_data&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/luks-encryption-lab/attack1_exposed_data.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>GRUB Security Lab: Boot-Time Privilege Escalation &amp; Hardening</title>
      <link>https://my-it-blog.netlify.app/posts/grub-security-lab/</link>
      <pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/grub-security-lab/</guid>
      <description>&lt;h2 id=&#34;attack-simulation-gaining-root-access-via-grub&#34;&gt;Attack Simulation: Gaining Root Access via GRUB&lt;/h2&gt;
&lt;h3 id=&#34;objective&#34;&gt;Objective&lt;/h3&gt;
&lt;p&gt;Demonstrate how physical access to a Linux system can be abused to gain root privileges by modifying GRUB boot parameters.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;OS: Linux Ubuntu&lt;/li&gt;
&lt;li&gt;Access to GRUB menu during boot&lt;/li&gt;
&lt;li&gt;No GRUB password protection enabled&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;attack-steps&#34;&gt;Attack Steps&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Reboot the system and access the GRUB menu.&lt;/li&gt;
&lt;li&gt;Select the default Linux entry and press e to edit boot parameters.&lt;/li&gt;
&lt;li&gt;Locate the line starting with: linux /boot/vmlinuz-&amp;hellip;&lt;/li&gt;
&lt;li&gt;Modify the line&lt;/li&gt;
&lt;li&gt;Boot the modified entry using Ctrl + X&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;grub_systemd&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/grub-security-lab/grub_systemd.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>USB Automounting with systemd</title>
      <link>https://my-it-blog.netlify.app/posts/usb-automounting/</link>
      <pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/usb-automounting/</guid>
      <description>&lt;h2 id=&#34;objective&#34;&gt;Objective&lt;/h2&gt;
&lt;p&gt;Setting up automatic USB drive mounting on a Linux server using systemd mount and automount units&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;environment&#34;&gt;Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;OS: Ubuntu&lt;/li&gt;
&lt;li&gt;Tools: system, USB drive&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;step-1---find-partition-uuid&#34;&gt;Step 1 - Find Partition UUID&lt;/h2&gt;
&lt;p&gt;Prerequisite: Plugin USB drive&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;blkid /dev/sdb1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;sdb1&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/usb-automounting/sdb1.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;Note: UUID and filesystem type&lt;/p&gt;
&lt;h2 id=&#34;step-2---create-the-mount-unit&#34;&gt;Step 2 - Create the Mount Unit&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo nano /etc/systemd/system/mnt-usb.mount
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;mnt-usb.mount&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/usb-automounting/mnt-usb_mount.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;step-3---create-automount-unit&#34;&gt;Step 3 - Create Automount Unit&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo nano /etc/systemd/system/mnt-usb.automount
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;mnt-usb.automount&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/usb-automounting/mnt-usb_automount.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;step-4---enable-and-start&#34;&gt;Step 4 - Enable and Start&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo systemctl enable mnt-usb.automount
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo systemctl start mnt-usb.automount
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;step-5---verify-and-test&#34;&gt;Step 5 - Verify and test&lt;/h2&gt;
&lt;p&gt;Check the automount is active:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Centralized rsyslog server</title>
      <link>https://my-it-blog.netlify.app/posts/rsyslog-centralized-logging/</link>
      <pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/rsyslog-centralized-logging/</guid>
      <description>&lt;h2 id=&#34;objective&#34;&gt;Objective&lt;/h2&gt;
&lt;p&gt;Build a centralized logging environment where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SERVER receives logs from client1&lt;/li&gt;
&lt;li&gt;SERVER receives logs from client2&lt;/li&gt;
&lt;li&gt;Logs are stored in separate files:
&lt;ul&gt;
&lt;li&gt;/var/log/client1.log&lt;/li&gt;
&lt;li&gt;/var/log/client2.log&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;network-layout&#34;&gt;Network Layout&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Host&lt;/th&gt;
          &lt;th&gt;IP&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;server&lt;/td&gt;
          &lt;td&gt;192.168.10.10&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;client1&lt;/td&gt;
          &lt;td&gt;192.168.10.101&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;client2&lt;/td&gt;
          &lt;td&gt;192.168.10.102&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;environment&#34;&gt;Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;OS: Ubuntu&lt;/li&gt;
&lt;li&gt;Tools: rsyslog&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;part-1---configure-the-rsyslog-server&#34;&gt;Part 1 - Configure the rsyslog Server&lt;/h2&gt;
&lt;h3 id=&#34;verify-rsyslog&#34;&gt;Verify rsyslog&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo systemctl status rsyslog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;rsyslog_status&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/rsyslog-centralized-logging/server_rsyslog_status.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;enable-udp-syslog-reception-and-restart-the-rsyslog-service&#34;&gt;Enable UDP Syslog reception and restart the rsyslog service&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo nano /etc/rsyslog.conf
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo systemctl restart rsyslog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;udp_enabled&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/rsyslog-centralized-logging/udp_enabled.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>DNS Lab - Dnsmasq, Client resolver, Caching</title>
      <link>https://my-it-blog.netlify.app/posts/dns-server/</link>
      <pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/dns-server/</guid>
      <description>&lt;h1 id=&#34;-dns-lab&#34;&gt;🧪 DNS Lab&lt;/h1&gt;
&lt;h2 id=&#34;-objective&#34;&gt;📌 Objective&lt;/h2&gt;
&lt;p&gt;Understand DNS from a systems perpective&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-environment&#34;&gt;⚙️ Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Virtualization: VirtualBox&lt;/li&gt;
&lt;li&gt;OS: ( 1 DNS Server VM + 1 Client VM)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-lab-network-topology&#34;&gt;🛠️ Lab Network Topology&lt;/h2&gt;
&lt;h3 id=&#34;-phase-1--direct-dns-no-cache&#34;&gt;🧩 Phase 1 — Direct DNS (No Cache)&lt;/h3&gt;
&lt;p&gt;Client VM -&amp;gt; dnsmasq (192.168.10.10)&lt;/p&gt;
&lt;p&gt;Used for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Break #1 (Wrong DNS Server)&lt;/li&gt;
&lt;li&gt;Break #2 (Wrong DNS Record)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&#34;-phase-2--direct-dns-no-cache&#34;&gt;🧩 Phase 2 — Direct DNS (No Cache)&lt;/h3&gt;
&lt;p&gt;Clint VM -&amp;gt; systemd-resolved (127.0.0.53) [CACHE] -&amp;gt; dnsmasq (192.168.10.10) [DNS SERVER]&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inter-Interface Packet Forwarding Failure Investigation</title>
      <link>https://my-it-blog.netlify.app/posts/tcp-ip-forwarding-failure/</link>
      <pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/tcp-ip-forwarding-failure/</guid>
      <description>&lt;h1 id=&#34;-inter-interface-packet-forwarding-failure-investigation&#34;&gt;🧪 Inter-Interface Packet Forwarding Failure Investigation&lt;/h1&gt;
&lt;h2 id=&#34;-objective&#34;&gt;📌 Objective&lt;/h2&gt;
&lt;p&gt;Diagnose why a client cannot reach the internet&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-environment&#34;&gt;⚙️ Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Virtualization: VirtualBox&lt;/li&gt;
&lt;li&gt;OS: ( 1 DHCP Server VM + 1 Client VM)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-lab-network-topology&#34;&gt;🛠️ Lab Network Topology&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Server (DHCP)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IP: 192.168.10.10&lt;/li&gt;
&lt;li&gt;Interfaces:
&lt;ul&gt;
&lt;li&gt;enp0s8 -&amp;gt; LAN&lt;/li&gt;
&lt;li&gt;enp0s3 -&amp;gt; NAT&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Client VM&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IP: 192.168.10.100&lt;/li&gt;
&lt;li&gt;Interface: enp0s8&lt;/li&gt;
&lt;li&gt;Gateway: 192.168.10.10&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-incident-statement&#34;&gt;🚨 Incident Statement&lt;/h2&gt;
&lt;p&gt;Client cannot access the internet&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-phase-1--verify-the-problem&#34;&gt;🔍 PHASE 1 — Verify the Problem&lt;/h2&gt;
&lt;p&gt;Run on Client VM:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Process Management &amp; Resource Control Lab</title>
      <link>https://my-it-blog.netlify.app/posts/process-management--resource-control/</link>
      <pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/process-management--resource-control/</guid>
      <description>&lt;h1 id=&#34;-process-management--resource-control-lab&#34;&gt;🧪 Process Management &amp;amp; Resource Control Lab&lt;/h1&gt;
&lt;h2 id=&#34;-objective&#34;&gt;📌 Objective&lt;/h2&gt;
&lt;p&gt;Simulate and troubleshoot a real-world system slowdown caused by CPU saturation and memory exhaustion.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-environment&#34;&gt;⚙️ Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Virtualization: VirtualBox&lt;/li&gt;
&lt;li&gt;OS: Ubuntu Server&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-lab-setup&#34;&gt;🛠️ Lab Setup&lt;/h2&gt;
&lt;h3 id=&#34;step-1---create-cpu-load-script&#34;&gt;Step 1 - Create CPU Load Script&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nano cpu_hog.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chmod +x cpu_hog.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;cpu_script&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/process-management--resource-control/cpu_heavy_script.png&#34;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;step-2---create-memory-load-script-python&#34;&gt;Step 2 - Create Memory Load Script (Python)&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nano mem_hog.py
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chmod +x mem_hog.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;py_script&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/process-management--resource-control/mem_heavy_py_script.png&#34;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-incident-simulation&#34;&gt;🚨 Incident Simulation&lt;/h2&gt;
&lt;h3 id=&#34;step-1---check-the-system-load-baseline&#34;&gt;Step 1 - Check the System Load Baseline&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;uptime
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;Baseline&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/process-management--resource-control/uptime_baseline.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>DHCP Lab: Setup, Failure Scenarios &amp; Debugging Workflow</title>
      <link>https://my-it-blog.netlify.app/posts/dhcp-server/</link>
      <pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/dhcp-server/</guid>
      <description>&lt;h1 id=&#34;-dhcp-lab&#34;&gt;🧪 DHCP Lab&lt;/h1&gt;
&lt;h2 id=&#34;-objective&#34;&gt;📌 Objective&lt;/h2&gt;
&lt;p&gt;Understand how DHCP works in real network environment and how to debug common failure scenarios using a structured top-to-bottom approach.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-environment&#34;&gt;⚙️ Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Virtualization: VirtualBox&lt;/li&gt;
&lt;li&gt;OS: Ubuntu Server (1 DHCP Server VM &amp;amp; 2 Client VMs)&lt;/li&gt;
&lt;li&gt;Network mode: Internal Network + NAT (enp0s3 ignored for DHCP lab)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-network-setup&#34;&gt;🛠️ Network Setup&lt;/h2&gt;
&lt;h3 id=&#34;interfaces&#34;&gt;Interfaces&lt;/h3&gt;
&lt;p&gt;DHCP Server&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;enp0s8 -&amp;gt; 192.168.10.10/24 (Lab network)&lt;/li&gt;
&lt;li&gt;enp0s3 -&amp;gt; NAT&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Clients&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;enp0s8 -&amp;gt; DHCP assigned IPs&lt;/li&gt;
&lt;li&gt;enp0s3 -&amp;gt; NAT (not used)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&#34;-network-configuration-netplan&#34;&gt;⚙️ Network Configuration (Netplan)&lt;/h3&gt;
&lt;p&gt;Both server and clients are configured using Netplan, which defines interface behavior before DHCP starts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Basic Network Setup &amp; Connectivity</title>
      <link>https://my-it-blog.netlify.app/posts/basic-network-setup-connectivity/</link>
      <pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/basic-network-setup-connectivity/</guid>
      <description>&lt;h1 id=&#34;-basic-network-setup--connectivity-lab&#34;&gt;🧪 Basic Network Setup &amp;amp; Connectivity Lab&lt;/h1&gt;
&lt;h2 id=&#34;-objective&#34;&gt;📌 Objective&lt;/h2&gt;
&lt;p&gt;Understand how IP addressing, subnetting, and basic connectivity work in a controlled virtual environment.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-environment&#34;&gt;⚙️ Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Virtualization: VirtualBox&lt;/li&gt;
&lt;li&gt;OS: Ubuntu Server (2 VMs)&lt;/li&gt;
&lt;li&gt;Network mode: Internal Network + NAT&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;VMs&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;VM&lt;/th&gt;
          &lt;th&gt;IP Address&lt;/th&gt;
          &lt;th&gt;Role&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;VM1&lt;/td&gt;
          &lt;td&gt;192.168.10.10/24&lt;/td&gt;
          &lt;td&gt;Client&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;VM2&lt;/td&gt;
          &lt;td&gt;192.168.10.20/24&lt;/td&gt;
          &lt;td&gt;Server&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-setup&#34;&gt;🛠️ Setup&lt;/h2&gt;
&lt;h3 id=&#34;step-1---create-virtual-machines&#34;&gt;Step 1 - Create Virtual Machines&lt;/h3&gt;
&lt;p&gt;Create two Linux virtual machines:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;server_01&lt;/li&gt;
&lt;li&gt;server_02&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Recommended specs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 CPU&lt;/li&gt;
&lt;li&gt;1-2 GB RAM&lt;/li&gt;
&lt;li&gt;10+ GB disk&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&#34;step-2---configure-network&#34;&gt;Step 2 - Configure Network&lt;/h3&gt;
&lt;p&gt;Both VMs must use the same &lt;strong&gt;Internal Network&lt;/strong&gt;
This ensures both machines are on the same isolated Layer 2 network.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux Networking</title>
      <link>https://my-it-blog.netlify.app/posts/network--service-connectivity/</link>
      <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/network--service-connectivity/</guid>
      <description>&lt;h1 id=&#34;-linux-networking-and-service-exposure-lab&#34;&gt;🧪 Linux Networking and Service Exposure Lab&lt;/h1&gt;
&lt;h2 id=&#34;-objective&#34;&gt;📌 Objective&lt;/h2&gt;
&lt;p&gt;This lab simulates real-world Linux networking issues and teaches how to troubleshoot:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Service availability&lt;/li&gt;
&lt;li&gt;Port listening&lt;/li&gt;
&lt;li&gt;Firewall behavior (UFW)&lt;/li&gt;
&lt;li&gt;Binding (&amp;rsquo;localhost&amp;rsquo; vs external access)&lt;/li&gt;
&lt;li&gt;Network-layer debugging&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-environment&#34;&gt;⚙️ Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;OS: Ubuntu (VM + Bridged Adapter)&lt;/li&gt;
&lt;li&gt;Service: Nginx&lt;/li&gt;
&lt;li&gt;Tools: ss, curl, ufw, systemctl&lt;/li&gt;
&lt;li&gt;Host machine for external testing (Powershell)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-stage-1&#34;&gt;🟢 Stage 1&lt;/h2&gt;
&lt;p&gt;Verify service:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl status nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Expected outcome:
Active (running)&lt;/p&gt;
&lt;p&gt;Check listening ports:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux Permissions &amp; Access Control</title>
      <link>https://my-it-blog.netlify.app/posts/linux-permission-access-control/</link>
      <pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/linux-permission-access-control/</guid>
      <description>&lt;h1 id=&#34;-linux-permission-and-access-control-lab&#34;&gt;🧪 Linux Permission and Access Control Lab&lt;/h1&gt;
&lt;h2 id=&#34;-objective&#34;&gt;📌 Objective&lt;/h2&gt;
&lt;p&gt;To test how Linux file permissions and access control mechanisms work in a multi-user environment.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-environment&#34;&gt;⚙️ Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;OS: Ubuntu&lt;/li&gt;
&lt;li&gt;Tools: chmod, chown, ls, groups, sudo&lt;/li&gt;
&lt;li&gt;Users: alice, bob, admin&lt;/li&gt;
&lt;li&gt;Groups: devs, managers&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-setup&#34;&gt;🛠️ Setup&lt;/h2&gt;
&lt;h3 id=&#34;1-create-users&#34;&gt;1. Create Users&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo adduser alice
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo adduser bob
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo adduser admin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h3 id=&#34;2-create-groups&#34;&gt;2. Create Groups&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo groupadd devs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo groupadd managers
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Assign users:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo usermod -aG devs alice
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo usermod -aG managers bob
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo usermod -aG devs admin
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo usermod -aG managers admin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;Add_Groups&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/linux-permission-access-control/add_groups.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cron Job Automation</title>
      <link>https://my-it-blog.netlify.app/posts/cron-job-automation/</link>
      <pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/cron-job-automation/</guid>
      <description>&lt;h1 id=&#34;-cron-job-automation-lab&#34;&gt;🧪 Cron Job Automation Lab&lt;/h1&gt;
&lt;h2 id=&#34;-objective&#34;&gt;📌 Objective&lt;/h2&gt;
&lt;p&gt;To build a scheduled automation script, observe its behavior, and learn how to debug failures.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-part-1---script-setup&#34;&gt;⚙️ Part 1 - Script Setup&lt;/h2&gt;
&lt;p&gt;Create a working directory:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p ~/cronlab
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd ~/cronlab
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Create the script:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nano backup.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DATE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;date +&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%Y-%m-%d_%H-%M-%S&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LOG_FILE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$HOME&lt;span style=&#34;color:#e6db74&#34;&gt;/cronlab/backup.log&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;SOURCE&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$HOME&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;BACKUP_DIR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$HOME&lt;span style=&#34;color:#e6db74&#34;&gt;/cronlab/backups&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;exec &amp;gt;&amp;gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$LOG_FILE&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt; 2&amp;gt;&amp;amp;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;--- RUN &lt;/span&gt;$DATE&lt;span style=&#34;color:#e6db74&#34;&gt; ---&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$BACKUP_DIR&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rsync -a --exclude&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cronlab&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$SOURCE&lt;span style=&#34;color:#e6db74&#34;&gt;/&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;$BACKUP_DIR&lt;span style=&#34;color:#e6db74&#34;&gt;/home-backup-&lt;/span&gt;$DATE&lt;span style=&#34;color:#e6db74&#34;&gt;/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Backup finished&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;Script&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/cron-job-automation/script.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Systemd Restart Behavior: Why Restart=on-failure Didn&#39;t Work</title>
      <link>https://my-it-blog.netlify.app/posts/systemd-restart-behavior/</link>
      <pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/systemd-restart-behavior/</guid>
      <description>&lt;h1 id=&#34;-systemd-service-restart-behavior-lab&#34;&gt;🧪 Systemd Service Restart Behavior Lab&lt;/h1&gt;
&lt;h2 id=&#34;-objective&#34;&gt;📌 Objective&lt;/h2&gt;
&lt;p&gt;To test and understand how &lt;code&gt;systemd&lt;/code&gt; handles automatic service restarts using the &lt;code&gt;Restart=on-failure&lt;/code&gt; policy.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-environment&#34;&gt;⚙️ Environment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;OS: Ubuntu (systemd-based)&lt;/li&gt;
&lt;li&gt;Tools: systemctl, journalctl, bash&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-setup&#34;&gt;🛠️ Setup&lt;/h2&gt;
&lt;h3 id=&#34;1-create-a-test-script&#34;&gt;1. Create a test script&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo nano /usr/local/bin/labtest.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/bin/bash&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; true; &lt;span style=&#34;color:#66d9ef&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	echo &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;lab service is alive: &lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;date&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	sleep &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Make it executable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo chmod +x /usr/local/bin/labtest.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h3 id=&#34;2-create-a-system-service&#34;&gt;2. Create a system service&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo nano /etc/systemd/system/labtest.service
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Unit&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Description&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Lab test service
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;After&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;network.target
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Service&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ExecStart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr/local/bin/labtest.sh
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Restart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;on-failure
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;StandardOutput&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;journal
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Install&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WantedBy&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;multi-user.target
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h3 id=&#34;step-3--start-the-service&#34;&gt;Step 3 — Start the service&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo systemctl daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo systemctl enable labtest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo systemctl start labtest
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl status labtest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt=&#34;Status&#34; loading=&#34;lazy&#34; src=&#34;https://my-it-blog.netlify.app/posts/systemd-restart-behavior/labtest-status.png&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grub2 Boot Recovery: Restoring a Server at 2AM</title>
      <link>https://my-it-blog.netlify.app/posts/grub-recovery/</link>
      <pubDate>Thu, 09 Apr 2026 16:49:31 +0300</pubDate>
      <guid>https://my-it-blog.netlify.app/posts/grub-recovery/</guid>
      <description>A step-by-step account of recovering a production server that dropped into the GRUB2 rescue shell at 2AM, resolved within SLA.</description>
    </item>
  </channel>
</rss>
