<?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: ZILL E ALI BUTT</title>
    <description>The latest articles on DEV Community by ZILL E ALI BUTT (@zilleali12).</description>
    <link>https://dev.to/zilleali12</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3935016%2Feb601cff-b230-42cd-8622-cd68face2e19.png</url>
      <title>DEV Community: ZILL E ALI BUTT</title>
      <link>https://dev.to/zilleali12</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zilleali12"/>
    <language>en</language>
    <item>
      <title>Zonclave: One Wi-Fi Network, Dozens of Independently-Routed Tunnels</title>
      <dc:creator>ZILL E ALI BUTT</dc:creator>
      <pubDate>Fri, 31 Jul 2026 04:30:00 +0000</pubDate>
      <link>https://dev.to/zilleali12/zonclave-one-wi-fi-network-dozens-of-independently-routed-tunnels-27bc</link>
      <guid>https://dev.to/zilleali12/zonclave-one-wi-fi-network-dozens-of-independently-routed-tunnels-27bc</guid>
      <description>&lt;p&gt;Most Wi-Fi networks give you one thing: a shared connection. Every device on the SSID rides the same route out to the internet, same NAT, same exit IP. That's fine until you need isolation separate residential IPs, separate policy routing, separate blast radius per group of devices.&lt;/p&gt;

&lt;p&gt;That's the exact problem Zonclave solves.&lt;/p&gt;

&lt;p&gt;The Problem&lt;/p&gt;

&lt;p&gt;I kept running into the same requirement across different projects: give multiple device groups their own Wi-Fi credential, but route each group's traffic through a completely separate path different VLAN, different tunnel, different exit IP without deploying a separate physical AP or router per group.&lt;/p&gt;

&lt;p&gt;Doing this manually on MikroTik is doable but tedious: create the VLAN, write the firewall rules, provision the WireGuard peer, tie it to a RADIUS-assigned group, repeat for every new credential. At any real scale (an ISP, an agency managing client networks, a shared office with per-tenant isolation needs) that manual process doesn't hold up.&lt;/p&gt;

&lt;p&gt;How Zonclave Works&lt;/p&gt;

&lt;p&gt;Four steps, fully automatic once a credential is provisioned:&lt;/p&gt;

&lt;p&gt;Unique password :- a device joins the SSID using a credential generated just for its group. Never shared, never reused.&lt;br&gt;
RADIUS assigns a VLAN &lt;strong&gt;FreeRADIUS **authenticates the credential and hands back that group's dedicated VLAN. Nothing else touches it.&lt;br&gt;
A **private tunnel&lt;/strong&gt; the VLAN is policy-routed through its own WireGuard tunnel, explicitly pinned, never a shared default route.&lt;br&gt;
Its own &lt;strong&gt;residential IP&lt;/strong&gt; traffic egresses through that tunnel's residential exit, distinct from every other group on the network.&lt;/p&gt;

&lt;p&gt;The part I'd call the actual design decision, not just a feature: if a tunnel ever drops, that group's traffic is dropped too — never silently rerouted onto the plain internet connection. Fail-closed by default. A lot of similar setups fail open, which quietly defeats the entire point of the isolation.&lt;/p&gt;

&lt;p&gt;The Admin Layer — Peng Balous&lt;/p&gt;

&lt;p&gt;Running eight PPSK groups across eight VLANs and eight WireGuard tunnels by hand isn't sustainable, so the management layer (Peng Balous) handles the provisioning and monitoring:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PPSK Groups&lt;/strong&gt;: create/edit/disable a credential group, see its VLAN and WireGuard tunnel assignment at a glance, track active vs. stale vs. inactive sessions&lt;br&gt;
&lt;strong&gt;VLANs&lt;/strong&gt;: full list with subnet, WireGuard tunnel, gateway, and how many PPSKs are using each one&lt;br&gt;
&lt;strong&gt;Network Topology view&lt;/strong&gt;: a real-time-adjacent map from Internet → OPNsense → each VLAN, showing connected counts and active status&lt;br&gt;
Tunnel Egress IPs, Backups, Admin Log — the operational stuff you actually need once this is running in production, not just at setup&lt;/p&gt;

