<?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: Tan</title>
    <description>The latest articles on DEV Community by Tan (@tan1193).</description>
    <link>https://dev.to/tan1193</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F306955%2F5c7b9579-146a-4f3a-83f6-f1c908ef5cd2.png</url>
      <title>DEV Community: Tan</title>
      <link>https://dev.to/tan1193</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tan1193"/>
    <language>en</language>
    <item>
      <title>From localhost:3000 to the World: Deploying Your Dockerized Website with Cloudflared + Traefik</title>
      <dc:creator>Tan</dc:creator>
      <pubDate>Wed, 09 Jul 2025 17:52:16 +0000</pubDate>
      <link>https://dev.to/tan1193/from-localhost3000-to-the-world-deploying-your-dockerized-website-with-cloudflared-traefik-1g12</link>
      <guid>https://dev.to/tan1193/from-localhost3000-to-the-world-deploying-your-dockerized-website-with-cloudflared-traefik-1g12</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkdzbi30xjr03w9qi7m4.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkdzbi30xjr03w9qi7m4.jpeg" alt="localhost meme" width="421" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“When you send your localhost link to a friend...”&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;You’ve built an amazing website. It's sleek, fast, and maybe even running on &lt;code&gt;localhost:3000&lt;/code&gt;. You're proud of it. So you share it with a friend… and they hit you with:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Bro, I can't open &lt;code&gt;localhost:3000&lt;/code&gt;."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yep, we've all been that donkey.&lt;/p&gt;

&lt;p&gt;Let’s fix that by taking your Dockerized app, pushing it to Docker Hub, then deploying it with &lt;strong&gt;Traefik&lt;/strong&gt; and &lt;strong&gt;Cloudflared&lt;/strong&gt;—securely accessible over the web.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;✅ Prerequisites: Your app is Dockerized and you’ve already set up Cloudflared tunnels and domain.&lt;br&gt;&lt;br&gt;
👉 Not done yet? Check this guide first: &lt;a href="https://dev.to/tan1193/how-to-set-up-a-cloudflared-tunnel-on-your-homelab-27ao"&gt;How to Set Up Cloudflared Tunnel&lt;/a&gt;&lt;br&gt;
💡 Note: You’ll need a custom domain (typically ~$10/year), but everything else Cloudflared, Traefik, Docker is completely free.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Architecture Overview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvfqffdqz4azs762bhrz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvfqffdqz4azs762bhrz2.png" alt="Flow diagram" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Cloudflared?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No need to expose ports.&lt;/li&gt;
&lt;li&gt;Free SSL via Cloudflare.&lt;/li&gt;
&lt;li&gt;Keeps your server safe behind Cloudflare’s edge.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Traefik?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Automatically routes traffic to your containers.&lt;/li&gt;
&lt;li&gt;Manages HTTPS certificates.&lt;/li&gt;
&lt;li&gt;Great for multi-container setups.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 1: Push Your Dockerized App to Docker Hub
&lt;/h2&gt;

&lt;p&gt;Let’s make your app globally available.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1. Build the Docker Image
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; your-dockerhub-username/your-app-name:latest &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.2. Log in to Docker Hub
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  1.3. Push the Image
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker push your-dockerhub-username/your-app-name:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 2: Define Docker Compose for Deployment
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3.8'&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
   &lt;span class="na"&gt;traefik&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;traefik:v3.4&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;traefik&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--api.insecure=true"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--providers.docker=true"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--entrypoints.web.address=:80"&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;80:80"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8181:8181"&lt;/span&gt; &lt;span class="c1"&gt;# dashboard Traefik&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/var/run/docker.sock:/var/run/docker.sock:ro"&lt;/span&gt;

&lt;span class="err"&gt;  &lt;/span&gt;&lt;span class="na"&gt;my-app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;your-dockerhub-username/your-app-name:latest&lt;/span&gt;
    &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.enable=true"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.myapp.rule=Host(`app1.example.com`)"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.myapp.entrypoints=websecure"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.services.myapp.loadbalancer.server.port=3000"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 3: Configure Cloudflared Tunnel
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;config.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;tunnel&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-tunnel-id&lt;/span&gt;
&lt;span class="na"&gt;credentials-file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/root/.cloudflared/my-tunnel-id.json&lt;/span&gt;

