<?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>Enders Tech Blog</title>
    <link>https://enders.tech/</link>
    <description>Recent content on Enders Tech Blog</description>
    <generator>Hugo -- 0.147.6</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 03 Apr 2025 13:22:09 -0600</lastBuildDate>
    <atom:link href="https://enders.tech/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Proxmox Templates</title>
      <link>https://enders.tech/posts/proxmox-templates/</link>
      <pubDate>Thu, 03 Apr 2025 13:22:09 -0600</pubDate>
      <guid>https://enders.tech/posts/proxmox-templates/</guid>
      <description>&lt;h3 id=&#34;ubuntu-2204-template-ubuntu-2204-jammy&#34;&gt;Ubuntu 22.04 Template ubuntu-2204-jammy&lt;/h3&gt;
&lt;p&gt;Open a shell on the Proxmox host.&lt;br&gt;
First install libguestfs-tools so we have virt-customize, then download the image then uninstall open-vm-tools and install qemu-guest-agent.&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apt install libguestfs-tools
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
virt-customize -a jammy-server-cloudimg-amd64.img --uninstall open-vm-tools
virt-customize -a jammy-server-cloudimg-amd64.img --install qemu-guest-agent --truncate /etc/machine-id
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;p&gt;Create the VM that will become a template.&lt;br&gt;
I&amp;rsquo;m using vmid 2204 since this is Ubuntu 22.04.&lt;br&gt;
Import the image from the last step. Using default Proxmox storage local-lvm, change accordingly if you added storage. Change &amp;ndash;net0 to your environment.&lt;br&gt;
To use a vlan: &lt;em&gt;&amp;ndash;net0 virtio,bridge=vmbr1,tag=10&lt;/em&gt;&lt;br&gt;
Attach the imported disk to the VM.&lt;br&gt;
Add the Cloud-Init drive.&lt;br&gt;
Set the boot disk.&lt;br&gt;
Create the serial interface as the display.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Install Portainer in our new Docker environment</title>
      <link>https://enders.tech/posts/install-portainer/</link>
      <pubDate>Mon, 24 Feb 2025 14:50:08 -0700</pubDate>
      <guid>https://enders.tech/posts/install-portainer/</guid>
      <description>&lt;h2 id=&#34;install-portainer&#34;&gt;Install Portainer&lt;/h2&gt;
&lt;p&gt;Tired of using docker in cli and want a webui to help manage things? Here we go.&lt;/p&gt;
&lt;h3 id=&#34;bring-up-the-portainer-image&#34;&gt;Bring up the Portainer image&lt;/h3&gt;
&lt;p&gt;We&amp;rsquo;ll go with what the Portainer docs say except for one tweak. Portainer sets the image to restart: always and for me I like restart: unless-stopped. This way if I stop the container it stays stopped until I start it again.
First create a volume for the Portainer data then run the Portainer image.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Install Docker on Ubuntu</title>
      <link>https://enders.tech/posts/install-docker/</link>
      <pubDate>Thu, 19 Dec 2024 09:27:10 -0700</pubDate>
      <guid>https://enders.tech/posts/install-docker/</guid>
      <description>&lt;h2 id=&#34;install-docker&#34;&gt;Install Docker&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve watched a lot of YouTube creators and read a lot of articles on how to install Docker on Ubuntu and almost always they go through the history and what containers are and the benefits of using containers. I also see them install docker-compose. Totally not needed, compose has been built in as a module for some time now. If I&amp;rsquo;m looking for a tutorial on how to install Docker, I already know what containers are and the benefits of using them. I just want to install Docker. So, I&amp;rsquo;m going to skip all that and get straight to the point using a minimal Ubuntu server build.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Neovim 2024</title>
      <link>https://enders.tech/posts/neovim-2024/</link>
      <pubDate>Thu, 07 Nov 2024 14:41:15 -0700</pubDate>
      <guid>https://enders.tech/posts/neovim-2024/</guid>
      <description>&lt;h2 id=&#34;neovim-install-including-some-common-plugins&#34;&gt;Neovim install including some common plugins&lt;/h2&gt;