&lt;p&gt;Dashboard example from a live instance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cisco_ios"&gt;&lt;code&gt;&lt;span class="k"&gt;VLAN&lt;/span&gt; 300  &lt;span class="m"&gt;10.30.0.0/24&lt;/span&gt;  WG_VLAN300  1 active
&lt;span class="k"&gt;VLAN&lt;/span&gt; 301  &lt;span class="m"&gt;10.30.1.0/24&lt;/span&gt;  WG_VLAN301  1 active
&lt;span class="k"&gt;VLAN&lt;/span&gt; 302  &lt;span class="m"&gt;10.30.2.0/24&lt;/span&gt;  WG_VLAN302  1 active
&lt;span class="k"&gt;VLAN&lt;/span&gt; 303  &lt;span class="m"&gt;10.30.3.0/24&lt;/span&gt;  WG_VLAN303  5 connected, 1 active
&lt;span class="k"&gt;VLAN&lt;/span&gt; 304  &lt;span class="m"&gt;10.30.4.0/24&lt;/span&gt;  WG_VLAN304  2 connected, 2 active
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;VLAN design &amp;amp; routing&lt;/td&gt;
&lt;td&gt;MikroTik RouterOS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firewall / fail-closed policy routing&lt;/td&gt;
&lt;td&gt;OPNsense&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tunnel isolation per group&lt;/td&gt;
&lt;td&gt;WireGuard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credential → VLAN assignment&lt;/td&gt;
&lt;td&gt;FreeRADIUS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Admin panel&lt;/td&gt;
&lt;td&gt;Laravel + Filament&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data layer&lt;/td&gt;
&lt;td&gt;PostgreSQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Switching/AP layer&lt;/td&gt;
&lt;td&gt;UniFi&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Who This Is For
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ISPs&lt;/strong&gt; that want to offer per-customer or per-service-tier network isolation without deploying separate hardware per customer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agencies/MSPs&lt;/strong&gt; managing multiple client networks off one physical site&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Any environment&lt;/strong&gt; — coworking spaces, shared offices, multi-tenant setups — where "everyone's on the same Wi-Fi" is a security or compliance problem&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What's Next&lt;/p&gt;

&lt;p&gt;I'm treating this as a real product under Developer Zon, not a one-off client build. Next up is documenting the OPNsense/UniFi runbook for live tunnel health checks (the dashboard shows provisioned architecture, not live device status — that's a deliberate scope boundary, not a gap) and expanding the PPSK group management to support bulk provisioning.&lt;/p&gt;

&lt;p&gt;About the Author&lt;/p&gt;

&lt;p&gt;I'm Zill Ali, a Network Engineer at FiberX Digital Pvt Ltd in Gujrat, Pakistan, working on FTTH B2B/B2C infrastructure and NOC operations. MTCNA Certified | APNIC BCAP 2026 Candidate | Hikvision Certified Installer. I build ISP and network infrastructure tooling under Developer Zon.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://www.linkedin.com/in/zilleali12/" rel="noopener noreferrer"&gt;LinkedIn &lt;/a&gt;| &lt;a href="https://www.fiverr.com/zillealibutt" rel="noopener noreferrer"&gt;Fiverr &lt;/a&gt;| &lt;a href="//zilleali.com"&gt;zilleali.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Questions about the architecture or want to see the RADIUS/VLAN config? Drop them in the comments.&lt;/p&gt;

</description>
      <category>mikrotik</category>
      <category>networking</category>
      <category>wireguard</category>
      <category>opensource</category>
    </item>
    <item>
      <title>DEV WEEKEND with AWS Student Builder Group, QAU Islamabad</title>
      <dc:creator>ZILL E ALI BUTT</dc:creator>
      <pubDate>Tue, 28 Jul 2026 04:30:00 +0000</pubDate>
      <link>https://dev.to/zilleali12/dev-weekend-with-aws-student-builder-group-qau-islamabad-3pp1</link>
      <guid>https://dev.to/zilleali12/dev-weekend-with-aws-student-builder-group-qau-islamabad-3pp1</guid>
      <description>&lt;p&gt;Spent 3 days at Quaid i Azam University Islamabad for DEV WEEKEND, organized by the AWS Student Builder Group.&lt;/p&gt;

&lt;p&gt;What was covered:&lt;/p&gt;

