]> git.ipfire.org Git - ipfire.org.git/commitdiff
dnsbl: Add a basic page that explains the project
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 29 Dec 2025 13:15:41 +0000 (13:15 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 29 Dec 2025 13:15:41 +0000 (13:15 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/templates/base.html
src/templates/dnsbl/index.html [new file with mode: 0644]
src/web/__init__.py

index b13c6c7e1329794a500e5c66d96b529e7cda54a3..c948b0d5139ed7e5ba73b539961ce129e577f052 100644 (file)
@@ -181,6 +181,11 @@ templates_blog_modules_DATA = \
 
 templates_blog_modulesdir = $(templates_blogdir)/modules
 
+templates_dnsbl_DATA = \
+       src/templates/dnsbl/index.html
+
+templates_dnsbldir = $(templatesdir)/dnsbl
+
 templates_donate_DATA = \
        src/templates/donate/donate.html \
        src/templates/donate/error.html \
index df61b8661ec0988cd7624701c11f29e80b401f3b..0e3f687c5cbc9755b273849a70bce6efb3922156 100644 (file)
@@ -30,7 +30,9 @@
                                                </a>
                                        {% else %}
                                                <a class="navbar-item" href="/">
-                                                       {% if request.path.startswith("/fireinfo") %}
+                                                       {% if request.path.startswith("/dnsbl") %}
+                                                               {% module IPFireLogo("DNSBL") %}
+                                                       {% elif request.path.startswith("/fireinfo") %}
                                                                {% module IPFireLogo("Fireinfo") %}
                                                        {% elif hostname.startswith("nopaste.") %}
                                                                {% module IPFireLogo("NoPaste") %}
                                                                        </div>
                                                                {% end %}
 
+                                                               {# DNSBL #}
+                                                               {% if request.path.startswith("/dnsbl") %}
+                                                                       <a class="navbar-item is-tab
+                                                                                       {% if request.path.startswith("/dnsbl/how-to-use") %}is-active{% end %}"
+                                                                                       href="/dnsbl/how-to-use">
+                                                                               {{ _("How To Use?") }}
+                                                                       </a>
+
                                                                {# Location #}
-                                                               {% if request.path.startswith("/location") %}
+                                                               {% elif request.path.startswith("/location") %}
                                                                        <a class="navbar-item is-tab
                                                                                        {% if request.path.startswith("/location/how-to-use") %}is-active{% end %}"
                                                                                        href="/location/how-to-use">
diff --git a/src/templates/dnsbl/index.html b/src/templates/dnsbl/index.html
new file mode 100644 (file)
index 0000000..94a531d
--- /dev/null
@@ -0,0 +1,127 @@
+{% extends "../base.html" %}
+
+{% block head %}
+       {% module OpenGraph(
+               title=_("IPFire DNSBL"),
+               description="High-quality DNS blocklists for security-critical environments",
+       ) %}
+{% end block %}
+
+{% block title %}{{ _("Welcome to IPFire DNSBL") }}{% end block %}
+
+{% block container %}
+       <section class="hero is-medium is-primary">
+               <div class="hero-body">
+                       <div class="container">
+                               <h1 class="title">{{ _("IPFire DNS Blocklist") }}</h1>
+
+                               <h6 class="subtitle mb-6">
+                                       {{ _("Early threat mitigation, enforced over DNS") }}
+                               </h6>
+
+                               <div class="columns is-multiline my-6">
+                                       <div class="column is-half">
+                                               <div class="columns is-mobile is-vcentered">
+                                                       <div class="column is-3 has-text-centered">
+                                                               <i class="fa-solid fa-magnifying-glass fa-5x"></i>
+                                                       </div>
+
+                                                       <div class="column">
+                                                               <p class="title is-5">{{ _("Accuracy First, Always") }}</p>
+
+                                                               <div class="content">
+                                                                       <p>
+                                                                               We prioritise high-confidence, well-verified data over raw volume.
+                                                                               Every listed domain must meet clear criteria, be reviewed continuously,
+                                                                               and be removed quickly when it no longer poses a threat.
+                                                                               The goal is trustworthy blocking with minimal false positives, suitable
+                                                                               for production networks.
+                                                                       </p>
+                                                               </div>
+                                                       </div>
+                                               </div>
+                                       </div>
+
+                                       <div class="column is-half">
+                                               <div class="columns is-mobile is-vcentered">
+                                                       <div class="column is-3 has-text-centered">
+                                                               <i class="fa-solid fa-shield-heart fa-5x"></i>
+                                                       </div>
+
+                                                       <div class="column">
+                                                               <p class="title is-5">{{ _("Privacy-Respecting Operation") }}</p>
+
+                                                               <div class="content">
+                                                                       <p>
+                                                                               The service is operated without tracking users or collecting
+                                                                               resolver telemetry. DNS security should improve safety without
+                                                                               introducing new privacy risks.
+                                                                       </p>
+                                                               </div>
+                                                       </div>
+                                               </div>
+                                       </div>
+
+                                       <div class="column is-half">
+                                               <div class="columns is-mobile is-vcentered">
+                                                       <div class="column is-3 has-text-centered">
+                                                               <i class="fa-solid fa-earth-europe fa-5x"></i>
+                                                       </div>
+
+                                                       <div class="column">
+                                                               <p class="title is-5">{{ _("Built on DNS Standards and Best Practices") }}</p>
+
+                                                               <div class="content">
+                                                                       <p>
+                                                                               These blocklists are developed with a deep understanding of DNS
+                                                                               infrastructure. They integrate naturally with technologies like
+                                                                               Response Policy Zones (RPZ), follow established standards, and
+                                                                               are operated with stability and long-term reliability in mind
+                                                                               — even at scale.
+                                                                       </p>
+                                                               </div>
+                                                       </div>
+                                               </div>
+                                       </div>
+
+                                       <div class="column is-half">
+                                               <div class="columns is-mobile is-vcentered">
+                                                       <div class="column is-3 has-text-centered">
+                                                               <span class="fab fa-osi fa-5x"></span>
+                                                       </div>
+
+                                                       <div class="column">
+                                                               <p class="title is-5">{{ _("Open, Inclusive, and Free Software") }}</p>
+
+                                                               <div class="content">
+                                                                       <p>
+                                                                               The IPFire DNS blocklists are built as a public good:
+                                                                               open, transparent, and free to use.
+                                                                               They are available to anyone, regardless of platform or vendor,
+                                                                               and developed in the open so the wider community can inspect,
+                                                                               contribute, and benefit.
+                                                                       </p>
+                                                               </div>
+                                                       </div>
+                                               </div>
+                                       </div>
+                               </div>
+                       </div>
+               </div>
+       </section>
+
+       <section class="hero">
+               <div class="hero-body">
+                       <div class="container">
+                               <a class="button is-primary is-large is-fullwidth" href="/donate">
+                                       <span class="icon">
+                                               <i class="fa-solid fa-heart"></i>
+                                       </span>
+                                       <span>
+                                               Help keep the Internet safe and free — support IPFire DNSBL today
+                                       </span>
+                               </a>
+                       </div>
+               </div>
+       </section>
+{% end block %}
index b042ac43ceab848d6e3dc888887c1554965d65a4..3e7ee30be2e5802ac2700da9b7d7ad7ed6de3b3a 100644 (file)
@@ -206,6 +206,9 @@ class Application(tornado.web.Application):
                        (r"/location/report\-a\-problem", StaticHandler, { "template" : "location/report-a-problem.html" }),
                        (r"/location/lookup/(.+)", location.LookupHandler),
 
+                       # DNSBL
+                       (r"/dnsbl/?", StaticHandler, { "template" : "dnsbl/index.html" }),
+
                        # Single-Sign-On for Discourse
                        (r"/sso/discourse", auth.SSODiscourse),
 
@@ -329,6 +332,11 @@ class Application(tornado.web.Application):
                                tornado.web.StaticFileHandler, { "path" : BOOT_STATIC_PATH }),
                ])
 
+               # dnsbl.ipfire.org
+               self.add_handlers(r"dnsbl\.([a-z]+\.dev\.)?ipfire\.org", [
+                       (r"(.*)", tornado.web.RedirectHandler, { "url" : "https://www.ipfire.org/dnsbl{0}" }),
+               ])
+
                # nopaste.ipfire.org
                self.add_handlers(r"nopaste\.([a-z]+\.dev\.)?ipfire\.org", [
                        (r"/", nopaste.CreateHandler),