<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[DevBrief]]></title><description><![CDATA[Succinct tech insights for the busy software engineer and IT professional.]]></description><link>https://www.devbrief.com</link><image><url>https://substackcdn.com/image/fetch/$s_!cPcA!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F840be9ad-8097-4bb0-8991-0c4725c218cc_144x144.png</url><title>DevBrief</title><link>https://www.devbrief.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 06 May 2026 11:38:17 GMT</lastBuildDate><atom:link href="https://www.devbrief.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Matthew Pomar]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[devbrief@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[devbrief@substack.com]]></itunes:email><itunes:name><![CDATA[Matthew Pomar]]></itunes:name></itunes:owner><itunes:author><![CDATA[Matthew Pomar]]></itunes:author><googleplay:owner><![CDATA[devbrief@substack.com]]></googleplay:owner><googleplay:email><![CDATA[devbrief@substack.com]]></googleplay:email><googleplay:author><![CDATA[Matthew Pomar]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Welcome to DevBrief: Your New Go-To for Tech Insights]]></title><description><![CDATA[Say hello to DevBrief! Get concise tech insights, software development tips, product reviews, and more, all designed for busy software engineers and IT pros. Join the community now! #DevBrief #TechInsights #SoftwareDevelopment #ITProfessionals]]></description><link>https://www.devbrief.com/p/welcome-to-devbrief-your-new-tech-insights</link><guid isPermaLink="false">https://www.devbrief.com/p/welcome-to-devbrief-your-new-tech-insights</guid><dc:creator><![CDATA[Matthew Pomar]]></dc:creator><pubDate>Mon, 15 Jul 2024 12:37:23 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1603912699214-92627f304eb6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxncmFuZCUyMG9wZW5pbmd8ZW58MHx8fHwxNzIxMDQ2Nzk2fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello everyone!</p><p>I&#8217;m thrilled to announce the launch of DevBrief, your new go-to source for quick, impactful tech insights. Whether you're a busy professional, tech enthusiast, or business owner, DevBrief is here to keep you updated on all things tech without the fluff.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1603912699214-92627f304eb6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxncmFuZCUyMG9wZW5pbmd8ZW58MHx8fHwxNzIxMDQ2Nzk2fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1603912699214-92627f304eb6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxncmFuZCUyMG9wZW5pbmd8ZW58MHx8fHwxNzIxMDQ2Nzk2fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1603912699214-92627f304eb6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxncmFuZCUyMG9wZW5pbmd8ZW58MHx8fHwxNzIxMDQ2Nzk2fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1603912699214-92627f304eb6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxncmFuZCUyMG9wZW5pbmd8ZW58MHx8fHwxNzIxMDQ2Nzk2fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1603912699214-92627f304eb6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxncmFuZCUyMG9wZW5pbmd8ZW58MHx8fHwxNzIxMDQ2Nzk2fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1603912699214-92627f304eb6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxncmFuZCUyMG9wZW5pbmd8ZW58MHx8fHwxNzIxMDQ2Nzk2fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="3800" height="3040" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1603912699214-92627f304eb6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxncmFuZCUyMG9wZW5pbmd8ZW58MHx8fHwxNzIxMDQ2Nzk2fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3040,&quot;width&quot;:3800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;white and black love is love print glass&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="white and black love is love print glass" title="white and black love is love print glass" srcset="https://images.unsplash.com/photo-1603912699214-92627f304eb6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxncmFuZCUyMG9wZW5pbmd8ZW58MHx8fHwxNzIxMDQ2Nzk2fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1603912699214-92627f304eb6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxncmFuZCUyMG9wZW5pbmd8ZW58MHx8fHwxNzIxMDQ2Nzk2fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1603912699214-92627f304eb6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxncmFuZCUyMG9wZW5pbmd8ZW58MHx8fHwxNzIxMDQ2Nzk2fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1603912699214-92627f304eb6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxncmFuZCUyMG9wZW5pbmd8ZW58MHx8fHwxNzIxMDQ2Nzk2fDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="true">Clay Banks</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><h3>What&#8217;s DevBrief All About?</h3><p>At DevBrief, the focus is on delivering concise, well-researched content that cuts straight to the chase. From software development and product reviews to NAS servers, you&#8217;ll find a variety of topics that cater to your tech curiosity. Plus, if you&#8217;re into NAS servers, especially Synology and custom builds, there&#8217;s plenty of in-depth coverage coming your way.</p><h3>Who&#8217;s Behind DevBrief?</h3><p>I&#8217;m Matthew Pomar, a Lead Salesforce Developer and Technical Architect with over 12 years in Salesforce development and architecture, 27 years in other software development, and 32 years of total IT experience. With a passion for technology and a knack for making complex topics accessible, I&#8217;ve created DevBrief to share reliable and engaging tech content with you.</p><h3>What to Expect</h3><p>Here&#8217;s a sneak peek at what you can expect from DevBrief:</p><ul><li><p><strong>Software Development:</strong> Tips, tutorials, and best practices for various programming languages and frameworks.</p></li><li><p><strong>Product Reviews:</strong> Unbiased reviews of the latest software, tools, and services to help engineers and IT professionals.</p></li><li><p><strong>Guides and How-Tos:</strong> Step-by-step guides to help you navigate new technologies and solve common tech problems.</p></li><li><p><strong>NAS Servers:</strong> Detailed coverage on NAS servers, with a special focus on Synology, but also including other brands.</p></li></ul><h3>Make Sure to Subscribe</h3><p>Stay ahead of the curve by subscribing to DevBrief on Substack. By subscribing, you&#8217;ll enjoy:</p><ul><li><p><strong>Exclusive Content:</strong> Access articles, guides, and reviews that are only available to subscribers.</p></li><li><p><strong>Regular Updates:</strong> Get notified whenever new content is posted, so you never miss out on the latest insights.</p></li><li><p><strong>Community Engagement:</strong> Participate in discussions, ask questions, and connect with fellow tech enthusiasts through Substack&#8217;s Chat and DM features.</p></li></ul><p>Don&#8217;t miss out on the valuable content designed to make your tech journey smoother and more informed. Subscribe now and become a part of the DevBrief community!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.devbrief.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.devbrief.com/subscribe?"><span>Subscribe now</span></a></p><h3>Join the Community</h3><p>I invite you to join the DevBrief community by subscribing to the newsletter on Substack, following on social media, and participating in the discussions. Together, let&#8217;s learn and grow in the ever-evolving world of technology.</p><h3>Get in Touch</h3><p>Got questions, suggestions, or just want to say hi? Reach out via Substack&#8217;s Chat or DM.</p><p>Thank you for being a part of this exciting journey. Stay tuned for your daily dose of succinct tech insights for the busy software engineer and IT professional!</p><p>Best,</p><p>Matthew Pomar</p>]]></content:encoded></item><item><title><![CDATA[Mastering Cloudflare Redirects for Substack: A Developer's Guide]]></title><description><![CDATA[Join me on a deep dive into implementing URL redirects for Substack blogs using Cloudflare. Discover practical solutions and best practices! #WebDev #Cloudflare #Substack #DevBrief]]></description><link>https://www.devbrief.com/p/cloudflare-redirects-substack-guide</link><guid isPermaLink="false">https://www.devbrief.com/p/cloudflare-redirects-substack-guide</guid><dc:creator><![CDATA[Matthew Pomar]]></dc:creator><pubDate>Sun, 14 Jul 2024 12:17:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uN6G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc42fe2ca-884c-4b00-a10b-fd013d75e4a4_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Implementing URL redirects for a Substack blog using Cloudflare can be a complex task, especially when trying to adhere to Substack's recommended DNS settings. This post explores the challenges, potential solutions, and best practices for setting up redirects while maintaining optimal performance and security.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uN6G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc42fe2ca-884c-4b00-a10b-fd013d75e4a4_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uN6G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc42fe2ca-884c-4b00-a10b-fd013d75e4a4_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!uN6G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc42fe2ca-884c-4b00-a10b-fd013d75e4a4_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!uN6G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc42fe2ca-884c-4b00-a10b-fd013d75e4a4_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!uN6G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc42fe2ca-884c-4b00-a10b-fd013d75e4a4_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uN6G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc42fe2ca-884c-4b00-a10b-fd013d75e4a4_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c42fe2ca-884c-4b00-a10b-fd013d75e4a4_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:224760,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uN6G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc42fe2ca-884c-4b00-a10b-fd013d75e4a4_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!uN6G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc42fe2ca-884c-4b00-a10b-fd013d75e4a4_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!uN6G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc42fe2ca-884c-4b00-a10b-fd013d75e4a4_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!uN6G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc42fe2ca-884c-4b00-a10b-fd013d75e4a4_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The Cloudflare-Substack Redirect Challenge</h2><p>I recently faced an interesting challenge when migrating my <a href="https://www.retrothusiast.com">Retrothusiast</a> WordPress blog to Substack. The main issue arose from the difference in URL structures between WordPress and Substack. While my WordPress posts were accessible at URLs like <code>https://www.retrothusiast.com/awesome-blog-post</code>, Substack appends a <code>/p/</code> prefix to all post URLs, resulting in <code>https://www.retrothusiast.com/p/awesome-blog-post</code>.</p><p>This discrepancy meant that all my existing links would break unless I implemented proper redirects. Naturally, I turned to Cloudflare, a popular content delivery network and DNS provider, to handle these redirects. However, I quickly encountered a significant roadblock.</p><h3>Substack's DNS Recommendations</h3><p>Substack's documentation explicitly recommends setting the "www" CNAME record to "DNS Only" when configuring Cloudflare. This setting disables Cloudflare's proxy features, including the ability to use Workers and other redirect features.</p><p>Here's what Substack's support AI had to say about using Cloudflare's proxy:</p><blockquote><p>When using Cloudflare for your custom domain on Substack, it's important to set the &#8220;Proxy status&#8221; of your CNAME record to &#8220;DNS only.&#8221; This setting ensures that the DNS record is not proxied through Cloudflare's servers, which can interfere with the proper functioning of your Substack publication.</p></blockquote><p>This recommendation posed a significant challenge to my initial plan of using Cloudflare's features for redirects.</p><h2>Understanding the Risks of Proxying</h2><p>Before diving into solutions, it's crucial to understand why Substack recommends against proxying through Cloudflare. After extensive research and discussions with Substack support, I identified several potential issues that could arise from using Cloudflare's proxy with a Substack publication:</p><ol><li><p><strong>SSL/TLS Certificate Errors</strong>: The SSL configuration between Cloudflare and Substack could potentially cause certificate errors, leading to security warnings in browsers.</p></li><li><p><strong>Caching Issues</strong>: Cloudflare's caching mechanisms might serve outdated content, causing problems with dynamic content like new posts or updates.</p></li><li><p><strong>Email Deliverability</strong>: The proxy could affect how the domain's DNS records are handled, potentially causing issues with email deliverability if SPF, DKIM, and DMARC records are not correctly set.</p></li><li><p><strong>Performance Issues</strong>: While Cloudflare generally improves site performance, misconfigurations could lead to increased load times or errors during high traffic periods.</p></li><li><p><strong>Redirection Loops</strong>: Incorrectly configured redirects in Cloudflare could cause redirection loops, making the site inaccessible.</p></li></ol><p>These risks, while manageable for an experienced developer, could indeed cause significant issues for the average Substack user. It became clear why Substack recommends the "DNS Only" setting as a safer default option.</p><h2>Exploring Cloudflare Solutions</h2><p>Despite Substack's recommendations, I decided to explore Cloudflare's features to see if I could find a workable solution for implementing redirects. My focus landed on Cloudflare Bulk Redirects, a feature available even on the free Cloudflare plan.</p><h3>Implementing Cloudflare Bulk Redirects</h3><p>To set up Bulk Redirects, I followed these steps in the Cloudflare UI:</p><ol><li><p>Logged into my Cloudflare dashboard.</p></li><li><p>Navigated to the "Rules" section.</p></li><li><p>Clicked on "Bulk Redirects".</p></li><li><p>Created a new Bulk Redirect List.</p></li><li><p>Added my redirect rules, specifying the source URL and the target URL for each redirect.</p></li></ol><p>I made sure to include redirects for all my important posts and categories.</p><h3>Setting Up the Bulk Redirect Rule</h3><p>After creating the Bulk Redirect List, I set up a rule to apply these redirects:</p><ol><li><p>In the Bulk Redirects section, I clicked on "Create rule".</p></li><li><p>I named the rule "Retrothusiast Redirects".</p></li><li><p>Under "When incoming requests match...", I set:</p><ul><li><p>Field: Hostname</p></li><li><p>Operator: equals</p></li><li><p>Value: retrothusiast.com</p></li></ul></li><li><p>Under "Then, apply matching URL redirects from the following list...", I selected my created redirect list.</p></li><li><p>I reviewed the settings and clicked "Save".</p></li></ol><p>This configuration allows Cloudflare to apply the redirects when requests match my domain, ensuring that old URLs are properly redirected to their new Substack counterparts.</p><h2>The DNS Only Dilemma</h2><p>Even with Bulk Redirects set up, I still faced the dilemma of Substack's "DNS Only" recommendation. Cloudflare's redirect features, including Bulk Redirects, require the domain to be proxied through Cloudflare (orange cloud icon). This put me at a crossroads: adhere strictly to Substack's recommendation or implement the necessary redirects.</p><h2>Weighing the Options</h2><p>After careful consideration, I found myself facing four distinct options, each with its own set of pros and cons:</p><ol><li><p><strong>Use a custom domain with DNS Only</strong>: This option would adhere strictly to Substack's recommendations, but it meant living with 404 errors for all my old URLs and losing valuable backlinks.</p></li><li><p><strong>Use a custom domain with a subdomain</strong>: By setting up something like substack.retrothusiast.com, I could potentially keep my backlinks and avoid 404 errors. However, this would mean changing my main URL structure, which could confuse regular readers.</p></li><li><p><strong>Don't use a custom domain</strong>: Running my blog directly off the Substack domain (retrothusiast.substack.com) would be the simplest solution technically, but it would mean losing my established brand presence and starting from scratch in terms of SEO.</p></li><li><p><strong>Use a custom domain with Cloudflare's Proxy feature</strong>: This option would allow me to implement the necessary redirects and maintain my backlinks, but it goes against Substack's recommendations and could potentially lead to issues.</p></li></ol><p>After weighing these options carefully, I ultimately decided to go with option 4: using a custom domain with Cloudflare's Proxy feature enabled. This decision was not made lightly, and I committed to closely monitoring the site for any issues that might arise.</p><p>Here's why I chose this path:</p><ol><li><p><strong>Preserving SEO and User Experience</strong>: By implementing redirects, I could maintain my SEO value and ensure that users following old links would still reach the correct content.</p></li><li><p><strong>Leveraging Cloudflare's Features</strong>: The Bulk Redirects feature offered a manageable way to handle the URL structure change without diving into complex server configurations.</p></li><li><p><strong>Balancing Risk and Reward</strong>: While this approach goes against Substack's recommendations, the potential benefits of maintaining my site's integrity outweighed the risks in my specific situation.</p></li><li><p><strong>Commitment to Monitoring</strong>: I set up thorough monitoring to quickly catch and address any issues that might arise from this configuration.</p></li></ol><p>This decision underscores an important lesson in web development and site migrations: sometimes, you have to make calculated decisions that balance best practices with practical necessities. However, it's crucial to do so with a full understanding of the potential risks and a solid plan for mitigation.</p><h2>Take Away</h2><p>This decision underscores an important lesson in web development and site migrations: sometimes, you have to make calculated decisions that balance best practices with practical necessities. However, it's crucial to do so with a full understanding of the potential risks and a solid plan for mitigation.</p><h2>Conclusion</h2><p>Implementing redirects for a Substack blog using Cloudflare while adhering to Substack's recommendations is a challenging task that requires careful consideration of various factors. While there's no one-size-fits-all solution, a combination of limited use of Cloudflare Bulk Redirects, strategic use of Substack's import tools, and constant monitoring can achieve a workable balance.</p><p>Remember, every website has unique requirements, and what worked for me might not be the perfect solution for everyone. Always test thoroughly and be prepared to adjust your approach as needed.</p><p>If you've faced similar challenges or have alternative solutions to share, I'd love to hear about them. Let's continue the conversation and help each other navigate the ever-evolving landscape of web development and content platforms.</p><h2>Join the Community</h2><p>Did you find this article helpful? There's plenty more where that came from! Subscribe to DevBrief for regular doses of practical tech insights tailored for busy software engineers and IT professionals. Join our growing community on Substack <a href="https://www.devbrief.com/chat">Chat</a> to discuss this topic further, share your experiences, and connect with like-minded individuals. Let's learn and grow together!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.devbrief.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.devbrief.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Removing the Shackles from Proton Mail with SSH Port Forwarding and Tailscale]]></title><description><![CDATA[Setting Up SSH Port Forwarding for ProtonMail Bridge with Tailscale and Local Network on Ubuntu]]></description><link>https://www.devbrief.com/p/removing-the-shackles-from-proton-mail-with-ssh</link><guid isPermaLink="false">https://www.devbrief.com/p/removing-the-shackles-from-proton-mail-with-ssh</guid><dc:creator><![CDATA[Matthew Pomar]]></dc:creator><pubDate>Sun, 30 Jun 2024 13:32:06 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/602cc1e2-6410-483c-8b97-46d9bb398570_1024x1024.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As a devoted Proton Mail user, I've long appreciated its robust security and privacy features. However, these same features can sometimes feel restrictive, especially when you want to access your emails through various clients or helpdesk software.</p><p>In this guide, I'll show you how I broke free from these limitations using SSH Port Forwarding and Tailscale on Ubuntu, allowing me to securely access my Proton Mail account from any device or location, all while maintaining the strong encryption and privacy that drew me to Proton Mail in the first place.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Qit1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbdc43f-384c-4256-b394-498366f82dc7_1024x1024.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Qit1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbdc43f-384c-4256-b394-498366f82dc7_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!Qit1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbdc43f-384c-4256-b394-498366f82dc7_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!Qit1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbdc43f-384c-4256-b394-498366f82dc7_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!Qit1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbdc43f-384c-4256-b394-498366f82dc7_1024x1024.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Qit1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbdc43f-384c-4256-b394-498366f82dc7_1024x1024.webp" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/adbdc43f-384c-4256-b394-498366f82dc7_1024x1024.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:451694,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Qit1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbdc43f-384c-4256-b394-498366f82dc7_1024x1024.webp 424w, https://substackcdn.com/image/fetch/$s_!Qit1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbdc43f-384c-4256-b394-498366f82dc7_1024x1024.webp 848w, https://substackcdn.com/image/fetch/$s_!Qit1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbdc43f-384c-4256-b394-498366f82dc7_1024x1024.webp 1272w, https://substackcdn.com/image/fetch/$s_!Qit1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadbdc43f-384c-4256-b394-498366f82dc7_1024x1024.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Setting Proton Mail Free</h2><p>Let me start by saying I love Proton Mail. I love the security and privacy (of course), I love the clean UI design, and I love that it works for both personal and business use cases. I love that it has a great Calendar that works with multiple domains, Drive, Password Manager, and now Standard Notes is joining the fold. I love the support team. I love the company mission and leadership. There is so much to love.</p><p>However, the security benefit is also a double-edged sword. I have to use the Proton apps to access my email and calendar. I can use the Proton Mail Bridge, but it's only available via localhost (127.0.0.1). I want to be able to use any email client on my phone or desktop computer, and I want to continue to access IMAP using help desktop software like FreeScout.</p><p>The good news, I can do all of these things and still maintain strong security and encryption. By using SSH Port Forwarding and Tailscale on Ubuntu (could also work on other operating systems), I have setup port forwarding between Proton Mail Bridge listening on localhost to a local network IP address as well as a Tailscale VPN address. Doing this allows me to access my email via IMAP and SMTP on my local network and over the Tailscale network, setting Proton Mail free to be used as I like.</p><h2>How To Set It Up</h2><p>I'm no Ubuntu guru. Most of what I did here was done with heavy help from ChatGPT. There may be better ways to do this, or easier ways, or just different ways. I am just saying this is how I set it up and how you might set this up as well if you are interested.</p><p>Here's what you need:</p><ul><li><p>Ubuntu installed on a VM or physical machine.</p></li><li><p>Proton Mail Bridge installed and configured.</p></li><li><p>Tailscale installed and configured.</p></li><li><p>Know your way around on a terminal command line at least a little.</p></li></ul><p>Now, let's dive into the process of setting this up on an Ubuntu system.</p><h2>Setting Up the Environment</h2><p>Before we dive into the nitty-gritty of SSH port forwarding, let's ensure we have all the necessary components in place.</p><h3>Installing ProtonMail Bridge</h3><p>First things first, we need to install ProtonMail Bridge on our Ubuntu system. Here's how (check the <a href="https://proton.me/mail/bridge">Proton Mail website</a> for latest and greatest instructions):</p><ol><li><p>Download the .deb package from the ProtonMail website.</p></li><li><p>Open a terminal and navigate to the directory containing the downloaded file.</p></li><li><p>Run the following command:</p></li></ol><pre><code>sudo apt install ./protonmail-bridge_&lt;version&gt;_amd64.deb</code></pre><p>Replace <code>&lt;version&gt;</code> with the actual version number of the downloaded package.</p><p>If you encounter any dependency issues, you can resolve them by running:</p><pre><code>sudo apt --fix-broken install</code></pre><h3>Installing Tailscale</h3><p>Tailscale is a crucial component of our setup, allowing for secure remote access. Here's how to install it on Ubuntu (check the <a href="https://tailscale.com/download/linux">Tailscale website</a> for latest and greatest instructions):</p><ol><li><p>Add Tailscale's package repository:</p></li></ol><pre><code>curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg &gt;/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list</code></pre><ol start="2"><li><p>Update the package list and install Tailscale:</p></li></ol><pre><code>sudo apt-get update
sudo apt-get install tailscale</code></pre><ol start="3"><li><p>Start Tailscale and authenticate:</p></li></ol><pre><code>sudo tailscale up</code></pre><p>This command will provide a URL. Open this URL in your web browser to authenticate and connect your device to your Tailscale network.</p><ol start="4"><li><p>Verify Tailscale is running:</p></li></ol><pre><code>tailscale status</code></pre><p>This should display your Tailscale IP address and other connected devices in your Tailscale network.</p><p>Remember to note your Tailscale IP address, as you'll need it when configuring the SSH port forwarding for Tailscale.</p><h3>Setting Up SSH</h3><p>Next, we need to ensure SSH is properly configured on our Ubuntu system:</p><p>Install OpenSSH Server:</p><pre><code>sudo apt update &amp;&amp; sudo apt install openssh-server</code></pre><p>Verify that the SSH service is running:</p><pre><code>sudo systemctl status ssh</code></pre><p>You should see output indicating that the service is active and running.</p><h2>Configuring SSH Port Forwarding</h2><p>Now that we have the basic components in place, let's set up SSH port forwarding to expose the ProtonMail Bridge service.</p><h3>Creating a Systemd Service for Local Network</h3><p>We'll start by creating a systemd service that handles port forwarding for our local network:</p><ol><li><p>Create a new systemd service file:</p></li></ol><pre><code>sudo nano /etc/systemd/system/ssh-port-forwarding-local.service</code></pre><ol start="2"><li><p>Add the following content to the file:</p></li></ol><pre><code>[Unit]
Description=SSH Port Forwarding for Local Network
After=network-online.target
Wants=network-online.target