&lt;span class="na"&gt;ingress&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app1.example.com&lt;/span&gt;
    &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http://traefik:80&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http_status:404&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 4: Deploy the Stack
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
cloudflared tunnel run my-tunnel-id
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Final Result
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;“Hey, check out my app at &lt;a href="https://app1.example.com" rel="noopener noreferrer"&gt;https://app1.example.com&lt;/a&gt; — secure, Dockerized, and running via tunnel magic.”&lt;br&gt;&lt;br&gt;
No more &lt;code&gt;"localhost:3000"&lt;/code&gt; heartbreaks.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;✅ You learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to push your Docker app to Docker Hub
&lt;/li&gt;
&lt;li&gt;How to pull and deploy it with Traefik
&lt;/li&gt;
&lt;li&gt;How to tunnel traffic with Cloudflared
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/" rel="noopener noreferrer"&gt;Cloudflared Tunnel Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://doc.traefik.io/traefik/" rel="noopener noreferrer"&gt;Traefik Official Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/docker-hub/" rel="noopener noreferrer"&gt;Docker Hub: Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/compose/" rel="noopener noreferrer"&gt;Docker Compose Overview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Hoang Tan Tan&lt;br&gt;
&lt;a href="https://github.com/tan1193" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.linkedin.com/in/tan1193/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Set Up a Cloudflared Tunnel on Your Homelab</title>
      <dc:creator>Tan</dc:creator>
      <pubDate>Mon, 30 Jun 2025 19:12:24 +0000</pubDate>
      <link>https://dev.to/tan1193/how-to-set-up-a-cloudflared-tunnel-on-your-homelab-27ao</link>
      <guid>https://dev.to/tan1193/how-to-set-up-a-cloudflared-tunnel-on-your-homelab-27ao</guid>
      <description>&lt;p&gt;Want to expose your private service to the world without revealing your real IP? Let Cloudflared Tunnel be your secret weapon.&lt;/p&gt;

&lt;p&gt;Running a homelab can be exciting, especially when you want secure remote access to your self-hosted services without exposing your entire network. With Cloudflare Tunnel (previously known as Argo Tunnel), you can expose local services to the internet via a secure, private tunnel, even without a public IP.&lt;/p&gt;

&lt;p&gt;Forget Port Forwarding&lt;br&gt;
One of the biggest advantages of using Cloudflared Tunnel is eliminating the need to expose ports on your router. No more struggling with NAT, firewall rules, or worrying about open ports being scanned by bots.&lt;/p&gt;

&lt;p&gt;This guide walks you through setting up a Cloudflared tunnel on your homelab&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft0aeyydpd56hixkc0mt5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft0aeyydpd56hixkc0mt5.png" alt="How Cloudflared tunnel works" width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forget Port Forwarding&lt;/strong&gt;&lt;br&gt;
One of the biggest advantages of using Cloudflared Tunnel is eliminating the need to expose ports on your router. No more struggling with NAT, firewall rules, or worrying about open ports being scanned by bots.&lt;/p&gt;

&lt;p&gt;This guide walks you through setting up a Cloudflared tunnel on your homelab.&lt;/p&gt;


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

&lt;ul&gt;
&lt;li&gt;A Cloudflare account&lt;/li&gt;
&lt;li&gt;A domain managed by Cloudflare&lt;/li&gt;
&lt;li&gt;A machine in your homelab (Linux or Windows) with Docker or direct access&lt;/li&gt;
&lt;li&gt;Basic command line skills&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  Step 1: Install Cloudflared
&lt;/h3&gt;
&lt;h4&gt;
  
  
  On Linux (Debian/Ubuntu):
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;cloudflared
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Or via Docker:
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull cloudflare/cloudflared:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Authenticate with Cloudflare
&lt;/h3&gt;

&lt;p&gt;Run the following command and log in via the browser when prompted:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This authorizes the machine to create/manage tunnels under your account.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 3: Create a Tunnel
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel create &amp;lt;TUNNEL_NAME&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generates credentials and assigns a unique tunnel ID.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 4: Configure Tunnel Routing
&lt;/h3&gt;

&lt;p&gt;Create a configuration file at &lt;code&gt;~/.cloudflared/config.yml&lt;/code&gt; (Linux) or &lt;code&gt;%USERPROFILE%\.cloudflared\config.yml&lt;/code&gt; (Windows):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;tunnel&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;TUNNEL_ID&amp;gt;&lt;/span&gt;
&lt;span class="na"&gt;credentials-file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/home/user/.cloudflared/&amp;lt;TUNNEL_ID&amp;gt;.json&lt;/span&gt;

&lt;span class="na"&gt;ingress&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;service.example.com&lt;/span&gt;
    &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http://localhost:8080&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http_status:404&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure to replace &lt;code&gt;&amp;lt;TUNNEL_ID&amp;gt;&lt;/code&gt; and paths appropriately.&lt;/p&gt;