&lt;p&gt;Tech career journeys in data, led by Taskeen Fatima (DataCamp)&lt;br&gt;
Git and GitHub fundamentals, led by Shiza Asghar&lt;br&gt;
Agentic AI with Kiro and Amazon Bedrock, led by &lt;a class="mentioned-user" href="https://dev.to/wardaliaqat01"&gt;@wardaliaqat01&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The Bedrock session stood out since Warda has been mentoring me directly. Watching the concepts she explained get applied live in a workshop format made a lot of things click.&lt;/p&gt;

&lt;p&gt;I work as a Junior Network Engineer at FiberX Digital, and I am building   &lt;a href="https://zilleali.lovable.app/nexalink" rel="noopener noreferrer"&gt;NexaLink&lt;/a&gt;, an ISP management SaaS, on the side. Events like this are a good checkpoint while I expand from networking into cloud and AI.&lt;/p&gt;

&lt;p&gt;Credit to Ali Mumtaz and the AWS SBG QAU team for a well run event.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloudcomputing</category>
      <category>networking</category>
      <category>git</category>
    </item>
    <item>
      <title>I built an AI powered RouterOS config generator for MikroTik network engineers</title>
      <dc:creator>ZILL E ALI BUTT</dc:creator>
      <pubDate>Thu, 02 Jul 2026 08:32:54 +0000</pubDate>
      <link>https://dev.to/zilleali12/i-built-an-ai-powered-routeros-config-generator-for-mikrotik-network-engineers-1ee9</link>
      <guid>https://dev.to/zilleali12/i-built-an-ai-powered-routeros-config-generator-for-mikrotik-network-engineers-1ee9</guid>
      <description>&lt;p&gt;As a Junior Network Engineer managing FTTH infrastructure across dozens of sites, I spend a lot of time writing and reviewing MikroTik RouterOS configs. Same categories of tasks come up constantly: PPPoE server setup, VLAN configuration, firewall hardening, RADIUS integration, WireGuard tunnels.&lt;br&gt;
I built MikroTik Config Generator to turn plain language requirements into deployable RouterOS v7 scripts.&lt;/p&gt;

&lt;p&gt;How it works:&lt;/p&gt;

&lt;p&gt;The frontend takes a plain language description of what you need. A Supabase edge function connected to Lovable AI Gateway processes the request through a system prompt that enforces RouterOS v7 syntax, applies security defaults (restricted management access, disabled unused services, dropped invalid connections), and asks for missing critical details like a WAN interface or LAN subnet instead of guessing.&lt;br&gt;
Generated configs and summaries return as structured JSON so the frontend renders the script and explanation separately.&lt;br&gt;
It also supports a review mode where you paste an existing config export and get back flagged issues with corrected commands.&lt;br&gt;
Stack: Lovable, Supabase (Auth, edge functions, Postgres with row-level security for per-user config history), Lovable AI Gateway.&lt;/p&gt;

&lt;p&gt;Try it: &lt;a href="https://zille-skill-mikrotik.lovable.app/" rel="noopener noreferrer"&gt;https://zille-skill-mikrotik.lovable.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open to feedback from anyone working with RouterOS in production, especially around edge cases in firewall or NAT logic.&lt;/p&gt;

</description>
      <category>routeros</category>
      <category>mikrotik</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I blocked all Social Media + DoH/DoT on MikroTik for an ISP network (step-by-step)</title>
      <dc:creator>ZILL E ALI BUTT</dc:creator>
      <pubDate>Sat, 16 May 2026 15:04:54 +0000</pubDate>
      <link>https://dev.to/zilleali12/how-i-blocked-all-social-media-dohdot-on-mikrotik-for-an-isp-network-step-by-step-3i82</link>
      <guid>https://dev.to/zilleali12/how-i-blocked-all-social-media-dohdot-on-mikrotik-for-an-isp-network-step-by-step-3i82</guid>
      <description>&lt;p&gt;Managing an ISP network means you often need to enforce content policies — whether for a corporate client, a school, or a regulated environment. In this post, I'll walk through exactly how I built a robust social media and app-blocking system on MikroTik RouterOS, including blocking DNS-over-HTTPS (DoH) and DNS-over-TLS (DoT) to prevent users from bypassing your filters.&lt;/p&gt;