&lt;p&gt;After watching &lt;a href=&#34;https://www.youtube.com/watch?v=6pAG3BHurdM&#34; target=&#34;_blank&#34; &gt;Josean Martinez&amp;rsquo;s awesome YouTube video&lt;/a&gt;
 configuring Neovim from scratch, I cloned his repo and modified it to make it more generic for me. I also added Github&amp;rsquo;s Copilot plugin.&lt;/p&gt;
&lt;p&gt;First clear out old configs you might have.&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;&#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;rm -rf ~/.config/nvim
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -rf ~/.local/state/nvim
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -rf ~/.local/share/nvim
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next I&amp;rsquo;ll clone my repo and install the necessary dependencies. Then I&amp;rsquo;ll install the JetBrains Mono Nerd Font. I&amp;rsquo;ll also install nvm and node 20. Finally, I&amp;rsquo;ll open Neovim and let it install the plugins.&lt;/p&gt;</description>
    </item>
    <item>
      <title>UFW with Cyberpanel</title>
      <link>https://enders.tech/posts/ufw-cyberpanel/</link>
      <pubDate>Mon, 07 Oct 2024 04:28:41 +0000</pubDate>
      <guid>https://enders.tech/posts/ufw-cyberpanel/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://cyberpanel.net/&#34; target=&#34;_blank&#34; &gt;CyberPanel&lt;/a&gt;
 has &lt;a href=&#34;https://configserver.com/configserver-security-and-firewall/&#34; target=&#34;_blank&#34; &gt;CSF&lt;/a&gt;
 installed by default but it was removed after an update because of an incompatibility issue with Django. I decided to get &lt;a href=&#34;https://help.ubuntu.com/community/UFW&#34; target=&#34;_blank&#34; &gt;UFW&lt;/a&gt;
 configured instead until the issue is fixed. CyberPanel has patched the issue and CSF is back in the latest version.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;TL:DR&lt;/em&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;&#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;apt install ufw
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw default deny incoming
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw default allow outgoing
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw limit ssh comment &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Allow SSHd and rate limit SSHd login attempts&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw allow 21,25,53,80,110/tcp comment &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Incoming TCP ports needed for CyberPanel&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw allow 143,443,465,587/tcp comment &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Incoming TCP ports needed for CyberPanel&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw allow 993,995/tcp comment &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Incoming TCP ports needed for CyberPanel&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw allow 40110:40210/tcp comment &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Incoming FTP pasv range needed for CyberPanel&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw allow 53,443/udp comment &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Incoming UDP ports needed for CyberPanel&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw show added
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw enable
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw status verbose
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;these-are-the-steps-to-harden-the-server-with-ufw&#34;&gt;These are the steps to harden the server with UFW&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Install UFW in case it is not installed already&lt;/li&gt;
&lt;/ol&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;&#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;apt install ufw
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Configure UFW&lt;/li&gt;
&lt;/ol&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;&#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;ufw default deny incoming
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw default allow outgoing
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw limit ssh comment &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Allow SSHd and rate limit SSHd login attempts&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw allow 21,25,53,80,110/tcp comment &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Incoming TCP ports needed for CyberPanel&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw allow 143,443,465,587/tcp comment &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Incoming TCP ports needed for CyberPanel&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw allow 993,995/tcp comment &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Incoming TCP ports needed for CyberPanel&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw allow 40110:40210/tcp comment &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Incoming FTP pasv range needed for CyberPanel&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ufw allow 53,443/udp comment &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Incoming UDP ports needed for CyberPanel&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Review the rules&lt;/li&gt;
&lt;/ol&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;&#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;ufw show added
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Enable UFW if rules are correct&lt;/li&gt;
&lt;/ol&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;&#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;ufw enable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Check the status&lt;/li&gt;
&lt;/ol&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;&#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;ufw status verbose
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This should cover the ports CyberPanel needs to work properly.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