&lt;h3&gt;
  
  
  Step 5: Set Up DNS Record
&lt;/h3&gt;

&lt;p&gt;Use the Cloudflare dashboard or run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel route dns &amp;lt;TUNNEL_NAME&amp;gt; service.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Step 6: Run the Tunnel
&lt;/h3&gt;

&lt;p&gt;For testing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel run &amp;lt;TUNNEL_NAME&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To run as a service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;cloudflared service &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or with Docker Compose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3.8'&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;cloudflared&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cloudflare/cloudflared:latest&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;tunnel run &amp;lt;TUNNEL_NAME&amp;gt;&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;~/.cloudflared:/etc/cloudflared&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Final Notes:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Make sure your local service (e.g., Nginx, Home Assistant, etc...) is accessible at the configured internal URL.&lt;/li&gt;
&lt;li&gt;Check Cloudflare Zero Trust dashboard for traffic and analytics.&lt;/li&gt;
&lt;li&gt;Always secure your Cloudflare account with 2FA.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Happy tunneling! This setup allows you securely access your homelab services from anywhere without dealing with port forwarding or public IP concerns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/" rel="noopener noreferrer"&gt;https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Hoang Tan Tan&lt;br&gt;
&lt;a href="https://github.com/tan1193" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.linkedin.com/in/tan1193/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>networking</category>
      <category>homelab</category>
    </item>
    <item>
      <title>Building My Home Server</title>
      <dc:creator>Tan</dc:creator>
      <pubDate>Wed, 04 Jun 2025 13:19:49 +0000</pubDate>
      <link>https://dev.to/tan1193/building-my-home-server-2o26</link>
      <guid>https://dev.to/tan1193/building-my-home-server-2o26</guid>
      <description>&lt;h2&gt;
  
  
  🧠 Why Build a Home Server?
&lt;/h2&gt;

&lt;p&gt;My home server is a real-world lab where I practice DevOps and Linux, explore self-hosted tools, and prepare for cloud certs like AWS and Kubernetes — all while showcasing my backend and infrastructure skills through personal projects, Git repos, and internal tools&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkq7q0vkc0xuy7o52v61n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkq7q0vkc0xuy7o52v61n.png" alt="My planning infrastructure" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is my initial infrastructure sketch. I’ll continue to improve it, and if you have any suggestions or ideas, feel free to share them in the comments.&lt;/p&gt;

&lt;h2&gt;
  
  
  🖥️ My Home Server Specs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Model: T9 Plus Mini PC&lt;/li&gt;
&lt;li&gt;CPU: Intel N100 (Alder Lake)&lt;/li&gt;
&lt;li&gt;RAM: 16GB&lt;/li&gt;
&lt;li&gt;Storage: 512GB NVMe SSD&lt;/li&gt;
&lt;li&gt;Operating System: Ubuntu Server 24.04 LTS&lt;/li&gt;
&lt;li&gt;Location: Home Office&lt;/li&gt;
&lt;li&gt;Network: Wired Ethernet connection for stability and speed&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔑 Secure Remote Access with Cloudflared Tunnel
&lt;/h2&gt;

&lt;p&gt;Instead of exposing port 22 to the internet, I used Cloudflare Tunnel for secure, zero-trust SSH access to my home server which is no public IP or VPN needed.&lt;/p&gt;

&lt;p&gt;Here’s how I did it:&lt;/p&gt;

&lt;h2&gt;
  
  
  📝 Prepare a Domain
&lt;/h2&gt;

&lt;p&gt;Before setting up the tunnel, I registered a domain (e.g., yourdomain.com) and connected it to Cloudflare. This gave me access to DNS management and Cloudflare Tunnel services.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to Cloudflare and create an account.&lt;/li&gt;
&lt;li&gt;Add your domain to Cloudflare and update your domain registrar's nameservers.&lt;/li&gt;
&lt;li&gt;Once DNS propagation is complete, you're ready to create tunnels using Cloudflare services.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🛠️ On My Ubuntu Server
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Install cloudflared:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Add cloudflare gpg key&lt;/span&gt;
&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nt"&gt;--mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0755 /usr/share/keyrings
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://pkg.cloudflare.com/cloudflare-main.gpg | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /usr/share/keyrings/cloudflare-main.gpg &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;/dev/null

&lt;span class="c"&gt;# Add this repo to your apt repositories&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main'&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/cloudflared.list

&lt;span class="c"&gt;# install cloudflared&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;cloudflared
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Authenticate Cloudflared:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Create a Tunnel:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel create my-tunnel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Configure the Tunnel:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/home/your-username/.cloudflared/config.yml

