<?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: theo hutchings</title>
    <description>The latest articles on DEV Community by theo hutchings (@theohutchings908).</description>
    <link>https://dev.to/theohutchings908</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%2F3146564%2F50508f62-20fa-4124-857b-d9e038f1b4bf.jpeg</url>
      <title>DEV Community: theo hutchings</title>
      <link>https://dev.to/theohutchings908</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/theohutchings908"/>
    <language>en</language>
    <item>
      <title>Deploy Virtual Servers in Your VPC</title>
      <dc:creator>theo hutchings</dc:creator>
      <pubDate>Tue, 03 Jun 2025 14:35:39 +0000</pubDate>
      <link>https://dev.to/theohutchings908/deploy-virtual-servers-in-your-vpc-1gcb</link>
      <guid>https://dev.to/theohutchings908/deploy-virtual-servers-in-your-vpc-1gcb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You now have a VPC and firewall ready for use!&lt;/strong&gt;&lt;br&gt;
Let’s put some Linode Virtual Machines inside so we can start running our applications.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  What Is Akamai Connected Cloud Compute?
&lt;/h3&gt;

&lt;p&gt;Akamai Connected Cloud Compute (formerly Linode) is a core service provided by Akamai that offers &lt;strong&gt;scalable virtual servers&lt;/strong&gt; in the cloud. These servers, known as &lt;em&gt;Linode instances&lt;/em&gt;, let you deploy and run applications without managing physical hardware.&lt;/p&gt;

&lt;h4&gt;
  
  
  Key Features
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flexible OS (Operating System) Choices:&lt;/strong&gt; Ubuntu, Debian, CentOS Stream, Fedora, and more&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Plan Types:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shared CPU&lt;/li&gt;
&lt;li&gt;Dedicated CPU&lt;/li&gt;
&lt;li&gt;High-Memory&lt;/li&gt;
&lt;li&gt;GPU&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Global Regions:&lt;/strong&gt; Edge-optimized data centers worldwide for low-latency performance&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;On-Demand Scaling:&lt;/strong&gt; Resize CPU/RAM or attach additional block storage at any time&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pay-As-You-Go:&lt;/strong&gt; Only pay for the resources you use&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  Ideal Use Cases
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Web hosting&lt;/li&gt;
&lt;li&gt;Development &amp;amp; staging environments&lt;/li&gt;
&lt;li&gt;Databases &amp;amp; data processing&lt;/li&gt;
&lt;li&gt;Containerized &amp;amp; microservices workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;With Akamai Connected Cloud Compute, you get the power and reliability of a global network—while keeping costs predictable and under your control.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Let’s now make our way to the Akamai Cloud Manager Dashboard and navigate to the &lt;strong&gt;Linodes&lt;/strong&gt; tab under &lt;strong&gt;Compute&lt;/strong&gt;.&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%2F1tran3dv48j8n60x5jvj.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%2F1tran3dv48j8n60x5jvj.png" alt="Image description" width="232" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the top right, click &lt;strong&gt;Create Linode&lt;/strong&gt;.&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%2Fd8e2bq27b2pn6ficwqlp.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%2Fd8e2bq27b2pn6ficwqlp.png" alt="Image description" width="800" height="121"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;By default, the **OS&lt;/em&gt;* tab is selected — choose your operating system to build your application from the ground up. If you’d rather deploy a ready-made solution, switch to &lt;strong&gt;Marketplace&lt;/strong&gt; for One-Click apps.*&lt;/p&gt;

&lt;h4&gt;
  
  
  Marketplace Tab
&lt;/h4&gt;

&lt;p&gt;On the &lt;strong&gt;Marketplace&lt;/strong&gt; tab, you’ll find a variety of pre-made applications you can deploy quickly. For example:&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%2F0ag1eexc0s7s9c27bh8n.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%2F0ag1eexc0s7s9c27bh8n.png" alt="Image description" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  StackScripts
&lt;/h4&gt;