&lt;p&gt;This is a real setup I implemented at &lt;strong&gt;FiberX Digital&lt;/strong&gt;, where I work as a Junior Network Engineer managing FTTH B2B and B2C infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We're Building
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Block social media platforms (Facebook, Instagram, TikTok, YouTube, Twitter/X, Snapchat, etc.)&lt;/li&gt;
&lt;li&gt;Block messaging apps (WhatsApp, Telegram, Signal)&lt;/li&gt;
&lt;li&gt;Force all DNS through your controlled resolver&lt;/li&gt;
&lt;li&gt;Block DoH and DoT so users can't bypass your DNS filters&lt;/li&gt;
&lt;li&gt;Use dynamic address lists for easy management&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MikroTik router running RouterOS v6.49+ or v7.x&lt;/li&gt;
&lt;li&gt;Admin access via Winbox or SSH&lt;/li&gt;
&lt;li&gt;Basic knowledge of MikroTik firewall rules&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 1 — Force DNS to Your Router
&lt;/h2&gt;

&lt;p&gt;First, redirect all outbound DNS (port 53) back to your router so no client can use an external resolver directly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/ip firewall nat
add &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dstnat &lt;span class="nv"&gt;protocol&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;udp dst-port&lt;span class="o"&gt;=&lt;/span&gt;53 &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;redirect to-ports&lt;span class="o"&gt;=&lt;/span&gt;53 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Force DNS to router UDP"&lt;/span&gt;
add &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dstnat &lt;span class="nv"&gt;protocol&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tcp dst-port&lt;span class="o"&gt;=&lt;/span&gt;53 &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;redirect to-ports&lt;span class="o"&gt;=&lt;/span&gt;53 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Force DNS to router TCP"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set your router's DNS and disable remote requests if not needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/ip dns
&lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;servers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.1.1.1,8.8.8.8 allow-remote-requests&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;yes &lt;/span&gt;cache-max-ttl&lt;span class="o"&gt;=&lt;/span&gt;1d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;code&gt;allow-remote-requests=yes&lt;/code&gt; is required for the NAT redirect to work. Lock it down at the firewall level instead (Step 4).&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Step 2 — Block DoH (DNS over HTTPS)
&lt;/h2&gt;

&lt;p&gt;DoH runs over port 443 HTTPS, so you can't just block a port. You need to block the known DoH provider IPs using an address list.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/ip firewall address-list
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;doh_servers &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.1.1.1 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Cloudflare DoH"&lt;/span&gt;
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;doh_servers &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.0.0.1 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Cloudflare DoH"&lt;/span&gt;
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;doh_servers &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8.8.8.8 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Google DoH"&lt;/span&gt;
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;doh_servers &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;8.8.4.4 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Google DoH"&lt;/span&gt;
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;doh_servers &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;9.9.9.9 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Quad9 DoH"&lt;/span&gt;
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;doh_servers &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;149.112.112.112 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Quad9 DoH"&lt;/span&gt;
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;doh_servers &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;94.140.14.14 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"AdGuard DoH"&lt;/span&gt;
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;doh_servers &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;94.140.15.15 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"AdGuard DoH"&lt;/span&gt;
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;doh_servers &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;185.228.168.9 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"CleanBrowsing DoH"&lt;/span&gt;
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;doh_servers &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;76.76.2.0 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ControlD DoH"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now drop traffic to those IPs on port 443:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/ip firewall filter
add &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;forward dst-address-list&lt;span class="o"&gt;=&lt;/span&gt;doh_servers dst-port&lt;span class="o"&gt;=&lt;/span&gt;443 &lt;span class="nv"&gt;protocol&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tcp &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;drop &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Block DoH"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 3 — Block DoT (DNS over TLS)
&lt;/h2&gt;

&lt;p&gt;DoT uses port 853. This one is easier — just block the port.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/ip firewall filter
add &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;forward dst-port&lt;span class="o"&gt;=&lt;/span&gt;853 &lt;span class="nv"&gt;protocol&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tcp &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;drop &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Block DoT port 853"&lt;/span&gt;
add &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;forward dst-port&lt;span class="o"&gt;=&lt;/span&gt;853 &lt;span class="nv"&gt;protocol&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;udp &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;drop &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Block DoT UDP 853"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 4 — Build Dynamic Address Lists for Social Media
&lt;/h2&gt;

