ADVERTISEMENT

All in on Firewalla

Published Mar 22, 2023 01:19 am
I have been using Firewalla since the very first Kickstarter model, and last weekend, I have decided to go all in. For the longest time, my Firewalla RED (original Kickstarter model) was running in "Simple" mode - monitoring my home network and weeding out unwanted traffic. This configuration was migrated to the newer, more powerful Firewalla Purple. Last weekend, I re-flashed the Firewalla Purple model's firmware and configured it to act as my router. Whilst the built-in on-boarding, via the mobile app, was straightforward, I had to dig deeper to configure it according to my taste. First off was to change the DNS provider that the router is getting from the ISP. From here, I tinkered with several ways to manage the DNS settings of all devices behind the router. Firewalla Purple has Ad Blockers, Family Protect, and Safe Search settings that essentially protects every device. This should be sufficient for most, but not for a stickler like me who likes more control.
DNS Resolution Process of Firewalla c/o [Firewalla.com](http://firewalla.com/) Whilst all the ways DNS queries that can be processed by Firewalla are available to me, but I opted to keep it simple. Ad Block enabled, DNS Boost enabled, a couple of rules (including adding the [OISD.nl](http://oisd.nl/) database) and then straight to DNS over HTTPS (DoH) to [NextDNS.io](http://nextdns.io/), where I have full visibility and control of filtering and blocking. I could use Unbound for more privacy, but opted not to (at least not yet). New devices are automatically quarantined and not provided access to the network. Firewalla Purple also acts as the DHCP server providing IP addresses to the devices. Whilst you can assign or reserve an IP for specific MAC addresses, there is no way to assign DNS servers for each client, like normal DHCP servers do. Firewalla Purple handles DHCP for IPv4 and IPv6, which is great, specially when your ISP provides IPv6 connectivity. Unfortunately, though, DoH prefers using IPv4 connections, instead of IPv6. Whilst Firewalla Purple can open up specific ports and/or put a device under the DMZ, I opted to keep it turned off, and instead enabled its VPN server. So, whenever I need to connect to my home network, I just tunnel through the VPN. Firewalla devices run Linux, so the mobile application provides a setting that allows you to turn on the SSH server, for those times when you need to be a CLI-ninja! In my case, I use it for my iOS/macOS Shortcuts. My network at a glance With Firewalla Purple on router mode, I have better monitoring and control of my network. At a glance, I can find out when my ISP is having issues (high latency is displayed in yellow, service disruption in red), along with the total data that as transferred for the month and the number of alarms recorded (large data transfers, security issues, open ports, etc.). Firewalla also provides a browser-based interface, but it is not as feature-rich as the mobile application. All Firewalla models provide intrusion detection and intrusion prevention services, with databases kept up to date without added subscription cost. This is what sets it apart from the rest of the small, home-office routers in the same price range. The Firewalla Purple is sufficient for my needs at the moment, but the more powerful Gold model provides more Ethernet ports and more network controls. Do I have plans to upgrade? Not in the near future, perhaps when I have enough donations from you, dear readers.
ADVERTISEMENT
.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1561_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1562_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1563_widget.title }}

{{ articles_filter_1564_widget.title }}

.mb-article-details { position: relative; } .mb-article-details .article-body-preview, .mb-article-details .article-body-summary{ font-size: 17px; line-height: 30px; font-family: "Libre Caslon Text", serif; color: #000; } .mb-article-details .article-body-preview iframe , .mb-article-details .article-body-summary iframe{ width: 100%; margin: auto; } .read-more-background { background: linear-gradient(180deg, color(display-p3 1.000 1.000 1.000 / 0) 13.75%, color(display-p3 1.000 1.000 1.000 / 0.8) 30.79%, color(display-p3 1.000 1.000 1.000) 72.5%); position: absolute; height: 200px; width: 100%; bottom: 0; display: flex; justify-content: center; align-items: center; padding: 0; } .read-more-background a{ color: #000; } .read-more-btn { padding: 17px 45px; font-family: Inter; font-weight: 700; font-size: 18px; line-height: 16px; text-align: center; vertical-align: middle; border: 1px solid black; background-color: white; } .hidden { display: none; }
function initializeAllSwipers() { // Get all hidden inputs with cms_article_id document.querySelectorAll('[id^="cms_article_id_"]').forEach(function (input) { const cmsArticleId = input.value; const articleSelector = '#article-' + cmsArticleId + ' .body_images'; const swiperElement = document.querySelector(articleSelector); if (swiperElement && !swiperElement.classList.contains('swiper-initialized')) { new Swiper(articleSelector, { loop: true, pagination: false, navigation: { nextEl: '#article-' + cmsArticleId + ' .swiper-button-next', prevEl: '#article-' + cmsArticleId + ' .swiper-button-prev', }, }); } }); } setTimeout(initializeAllSwipers, 3000); const intersectionObserver = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const newUrl = entry.target.getAttribute("data-url"); if (newUrl) { history.pushState(null, null, newUrl); let article = entry.target; // Extract metadata const author = article.querySelector('.author-section').textContent.replace('By', '').trim(); const section = article.querySelector('.section-info ').textContent.replace(' ', ' '); const title = article.querySelector('.article-title h1').textContent; // Parse URL for Chartbeat path format const parsedUrl = new URL(newUrl, window.location.origin); const cleanUrl = parsedUrl.host + parsedUrl.pathname; // Update Chartbeat configuration if (typeof window._sf_async_config !== 'undefined') { window._sf_async_config.path = cleanUrl; window._sf_async_config.sections = section; window._sf_async_config.authors = author; } // Track virtual page view with Chartbeat if (typeof pSUPERFLY !== 'undefined' && typeof pSUPERFLY.virtualPage === 'function') { try { pSUPERFLY.virtualPage({ path: cleanUrl, title: title, sections: section, authors: author }); } catch (error) { console.error('ping error', error); } } // Optional: Update document title if (title && title !== document.title) { document.title = title; } } } }); }, { threshold: 0.1 } ); function showArticleBody(button) { const article = button.closest("article"); const summary = article.querySelector(".article-body-summary"); const body = article.querySelector(".article-body-preview"); const readMoreSection = article.querySelector(".read-more-background"); // Hide summary and read-more section summary.style.display = "none"; readMoreSection.style.display = "none"; // Show the full article body body.classList.remove("hidden"); } document.addEventListener("DOMContentLoaded", () => { let loadCount = 0; // Track how many times articles are loaded const offset = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Offset values const currentUrl = window.location.pathname.substring(1); let isLoading = false; // Prevent multiple calls if (!currentUrl) { console.log("Current URL is invalid."); return; } const sentinel = document.getElementById("load-more-sentinel"); if (!sentinel) { console.log("Sentinel element not found."); return; } function isSentinelVisible() { const rect = sentinel.getBoundingClientRect(); return ( rect.top < window.innerHeight && rect.bottom >= 0 ); } function onScroll() { if (isLoading) return; if (isSentinelVisible()) { if (loadCount >= offset.length) { console.log("Maximum load attempts reached."); window.removeEventListener("scroll", onScroll); return; } isLoading = true; const currentOffset = offset[loadCount]; window.loadMoreItems().then(() => { let article = document.querySelector('#widget_1690 > div:nth-last-of-type(2) article'); intersectionObserver.observe(article) loadCount++; }).catch(error => { console.error("Error loading more items:", error); }).finally(() => { isLoading = false; }); } } window.addEventListener("scroll", onScroll); });

Sign up by email to receive news.