&lt;p&gt;StackScripts allow you to run Bash scripts upon the first boot of the Linode instance. For example, you can install Nginx/Apache web servers or databases like MySQL/PostgreSQL.&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%2Fk43wwfiw8by23f31ymwo.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%2Fk43wwfiw8by23f31ymwo.png" alt="Image description" width="800" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To create your own StackScript, head to the &lt;strong&gt;StackScripts&lt;/strong&gt; tab in &lt;strong&gt;Compute&lt;/strong&gt;.&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%2Fyyc27wdip4mz208258fp.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%2Fyyc27wdip4mz208258fp.png" alt="Image description" width="225" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Create StackScript&lt;/strong&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%2Fuca22exx04i0we8znxy4.png" alt="Image description" width="800" height="440"&gt;
&lt;/li&gt;
&lt;li&gt;Provide a relevant &lt;strong&gt;Label&lt;/strong&gt; and &lt;strong&gt;Description&lt;/strong&gt; to remind future you what it’s for.&lt;/li&gt;
&lt;li&gt;Select the &lt;strong&gt;Target Images&lt;/strong&gt; (depending on the OS you plan to use).&lt;/li&gt;
&lt;li&gt;Paste your script into the &lt;strong&gt;Script&lt;/strong&gt; section and click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&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%2F6lc9cdzrhvgvn3cg3cw2.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%2F6lc9cdzrhvgvn3cg3cw2.png" alt="Image description" width="800" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Images
&lt;/h4&gt;

&lt;p&gt;Images let you deploy from a snapshot or custom image you’ve created/imported. This includes existing Linodes (entire root filesystem, configuration, installed packages, and user data). Images are incredibly useful for cross-region application replication.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the &lt;strong&gt;Images&lt;/strong&gt; tab, click &lt;strong&gt;Capture an Image&lt;/strong&gt; to take a snapshot of an existing Linode.&lt;/li&gt;
&lt;/ul&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%2Fgaox09nwcbe48zxcf5f9.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%2Fgaox09nwcbe48zxcf5f9.png" alt="Image description" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Or click &lt;strong&gt;Upload an Image&lt;/strong&gt; to import a custom image you have stored locally.&lt;/li&gt;
&lt;/ul&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%2Ffxx8i6nuxd6kxlcxcklk.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%2Ffxx8i6nuxd6kxlcxcklk.png" alt="Image description" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Backups &amp;amp; Cloning
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backups:&lt;/strong&gt; View existing Linodes with backups enabled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clone Linode:&lt;/strong&gt; Take an existing Linode and clone it one-time—perfect for replicating an existing server without snapshots.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Creating Your Linode Instance
&lt;/h2&gt;

