IT Fundamentals Handbook
IT Fundamentals Handbook

IT Fundamentals Handbook

Hypervisors

Proxmox

Video Tutorial: https://www.youtube.com/watch?v=_u8qTN3cCnQ

Visit https://www.proxmox.com/en/ go to downloads page and download the "Virtual Environment" ISO.

Next you need a boot loader to properly load the ISO onto a flash drive. I prefer Rufus: https://rufus.ie/en/

Select flash drive device and ISO image and start.

Rufus Interface Configuration

Rufus 49.2256 Interface

Once image is finished…

  • Plug ethernet into soon to be Hypervisor Machine.
  • Attach flasher drive into Hypervisor Machine.
  • Boot to bios.
  • Change boot option #1 to the flash drive.
  • Reboot
  • Follow through with installation
  • Host name and static IP are of important note
  • Once installation finishes. Set machine to the side. You can now log in using the web UI

Log into web server by typing in URL: https://(static IP):8006

Login and select PVE and then Shell.

bash
# I like to install tailscale on the host that way I can remote/connect to into the machine outside of the network.
sudo apt update && sudo apt install -y curl
curl -fsSL https://tailscale.com/install.sh | sh

# This installs the latest version for your OS automatically.
# Start Tailscale service:
sudo tailscale up

You will see an authentication URL: "To authenticate, visit: https://login.tailscale.com/a/xxxxxx"

Copy the URL from SSH output and open it on your local browser.

Log in with your preferred identity provider (Google, GitHub, Microsoft, etc.)

Once authenticated, the machine will appear in your Tailscale admin dashboard.

Check Tailscale status:

bash
tailscale status

On the left hand side select local(PVE). Here ISO images can be uploaded and container images can be uploaded and downloaded.

Core Services

Tailscale

Connect to your remote server via SSH:

bash
ssh user@your_server_ip

Ensure you have sudo privileges on the target machine.

Install Tailscale

Update package list (Debian/Ubuntu):

bash
sudo apt update && sudo apt install -y curl

Download & install Tailscale:

bash
curl -fsSL https://tailscale.com/install.sh | sh

This installs the latest version for your OS automatically.

Authenticate Server

Start Tailscale service:

bash
sudo tailscale up

You will see an authentication URL: "To authenticate, visit: https://login.tailscale.com/a/xxxxxx"

Copy the URL from SSH output and open it on your local browser.

  • Log in with your preferred identity provider (Google, GitHub, Microsoft, etc.)
  • Once authenticated, the machine will appear in your Tailscale admin dashboard.

SSH

Install OpenSSH Server:

bash
sudo apt update
sudo apt upgrade
sudo apt install openssh-server -y

Verify it is running:

bash
sudo systemctl status ssh

Allow through the Firewall:

bash
sudo ufw allow ssh

Key-Based Authentication

Windows Video: https://www.youtube.com/watch?v=rf1J8XSEiO0

Windows

On your machine in command line:

bash
ssh-keygen -t ed25519

Note file save path location!

If you want login username & password enter it. If not just enter enter enter…

On host machine:

bash
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys

Paste contents of .pub file into nano authorized_keys

bash
Ctrl+o (Then Enter to Save)
Ctrl+x (To Exit)
bash
sudo nano /etc/ssh/sshd_config

Set password authentication to "no". Delete the # in its front.

bash
Ctrl+o
Ctrl+x
sudo systemctl restart ssh

Mac

Mac Guide: https://www.youtube.com/watch?v=vpk_1gldOAE&list=LL&index=2

On your machine in command line:

bash
ssh-keygen -t ed25519

Or

bash
ssh-keygen rsa -b 4096

Note file save path location!

If you want login username & password enter it. If not just enter enter enter…

On host machine:

bash
scp ~/.ssh/id_rsa.pub user@ipaddress:/home/user/.ssh/name_key.pub
cat ~/.ssh/name_key.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/*
nano ~/.ssh/authorized_keys

Paste contents of .pub file into nano authorized_keys

bash
Ctrl+o
Ctrl+x
sudo nano /etc/ssh/sshd_config

Set password authentication to "no". Delete the # in its front.

bash
Ctrl+o
Ctrl+x
sudo systemctl restart ssh

Docker

Documentation: https://docs.docker.com/engine/install

Docker Installation Guide

# Add Docker's official GPG key:

bash
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:

bash
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
Docker Repository Setup

Install the Docker packages:

bash
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo apt update
sudo systemctl status docker
sudo systemctl start docker
sudo docker run hello-world
Docker Success Verification

Docker Compose

Documentation: https://docs.docker.com/compose/install/

Docker Compose Installation

CURL

bash
sudo apt install ca-certificates curl

Htop

Depending on your Linux distribution, use the corresponding command below:

For Ubuntu, Debian, Linux Mint, or Kali:

bash
sudo apt update
sudo apt install htop

For CentOS, RHEL, or Rocky Linux:

bash
# First, enable the EPEL repository
sudo dnf install epel-release
# Then install htop
sudo dnf install htop

For Fedora:

bash
sudo dnf install htop

For Arch Linux:

bash
sudo pacman -S htop

How to use htop

Once installed, simply type htop in your terminal to launch it.

Quick Cheat Sheet for htop:

Once the interface is open, you can use these keyboard shortcuts to navigate:

Vim/Nano

Installation Steps

For Ubuntu, Debian, or Raspberry Pi OS:

bash
sudo apt update
sudo apt install nano vim

For CentOS, RHEL, or Rocky Linux:

bash
sudo dnf install nano vim-enhanced

For Arch Linux:

bash
sudo pacman -S nano vim

How to use them

Using Nano:

Using Vim:

Net-tools

Installation Steps

For Ubuntu, Debian, Linux Mint, or Kali:

bash
sudo apt update
sudo apt install net-tools

For CentOS, RHEL, Fedora, or Rocky Linux:

bash
sudo dnf install net-tools

For Arch Linux:

bash
sudo pacman -S net-tools

What's inside net-tools

Command What it does Modern Replacement (iproute2)
ifconfig View/Configure network interfaces ip addr
netstat -tuln See active ports and connections ss -tuln
route -n View the routing table ip route
arp -a View the ARP table (IP-to-MAC mapping) ip neigh

Quick Examples

  • Check your IP address:

    Simply type ifconfig. You'll see your hardware address (MAC), your local IP (inet), and data packet statistics

  • Check listening ports:

    sudo netstat -plnt. This shows which programs are listening on which ports (e.g., port 80 for HTTP)

  • Check your default gateway:

    route -n

  • Samba

    Step 1: Install Samba

    For Ubuntu/Debian:

    bash
    sudo apt update
    sudo apt install samba

    Step 2: Create the Shared Directory

    bash
    sudo mkdir -p /samba/public
    sudo chmod -R 0777 /samba/public
    sudo chown -R nobody:nogroup /samba/public

    Step 3: Configure the Samba Share

    bash
    sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
    sudo nano /etc/samba/smb.conf

    Add your share details at the bottom:

    config
    [PublicShare]
    comment = Samba on Ubuntu
    path = /samba/public
    browsable = yes
    read only = no
    guest ok = yes
    force user = nobody

    Step 4: Setup User Accounts (Optional but Recommended)

    If you want a private share instead of a guest one, you must create a Samba password for your user.

    bash
    sudo smbpasswd -a your_username
    sudo smbpasswd -e your_username

    Step 5: Restart Samba

    bash
    sudo systemctl restart smbd nmbd
    sudo ufw allow samba

    Step 6: How to Access the Share

    From Windows:

    1. Open File Explorer
    2. In the address bar, type: \\<YOUR_STATIC_IP>\PublicShare (e.g., \\192.168.38.120\PublicShare)
    3. Press Enter

    From Linux:

    1. Open your file manager (Nautilus, Thunar, etc.)
    2. Select "Other Locations" or "Connect to Server"
    3. Enter: smb://192.168.38.120/PublicShare

    Summary of smb.conf Parameters

    Parameter Meaning
    path The actual directory on your Linux disk
    browsable Whether the share shows up when browsing the network
    read only Set to no if you want to be able to upload/delete files
    guest ok Set to yes to allow access without a username/password

    Static IP

    METHOD 1: UBUNTU NETPLAN

    1. Find your interface name:
      bash
      ip -c a

      Or in some cases:

      bash
      ip addr

      Look for names like eth0 or enp0s3

    2. Note the IP route addresses:
      bash
      ip route
    3. Locate and edit the config file:
      bash
      cd /etc/netplan
      ls
      sudo nano 50-cloud-init.yaml
    4. Insert the configuration:

      "addresses:" will be the static IP. "via" will be the IP route

      Netplan Configuration Example
    5. Apply changes:
      bash
      sudo netplan apply
      ip -c a

      Verify the change with the last command.

    METHOD 2: DEBIAN INTERFACES

    1. Find interface and route:
      bash
      ip -c a
      ip r
    2. Locate the config file:
      bash
      sudo nano /etc/network/interfaces
    3. Apply configuration:
      Debian Interfaces Configuration
    4. Restart service and verify:
      bash
      sudo systemctl restart networking.service
      ip -c a

    Windows

    1. Go to Control Panel.
    2. Select Network and Internet.
    3. Go to Network and Sharing Center.
    4. Click on your active connection (e.g., Connections: Ethernet).
    5. Select Properties.
    6. Click on Internet Protocol Version 4 (TCP/IPv4) and select Properties.
    7. Here a static IP, Subnet mask, and Default gateway can be manually set.

    DNS

    How to put an HTML website online

    Useful Links:

    Part 1: Hosting Your Website for Free (GitHub Pages)

    GitHub Pages is a free service that hosts your static files directly from a GitHub repository.

    1. Create a GitHub Account: Go to github.com and sign up or log in
    2. Create a New Repository:
      • Click your profile icon (top right) > Your repositories > New
      • Give it a name (e.g., my-website) and ensure it is set to Public
    3. Upload Your Files:
      • Click "uploading an existing file".
      • Drag and drop your index.html (and any CSS/Images) into the box.
      • Scroll down and click Commit changes.
    4. Enable GitHub Pages:
      • Go to Settings (top tab) > Pages (left sidebar).
      • Under Build and deployment, ensure "Deploy from a branch" is selected and the branch is set to main.
      • Click Save. After a minute, you'll see a link like: https://your-username.github.io/my-website/.

    Part 2: Using a Custom Domain (Namecheap)

    If you want a professional address (like www.yourname.com), you need to point your domain to GitHub's servers.

    1. Buy a Domain: Purchase one from Namecheap.
    2. Configure GitHub:
      • In your GitHub Repo Settings > Pages, scroll to Custom domain.
      • Type your domain (e.g., yourname.com) and click Save.
    3. Configure Namecheap (DNS Records):
      • Log in to Namecheap > Domain List > Manage > Advanced DNS.
      • Add four A Records pointing to GitHub's IP addresses:
        • 185.199.108.153
        • 185.199.109.153
        • 185.199.110.153
        • 185.199.111.153
      • Add a CNAME Record:
        • Host: www
        • Value: your-username.github.io
    4. Link Domain in GitHub:
      • Return to your GitHub repository Settings > Pages.
      • Under Custom domain, type your new domain (e.g., example.com) and click Save.
    5. Enable Security (HTTPS):
      • Once the domain is verified, check the Enforce HTTPS box.

    Windows Server

    Section 1: Initial Server Setup & Role Installation

    Before beginning, ensure your server has a static IP address configured (e.g., 192.168.49.5)

    1. Open Server Manager: Click Manage > Add Roles and Features
    2. Select Installation Type: Choose Role-based or feature-based installation and select your server
    3. Select Server Roles: Check the boxes for:
      • Active Directory Domain Services (AD DS)
      • DHCP Server
      • DNS Server
      • Note: Click "Add Features" whenever prompted for management tools.
    4. Install: Follow the prompts and click Install
    5. Promote to Domain Controller: Once installed, click the notification flag and select Promote this server to a domain controller
    6. Deployment: Select Add a new forest and enter your Root domain name (e.g., mylab.local)
    7. Configuration: Set a Directory Services Restore Mode (DSRM) password and complete the wizard
    8. The server will automatically reboot after installation.

    Section 2: DNS - Configuring Lookup Zones

    Active Directory creates Forward Lookup Zones automatically, but you must manually configure the Reverse Lookup Zone.

    Configuring Reverse Lookup Zones:

    1. Open DNS Manager: Go to Tools > DNS
    2. Create New Zone: Right-click Reverse Lookup Zones > New Zone
    3. Select Primary Zone and check "Store the zone in Active Directory"
    4. Replication Scope: Select "To all DNS servers running on domain controllers in this domain"
    5. Select IPv4 Reverse Lookup Zone
    6. Network ID: Enter the first three octets of your network (e.g., 192.168.49).
    7. Dynamic Updates: Choose Allow only secure dynamic updates
    8. Add Pointer (PTR) Record:
      • Right-click your new zone > New Pointer (PTR)
      • Browse to find your Host (A) record in the Forward Lookup Zone to map the IP to the Hostname
    9. Final DNS Tweak: In your Ethernet adapter settings, change the Preferred DNS server from 127.0.0.1 to the server's actual static IP (192.168.49.5)

    Section 3: DHCP - Post-Install & Scope Configuration

    1. Post-Deployment: Click the notification flag in Server Manager and select Complete DHCP configuration
      • This creates security groups and authorizes the server in Active Directory
    2. Open DHCP Manager: Go to Tools > DHCP
    3. Create New Scope: Right-click IPv4 > New Scope
    4. Name: Provide a name (e.g., Scope1)
    5. IP Range: Enter Start (e.g., .20) and End (e.g., .250) addresses
    6. Lease Duration: Set to desired time (e.g., 8 hours)
    7. Configure DHCP Options:
      • Router (Default Gateway): Add your gateway IP (e.g., 192.168.49.1)
      • DNS Server: Ensure your Domain Controller IP is listed
    8. Activate: Select Yes, I want to activate this scope now

    Section 4: Joining a Client to the Domain

    1. Client Network Check: On a Windows 10 PC, ensure the adapter is set to "Obtain IP address automatically"
    2. Run ipconfig /all to verify it received an IP from the new DHCP server
    3. Join Domain:
      • Go to Settings > System > About > Join a domain
      • Enter the domain name (mylab.local) and provide Domain Administrator credentials
      • Restart the client computer
    4. Verify: In Server Manager, go to Active Directory Users and Computers > Computers to see the newly joined client listed

    Network Time Protocol (NTP) Server

    NTP time source parameters deployment mapping instructions pending.

    Central Logging Server

    Central log server ingestion templates and logging agents mapping pending.

    Containerization

    Kubernetes Cluster

    Minikube (Single-node)

    Single-node cluster tracking definitions pending setup.

    Kubeadm (Multi-node)

    Bare-metal infrastructure provisioning guides pending layout.

    MicroK8s

    Lightweight production execution parameters pending deployment mapping.

    Automation

    Configuration management tool

    Ansible playbooks blueprints, Puppet manifests, and Chef configurations configurations pending.

    Scripting

    Administrative script repositories blocks for Bash and PowerShell environments pending repository upload.

    Security Hardening

    Firewall configuration

    Boundary logic state checking parameters matching iptables/UFW pending.

    Intrusion Detection/Prevention System (IDS/IPS)

    Snort and Suricata rules definition matching engine parameters configuration pending mapping.

    Vulnerability scanning

    Nessus assessment metrics tracking charts pending framework deployment.

    Networking

    VLAN separation maps and kernel router configurations configurations metrics tracking profiles pending initialization.

    Alerting

    Threshold limit breach tracking metrics and monitoring routes configurations details pending.

    SQL

    Section mapping metrics and command structures pending.

    NGINX

    Section detailing reverse proxy rules pending configuration.

    Bash

    Section referencing core shell execution methods pending.

    PowerShell

    Section tracking automation modules pending mapping.

    Vault Warden

    Section defining deployment parameters pending installation.

    Home assistant

    Section referencing automation device rules pending interface integration.

    Plex

    Section targeting directory volume mounts pending storage architecture setup.

    RAID

    Section analyzing redundancy properties combinations pending calculations.

    Pi-Hole

    Section targeting DNS local blacklists pending tracking definitions.

    HTML

    Section summarizing design standards pending syntax components blocks layout.

    GPG

    Section referencing key architecture validations pending templates definition.

    Backups

    Section referencing environment replication strategies pending workflow metrics tracking.

    MAC addresses

    Section tracking hardware identifier lists details records allocation sheets pending.

    TROUBLESHOOTS

    Section listing environment remediation options logs data checklists pending.

    COMMAND DICTIONARY

    Section glossary tracking shell commands usage syntax rules matrices pending.