[Service]
User=your_username
ExecStart=/usr/bin/ssh -i /home/your_username/.ssh/id_rsa -N \
    -L 192.168.x.x:1143:localhost:1143 \
    -L 192.168.x.x:1025:localhost:1025 \
    your_username@localhost
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target</code></pre><p>Make sure to replace <code>your_username</code> with your actual username.</p><ol start="3"><li><p>Save the file and exit the text editor.</p></li><li><p>Reload the systemd daemon to recognize the new service:</p></li></ol><pre><code>sudo systemctl daemon-reload</code></pre><p>Enable and start the service:</p><pre><code>sudo systemctl enable ssh-port-forwarding-local
sudo systemctl start ssh-port-forwarding-local</code></pre><p>This service will forward the ProtonMail Bridge IMAP (1143) and SMTP (1025) ports from your local IP address to localhost.</p><h3>Setting Up Tailscale Port Forwarding</h3><p>Now, let's set up a separate service for Tailscale port forwarding. This will allow us to access ProtonMail Bridge remotely:</p><ol><li><p>Create a user-level systemd service file:</p></li></ol><pre><code>mkdir -p ~/.config/systemd/user/ nano ~/.config/systemd/user/ssh-port-forwarding-tailscale.service</code></pre><ol start="2"><li><p>Add the following content to the file:</p></li></ol><pre><code>[Unit]
Description=SSH Port Forwarding for Tailscale Network
After=network-online.target
Wants=network-online.target