&lt;p&gt;Back in the &lt;strong&gt;OS&lt;/strong&gt; tab, let’s start by creating a new Linode.&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%2F8cbcj6q55mgp637440jo.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%2F8cbcj6q55mgp637440jo.png" alt="Image description" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Region:&lt;/strong&gt; Select the same region where you created your VPC.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;OS:&lt;/strong&gt; Choose an operating system based on your use case. Recommendations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;General-purpose web/database server:&lt;/strong&gt; Ubuntu LTS / Debian Stable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise RHEL-compatible workloads:&lt;/strong&gt; AlmaLinux / Rocky Linux&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cutting-edge development &amp;amp; testing:&lt;/strong&gt; Fedora / CentOS Stream&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lightweight container host:&lt;/strong&gt; Alpine Linux / Fedora CoreOS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance-driven environment (PCI, HIPAA):&lt;/strong&gt; Ubuntu Pro / RHEL-compatible with ESM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GUI-based management or desktop-style server:&lt;/strong&gt; Ubuntu Desktop / Fedora Workstation&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;Although instances are scalable, it’s a good idea to start with resources close to your expected load.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Linode Plan:&lt;/strong&gt; Choose the resources for your Linode. Here are the instance types and suggested use cases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Dedicated CPU&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; VMs with one or more full CPU cores reserved solely for you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Cases:&lt;/strong&gt; Consistent, CPU-intensive workloads like CI/CD builds, compilers, video encoding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pros:&lt;/strong&gt; No “noisy neighbor” interference, predictable performance.&lt;/li&gt;
&lt;/ul&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%2Fyeb9j3xxyptwxhyavtho.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%2Fyeb9j3xxyptwxhyavtho.png" alt="Image description" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2. Shared CPU
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; “Burstable” VMs that share physical CPU cores with other tenants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Cases:&lt;/strong&gt; Development environments, low-traffic web servers, test boxes, small databases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pros:&lt;/strong&gt; Lowest cost, flexible burst capacity when you need it.&lt;/li&gt;
&lt;/ul&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%2Fp05flgdkqsbgwrex86po.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%2Fp05flgdkqsbgwrex86po.png" alt="Image description" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;3. High Memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Plans that pack more RAM per CPU core than standard offerings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Cases:&lt;/strong&gt; In-memory databases (Redis, Memcached), big-data processing, caching layers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pros:&lt;/strong&gt; Run large datasets entirely in RAM for ultra-fast access.&lt;/li&gt;
&lt;/ul&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%2Fd85h9rflrekwnnucplvt.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%2Fd85h9rflrekwnnucplvt.png" alt="Image description" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;4. GPU
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Instances attached to NVIDIA GPUs (e.g., Tesla T4) for parallel acceleration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Cases:&lt;/strong&gt; Machine learning training/inference, GPU-accelerated compute, video transcoding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pros:&lt;/strong&gt; Massive floating-point throughput, CUDA/ROCm support.&lt;/li&gt;
&lt;/ul&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%2F7anyyh4qlxvbrhykh6pr.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%2F7anyyh4qlxvbrhykh6pr.png" alt="Image description" width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5. Premium CPU
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; High-clock-speed Intel Xeon Scalable VMs with NVMe SSD storage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Cases:&lt;/strong&gt; High-performance web apps, single-threaded workloads, latency-sensitive services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pros:&lt;/strong&gt; Faster cores, ultra-low disk I/O latency.&lt;/li&gt;
&lt;/ul&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%2Fhlq7ngk5m106tqillajj.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%2Fhlq7ngk5m106tqillajj.png" alt="Image description" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;6. Accelerated Compute
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Combines dedicated CPU cores with NVMe-backed storage for maximum throughput.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Cases:&lt;/strong&gt; I/O-intensive applications like Elasticsearch, large-scale data analytics, CI runners.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pros:&lt;/strong&gt; Top-tier disk performance plus dedicated compute.&lt;/li&gt;
&lt;/ul&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%2Flu8q4g0i3ptng636ok0e.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%2Flu8q4g0i3ptng636ok0e.png" alt="Image description" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Label &amp;amp; Tags:&lt;/strong&gt; Assign a clear &lt;strong&gt;Label&lt;/strong&gt; representing the instance’s purpose, and use &lt;strong&gt;Tags&lt;/strong&gt; to pinpoint aspects of the application. For example:&lt;/li&gt;
&lt;/ol&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%2Flum85b6ekf78airzi5o0.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%2Flum85b6ekf78airzi5o0.png" alt="Image description" width="564" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Security:&lt;/strong&gt; Create a strong root password known only to trusted individuals.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Since we allowed SSH on port 22 via the firewall, it’s best practice to use SSH keys for even tighter security.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Add an SSH Key&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&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%2F97fpev6taeffsa1o1xa7.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%2F97fpev6taeffsa1o1xa7.png" alt="Image description" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Label it&lt;/strong&gt;: &lt;code&gt;user-ssh-key&lt;/code&gt;&lt;br&gt;
   &lt;strong&gt;Key:&lt;/strong&gt; Paste your local machine’s SSH public key.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;To find your SSH public key, run on your local machine:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nb"&gt;ls&lt;/span&gt; ~/.ssh
 &lt;span class="c"&gt;# Look for a .pub file, e.g., id_rsa.pub&lt;/span&gt;
 &lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/id_rsa.pub
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Copy the output and paste it into the Linode creation form.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Encryption:&lt;/strong&gt; By default, &lt;strong&gt;Encrypted Disk&lt;/strong&gt; is enabled—it’s free, so leave it on to protect data at rest.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;VPC &amp;amp; Firewall Assignment:&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Under &lt;strong&gt;VPC&lt;/strong&gt;, select the VPC you created earlier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable Auto-Assign VPC IPv4&lt;/strong&gt; so the Linode automatically gets a private 10.x address.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disable Public IPv4 Assignment&lt;/strong&gt; if you want to restrict traffic to within your VPC.&lt;/li&gt;
&lt;/ul&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%2F019qhgetxcrfjkmrq8h0.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%2F019qhgetxcrfjkmrq8h0.png" alt="Image description" width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For &lt;strong&gt;Subnet&lt;/strong&gt;, select the backend subnet you set up for this Linode.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Firewall&lt;/strong&gt;, select the firewall configured for your backend server.&lt;/li&gt;
&lt;/ul&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%2Fek136z822wn1txgvp842.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%2Fek136z822wn1txgvp842.png" alt="Image description" width="785" height="730"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Auto-assigning a VPC IPv4 ensures the Linode is reachable within the VPC. Not assigning a public IPv4 means it won’t be directly accessible from the Internet—useful for private backend services.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backups:&lt;/strong&gt; If you want automatic backups, enable the &lt;strong&gt;Backups&lt;/strong&gt; option (recommended for production).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Create Linode:&lt;/strong&gt; Scroll to the bottom and click &lt;strong&gt;Create Linode&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2Fc0e5f3qnx7d7fr4o074l.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%2Fc0e5f3qnx7d7fr4o074l.png" alt="Image description" width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You’ll see the new Linode provisioning. After about a minute, its status will change to &lt;strong&gt;RUNNING&lt;/strong&gt;—awesome, you’ve successfully created a Linode server.&lt;/p&gt;