&lt;p&gt;Instead of hardcoding IPs (which change), use DNS-based address lists with the MikroTik scripting engine to resolve and populate them automatically.&lt;/p&gt;

&lt;p&gt;First, create the address lists:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/ip firewall address-list
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;facebook.com &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Facebook"&lt;/span&gt;
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;www.facebook.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;instagram.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;www.instagram.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tiktok.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;www.tiktok.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;twitter.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;x.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;snapchat.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;youtube.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;www.youtube.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;whatsapp.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;web.whatsapp.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;telegram.org
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;web.telegram.org
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;reddit.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;www.reddit.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;linkedin.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;www.linkedin.com
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pinterest.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 5 — Use Layer-7 Matchers for SNI-Based Blocking
&lt;/h2&gt;

&lt;p&gt;For HTTPS traffic you need Layer-7 patterns to match the SNI (Server Name Indication) field before TLS is established.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/ip firewall layer7-protocol
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;facebook &lt;span class="nv"&gt;regexp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"^.+(facebook&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com|fbcdn&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.net|fb&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com).*&lt;/span&gt;&lt;span class="se"&gt;\$&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;instagram &lt;span class="nv"&gt;regexp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"^.+(instagram&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com|cdninstagram&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com).*&lt;/span&gt;&lt;span class="se"&gt;\$&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tiktok &lt;span class="nv"&gt;regexp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"^.+(tiktok&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com|tiktokv&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com|muscdn&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com).*&lt;/span&gt;&lt;span class="se"&gt;\$&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;youtube &lt;span class="nv"&gt;regexp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"^.+(youtube&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com|googlevideo&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com|ytimg&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com).*&lt;/span&gt;&lt;span class="se"&gt;\$&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;twitter &lt;span class="nv"&gt;regexp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"^.+(twitter&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com|x&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com|twimg&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com).*&lt;/span&gt;&lt;span class="se"&gt;\$&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;whatsapp &lt;span class="nv"&gt;regexp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"^.+(whatsapp&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.com|whatsapp&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.net).*&lt;/span&gt;&lt;span class="se"&gt;\$&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;telegram &lt;span class="nv"&gt;regexp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"^.+(telegram&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.org|t&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;.me).*&lt;/span&gt;&lt;span class="se"&gt;\$&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply the Layer-7 rules in the forward chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/ip firewall filter
add &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;forward layer7-protocol&lt;span class="o"&gt;=&lt;/span&gt;facebook &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;drop &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Block Facebook"&lt;/span&gt;
add &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;forward layer7-protocol&lt;span class="o"&gt;=&lt;/span&gt;instagram &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;drop &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Block Instagram"&lt;/span&gt;
add &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;forward layer7-protocol&lt;span class="o"&gt;=&lt;/span&gt;tiktok &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;drop &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Block TikTok"&lt;/span&gt;
add &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;forward layer7-protocol&lt;span class="o"&gt;=&lt;/span&gt;youtube &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;drop &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Block YouTube"&lt;/span&gt;
add &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;forward layer7-protocol&lt;span class="o"&gt;=&lt;/span&gt;twitter &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;drop &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Block Twitter/X"&lt;/span&gt;
add &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;forward layer7-protocol&lt;span class="o"&gt;=&lt;/span&gt;whatsapp &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;drop &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Block WhatsApp"&lt;/span&gt;
add &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;forward layer7-protocol&lt;span class="o"&gt;=&lt;/span&gt;telegram &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;drop &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Block Telegram"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Performance note:&lt;/strong&gt; Layer-7 inspection is CPU-intensive. On high-traffic routers (1Gbps+), consider using a dedicated content filter or combining with address-list drops to reduce L7 load.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Step 6 — DNS-Level Blocking (Fastest Method)
&lt;/h2&gt;

&lt;p&gt;The most efficient block is at DNS level. When a client requests facebook.com, your router returns NXDOMAIN or a redirect IP.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/ip dns static
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;facebook.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Block Facebook DNS"&lt;/span&gt;
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;www.facebook.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;instagram.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;www.instagram.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tiktok.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;www.tiktok.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;twitter.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;x.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;youtube.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;www.youtube.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;whatsapp.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;web.whatsapp.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;telegram.org &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;t.me &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;snapchat.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;reddit.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pinterest.com &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.0.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works because we already forced all DNS through the router in Step 1.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 7 — Apply Blocks to Specific IP Ranges Only (Optional)
&lt;/h2&gt;