tunnel: my-home-server
credentials-file: /home/your-username/.cloudflared/[TUNNEL-ID].json

ingress:
  - &lt;span class="nb"&gt;hostname&lt;/span&gt;: ssh.yourdomain.com
    service: ssh://localhost:22
  - service: http_status:404
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;. Create the DNS record automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel route dns my-home-server ssh.yourdomain.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Start the tunnel:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared tunnel run my-home-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  On My Windows Laptop
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Install Cloudflared:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;winget &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--id&lt;/span&gt; Cloudflare.cloudflared
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Access ssh config:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cloudflared access ssh-config &lt;span class="nt"&gt;--hostname&lt;/span&gt; ssh.yourdomain.com

&lt;span class="c"&gt;# result:&lt;/span&gt;
Add to your /.ssh/config:
Host ssh.yourdomain.com
  ProxyCommand C:&lt;span class="se"&gt;\\&lt;/span&gt;Program Files &lt;span class="o"&gt;(&lt;/span&gt;x86&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\c&lt;/span&gt;loudflared&lt;span class="se"&gt;\c&lt;/span&gt;loudflared.exe access ssh &lt;span class="nt"&gt;--hostname&lt;/span&gt; %h
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Copy the output to your SSH config file:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;notepad C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\Y&lt;/span&gt;ourUsername&lt;span class="se"&gt;\.&lt;/span&gt;ssh&lt;span class="se"&gt;\c&lt;/span&gt;onfig
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Connect to your home server:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh ssh.yourdomain.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;if you encounter this error:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Bad permissions. Try removing permissions &lt;span class="k"&gt;for &lt;/span&gt;user: UNKNOWN&lt;span class="se"&gt;\\&lt;/span&gt;UNKNOWN &lt;span class="o"&gt;(&lt;/span&gt;S-1-5-21-13844415-2831775885-76735119-1002&lt;span class="o"&gt;)&lt;/span&gt;....
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Detailed steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Right-click on the file C:\Users{UserName}.ssh\config → select Properties.&lt;/li&gt;
&lt;li&gt;Go to the Security tab → click the Advanced button.&lt;/li&gt;
&lt;li&gt;At the top of the new window, click "Disable inheritance".&lt;/li&gt;
&lt;li&gt;When prompted:

&lt;ul&gt;
&lt;li&gt;Choose "Convert inherited permissions into explicit permissions".&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;You will now see all permission entries listed.&lt;/li&gt;

&lt;li&gt;Select the line with "UNKNOWN..." → click Remove.&lt;/li&gt;

&lt;li&gt;Click Apply, then OK to save the changes.&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>homeserver</category>
      <category>linux</category>
      <category>ubuntu</category>
      <category>devops</category>
    </item>
    <item>
      <title>Unlocking the Power of Linux: Essential Command Line Skills from Linux Basics for Hackers</title>
      <dc:creator>Tan</dc:creator>
      <pubDate>Mon, 02 Sep 2024 14:33:30 +0000</pubDate>
      <link>https://dev.to/tan1193/unlocking-the-power-of-linux-essential-command-line-skills-from-linux-basics-for-hackers-3jn9</link>
      <guid>https://dev.to/tan1193/unlocking-the-power-of-linux-essential-command-line-skills-from-linux-basics-for-hackers-3jn9</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ptjy5h2uw4lypqxjvlb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ptjy5h2uw4lypqxjvlb.png" alt="Chapter 2: " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Understanding the Command Line Interface (CLI):&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;The chapter starts by explaining the significance of the command line in Linux, emphasizing how it allows users to perform tasks more efficiently than through a graphical interface.&lt;/li&gt;
&lt;li&gt;It discusses the command-line shell, specifically focusing on Bash (Bourne Again Shell), which is the most common shell in Linux.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Basic Command Syntax:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;The structure of a command in Linux is explained, breaking it down into the command itself, options (or flags), and arguments.&lt;/li&gt;
&lt;li&gt;Examples of simple commands are provided to illustrate this syntax, such as &lt;code&gt;echo&lt;/code&gt;, &lt;code&gt;date&lt;/code&gt;, and &lt;code&gt;uname&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Navigating the Filesystem:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;The chapter teaches readers how to move around the Linux filesystem using the command line. It covers commands like &lt;code&gt;pwd&lt;/code&gt; (print working directory), &lt;code&gt;cd&lt;/code&gt; (change directory), and &lt;code&gt;ls&lt;/code&gt; (list directory contents).&lt;/li&gt;
&lt;li&gt;It also introduces the concept of absolute and relative paths, helping users understand how to navigate between different directories.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;File and Directory Operations:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Readers learn how to create, delete, and manage files and directories. Commands covered include &lt;code&gt;touch&lt;/code&gt; (create a file), &lt;code&gt;mkdir&lt;/code&gt; (create a directory), &lt;code&gt;rm&lt;/code&gt; (remove files or directories), and &lt;code&gt;mv&lt;/code&gt; (move or rename files).&lt;/li&gt;
&lt;li&gt;The chapter also discusses how to view the contents of files using commands like &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;more&lt;/code&gt;, and &lt;code&gt;less&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Permissions and Ownership:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;The chapter introduces the concepts of file permissions and ownership in Linux, explaining how these are crucial for system security.&lt;/li&gt;
&lt;li&gt;It covers the &lt;code&gt;chmod&lt;/code&gt; command to change file permissions, and the &lt;code&gt;chown&lt;/code&gt; command to change file ownership.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Using Wildcards and Pipes:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Wildcards, like &lt;code&gt;*&lt;/code&gt; and &lt;code&gt;?&lt;/code&gt;, are explained as tools for simplifying file operations.&lt;/li&gt;
&lt;li&gt;The chapter introduces pipes (&lt;code&gt;|&lt;/code&gt;), which allow users to pass the output of one command as input to another, enabling more complex command chains.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Getting Help with Commands:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;The chapter emphasizes the importance of understanding how to use commands by accessing their manuals. It introduces the &lt;code&gt;man&lt;/code&gt; command (manual) and the --help option for getting quick command syntax references.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Practice and Application:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Throughout the chapter, there are examples and exercises to help readers practice the commands and concepts introduced. This practical approach is designed to build proficiency and confidence in using the command line.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Chapter 2 is foundational for anyone looking to master Linux, especially in the context of ethical hacking. It emphasizes the importance of the command line as a tool for controlling and interacting with the operating system. By the end of the chapter, readers should feel more comfortable using basic Linux commands and navigating the filesystem.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Linux Basics for Hackers: Key Takeaways from Chapter 1</title>
      <dc:creator>Tan</dc:creator>
      <pubDate>Sat, 24 Aug 2024 15:55:42 +0000</pubDate>
      <link>https://dev.to/tan1193/summary-of-chapter-1-getting-started-from-linux-basics-for-hackers-29j7</link>
      <guid>https://dev.to/tan1193/summary-of-chapter-1-getting-started-from-linux-basics-for-hackers-29j7</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg96tp6vyctjtn52qikx9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg96tp6vyctjtn52qikx9.png" alt="Chapter 1: GETTING STARTED WITH THE BASICS" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 1: "Getting Started"
&lt;/h2&gt;

&lt;p&gt;Chapter 1 of "Linux Basics for Hackers" introduces readers to the fundamental concepts of Linux, focusing on its importance in cybersecurity and ethical hacking. The chapter begins by explaining why Linux is a preferred platform for hackers due to its open-source nature, flexibility, and the vast array of tools available for penetration testing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Points:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Introduction to Linux:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Linux is presented as an open-source operating system that is highly customizable, secure, and widely used in both personal and professional environments.&lt;/li&gt;
&lt;li&gt;The chapter discusses the different distributions (distros) of Linux, focusing on Kali Linux, which is tailored for security professionals.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Why Linux for Hackers:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;The text highlights the importance of using Linux in hacking due to its command-line interface (CLI), which provides more control and precision than graphical interfaces.&lt;/li&gt;
&lt;li&gt;Linux's native support for programming and scripting languages (like Python, Bash, and Perl) is emphasized as a crucial tool for hackers.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Getting Started with Linux:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The chapter guides readers on how to set up their first Linux environment, recommending virtual machines as a safe way to experiment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instructions are provided for downloading and installing Kali Linux using virtualization software like VirtualBox or VMware.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Basic Command-Line Skills:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The chapter introduces essential Linux commands that every beginner should know. Commands like &lt;em&gt;ls&lt;/em&gt;, &lt;em&gt;cd&lt;/em&gt;, &lt;em&gt;mkdir&lt;/em&gt;, and _cp _are explained, allowing the reader to navigate the file system and manage files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The concept of superuser (root) privileges is introduced, with a discussion on the importance of responsibly understanding and using the sudo command.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Security and Precautions:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;The chapter closes by stressing the importance of practicing ethical hacking. It encourages readers to use their skills responsibly and within legal boundaries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, Chapter 1 lays the groundwork for readers who are new to Linux, providing them with the knowledge needed to start using Linux effectively for cybersecurity tasks. It emphasizes the significance of learning the command line and setting up a secure and controlled environment for hacking practices.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