&lt;h2&gt;
  
  
  SSH into Your New Linode
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Copy the SSH command&lt;/strong&gt; from the Dashboard (e.g., &lt;code&gt;ssh root@172.236.21.197&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;On your local machine, run:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   ssh root@&lt;span class="k"&gt;************&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;When prompted, enter the root password you set.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Initial Server Setup
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Update &amp;amp; Upgrade Packages
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Refresh package index&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update

&lt;span class="c"&gt;# Upgrade all installed packages&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2. Install Common Utilities
&lt;/h3&gt;

&lt;p&gt;Install essential packages (including Docker prerequisites):&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;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  curl &lt;span class="se"&gt;\&lt;/span&gt;
  git &lt;span class="se"&gt;\&lt;/span&gt;
  unzip &lt;span class="se"&gt;\&lt;/span&gt;
  apt-transport-https &lt;span class="se"&gt;\&lt;/span&gt;
  ca-certificates &lt;span class="se"&gt;\&lt;/span&gt;
  gnupg &lt;span class="se"&gt;\&lt;/span&gt;
  lsb-release
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;curl:&lt;/strong&gt; Fetch remote scripts/GPG keys&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;git:&lt;/strong&gt; Clone repositories&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;unzip:&lt;/strong&gt; Extract zip archives&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;apt-transport-https&lt;/strong&gt;, &lt;strong&gt;ca-certificates&lt;/strong&gt;, &lt;strong&gt;gnupg&lt;/strong&gt;, &lt;strong&gt;lsb-release:&lt;/strong&gt; Required for adding Docker’s HTTPS repository securely&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3. Install Docker Engine &amp;amp; Compose
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add Docker’s GPG Key&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/ubuntu/gpg &lt;span class="se"&gt;\&lt;/span&gt;
     | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/share/keyrings/docker-archive-keyring.gpg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add Docker’s APT Repository&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &lt;span class="s2"&gt;"deb [arch=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;dpkg &lt;span class="nt"&gt;--print-architecture&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
     signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
     https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span class="se"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;
     &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;lsb_release &lt;span class="nt"&gt;-cs&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; stable"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/docker.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Update Package Index &amp;amp; Install Docker&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&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="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     docker-ce &lt;span class="se"&gt;\&lt;/span&gt;
     docker-ce-cli &lt;span class="se"&gt;\&lt;/span&gt;
     containerd.io &lt;span class="se"&gt;\&lt;/span&gt;
     docker-compose-plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Enable &amp;amp; Start Docker Service&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&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;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker
   &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start docker
   &lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point, Docker is running and you can start pulling/running containers and your server is ready to start hosting!&lt;/p&gt;




</description>
      <category>vms</category>
      <category>isntance</category>
      <category>scalable</category>
      <category>linode</category>
    </item>
    <item>
      <title>Setting Up A VPC And Firewall In Linode (Akamai)</title>
      <dc:creator>theo hutchings</dc:creator>
      <pubDate>Wed, 28 May 2025 09:59:03 +0000</pubDate>
      <link>https://dev.to/theohutchings908/setting-up-a-vpc-and-firewall-in-linode-akamai-3je7</link>
      <guid>https://dev.to/theohutchings908/setting-up-a-vpc-and-firewall-in-linode-akamai-3je7</guid>
      <description>&lt;p&gt;Your servers are spiking and you need to be able to cope without breaking the bank. Let’s move you to the cloud, where you can deal with your new demand with cost-effective ease.&lt;/p&gt;

&lt;p&gt;A Virtual Private Cloud (VPC) is essentially your own private network slice within the cloud, fully isolated from other tenants. Inside a VPC, you get to define your IP address ranges, create public and private subnets, and set up route tables and internet or virtual private gateways to control traffic flows.&lt;/p&gt;

&lt;p&gt;Setting up is important. Instead of hosting your servers in a flat network, it’s best to have a VPC (Virtual Private Cloud). This will create a secure environment where it’s much easier to get your servers talking to each other without being at risk of lateral attacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up the VPC
&lt;/h2&gt;

&lt;p&gt;First, select the &lt;strong&gt;VPC&lt;/strong&gt; tab under &lt;strong&gt;Networking&lt;/strong&gt;.  &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%2Fbtjg5ww6b87w681vzo3g.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%2Fbtjg5ww6b87w681vzo3g.png" alt="Image description" width="233" height="769"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Create VPC&lt;/strong&gt; at the top right.  &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%2F7ep5siliefuo2oi4kkhr.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%2F7ep5siliefuo2oi4kkhr.png" alt="Image description" width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the “Create VPC” form, choose your region and give your VPC a meaningful label.  &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%2F7nbcmtw8fw6nsqqlluua.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%2F7nbcmtw8fw6nsqqlluua.png" alt="Image description" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After your VPC is created, you’ll see its dashboard. You’ll want to create separate subnets for the back-end and front-end servers. By putting your public web servers in one subnet and your private database or application servers in another, you keep them neatly separated. This allows you to create separate firewalls to limit access to non-public applications Click &lt;strong&gt;Create Subnet&lt;/strong&gt;.  &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%2Fommm3481esdofr3z05fh.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%2Fommm3481esdofr3z05fh.png" alt="Image description" width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Label this subnet for the service you plan to deploy on it—for example, &lt;code&gt;backend-service&lt;/code&gt;.  &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%2Fxtdy5tu6hkwfzf5nnhh8.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%2Fxtdy5tu6hkwfzf5nnhh8.png" alt="Image description" width="472" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should now see your new subnet listed in the VPC dashboard.  &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%2Fvk2n19274rmezb57e660.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%2Fvk2n19274rmezb57e660.png" alt="Image description" width="800" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repeat steps 4–6 for any other services (e.g. &lt;code&gt;frontend-service&lt;/code&gt;, &lt;code&gt;monitoring&lt;/code&gt;).  &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%2F1xu5wayk48iyh9a2uc9q.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%2F1xu5wayk48iyh9a2uc9q.png" alt="Image description" width="448" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you’re done, your VPC dashboard will list each subnet you created, all ready to have machines attached.  &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%2Font0yf5ptj48h542hizd.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%2Font0yf5ptj48h542hizd.png" alt="Image description" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Setting Up Firewalls
&lt;/h2&gt;

&lt;p&gt;Firewalls should always follow the basic security principle of least privilege. All inbound traffic should be blocked except for the access you explicitly allow. Here are some example rules you might consider:&lt;/p&gt;

&lt;p&gt;Select the &lt;strong&gt;Firewalls&lt;/strong&gt; tab under &lt;strong&gt;Networking&lt;/strong&gt;.  &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%2Fv6i72nm5muo13qvuopve.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%2Fv6i72nm5muo13qvuopve.png" alt="Image description" width="231" height="803"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Create Firewall&lt;/strong&gt; at the top right.  &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%2F6jl4rc69j4l4kpv3mxdi.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%2F6jl4rc69j4l4kpv3mxdi.png" alt="Image description" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s start with your &lt;strong&gt;backend&lt;/strong&gt; firewall:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inbound Policy:&lt;/strong&gt; &lt;code&gt;Drop&lt;/code&gt; by default. This means that &lt;em&gt;all&lt;/em&gt; incoming connections are blocked unless you explicitly allow them with a rule.&lt;/li&gt;
&lt;li&gt;Leave the “Linodes” (assigned machines) blank for now as we have not yet created them.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&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%2Fn20mk48x7tqe7p8hufwa.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%2Fn20mk48x7tqe7p8hufwa.png" alt="Image description" width="460" height="675"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Back in your Firewalls dashboard, we should see your newly created firewall. click the new firewall to open its &lt;strong&gt;Rules&lt;/strong&gt; tab.  &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%2Fd7n7feig8xhlb8dn18vy.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%2Fd7n7feig8xhlb8dn18vy.png" alt="Image description" width="800" height="169"&gt;&lt;/a&gt;&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%2Fmdaymd1caieta7v6hua7.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%2Fmdaymd1caieta7v6hua7.png" alt="Image description" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the rules you need for your backend services:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule 1: Allow SSH from Admin&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Label:&lt;/strong&gt; &lt;code&gt;allow-ssh-from-admin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol / Port:&lt;/strong&gt; &lt;code&gt;TCP / 22&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sources:&lt;/strong&gt; &lt;code&gt;ADMIN_IP/32&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Action:&lt;/strong&gt; &lt;code&gt;Accept&lt;/code&gt;  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;This lets your personal machine SSH into the backend. To find your IP, visit &lt;a href="https://whatismyipaddress.com/" rel="noopener noreferrer"&gt;https://whatismyipaddress.com/&lt;/a&gt; and use the IPv4 address. The &lt;code&gt;/32&lt;/code&gt; suffix restricts it to exactly that one IP.&lt;/em&gt;  &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&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%2F94gmsxfxgx29ezpn8478.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%2F94gmsxfxgx29ezpn8478.png" alt="Image description" width="440" height="847"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule 2: Allow Frontend → Backend (HTTPS)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Label:&lt;/strong&gt; &lt;code&gt;allow-https-from-frontend&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol / Port:&lt;/strong&gt; &lt;code&gt;TCP / 443&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sources:&lt;/strong&gt; &lt;code&gt;FRONTEND_SUBNET_CIDR&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Action:&lt;/strong&gt; &lt;code&gt;Accept&lt;/code&gt;  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;This lets your frontend instances call your backend over HTTPS.&lt;/em&gt;  &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&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%2Fzcd9glo57b89o7t5rtw5.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%2Fzcd9glo57b89o7t5rtw5.png" alt="Image description" width="439" height="922"&gt;&lt;/a&gt;&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%2Fm67yghmlvn1v2pus4c8k.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%2Fm67yghmlvn1v2pus4c8k.png" alt="Image description" width="800" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule 3: Allow CI/CD Deployment&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Label:&lt;/strong&gt; &lt;code&gt;allow-cicd-deployment&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol / Port:&lt;/strong&gt; &lt;code&gt;TCP / 22&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sources:&lt;/strong&gt; &lt;code&gt;CICD_SERVER_IP/32&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Action:&lt;/strong&gt; &lt;code&gt;Accept&lt;/code&gt;  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Your CI/CD runner needs SSH access to deploy new code.&lt;/em&gt;  &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&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%2F99mk4urk6ekgkzakttev.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%2F99mk4urk6ekgkzakttev.png" alt="Image description" width="457" height="888"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule 4: Allow Frontend → Database&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Label:&lt;/strong&gt; &lt;code&gt;allow-frontend-to-db&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol / Port:&lt;/strong&gt; &lt;code&gt;TCP / 5432&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sources:&lt;/strong&gt; &lt;code&gt;FRONTEND_SUBNET_CIDR&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Action:&lt;/strong&gt; &lt;code&gt;Accept&lt;/code&gt;  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you’re using PostgreSQL on the default port &lt;code&gt;5432&lt;/code&gt;, this lets your frontend talk to your database.&lt;/em&gt;  &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&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%2Fvdihxz5q3l314jds8f6p.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%2Fvdihxz5q3l314jds8f6p.png" alt="Image description" width="438" height="931"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After adding all required rules, your backend firewall rules tab should look like this:  &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%2Fq1w7ebhla5kpfn2o45no.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%2Fq1w7ebhla5kpfn2o45no.png" alt="Image description" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Save Changes&lt;/strong&gt; to apply.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure &lt;strong&gt;Inbound Policy&lt;/strong&gt; remains &lt;code&gt;Drop&lt;/code&gt; so only your specified rules are allowed.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outbound Rules&lt;/strong&gt; can usually be left empty: most backends don’t need to initiate connections to the Internet directly, so dropping outbound by default prevents accidental data exfiltration.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Frontend Firewall
&lt;/h2&gt;

&lt;p&gt;Follow the same steps to create a firewall for your &lt;strong&gt;frontend&lt;/strong&gt; machines:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule 1: SSH from Admin&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Label:&lt;/strong&gt; &lt;code&gt;allow-ssh-from-admin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol / Port:&lt;/strong&gt; &lt;code&gt;TCP / 22&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sources:&lt;/strong&gt; &lt;code&gt;ADMIN_IP/32&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action:&lt;/strong&gt; &lt;code&gt;Accept&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&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%2Feyltlpz2upjhyjmau0mn.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%2Feyltlpz2upjhyjmau0mn.png" alt="Image description" width="460" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, you’ll want to allow inbound HTTP (port 80) and HTTPS (port 443) traffic from 0.0.0.0/0 so that your web server is accessible from the Internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule 2: HTTP (public)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Label:&lt;/strong&gt; &lt;code&gt;allow-http&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol / Port:&lt;/strong&gt; &lt;code&gt;TCP / 80&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sources:&lt;/strong&gt; &lt;code&gt;0.0.0.0/0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action:&lt;/strong&gt; &lt;code&gt;Accept&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&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%2Fkw4lltqn4fcrrxwodrl8.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%2Fkw4lltqn4fcrrxwodrl8.png" alt="Image description" width="453" height="777"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule 3: HTTPS (public)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Label:&lt;/strong&gt; &lt;code&gt;allow-https&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol / Port:&lt;/strong&gt; &lt;code&gt;TCP / 443&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sources:&lt;/strong&gt; &lt;code&gt;0.0.0.0/0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action:&lt;/strong&gt; &lt;code&gt;Accept&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&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%2F9wltmfw633w99qdu2g92.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%2F9wltmfw633w99qdu2g92.png" alt="Image description" width="447" height="867"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule 4: Allow database responses&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Label:&lt;/strong&gt; &lt;code&gt;allow-response-from-backend-pg&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol / Port:&lt;/strong&gt; &lt;code&gt;TCP / 5432&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sources:&lt;/strong&gt; &lt;code&gt;BACKEND_SUBNET_CIDR&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Action:&lt;/strong&gt; &lt;code&gt;Accept&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;This lets your frontend accept Postgres traffic from your backend subnet.&lt;/em&gt;&lt;br&gt;&lt;br&gt;
You should add rules for each back-end application and its corresponding port.&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%2F23fjvz4b0fayxxsa7jn2.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%2F23fjvz4b0fayxxsa7jn2.png" alt="Image description" width="443" height="937"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After adding all needed rules, your dashboard will look like this:  &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%2Fpc0ijhmramtae96iru7r.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%2Fpc0ijhmramtae96iru7r.png" alt="Image description" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Remember:&lt;/strong&gt; Inbound policy stays set to &lt;strong&gt;Drop&lt;/strong&gt;—only the ports and sources you explicitly allow will work.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Final Tips
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Least Privilege:&lt;/strong&gt; Only open the ports and source IPs/subnets you absolutely need.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review Regularly:&lt;/strong&gt; When your infrastructure changes (new CI runners, different subnets), update your firewall rules.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Private Subnets:&lt;/strong&gt; Keep all backend services isolated from the public Internet whenever possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this in place, your Linode VPC and firewalls will be locked down to only the traffic you explicitly allow—and everything else will be dropped by default. Happy deploying!  &lt;/p&gt;

</description>
      <category>vpc</category>
      <category>firewall</category>
      <category>akamai</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