&lt;p&gt;If you only want to block social media for certain customers (e.g., a B2B client's LAN) and not your entire network:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/ip firewall address-list
add &lt;span class="nv"&gt;list&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;restricted_clients &lt;span class="nv"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;192.168.100.0/24 &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Client LAN to restrict"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then modify your drop rules to match the source:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/ip firewall filter
add &lt;span class="nv"&gt;chain&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;forward src-address-list&lt;span class="o"&gt;=&lt;/span&gt;restricted_clients dst-address-list&lt;span class="o"&gt;=&lt;/span&gt;blocked_social &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;drop &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Block social for restricted clients"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 8 — Schedule DNS Refresh Script
&lt;/h2&gt;

&lt;p&gt;MikroTik static DNS entries don't auto-update if CDN IPs change. Run a scheduler to flush and re-resolve periodically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/system scheduler
add &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;flush-social-dns &lt;span class="nv"&gt;interval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;12h on-event&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/ip dns cache flush"&lt;/span&gt; &lt;span class="nv"&gt;comment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Flush DNS cache every 12 hours"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Testing Your Setup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Test DNS blocking:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# From a client PC&lt;/span&gt;
nslookup facebook.com YOUR_ROUTER_IP
&lt;span class="c"&gt;# Should return 0.0.0.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Test DoT is blocked:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Try resolving via DoT (kdig from knot-resolver)&lt;/span&gt;
kdig @1.1.1.1 +tls facebook.com
&lt;span class="c"&gt;# Should time out&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Test from MikroTik terminal:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/ip firewall filter print stats
&lt;span class="c"&gt;# Check hit counters on your drop rules&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Common Issues &amp;amp; Fixes
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Problem&lt;/th&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Social media still works&lt;/td&gt;
&lt;td&gt;Client using DoH&lt;/td&gt;
&lt;td&gt;Ensure DoH IPs are in address list and port 443 drop rule is active&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blocking too much traffic&lt;/td&gt;
&lt;td&gt;Layer-7 regex too broad&lt;/td&gt;
&lt;td&gt;Narrow your regexp patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High CPU usage&lt;/td&gt;
&lt;td&gt;Too many L7 rules&lt;/td&gt;
&lt;td&gt;Prioritize DNS + address-list blocking, reduce L7 rules&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VPN bypass&lt;/td&gt;
&lt;td&gt;Client using VPN&lt;/td&gt;
&lt;td&gt;Block common VPN ports (1194, 1723, 500, 4500) separately&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile apps still work&lt;/td&gt;
&lt;td&gt;Apps using IP directly&lt;/td&gt;
&lt;td&gt;Add CDN IP ranges to address list&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;A layered approach works best:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;DNS blocking&lt;/strong&gt; — fast, low CPU, first line of defense&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Address list drops&lt;/strong&gt; — catches direct IP access&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer-7 matching&lt;/strong&gt; — catches SNI-based HTTPS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DoH/DoT blocking&lt;/strong&gt; — closes the bypass route&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No single method is 100% foolproof (determined users can always use VPNs), but this combination covers 95%+ of use cases in a managed ISP or enterprise environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  About the Author
&lt;/h2&gt;

&lt;p&gt;I'm &lt;strong&gt;Zill Ali&lt;/strong&gt;, a Junior Network Engineer at &lt;strong&gt;FiberX Digital Pvt Ltd&lt;/strong&gt; in Gujrat, Pakistan, working on FTTH B2B/B2C infrastructure and NOC operations. MTCNA Certified | APNIC BCAP 2026 | Hikvision Certified Installer.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://linkedin.com/in/zilleali12" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; | &lt;a href="https://fiverr.com/zillealibutt" rel="noopener noreferrer"&gt;Fiverr&lt;/a&gt; | &lt;a href="https://zilleali.com" rel="noopener noreferrer"&gt;zilleali.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have questions about your MikroTik setup? Drop them in the comments — happy to help!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mikrotik</category>
      <category>networking</category>
      <category>isp</category>
      <category>firewall</category>
    </item>
  </channel>
</rss>