[Service]
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/ssh -i /home/your_username/.ssh/id_rsa -N \
  -L 100.100.x.x:1143:localhost:1143 \
  -L 100.100.x.x:1025:localhost:1025 \
  your_username@localhost
Restart=always
RestartSec=10

[Install]
WantedBy=default.target</code></pre><p>Replace <code>your_username</code> with your actual username and <code>100.100.x.x</code> with your Tailscale IP address.</p><ol start="3"><li><p>Save the file and exit the text editor.</p></li><li><p>Reload the user systemd daemon:</p></li></ol><pre><code>systemctl --user daemon-reload</code></pre><ol start="5"><li><p>Enable and start the user service:</p></li></ol><pre><code>systemctl --user enable ssh-port-forwarding-tailscale
systemctl --user start ssh-port-forwarding-tailscale</code></pre><h2>Overcoming Challenges</h2><p>During the setup process, I encountered a few challenges that required some creative problem-solving. Here are some of the issues I faced and how I resolved them:</p><h3>Boot and Login Delays</h3><p>Initially, I tried to use a sleep command (<code>ExecStartPre=/bin/sleep 10</code>) in the systemd service to ensure all necessary services were up before starting the port forwarding. However, this caused significant delays in boot and login times.</p><p><strong>Solution</strong>: I removed the sleep command and instead relied on the <code>After</code> and <code>Requires</code> directives in the systemd unit files to ensure proper service dependencies.</p><h3>Port Conflicts</h3><p>I ran into issues with port conflicts, particularly with the ProtonMail Bridge already using ports 1143 and 1025 on localhost.</p><p><strong>Solution</strong>: Instead of binding directly to these ports, I set up the SSH port forwarding to listen on the specific IP addresses (both local network and Tailscale) and forward to the localhost ports. This allowed the ProtonMail Bridge to run normally while still providing remote access.</p><h3>Tailscale Connectivity Issues</h3><p>Initially, the Tailscale port forwarding wasn't working reliably after system reboots.</p><p><strong>Solution</strong>: I created a separate user-level systemd service for Tailscale port forwarding. This service starts after login, ensuring that the Tailscale network is fully established before attempting to set up the port forwarding.</p><h2>Fine-Tuning the Setup</h2><p>After getting the basic setup working, I made a few additional tweaks to optimize the configuration:</p><h3>Separating Local and Tailscale Services</h3><p>By creating separate services for local network and Tailscale port forwarding, I ensured that local access would always be available immediately after boot, while Tailscale access would become available after login. This separation provides a good balance between immediate local access and secure remote access.</p><h3>Handling Network Changes</h3><p>To make the setup more robust, I added the <code>Restart=always</code> and <code>RestartSec=10</code> options to both service files. This ensures that if there are any network interruptions or changes, the port forwarding will automatically attempt to re-establish itself.</p><h2>Testing and Verification</h2><p>After setting up the port forwarding, it's crucial to test and verify that everything is working as expected. Here are some steps I took to ensure the setup was functioning correctly:</p><ol><li><p><strong>Check Service Status</strong>: Use the following commands to verify that both services are running without errors:</p></li></ol><pre><code>sudo systemctl status ssh-port-forwarding-local
systemctl --user status ssh-port-forwarding-tailscale</code></pre><ol start="2"><li><p><strong>Verify Port Bindings</strong>: Use the <code>ss</code> command to check if the ports are correctly bound:</p></li></ol><pre><code>sudo ss -tuln | grep 1143
sudo ss -tuln | grep 1025</code></pre><ol start="3"><li><p><strong>Test Local Access</strong>: Configure your email client to connect to the local IP address (e.g., 192.168.x.x) using ports 1143 for IMAP and 1025 for SMTP.</p></li><li><p><strong>Test Remote Access</strong>: From a device on a different network, use the Tailscale IP address to connect to your ProtonMail Bridge.</p></li></ol><h2>Take Aways</h2><p>This project taught me several valuable lessons about network configuration and service management in Linux:</p><ol><li><p><strong>Understand Service Dependencies</strong>: Properly managing service dependencies is crucial for a reliable setup, especially when dealing with network-related services.</p></li><li><p><strong>Separate Concerns</strong>: Splitting the port forwarding into two services (local and Tailscale) provided more flexibility and reliability.</p></li><li><p><strong>User-Level Services</strong>: Utilizing user-level systemd services for non-critical components can help avoid boot-time issues and provide better isolation.</p></li><li><p><strong>Iterative Problem Solving</strong>: Don't be afraid to iterate on your solution. My initial attempts had issues, but through persistence and tweaking, I arrived at a robust configuration.</p></li><li><p><strong>Documentation is Key</strong>: Keeping detailed notes throughout the process not only helped me troubleshoot issues but also allowed me to create this guide to help others.</p></li></ol><h2>Wrap Up</h2><p>Setting up SSH port forwarding with Tailscale for ProtonMail Bridge access was a challenging but rewarding project. It provided me with a secure and reliable way to access my ProtonMail account from anywhere, while also deepening my understanding of Linux networking and service management.</p><p>This setup has significantly improved my workflow, allowing me to seamlessly access my secure email whether I'm on my local network or working remotely. The combination of SSH's security and Tailscale's ease of use has proven to be a powerful solution for remote access needs.</p><p>Remember, while this guide provides a detailed walkthrough, always ensure you understand each step and consider the security implications for your specific setup. </p><p>Happy port forwarding!</p><h3>Join The Community</h3><p>Did you find this article helpful? There's more where that came from! Subscribe to DevBrief.com for more in-depth technical insights and join our vibrant community on Substack <a href="https://www.devbrief.com/chat">Chat</a>. Let's grow together as developers and IT professionals!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.devbrief.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.devbrief.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item></channel></rss>