From 89bd8eed08d163724b2ef04107bd977ebcf5180e Mon Sep 17 00:00:00 2001 From: <> Date: Tue, 7 Mar 2023 16:26:08 +0000 Subject: [PATCH] Deployed 2c108da with MkDocs version: 1.4.2 --- .nojekyll | 0 404.html | 399 + additional_information/index.html | 640 ++ assets/images/favicon.png | Bin 0 -> 1870 bytes assets/javascripts/bundle.b78d2936.min.js | 29 + assets/javascripts/bundle.b78d2936.min.js.map | 8 + assets/javascripts/lunr/min/lunr.ar.min.js | 1 + assets/javascripts/lunr/min/lunr.da.min.js | 18 + assets/javascripts/lunr/min/lunr.de.min.js | 18 + assets/javascripts/lunr/min/lunr.du.min.js | 18 + assets/javascripts/lunr/min/lunr.es.min.js | 18 + assets/javascripts/lunr/min/lunr.fi.min.js | 18 + assets/javascripts/lunr/min/lunr.fr.min.js | 18 + assets/javascripts/lunr/min/lunr.hi.min.js | 1 + assets/javascripts/lunr/min/lunr.hu.min.js | 18 + assets/javascripts/lunr/min/lunr.it.min.js | 18 + assets/javascripts/lunr/min/lunr.ja.min.js | 1 + assets/javascripts/lunr/min/lunr.jp.min.js | 1 + assets/javascripts/lunr/min/lunr.ko.min.js | 1 + assets/javascripts/lunr/min/lunr.multi.min.js | 1 + assets/javascripts/lunr/min/lunr.nl.min.js | 18 + assets/javascripts/lunr/min/lunr.no.min.js | 18 + assets/javascripts/lunr/min/lunr.pt.min.js | 18 + assets/javascripts/lunr/min/lunr.ro.min.js | 18 + assets/javascripts/lunr/min/lunr.ru.min.js | 18 + .../lunr/min/lunr.stemmer.support.min.js | 1 + assets/javascripts/lunr/min/lunr.sv.min.js | 18 + assets/javascripts/lunr/min/lunr.ta.min.js | 1 + assets/javascripts/lunr/min/lunr.th.min.js | 1 + assets/javascripts/lunr/min/lunr.tr.min.js | 18 + assets/javascripts/lunr/min/lunr.vi.min.js | 1 + assets/javascripts/lunr/min/lunr.zh.min.js | 1 + assets/javascripts/lunr/tinyseg.js | 206 + assets/javascripts/lunr/wordcut.js | 6708 +++++++++++++ .../workers/search.208ed371.min.js | 42 + .../workers/search.208ed371.min.js.map | 8 + assets/stylesheets/main.402914a4.min.css | 1 + assets/stylesheets/main.402914a4.min.css.map | 1 + assets/stylesheets/palette.a0c5b2b5.min.css | 1 + .../stylesheets/palette.a0c5b2b5.min.css.map | 1 + blocky-grafana.json | 1958 ++++ blocky-query-grafana-postgres.json | 882 ++ blocky-query-grafana.json | 882 ++ blocky.svg | 768 ++ config.yml | 265 + configuration/index.html | 2372 +++++ fb_dns_config.png | Bin 0 -> 40713 bytes grafana-dashboard.png | Bin 0 -> 233493 bytes grafana-query-dashboard.png | Bin 0 -> 193087 bytes includes/abbreviations/index.html | 412 + index.html | 573 ++ installation/index.html | 873 ++ interfaces/index.html | 512 + network_configuration/index.html | 546 ++ prometheus_grafana/index.html | 652 ++ search/search_index.json | 1 + sitemap.xml | 43 + sitemap.xml.gz | Bin 0 -> 203 bytes swagger.html | 8639 +++++++++++++++++ 59 files changed, 27703 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 additional_information/index.html create mode 100644 assets/images/favicon.png create mode 100644 assets/javascripts/bundle.b78d2936.min.js create mode 100644 assets/javascripts/bundle.b78d2936.min.js.map create mode 100644 assets/javascripts/lunr/min/lunr.ar.min.js create mode 100644 assets/javascripts/lunr/min/lunr.da.min.js create mode 100644 assets/javascripts/lunr/min/lunr.de.min.js create mode 100644 assets/javascripts/lunr/min/lunr.du.min.js create mode 100644 assets/javascripts/lunr/min/lunr.es.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hu.min.js create mode 100644 assets/javascripts/lunr/min/lunr.it.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ja.min.js create mode 100644 assets/javascripts/lunr/min/lunr.jp.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ko.min.js create mode 100644 assets/javascripts/lunr/min/lunr.multi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.nl.min.js create mode 100644 assets/javascripts/lunr/min/lunr.no.min.js create mode 100644 assets/javascripts/lunr/min/lunr.pt.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ro.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ru.min.js create mode 100644 assets/javascripts/lunr/min/lunr.stemmer.support.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sv.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ta.min.js create mode 100644 assets/javascripts/lunr/min/lunr.th.min.js create mode 100644 assets/javascripts/lunr/min/lunr.tr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.vi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.zh.min.js create mode 100644 assets/javascripts/lunr/tinyseg.js create mode 100644 assets/javascripts/lunr/wordcut.js create mode 100644 assets/javascripts/workers/search.208ed371.min.js create mode 100644 assets/javascripts/workers/search.208ed371.min.js.map create mode 100644 assets/stylesheets/main.402914a4.min.css create mode 100644 assets/stylesheets/main.402914a4.min.css.map create mode 100644 assets/stylesheets/palette.a0c5b2b5.min.css create mode 100644 assets/stylesheets/palette.a0c5b2b5.min.css.map create mode 100644 blocky-grafana.json create mode 100644 blocky-query-grafana-postgres.json create mode 100644 blocky-query-grafana.json create mode 100644 blocky.svg create mode 100644 config.yml create mode 100644 configuration/index.html create mode 100644 fb_dns_config.png create mode 100644 grafana-dashboard.png create mode 100644 grafana-query-dashboard.png create mode 100644 includes/abbreviations/index.html create mode 100644 index.html create mode 100644 installation/index.html create mode 100644 interfaces/index.html create mode 100644 network_configuration/index.html create mode 100644 prometheus_grafana/index.html create mode 100644 search/search_index.json create mode 100644 sitemap.xml create mode 100644 sitemap.xml.gz create mode 100644 swagger.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..55aada5a --- /dev/null +++ b/404.html @@ -0,0 +1,399 @@ + + + + + + + + + + + + + + + + + + + + blocky + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404 - Not found

+ +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/additional_information/index.html b/additional_information/index.html new file mode 100644 index 00000000..85dec716 --- /dev/null +++ b/additional_information/index.html @@ -0,0 +1,640 @@ + + + + + + + + + + + + + + + + + + + + + + Additional information - blocky + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + Skip to content + + +
+
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Additional information

+ +

To print runtime configuration / statistics, you can send SIGUSR1 signal to running process.

+
+

Summary

+

Example output:

+
INFO server: current configuration:
+INFO server: -> resolver: 'ClientNamesResolver'
+INFO server:      singleNameOrder = "[2 1]"
+INFO server:      externalResolver = "upstream 'tcp+udp:192.168.178.1:53'"
+INFO server:      cache item count = 7
+INFO server: -> resolver: 'QueryLoggingResolver'
+INFO server:      logDir= "/logs"
+INFO server:      perClient = false
+INFO server:      logRetentionDays= 7
+INFO server: -> resolver: 'MetricsResolver'
+INFO server:      metrics:
+INFO server:        Enable = true
+INFO server:        Path   = /metrics
+INFO server: -> resolver: 'ConditionalUpstreamResolver'
+INFO server:      fritz.box = "parallel upstreams 'upstream 'tcp+udp:192.168.178.1:53''"
+INFO server: -> resolver: 'CustomDNSResolver'
+INFO server: runtime information:
+...
+INFO server: MEM Alloc =                 9 MB
+INFO server: MEM HeapAlloc =             9 MB
+INFO server: MEM Sys =                  88 MB
+INFO server: MEM NumGC =              1533
+INFO server: RUN NumCPU =                4
+INFO server: RUN NumGoroutine =         18
+
+
+
+

Hint

+

To send a signal to a process you can use kill -s USR1 <PID> or docker kill -s SIGUSR1 blocky for docker setup

+
+

Debug / Profiling

+

If http listener is enabled, pprof endpoint (/debug/pprof) is enabled +automatically.

+

List sources

+

Some links/ideas for lists:

+

Blacklists

+ +
+

Warning

+

Use only blacklists from the sources you trust!

+
+

Whitelists

+ +

List of public DNS servers

+
+

Warning

+

DNS server provider has access to all your DNS queries (all visited domain names). Some DNS providers can use (tracking, analyzing, profiling etc.). It is recommended to use different DNS upstream servers in blocky to distribute your DNS queries over multiple providers.

+

Please read the description before using the DNS server as upstream. Some of them provide already an ad-blocker, some +filters other content. If you use external DNS server with included ad-blocker, you can't choose which domains should be +blocked, and you can't use whitelisting.

+
+

This is only a small excerpt of all free available DNS servers and should only be understood as an idee.

+
+

Info

+

I will NOT rate the DNS providers in the list. This list is sorted alphabetically.

+
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1cf13b9f9d978896599290a74f77d5dbe7d1655c GIT binary patch literal 1870 zcmV-U2eJ5xP)Gc)JR9QMau)O=X#!i9;T z37kk-upj^(fsR36MHs_+1RCI)NNu9}lD0S{B^g8PN?Ww(5|~L#Ng*g{WsqleV}|#l zz8@ri&cTzw_h33bHI+12+kK6WN$h#n5cD8OQt`5kw6p~9H3()bUQ8OS4Q4HTQ=1Ol z_JAocz`fLbT2^{`8n~UAo=#AUOf=SOq4pYkt;XbC&f#7lb$*7=$na!mWCQ`dBQsO0 zLFBSPj*N?#u5&pf2t4XjEGH|=pPQ8xh7tpx;US5Cx_Ju;!O`ya-yF`)b%TEt5>eP1ZX~}sjjA%FJF?h7cX8=b!DZl<6%Cv z*G0uvvU+vmnpLZ2paivG-(cd*y3$hCIcsZcYOGh{$&)A6*XX&kXZd3G8m)G$Zz-LV z^GF3VAW^Mdv!)4OM8EgqRiz~*Cji;uzl2uC9^=8I84vNp;ltJ|q-*uQwGp2ma6cY7 z;`%`!9UXO@fr&Ebapfs34OmS9^u6$)bJxrucutf>`dKPKT%%*d3XlFVKunp9 zasduxjrjs>f8V=D|J=XNZp;_Zy^WgQ$9WDjgY=z@stwiEBm9u5*|34&1Na8BMjjgf3+SHcr`5~>oz1Y?SW^=K z^bTyO6>Gar#P_W2gEMwq)ot3; zREHn~U&Dp0l6YT0&k-wLwYjb?5zGK`W6S2v+K>AM(95m2C20L|3m~rN8dprPr@t)5lsk9Hu*W z?pS990s;Ez=+Rj{x7p``4>+c0G5^pYnB1^!TL=(?HLHZ+HicG{~4F1d^5Awl_2!1jICM-!9eoLhbbT^;yHcefyTAaqRcY zmuctDopPT!%k+}x%lZRKnzykr2}}XfG_ne?nRQO~?%hkzo;@RN{P6o`&mMUWBYMTe z6i8ChtjX&gXl`nvrU>jah)2iNM%JdjqoaeaU%yVn!^70x-flljp6Q5tK}5}&X8&&G zX3fpb3E(!rH=zVI_9Gjl45w@{(ITqngWFe7@9{mX;tO25Z_8 zQHEpI+FkTU#4xu>RkN>b3Tnc3UpWzPXWm#o55GKF09j^Mh~)K7{QqbO_~(@CVq! zS<8954|P8mXN2MRs86xZ&Q4EfM@JB94b=(YGuk)s&^jiSF=t3*oNK3`rD{H`yQ?d; ztE=laAUoZx5?RC8*WKOj`%LXEkgDd>&^Q4M^z`%u0rg-It=hLCVsq!Z%^6eB-OvOT zFZ28TN&cRmgU}Elrnk43)!>Z1FCPL2K$7}gwzIc48NX}#!A1BpJP?#v5wkNprhV** z?Cpalt1oH&{r!o3eSKc&ap)iz2BTn_VV`4>9M^b3;(YY}4>#ML6{~(4mH+?%07*qo IM6N<$f(jP3KmY&$ literal 0 HcmV?d00001 diff --git a/assets/javascripts/bundle.b78d2936.min.js b/assets/javascripts/bundle.b78d2936.min.js new file mode 100644 index 00000000..520d0e51 --- /dev/null +++ b/assets/javascripts/bundle.b78d2936.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Ri=Object.create;var gr=Object.defineProperty;var ki=Object.getOwnPropertyDescriptor;var Hi=Object.getOwnPropertyNames,kt=Object.getOwnPropertySymbols,Pi=Object.getPrototypeOf,yr=Object.prototype.hasOwnProperty,on=Object.prototype.propertyIsEnumerable;var nn=(e,t,r)=>t in e?gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))yr.call(t,r)&&nn(e,r,t[r]);if(kt)for(var r of kt(t))on.call(t,r)&&nn(e,r,t[r]);return e};var an=(e,t)=>{var r={};for(var n in e)yr.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&kt)for(var n of kt(e))t.indexOf(n)<0&&on.call(e,n)&&(r[n]=e[n]);return r};var Ht=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var $i=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Hi(t))!yr.call(e,o)&&o!==r&&gr(e,o,{get:()=>t[o],enumerable:!(n=ki(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Ri(Pi(e)):{},$i(t||!e||!e.__esModule?gr(r,"default",{value:e,enumerable:!0}):r,e));var cn=Ht((xr,sn)=>{(function(e,t){typeof xr=="object"&&typeof sn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(xr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(T){return!!(T&&T!==document&&T.nodeName!=="HTML"&&T.nodeName!=="BODY"&&"classList"in T&&"contains"in T.classList)}function c(T){var Qe=T.type,De=T.tagName;return!!(De==="INPUT"&&s[Qe]&&!T.readOnly||De==="TEXTAREA"&&!T.readOnly||T.isContentEditable)}function f(T){T.classList.contains("focus-visible")||(T.classList.add("focus-visible"),T.setAttribute("data-focus-visible-added",""))}function u(T){T.hasAttribute("data-focus-visible-added")&&(T.classList.remove("focus-visible"),T.removeAttribute("data-focus-visible-added"))}function p(T){T.metaKey||T.altKey||T.ctrlKey||(a(r.activeElement)&&f(r.activeElement),n=!0)}function m(T){n=!1}function d(T){a(T.target)&&(n||c(T.target))&&f(T.target)}function h(T){a(T.target)&&(T.target.classList.contains("focus-visible")||T.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(T.target))}function v(T){document.visibilityState==="hidden"&&(o&&(n=!0),G())}function G(){document.addEventListener("mousemove",N),document.addEventListener("mousedown",N),document.addEventListener("mouseup",N),document.addEventListener("pointermove",N),document.addEventListener("pointerdown",N),document.addEventListener("pointerup",N),document.addEventListener("touchmove",N),document.addEventListener("touchstart",N),document.addEventListener("touchend",N)}function oe(){document.removeEventListener("mousemove",N),document.removeEventListener("mousedown",N),document.removeEventListener("mouseup",N),document.removeEventListener("pointermove",N),document.removeEventListener("pointerdown",N),document.removeEventListener("pointerup",N),document.removeEventListener("touchmove",N),document.removeEventListener("touchstart",N),document.removeEventListener("touchend",N)}function N(T){T.target.nodeName&&T.target.nodeName.toLowerCase()==="html"||(n=!1,oe())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),G(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var fn=Ht(Er=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(f){return!1}},r=t(),n=function(f){var u={next:function(){var p=f.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(f){return encodeURIComponent(f).replace(/%20/g,"+")},i=function(f){return decodeURIComponent(String(f).replace(/\+/g," "))},s=function(){var f=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof f){var d=this;p.forEach(function(oe,N){d.append(N,oe)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),f._entries&&(f._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(c,f){typeof c!="string"&&(c=String(c)),f&&typeof f!="string"&&(f=String(f));var u=document,p;if(f&&(e.location===void 0||f!==e.location.href)){f=f.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=f,u.head.appendChild(p);try{if(p.href.indexOf(f)!==0)throw new Error(p.href)}catch(T){throw new Error("URL unable to set base "+f+" due to "+T)}}var m=u.createElement("a");m.href=c,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=c,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!f)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,G=!0,oe=this;["append","delete","set"].forEach(function(T){var Qe=h[T];h[T]=function(){Qe.apply(h,arguments),v&&(G=!1,oe.search=h.toString(),G=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var N=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==N&&(N=this.search,G&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},s=i.prototype,a=function(c){Object.defineProperty(s,c,{get:function(){return this._anchorElement[c]},set:function(f){this._anchorElement[c]=f},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(c){a(c)}),Object.defineProperty(s,"search",{get:function(){return this._anchorElement.search},set:function(c){this._anchorElement.search=c,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(s,{toString:{get:function(){var c=this;return function(){return c.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(c){this._anchorElement.href=c,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(c){this._anchorElement.pathname=c},enumerable:!0},origin:{get:function(){var c={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],f=this._anchorElement.port!=c&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(f?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(c){},enumerable:!0},username:{get:function(){return""},set:function(c){},enumerable:!0}}),i.createObjectURL=function(c){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(c){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er)});var Kr=Ht((Mt,qr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Mt=="object"&&typeof qr=="object"?qr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Mt=="object"?Mt.ClipboardJS=r():t.ClipboardJS=r()})(Mt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return Ci}});var s=i(279),a=i.n(s),c=i(370),f=i.n(c),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(O){return!1}}var d=function(O){var E=p()(O);return m("cut"),E},h=d;function v(j){var O=document.documentElement.getAttribute("dir")==="rtl",E=document.createElement("textarea");E.style.fontSize="12pt",E.style.border="0",E.style.padding="0",E.style.margin="0",E.style.position="absolute",E.style[O?"right":"left"]="-9999px";var H=window.pageYOffset||document.documentElement.scrollTop;return E.style.top="".concat(H,"px"),E.setAttribute("readonly",""),E.value=j,E}var G=function(O,E){var H=v(O);E.container.appendChild(H);var I=p()(H);return m("copy"),H.remove(),I},oe=function(O){var E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},H="";return typeof O=="string"?H=G(O,E):O instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(O==null?void 0:O.type)?H=G(O.value,E):(H=p()(O),m("copy")),H},N=oe;function T(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?T=function(E){return typeof E}:T=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},T(j)}var Qe=function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},E=O.action,H=E===void 0?"copy":E,I=O.container,q=O.target,Me=O.text;if(H!=="copy"&&H!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&T(q)==="object"&&q.nodeType===1){if(H==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(H==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Me)return N(Me,{container:I});if(q)return H==="cut"?h(q):N(q,{container:I})},De=Qe;function $e(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?$e=function(E){return typeof E}:$e=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},$e(j)}function wi(j,O){if(!(j instanceof O))throw new TypeError("Cannot call a class as a function")}function rn(j,O){for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof I.action=="function"?I.action:this.defaultAction,this.target=typeof I.target=="function"?I.target:this.defaultTarget,this.text=typeof I.text=="function"?I.text:this.defaultText,this.container=$e(I.container)==="object"?I.container:document.body}},{key:"listenClick",value:function(I){var q=this;this.listener=f()(I,"click",function(Me){return q.onClick(Me)})}},{key:"onClick",value:function(I){var q=I.delegateTarget||I.currentTarget,Me=this.action(q)||"copy",Rt=De({action:Me,container:this.container,target:this.target(q),text:this.text(q)});this.emit(Rt?"success":"error",{action:Me,text:Rt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(I){return vr("action",I)}},{key:"defaultTarget",value:function(I){var q=vr("target",I);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(I){return vr("text",I)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(I){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return N(I,q)}},{key:"cut",value:function(I){return h(I)}},{key:"isSupported",value:function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof I=="string"?[I]:I,Me=!!document.queryCommandSupported;return q.forEach(function(Rt){Me=Me&&!!document.queryCommandSupported(Rt)}),Me}}]),E}(a()),Ci=Ai},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,c){for(;a&&a.nodeType!==o;){if(typeof a.matches=="function"&&a.matches(c))return a;a=a.parentNode}}n.exports=s},438:function(n,o,i){var s=i(828);function a(u,p,m,d,h){var v=f.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function c(u,p,m,d,h){return typeof u.addEventListener=="function"?a.apply(null,arguments):typeof m=="function"?a.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return a(v,p,m,d,h)}))}function f(u,p,m,d){return function(h){h.delegateTarget=s(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=c},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(n,o,i){var s=i(879),a=i(438);function c(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(h))throw new TypeError("Third argument must be a Function");if(s.node(m))return f(m,d,h);if(s.nodeList(m))return u(m,d,h);if(s.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function f(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return a(document.body,m,d,h)}n.exports=c},817:function(n){function o(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var c=window.getSelection(),f=document.createRange();f.selectNodeContents(i),c.removeAllRanges(),c.addRange(f),s=c.toString()}return s}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,s,a){var c=this.e||(this.e={});return(c[i]||(c[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var c=this;function f(){c.off(i,f),s.apply(a,arguments)}return f._=s,this.on(i,f,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),c=0,f=a.length;for(c;c{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var ns=/["'&<>]/;Go.exports=os;function os(e){var t=""+e,r=ns.exec(t);if(!r)return t;var n,o="",i=0,s=0;for(i=r.index;i0&&i[i.length-1])&&(f[0]===6||f[0]===2)){r=0;continue}if(f[0]===3&&(!i||f[1]>i[0]&&f[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],s;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(a){s={error:a}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||a(m,d)})})}function a(m,d){try{c(n[m](d))}catch(h){p(i[0][3],h)}}function c(m){m.value instanceof et?Promise.resolve(m.value.v).then(f,u):p(i[0][2],m)}function f(m){a("next",m)}function u(m){a("throw",m)}function p(m,d){m(d),i.shift(),i.length&&a(i[0][0],i[0][1])}}function ln(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Ee=="function"?Ee(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(s){return new Promise(function(a,c){s=e[i](s),o(a,c,s.done,s.value)})}}function o(i,s,a,c){Promise.resolve(c).then(function(f){i({value:f,done:a})},s)}}function A(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var $t=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function Ve(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ie=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=Ee(s),c=a.next();!c.done;c=a.next()){var f=c.value;f.remove(this)}}catch(v){t={error:v}}finally{try{c&&!c.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var u=this.initialTeardown;if(A(u))try{u()}catch(v){i=v instanceof $t?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=Ee(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{mn(h)}catch(v){i=i!=null?i:[],v instanceof $t?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new $t(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)mn(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ve(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ve(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Sr=Ie.EMPTY;function It(e){return e instanceof Ie||e&&"closed"in e&&A(e.remove)&&A(e.add)&&A(e.unsubscribe)}function mn(e){A(e)?e():e.unsubscribe()}var Le={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Sr:(this.currentObservers=null,a.push(r),new Ie(function(){n.currentObservers=null,Ve(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new En(r,n)},t}(F);var En=function(e){ie(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Sr},t}(x);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ie(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,s=n._infiniteTimeWindow,a=n._timestampProvider,c=n._windowTime;o||(i.push(r),!s&&i.push(a.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,s=o._buffer,a=s.slice(),c=0;c0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var s=r.actions;n!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Ut);var Tn=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Wt);var Te=new Tn(Sn);var _=new F(function(e){return e.complete()});function Dt(e){return e&&A(e.schedule)}function Cr(e){return e[e.length-1]}function Ye(e){return A(Cr(e))?e.pop():void 0}function Oe(e){return Dt(Cr(e))?e.pop():void 0}function Vt(e,t){return typeof Cr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function zt(e){return A(e==null?void 0:e.then)}function Nt(e){return A(e[ft])}function qt(e){return Symbol.asyncIterator&&A(e==null?void 0:e[Symbol.asyncIterator])}function Kt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Ni(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Qt=Ni();function Yt(e){return A(e==null?void 0:e[Qt])}function Gt(e){return pn(this,arguments,function(){var r,n,o,i;return Pt(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,et(r.read())];case 3:return n=s.sent(),o=n.value,i=n.done,i?[4,et(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,et(o)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Bt(e){return A(e==null?void 0:e.getReader)}function U(e){if(e instanceof F)return e;if(e!=null){if(Nt(e))return qi(e);if(pt(e))return Ki(e);if(zt(e))return Qi(e);if(qt(e))return On(e);if(Yt(e))return Yi(e);if(Bt(e))return Gi(e)}throw Kt(e)}function qi(e){return new F(function(t){var r=e[ft]();if(A(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Ki(e){return new F(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?L(function(o,i){return e(o,i,n)}):de,ge(1),r?He(t):Vn(function(){return new Xt}))}}function zn(){for(var e=[],t=0;t=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new x}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,c=a===void 0?!0:a;return function(f){var u,p,m,d=0,h=!1,v=!1,G=function(){p==null||p.unsubscribe(),p=void 0},oe=function(){G(),u=m=void 0,h=v=!1},N=function(){var T=u;oe(),T==null||T.unsubscribe()};return y(function(T,Qe){d++,!v&&!h&&G();var De=m=m!=null?m:r();Qe.add(function(){d--,d===0&&!v&&!h&&(p=$r(N,c))}),De.subscribe(Qe),!u&&d>0&&(u=new rt({next:function($e){return De.next($e)},error:function($e){v=!0,G(),p=$r(oe,o,$e),De.error($e)},complete:function(){h=!0,G(),p=$r(oe,s),De.complete()}}),U(T).subscribe(u))})(f)}}function $r(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function z(e,t=document){let r=ce(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ce(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function er(e){return C(b(document.body,"focusin"),b(document.body,"focusout")).pipe(ke(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),V(e===_e()),B())}function Xe(e){return{x:e.offsetLeft,y:e.offsetTop}}function Qn(e){return C(b(window,"load"),b(window,"resize")).pipe(Ce(0,Te),l(()=>Xe(e)),V(Xe(e)))}function tr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return C(b(e,"scroll"),b(window,"resize")).pipe(Ce(0,Te),l(()=>tr(e)),V(tr(e)))}var Gn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!Dr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),ga?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Dr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=va.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Bn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Xn=typeof WeakMap!="undefined"?new WeakMap:new Gn,Zn=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=ya.getInstance(),n=new Aa(t,r,this);Xn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){Zn.prototype[e]=function(){var t;return(t=Xn.get(this))[e].apply(t,arguments)}});var Ca=function(){return typeof rr.ResizeObserver!="undefined"?rr.ResizeObserver:Zn}(),eo=Ca;var to=new x,Ra=$(()=>k(new eo(e=>{for(let t of e)to.next(t)}))).pipe(g(e=>C(ze,k(e)).pipe(R(()=>e.disconnect()))),J(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ye(e){return Ra.pipe(S(t=>t.observe(e)),g(t=>to.pipe(L(({target:r})=>r===e),R(()=>t.unobserve(e)),l(()=>he(e)))),V(he(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ir(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var ro=new x,ka=$(()=>k(new IntersectionObserver(e=>{for(let t of e)ro.next(t)},{threshold:0}))).pipe(g(e=>C(ze,k(e)).pipe(R(()=>e.disconnect()))),J(1));function ar(e){return ka.pipe(S(t=>t.observe(e)),g(t=>ro.pipe(L(({target:r})=>r===e),R(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function no(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=he(e),o=bt(e);return r>=o.height-n.height-t}),B())}var sr={drawer:z("[data-md-toggle=drawer]"),search:z("[data-md-toggle=search]")};function oo(e){return sr[e].checked}function Ke(e,t){sr[e].checked!==t&&sr[e].click()}function Ue(e){let t=sr[e];return b(t,"change").pipe(l(()=>t.checked),V(t.checked))}function Ha(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Pa(){return C(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(V(!1))}function io(){let e=b(window,"keydown").pipe(L(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:oo("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),L(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!Ha(n,r)}return!0}),pe());return Pa().pipe(g(t=>t?_:e))}function le(){return new URL(location.href)}function ot(e){location.href=e.href}function ao(){return new x}function so(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)so(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)so(n,o);return n}function cr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function co(){return location.hash.substring(1)}function Vr(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function $a(){return b(window,"hashchange").pipe(l(co),V(co()),L(e=>e.length>0),J(1))}function fo(){return $a().pipe(l(e=>ce(`[id="${e}"]`)),L(e=>typeof e!="undefined"))}function zr(e){let t=matchMedia(e);return Zt(r=>t.addListener(()=>r(t.matches))).pipe(V(t.matches))}function uo(){let e=matchMedia("print");return C(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(V(e.matches))}function Nr(e,t){return e.pipe(g(r=>r?t():_))}function fr(e,t={credentials:"same-origin"}){return ue(fetch(`${e}`,t)).pipe(fe(()=>_),g(r=>r.status!==200?Tt(()=>new Error(r.statusText)):k(r)))}function We(e,t){return fr(e,t).pipe(g(r=>r.json()),J(1))}function po(e,t){let r=new DOMParser;return fr(e,t).pipe(g(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),J(1))}function ur(e){let t=M("script",{src:e});return $(()=>(document.head.appendChild(t),C(b(t,"load"),b(t,"error").pipe(g(()=>Tt(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),R(()=>document.head.removeChild(t)),ge(1))))}function lo(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function mo(){return C(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(lo),V(lo()))}function ho(){return{width:innerWidth,height:innerHeight}}function bo(){return b(window,"resize",{passive:!0}).pipe(l(ho),V(ho()))}function vo(){return Q([mo(),bo()]).pipe(l(([e,t])=>({offset:e,size:t})),J(1))}function pr(e,{viewport$:t,header$:r}){let n=t.pipe(Z("size")),o=Q([n,r]).pipe(l(()=>Xe(e)));return Q([r,t,o]).pipe(l(([{height:i},{offset:s,size:a},{x:c,y:f}])=>({offset:{x:s.x-c,y:s.y-f+i},size:a})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(s=>{let a=document.createElement("script");a.src=i,a.onload=s,document.body.appendChild(a)})),Promise.resolve())}var r=class extends EventTarget{constructor(n){super(),this.url=n,this.m=i=>{i.source===this.w&&(this.dispatchEvent(new MessageEvent("message",{data:i.data})),this.onmessage&&this.onmessage(i))},this.e=(i,s,a,c,f)=>{if(s===`${this.url}`){let u=new ErrorEvent("error",{message:i,filename:s,lineno:a,colno:c,error:f});this.dispatchEvent(u),this.onerror&&this.onerror(u)}};let o=document.createElement("iframe");o.hidden=!0,document.body.appendChild(this.iframe=o),this.w.document.open(),this.w.document.write(`", + "mode": "html" + }, + "pluginVersion": "8.3.3", + "title": "Blocking status", + "transparent": true, + "type": "text" + }, + { + "description": "Blocky [version](https://github.com/0xERR0R/blocky) number", + "fieldConfig": { + "defaults": { + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 3 + }, + "id": 55, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "/^version$/", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "repeatDirection": "v", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "blocky_build_info ", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Version", + "transformations": [ + { + "id": "labelsToFields", + "options": {} + }, + { + "id": "merge", + "options": {} + } + ], + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Average query response time for all query types", + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 3 + }, + "id": 24, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(increase(blocky_request_duration_ms_sum[$__range])) / sum(increase(blocky_request_duration_ms_count[$__range]))", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Avg response time", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Number of blacklist entries", + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 5 + }, + "id": 30, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(blocky_blacklist_cache) / sum(up{job=\"blocky\"})", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Blacklist entries total", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 5 + }, + "id": 28, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(go_memstats_sys_bytes{job=\"blocky\"})/sum(up{job=\"blocky\"})", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Memory allocated", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Percentage of blocked queries", + "fieldConfig": { + "defaults": { + "decimals": 2, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 6 + }, + "id": 34, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(increase(blocky_response_total{response_type=\"BLOCKED\"}[$__range])) / sum(increase(blocky_query_total[$__range])) ", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Queries blocked", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Number of all queries. Shows the last value", + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 6 + }, + "hideTimeOverride": true, + "id": 4, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "ceil(sum(increase(blocky_query_total[$__range]))) ", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Query Count Total", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Number of entries in the cache. Shows the last value", + "fieldConfig": { + "defaults": { + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 8 + }, + "id": 45, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "last" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(blocky_cache_entry_count)/ sum(up{job=\"blocky\"})", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Cache entries count", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Cache Hit/Miss ratio. 100 % means, all queries could be answered from the cache, 0% - all queries must be resolved via external DNS", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 8 + }, + "id": 47, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(increase(blocky_cache_hit_count[$__range])) / (sum(increase(blocky_cache_hit_count[$__range])) + sum(increase(blocky_cache_miss_count[$__range])))", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Cache Hit/Miss ratio", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Number of occured errors", + "fieldConfig": { + "defaults": { + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 1 + }, + { + "color": "#d44a3a" + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 9 + }, + "id": 36, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(increase(blocky_error_total[$__range]))", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Error count", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Amount of performed DNS queries to prefetch cached queries", + "fieldConfig": { + "defaults": { + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 9 + }, + "id": 53, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "ceil(sum(increase(blocky_prefetch_count[$__range])))", + "format": "table", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Prefetch count", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Amount of prefetch queries per minute", + "fieldConfig": { + "defaults": { + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 11 + }, + "id": 51, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(rate(blocky_prefetch_count[5m])) * 60", + "format": "table", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Prefetch rate per min", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "How many of cached entries were prefetched automatically", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 11 + }, + "id": 58, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(increase(blocky_prefetch_hit_count[$__range])) / (sum(increase(blocky_cache_hit_count[$__range])))", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Prefetch Hit ratio", + "transparent": true, + "type": "stat" + }, + { + "description": "Time since last list refresh", + "fieldConfig": { + "defaults": { + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 12 + }, + "id": 57, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "sum(time() -blocky_last_list_group_refresh)/ sum(up{job=\"blocky\"})", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Last list refresh", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Amount of unique domains in the prefetched cache", + "fieldConfig": { + "defaults": { + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 12 + }, + "id": 49, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(blocky_prefetch_domain_name_cache_count)/ sum(up{job=\"blocky\"})", + "format": "table", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Prefetch domain count", + "transparent": true, + "type": "stat" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "avg requests / min", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(rate(blocky_query_total[5m])) * 60", + "format": "time_series", + "instant": false, + "interval": "", + "legendFormat": " ", + "refId": "A" + } + ], + "title": "Request rate", + "transparent": true, + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "avg requests / min", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "bars", + "fillOpacity": 100, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 52, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum by (client) (rate(blocky_query_total[5m])) * 60", + "format": "time_series", + "instant": false, + "interval": "", + "legendFormat": " {{client}}", + "refId": "A" + } + ], + "title": "Request rate per client", + "transparent": true, + "type": "timeseries" + }, + { + "cards": {}, + "color": { + "cardColor": "#FADE2A", + "colorScale": "sqrt", + "colorScheme": "interpolateYlOrBr", + "exponent": 0.5, + "mode": "opacity" + }, + "dataFormat": "tsbuckets", + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 29 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 22, + "legend": { + "show": true + }, + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(increase(blocky_request_duration_ms_bucket{response_type=\"RESOLVED\"}[$__range])) by (le)", + "format": "heatmap", + "instant": false, + "interval": "", + "legendFormat": "{{le}}", + "refId": "A" + } + ], + "title": "request duration (upstream)", + "tooltip": { + "show": true, + "showHistogram": false + }, + "transparent": true, + "type": "heatmap", + "xAxis": { + "show": true + }, + "yAxis": { + "format": "ms", + "logBase": 1, + "show": true + }, + "yBucketBound": "auto" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "decimals": 0, + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 38 + }, + "id": 2, + "links": [], + "maxDataPoints": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "values": [ + "value", + "percent" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "6.6.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": " sort_desc(sum by (type) (ceil(increase(blocky_query_total[$__range]))))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{ type }}", + "refId": "A" + } + ], + "title": "Query by type", + "transparent": true, + "type": "piechart" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "decimals": 0, + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 38 + }, + "id": 8, + "links": [], + "maxDataPoints": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "values": [ + "value", + "percent" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "6.6.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "sort_desc(sum by (client) (ceil(increase(blocky_query_total[$__range]))))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{ client }}", + "refId": "A" + } + ], + "title": "Query per Client", + "transparent": true, + "type": "piechart" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "decimals": 0, + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 46 + }, + "id": 32, + "links": [], + "maxDataPoints": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "values": [ + "value" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "6.6.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "topk(1, blocky_blacklist_cache) by (group)", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{ group }}", + "refId": "A" + } + ], + "title": "Blacklist by group", + "transparent": true, + "type": "piechart" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "decimals": 0, + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 46 + }, + "id": 14, + "links": [], + "maxDataPoints": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "values": [ + "value", + "percent" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": " sort_desc(sum by (reason) (ceil(increase(blocky_response_total[$__range]))))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{reason}}", + "refId": "A" + } + ], + "title": "Response Reasons", + "transparent": true, + "type": "piechart" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "decimals": 0, + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 54 + }, + "id": 38, + "interval": "", + "links": [], + "maxDataPoints": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "values": [ + "value", + "percent" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": " sort_desc(sum by (response_type) (ceil(increase(blocky_response_total[$__range]))))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{response_type}}", + "refId": "A" + } + ], + "title": "Response Type", + "transparent": true, + "type": "piechart" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "decimals": 0, + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 54 + }, + "id": 12, + "links": [], + "maxDataPoints": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "values": [ + "value", + "percent" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": " sort_desc(sum by (response_code) (ceil(increase(blocky_response_total[$__range]))))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{response_code}}", + "refId": "A" + } + ], + "title": "Response status", + "transparent": true, + "type": "piechart" + } + ], + "refresh": false, + "schemaVersion": 34, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "hide": 2, + "label": "blocky API URL", + "name": "blocky_url", + "query": "${VAR_BLOCKY_URL}", + "skipUrlSync": false, + "type": "constant", + "current": { + "value": "${VAR_BLOCKY_URL}", + "text": "${VAR_BLOCKY_URL}", + "selected": false + }, + "options": [ + { + "value": "${VAR_BLOCKY_URL}", + "text": "${VAR_BLOCKY_URL}", + "selected": false + } + ] + } + ] + }, + "time": { + "from": "now-3h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "blocky", + "uid": "JvOqE4gRk", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/blocky-query-grafana-postgres.json b/blocky-query-grafana-postgres.json new file mode 100644 index 00000000..4dad81c9 --- /dev/null +++ b/blocky-query-grafana-postgres.json @@ -0,0 +1,882 @@ +{ + "__inputs": [ + { + "name": "DS_POSTGRES", + "label": "Postgres", + "description": "", + "type": "datasource", + "pluginId": "postgres", + "pluginName": "Postgres" + } + ], + "__requires": [ + { + "type": "panel", + "id": "barchart", + "name": "Bar chart", + "version": "" + }, + { + "type": "panel", + "id": "bargauge", + "name": "Bar gauge", + "version": "" + }, + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "8.1.2" + }, + { + "type": "datasource", + "id": "postgres", + "name": "Postgres", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "piechart", + "name": "Pie chart", + "version": "" + }, + { + "type": "panel", + "id": "table", + "name": "Table", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": null, + "iteration": 1631130053746, + "links": [], + "panels": [ + { + "cacheTimeout": null, + "datasource": "${DS_POSTGRES}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "displayName": "${__field.labels.response_type}", + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 0, + "y": 0 + }, + "id": 14, + "interval": null, + "links": [], + "options": { + "displayLabels": [], + "legend": { + "displayMode": "table", + "placement": "right", + "values": [ + "value" + ] + }, + "pieType": "pie", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.2", + "repeatDirection": "v", + "targets": [ + { + "format": "time_series", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT t.response_type, max(t.request_Ts) as time, count(*) as cnt from log_entries t \n WHERE $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length('$question') = 0 or POSITION(lower('$question') IN t.question_name) > 0)\n group by t.response_type\n order by time", + "refId": "A", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "timeColumn": "time", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Query count by response type", + "transformations": [], + "type": "piechart" + }, + { + "datasource": "${DS_POSTGRES}", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 6, + "y": 0 + }, + "id": 16, + "options": { + "displayLabels": [], + "legend": { + "displayMode": "table", + "placement": "right", + "values": [ + "value" + ] + }, + "pieType": "pie", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "format": "time_series", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT max(t.request_ts) AS time,\n case when t.reason like 'BLOCKED%' then SPLIT_PART(SPLIT_PART(t.reason,'(',-1), ')',1) else '' end AS metric,\n count(t.reason) AS cnt\nFROM log_entries t\nWHERE t.response_type ='BLOCKED'\n AND $__timeFilter(t.request_Ts)\n AND t.client_name in ($client_name)\n AND (length('$question') = 0 or POSITION(lower('$question') IN t.question_name) > 0)\nGROUP BY 2\nORDER BY time", + "refId": "A", + "select": [ + [ + { + "params": [ + "duration_ms" + ], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "timeColumnType": "timestamp", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Blocked by Blacklist", + "type": "piechart" + }, + { + "cacheTimeout": null, + "datasource": "${DS_POSTGRES}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 13, + "interval": null, + "links": [], + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": true + }, + "showUnfilled": true, + "text": {} + }, + "pluginVersion": "8.1.2", + "repeatDirection": "v", + "targets": [ + { + "format": "table", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT max(t.request_Ts) as time, t.client_name as metric, count(*) as cnt from log_entries t \n WHERE $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length('$question') = 0 or POSITION(lower('$question') IN t.question_name) > 0)\n group by t.client_name\n order by 3 desc", + "refId": "A", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "timeColumn": "time", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Query count by client", + "transformations": [], + "type": "bargauge" + }, + { + "datasource": "${DS_POSTGRES}", + "description": "Top 20 effective top level domain plus one more label", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "fillOpacity": 67, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 2 + }, + "displayName": "count", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 11, + "options": { + "barWidth": 0.26, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "orientation": "horizontal", + "showValue": "never", + "stacking": "none", + "text": { + "valueSize": 10 + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "format": "table", + "group": [], + "hide": false, + "metricColumn": "question_name", + "rawQuery": true, + "rawSql": "SELECT t.effective_tldp as metric, count(*) as value from log_entries t \nWHERE $__timeFilter(t.request_Ts) \n and t.response_type in ($response_type) \n and t.client_name in ($client_name) \n and (length('$question') = 0 or POSITION(lower('$question') IN t.question_name) > 0) \n group by t.effective_tldp order by count(*) desc limit 20", + "refId": "A", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "where": [] + } + ], + "title": "Top 20 effective TLD+1", + "type": "barchart" + }, + { + "datasource": "${DS_POSTGRES}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "fillOpacity": 67, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 2 + }, + "displayName": "count", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 8, + "options": { + "barWidth": 0.26, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "orientation": "horizontal", + "showValue": "never", + "stacking": "none", + "text": { + "valueSize": 10 + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "format": "table", + "group": [], + "hide": false, + "metricColumn": "question_name", + "rawQuery": true, + "rawSql": "SELECT t.question_name as metric, count(*) as value from log_entries t \n WHERE $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length('$question') = 0 or POSITION(lower('$question') IN t.question_name) > 0) \n group by t.question_name order by count(*) desc limit 20", + "refId": "A", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "where": [] + } + ], + "title": "Top 20 queried domains", + "type": "barchart" + }, + { + "datasource": "${DS_POSTGRES}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "queries count", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "bars", + "fillOpacity": 35, + "gradientMode": "hue", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 12, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.client_name}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.2", + "targets": [ + { + "format": "time_series", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT\n $__timeGroupAlias(t.request_Ts, '30m'),\n t.client_name,\n count(*) as c\nFROM log_entries t\nWHERE\n $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length('$question') = 0 or POSITION(lower('$question') IN t.question_name) > 0)\nGROUP BY 1,2\nORDER BY 1", + "refId": "A", + "select": [ + [ + { + "params": [ + "duration_ms" + ], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "timeColumnType": "timestamp", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Queries number per client (30m)", + "type": "timeseries" + }, + { + "datasource": "${DS_POSTGRES}", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": -1, + "drawStyle": "bars", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "stepBefore", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "dtdurationms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "format": "time_series", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT\n EXTRACT(EPOCH from t.request_Ts) as time,\n t.duration_ms\nFROM log_entries t\nWHERE\n $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length('$question') = 0 or POSITION(lower('$question') IN t.question_name) > 0)\nORDER BY request_ts", + "refId": "A", + "select": [ + [ + { + "params": [ + "duration_ms" + ], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "timeColumnType": "timestamp", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Query duration", + "type": "timeseries" + }, + { + "datasource": "${DS_POSTGRES}", + "description": "Last 100 queries, newest on top", + "fieldConfig": { + "defaults": { + "custom": { + "align": null, + "displayMode": "auto", + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "time" + }, + "properties": [ + { + "id": "unit", + "value": "dateTimeAsIsoNoDateIfToday" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 31 + }, + "id": 4, + "options": { + "showHeader": true + }, + "pluginVersion": "8.1.2", + "targets": [ + { + "format": "table", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT EXTRACT(EPOCH from t.request_Ts) as \"time\", \n t.client_ip as \"client IP\", \n t.client_name as \"client name\", \n t.duration_ms as \"duration in ms\", \n t.response_type as \"response type\", \n t.question_type as \"question type\", \n t.question_name as \"question name\", \n t.effective_tldp as \"effective TLD+1\", \n t.answer as \"answer\" from log_entries t \n WHERE $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length('$question') = 0 or POSITION(lower('$question') IN t.question_name) > 0) \n order by t.request_Ts desc limit 100", + "refId": "A", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "timeColumn": "time", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Last queries", + "type": "table" + } + ], + "refresh": "", + "schemaVersion": 30, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": "", + "current": {}, + "datasource": "${DS_POSTGRES}", + "definition": "select distinct client_name from log_entries", + "description": null, + "error": null, + "hide": 0, + "includeAll": true, + "label": "Client name", + "multi": true, + "name": "client_name", + "options": [], + "query": "select distinct client_name from log_entries", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "${DS_POSTGRES}", + "definition": "select distinct response_type from log_entries", + "description": null, + "error": null, + "hide": 0, + "includeAll": true, + "label": "Response type", + "multi": true, + "name": "response_type", + "options": [], + "query": "select distinct response_type from log_entries", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "current": { + "selected": false, + "text": "", + "value": "" + }, + "description": null, + "error": null, + "hide": 0, + "label": "Domain (contains)", + "name": "question", + "options": [ + { + "selected": true, + "text": "", + "value": "" + } + ], + "query": "", + "skipUrlSync": false, + "type": "textbox" + } + ] + }, + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Blocky query", + "uid": "AVmWSVWgz", + "version": 3 +} \ No newline at end of file diff --git a/blocky-query-grafana.json b/blocky-query-grafana.json new file mode 100644 index 00000000..336af8cc --- /dev/null +++ b/blocky-query-grafana.json @@ -0,0 +1,882 @@ +{ + "__inputs": [ + { + "name": "DS_MYSQL", + "label": "MySQL", + "description": "", + "type": "datasource", + "pluginId": "mysql", + "pluginName": "MySQL" + } + ], + "__requires": [ + { + "type": "panel", + "id": "barchart", + "name": "Bar chart", + "version": "" + }, + { + "type": "panel", + "id": "bargauge", + "name": "Bar gauge", + "version": "" + }, + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "8.1.2" + }, + { + "type": "datasource", + "id": "mysql", + "name": "MySQL", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "piechart", + "name": "Pie chart", + "version": "" + }, + { + "type": "panel", + "id": "table", + "name": "Table", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": null, + "iteration": 1631130053746, + "links": [], + "panels": [ + { + "cacheTimeout": null, + "datasource": "${DS_MYSQL}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "displayName": "${__field.labels.response_type}", + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 0, + "y": 0 + }, + "id": 14, + "interval": null, + "links": [], + "options": { + "displayLabels": [], + "legend": { + "displayMode": "table", + "placement": "right", + "values": [ + "value" + ] + }, + "pieType": "pie", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.2", + "repeatDirection": "v", + "targets": [ + { + "format": "time_series", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT t.response_type, t.request_Ts as time, count(*) as cnt from log_entries t \n WHERE $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length('$question') = 0 or INSTR(t.question_name, lower('$question')) > 0)\n group by t.response_type\n order by t.request_Ts", + "refId": "A", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "timeColumn": "time", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Query count by response type", + "transformations": [], + "type": "piechart" + }, + { + "datasource": "${DS_MYSQL}", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 6, + "y": 0 + }, + "id": 16, + "options": { + "displayLabels": [], + "legend": { + "displayMode": "table", + "placement": "right", + "values": [ + "value" + ] + }, + "pieType": "pie", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "format": "time_series", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT t.request_ts AS time,\n case when t.reason like 'BLOCKED%' then SUBSTRING_INDEX(SUBSTRING_INDEX(t.reason,'(',-1), ')',1) else '' end AS metric,\n count(t.reason) AS cnt\nFROM log_entries t\nWHERE t.response_type ='BLOCKED'\n AND $__timeFilter(t.request_Ts)\n AND t.client_name in ($client_name)\n AND (length('$question') = 0 or INSTR(t.question_name, lower('$question')) > 0)\nGROUP BY 2\nORDER BY time", + "refId": "A", + "select": [ + [ + { + "params": [ + "duration_ms" + ], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "timeColumnType": "timestamp", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Blocked by Blacklist", + "type": "piechart" + }, + { + "cacheTimeout": null, + "datasource": "${DS_MYSQL}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 13, + "interval": null, + "links": [], + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": true + }, + "showUnfilled": true, + "text": {} + }, + "pluginVersion": "8.1.2", + "repeatDirection": "v", + "targets": [ + { + "format": "table", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT t.request_Ts as time, t.client_name as metric, count(*) as cnt from log_entries t \n WHERE $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length('$question') = 0 or INSTR(t.question_name, lower('$question')) > 0)\n group by t.client_name\n order by 3 desc", + "refId": "A", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "timeColumn": "time", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Query count by client", + "transformations": [], + "type": "bargauge" + }, + { + "datasource": "${DS_MYSQL}", + "description": "Top 20 effective top level domain plus one more label", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "fillOpacity": 67, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 2 + }, + "displayName": "count", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 11, + "options": { + "barWidth": 0.26, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "orientation": "horizontal", + "showValue": "never", + "stacking": "none", + "text": { + "valueSize": 10 + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "format": "table", + "group": [], + "hide": false, + "metricColumn": "question_name", + "rawQuery": true, + "rawSql": "SELECT t.effective_tldp as metric, count(*) as value from log_entries t \nWHERE $__timeFilter(t.request_Ts) \n and t.response_type in ($response_type) \n and t.client_name in ($client_name) \n and (length('$question') = 0 or INSTR(t.question_name, lower('$question')) > 0) \n group by t.effective_tldp order by count(*) desc limit 20", + "refId": "A", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "where": [] + } + ], + "title": "Top 20 effective TLD+1", + "type": "barchart" + }, + { + "datasource": "${DS_MYSQL}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "fillOpacity": 67, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 2 + }, + "displayName": "count", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 8, + "options": { + "barWidth": 0.26, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "orientation": "horizontal", + "showValue": "never", + "stacking": "none", + "text": { + "valueSize": 10 + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "format": "table", + "group": [], + "hide": false, + "metricColumn": "question_name", + "rawQuery": true, + "rawSql": "SELECT t.question_name as metric, count(*) as value from log_entries t \n WHERE $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length('$question') = 0 or INSTR(t.question_name, lower('$question')) > 0) \n group by t.question_name order by count(*) desc limit 20", + "refId": "A", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "where": [] + } + ], + "title": "Top 20 queried domains", + "type": "barchart" + }, + { + "datasource": "${DS_MYSQL}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "queries count", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "bars", + "fillOpacity": 35, + "gradientMode": "hue", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 12, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.client_name}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.2", + "targets": [ + { + "format": "time_series", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT\n $__timeGroupAlias(t.request_Ts, '30m'),\n t.client_name,\n count(*) as c\nFROM log_entries t\nWHERE\n $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length('$question') = 0 or INSTR(t.question_name, lower('$question')) > 0)\nGROUP BY 1,2\nORDER BY 1", + "refId": "A", + "select": [ + [ + { + "params": [ + "duration_ms" + ], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "timeColumnType": "timestamp", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Queries number per client (30m)", + "type": "timeseries" + }, + { + "datasource": "${DS_MYSQL}", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": -1, + "drawStyle": "bars", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "stepBefore", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "dtdurationms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "format": "time_series", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT\n UNIX_TIMESTAMP(t.request_Ts) as time,\n t.duration_ms\nFROM log_entries t\nWHERE\n $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length('$question') = 0 or INSTR(t.question_name, lower('$question')) > 0)\nORDER BY request_ts", + "refId": "A", + "select": [ + [ + { + "params": [ + "duration_ms" + ], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "timeColumnType": "timestamp", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Query duration", + "type": "timeseries" + }, + { + "datasource": "${DS_MYSQL}", + "description": "Last 100 queries, newest on top", + "fieldConfig": { + "defaults": { + "custom": { + "align": null, + "displayMode": "auto", + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "time" + }, + "properties": [ + { + "id": "unit", + "value": "dateTimeAsIsoNoDateIfToday" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 31 + }, + "id": 4, + "options": { + "showHeader": true + }, + "pluginVersion": "8.1.2", + "targets": [ + { + "format": "table", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT UNIX_TIMESTAMP(t.request_Ts) as \"time\", \n t.client_ip as \"client IP\", \n t.client_name as \"client name\", \n t.duration_ms as \"duration in ms\", \n t.response_type as \"response type\", \n t.question_type as \"question type\", \n t.question_name as \"question name\", \n t.effective_tldp as \"effective TLD+1\", \n t.answer as \"answer\" from log_entries t \n WHERE $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length('$question') = 0 or INSTR(t.question_name, lower('$question')) > 0) \n order by t.request_Ts desc limit 100", + "refId": "A", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "column" + } + ] + ], + "timeColumn": "time", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Last queries", + "type": "table" + } + ], + "refresh": "", + "schemaVersion": 30, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": "", + "current": {}, + "datasource": "${DS_MYSQL}", + "definition": "select distinct client_name from log_entries", + "description": null, + "error": null, + "hide": 0, + "includeAll": true, + "label": "Client name", + "multi": true, + "name": "client_name", + "options": [], + "query": "select distinct client_name from log_entries", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "${DS_MYSQL}", + "definition": "select distinct response_type from log_entries", + "description": null, + "error": null, + "hide": 0, + "includeAll": true, + "label": "Response type", + "multi": true, + "name": "response_type", + "options": [], + "query": "select distinct response_type from log_entries", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "current": { + "selected": false, + "text": "", + "value": "" + }, + "description": null, + "error": null, + "hide": 0, + "label": "Domain (contains)", + "name": "question", + "options": [ + { + "selected": true, + "text": "", + "value": "" + } + ], + "query": "", + "skipUrlSync": false, + "type": "textbox" + } + ] + }, + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Blocky query", + "uid": "AVmWSVWgz", + "version": 3 +} \ No newline at end of file diff --git a/blocky.svg b/blocky.svg new file mode 100644 index 00000000..7bb10e12 --- /dev/null +++ b/blocky.svg @@ -0,0 +1,768 @@ + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config.yml b/config.yml new file mode 100644 index 00000000..738efd12 --- /dev/null +++ b/config.yml @@ -0,0 +1,265 @@ +upstream: + # these external DNS resolvers will be used. Blocky picks 2 random resolvers from the list for each query + # format for resolver: [net:]host:[port][/path]. net could be empty (default, shortcut for tcp+udp), tcp+udp, tcp, udp, tcp-tls or https (DoH). If port is empty, default port will be used (53 for udp and tcp, 853 for tcp-tls, 443 for https (Doh)) + # this configuration is mandatory, please define at least one external DNS resolver + default: + # example for tcp+udp IPv4 server (https://digitalcourage.de/) + - 5.9.164.112 + # Cloudflare + - 1.1.1.1 + # example for DNS-over-TLS server (DoT) + - tcp-tls:fdns1.dismail.de:853 + # example for DNS-over-HTTPS (DoH) + - https://dns.digitale-gesellschaft.ch/dns-query + # optional: use client name (with wildcard support: * - sequence of any characters, [0-9] - range) + # or single ip address / client subnet as CIDR notation + laptop*: + - 123.123.123.123 + +# optional: timeout to query the upstream resolver. Default: 2s +upstreamTimeout: 2s + +# optional: If true, blocky will fail to start unless at least one upstream server per group is reachable. Default: false +startVerifyUpstream: true + +# optional: Determines how blocky will create outgoing connections. This impacts both upstreams, and lists. +# accepted: dual, v4, v6 +# default: dual +connectIPVersion: dual + +# optional: custom IP address(es) for domain name (with all sub-domains). Multiple addresses must be separated by a comma +# example: query "printer.lan" or "my.printer.lan" will return 192.168.178.3 +customDNS: + customTTL: 1h + # optional: if true (default), return empty result for unmapped query types (for example TXT, MX or AAAA if only IPv4 address is defined). + # if false, queries with unmapped types will be forwarded to the upstream resolver + filterUnmappedTypes: true + # optional: replace domain in the query with other domain before resolver lookup in the mapping + rewrite: + example.com: printer.lan + mapping: + printer.lan: 192.168.178.3,2001:0db8:85a3:08d3:1319:8a2e:0370:7344 + +# optional: definition, which DNS resolver(s) should be used for queries to the domain (with all sub-domains). Multiple resolvers must be separated by a comma +# Example: Query client.fritz.box will ask DNS server 192.168.178.1. This is necessary for local network, to resolve clients by host name +conditional: + # optional: if false (default), return empty result if after rewrite, the mapped resolver returned an empty answer. If true, the original query will be sent to the upstream resolver + # Example: The query "blog.example.com" will be rewritten to "blog.fritz.box" and also redirected to the resolver at 192.168.178.1. If not found and if `fallbackUpstream` was set to `true`, the original query "blog.example.com" will be sent upstream. + # Usage: One usecase when having split DNS for internal and external (internet facing) users, but not all subdomains are listed in the internal domain. + fallbackUpstream: false + # optional: replace domain in the query with other domain before resolver lookup in the mapping + rewrite: + example.com: fritz.box + mapping: + fritz.box: 192.168.178.1 + lan.net: 192.168.178.1,192.168.178.2 + +# optional: use black and white lists to block queries (for example ads, trackers, adult pages etc.) +blocking: + # definition of blacklist groups. Can be external link (http/https) or local file + blackLists: + ads: + - https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt + - https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts + - http://sysctl.org/cameleon/hosts + - https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt + - | + # inline definition with YAML literal block scalar style + # hosts format + someadsdomain.com + special: + - https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts + # definition of whitelist groups. Attention: if the same group has black and whitelists, whitelists will be used to disable particular blacklist entries. If a group has only whitelist entries -> this means only domains from this list are allowed, all other domains will be blocked + whiteLists: + ads: + - whitelist.txt + - | + # inline definition with YAML literal block scalar style + # hosts format + whitelistdomain.com + # this is a regex + /^banners?[_.-]/ + # definition: which groups should be applied for which client + clientGroupsBlock: + # default will be used, if no special definition for a client name exists + default: + - ads + - special + # use client name (with wildcard support: * - sequence of any characters, [0-9] - range) + # or single ip address / client subnet as CIDR notation + laptop*: + - ads + 192.168.178.1/24: + - special + # which response will be sent, if query is blocked: + # zeroIp: 0.0.0.0 will be returned (default) + # nxDomain: return NXDOMAIN as return code + # comma separated list of destination IP addresses (for example: 192.100.100.15, 2001:0db8:85a3:08d3:1319:8a2e:0370:7344). Should contain ipv4 and ipv6 to cover all query types. Useful with running web server on this address to display the "blocked" page. + blockType: zeroIp + # optional: TTL for answers to blocked domains + # default: 6h + blockTTL: 1m + # optional: automatically list refresh period (in duration format). Default: 4h. + # Negative value -> deactivate automatically refresh. + # 0 value -> use default + refreshPeriod: 4h + # optional: timeout for list download (each url). Default: 60s. Use large values for big lists or slow internet connections + downloadTimeout: 4m + # optional: Download attempt timeout. Default: 60s + downloadAttempts: 5 + # optional: Time between the download attempts. Default: 1s + downloadCooldown: 10s + # optional: if failOnError, application startup will fail if at least one list can't be downloaded / opened. Default: blocking + startStrategy: failOnError + +# optional: configuration for caching of DNS responses +caching: + # duration how long a response must be cached (min value). + # If <=0, use response's TTL, if >0 use this value, if TTL is smaller + # Default: 0 + minTime: 5m + # duration how long a response must be cached (max value). + # If <0, do not cache responses + # If 0, use TTL + # If > 0, use this value, if TTL is greater + # Default: 0 + maxTime: 30m + # Max number of cache entries (responses) to be kept in cache (soft limit). Useful on systems with limited amount of RAM. + # Default (0): unlimited + maxItemsCount: 0 + # if true, will preload DNS results for often used queries (default: names queried more than 5 times in a 2-hour time window) + # this improves the response time for often used queries, but significantly increases external traffic + # default: false + prefetching: true + # prefetch track time window (in duration format) + # default: 120 + prefetchExpires: 2h + # name queries threshold for prefetch + # default: 5 + prefetchThreshold: 5 + # Max number of domains to be kept in cache for prefetching (soft limit). Useful on systems with limited amount of RAM. + # Default (0): unlimited + prefetchMaxItemsCount: 0 + # Time how long negative results (NXDOMAIN response or empty result) are cached. A value of -1 will disable caching for negative results. + # Default: 30m + cacheTimeNegative: 30m + +# optional: configuration of client name resolution +clientLookup: + # optional: this DNS resolver will be used to perform reverse DNS lookup (typically local router) + upstream: 192.168.178.1 + # optional: some routers return multiple names for client (host name and user defined name). Define which single name should be used. + # Example: take second name if present, if not take first name + singleNameOrder: + - 2 + - 1 + # optional: custom mapping of client name to IP addresses. Useful if reverse DNS does not work properly or just to have custom client names. + clients: + laptop: + - 192.168.178.29 +# optional: configuration for prometheus metrics endpoint +prometheus: + # enabled if true + enable: true + # url path, optional (default '/metrics') + path: /metrics + +# optional: write query information (question, answer, client, duration etc.) to daily csv file +queryLog: + # optional one of: mysql, postgresql, csv, csv-client. If empty, log to console + type: mysql + # directory (should be mounted as volume in docker) for csv, db connection string for mysql/postgresql + target: db_user:db_password@tcp(db_host_or_ip:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local + #postgresql target: postgres://user:password@db_host_or_ip:5432/db_name + # if > 0, deletes log files which are older than ... days + logRetentionDays: 7 + # optional: Max attempts to create specific query log writer, default: 3 + creationAttempts: 1 + # optional: Time between the creation attempts, default: 2s + creationCooldown: 2s + # optional: Which fields should be logged. You can choose one or more from: clientIP, clientName, responseReason, responseAnswer, question, duration. If not defined, it logs all fields + fields: + - clientIP + - duration + +# optional: Blocky can synchronize its cache and blocking state between multiple instances through redis. +redis: + # Server address and port or master name if sentinel is used + address: redismaster + # Username if necessary + username: usrname + # Password if necessary + password: passwd + # Database, default: 0 + database: 2 + # Connection is required for blocky to start. Default: false + required: true + # Max connection attempts, default: 3 + connectionAttempts: 10 + # Time between the connection attempts, default: 1s + connectionCooldown: 3s + # Sentinal username if necessary + sentinelUsername: usrname + # Sentinal password if necessary + sentinelPassword: passwd + # List with address and port of sentinel hosts(sentinel is activated if at least one sentinel address is configured) + sentinelAddresses: + - redis-sentinel1:26379 + - redis-sentinel2:26379 + - redis-sentinel3:26379 + +# optional: Mininal TLS version that the DoH and DoT server will use +minTlsServeVersion: 1.3 +# if https port > 0: path to cert and key file for SSL encryption. if not set, self-signed certificate will be generated +#certFile: server.crt +#keyFile: server.key +# optional: use these DNS servers to resolve blacklist urls and upstream DNS servers. It is useful if no system DNS resolver is configured, and/or to encrypt the bootstrap queries. +bootstrapDns: + - tcp+udp:1.1.1.1 + - https://1.1.1.1/dns-query + - upstream: https://dns.digitale-gesellschaft.ch/dns-query + ips: + - 185.95.218.42 + +# optional: drop all queries with following query types. Default: empty +filtering: + queryTypes: + - AAAA + +# optional: if path defined, use this file for query resolution (A, AAAA and rDNS). Default: empty +hostsFile: + # optional: Path to hosts file (e.g. /etc/hosts on Linux) + filePath: /etc/hosts + # optional: TTL, default: 1h + hostsTTL: 60m + # optional: Time between hosts file refresh, default: 1h + refreshPeriod: 30m + # optional: Whether loopback hosts addresses (127.0.0.0/8 and ::1) should be filtered or not, default: false + filterLoopback: true + +# optional: ports configuration +ports: + # optional: DNS listener port(s) and bind ip address(es), default 53 (UDP and TCP). Example: 53, :53, "127.0.0.1:5353,[::1]:5353" + dns: 53 + # optional: Port(s) and bind ip address(es) for DoT (DNS-over-TLS) listener. Example: 853, 127.0.0.1:853 + tls: 853 + # optional: Port(s) and optional bind ip address(es) to serve HTTPS used for prometheus metrics, pprof, REST API, DoH... If you wish to specify a specific IP, you can do so such as 192.168.0.1:443. Example: 443, :443, 127.0.0.1:443,[::1]:443 + https: 443 + # optional: Port(s) and optional bind ip address(es) to serve HTTP used for prometheus metrics, pprof, REST API, DoH... If you wish to specify a specific IP, you can do so such as 192.168.0.1:4000. Example: 4000, :4000, 127.0.0.1:4000,[::1]:4000 + http: 4000 + +# optional: logging configuration +log: + # optional: Log level (one from debug, info, warn, error). Default: info + level: info + # optional: Log format (text or json). Default: text + format: text + # optional: log timestamps. Default: true + timestamp: true + # optional: obfuscate log output (replace all alphanumeric characters with *) for user sensitive data like request domains or responses to increase privacy. Default: false + privacy: false + +# optional: add EDE error codes to dns response +ede: + # enabled if true, Default: false + enable: true \ No newline at end of file diff --git a/configuration/index.html b/configuration/index.html new file mode 100644 index 00000000..235c9baf --- /dev/null +++ b/configuration/index.html @@ -0,0 +1,2372 @@ + + + + + + + + + + + + + + + + + + + + + + + + Configuration - blocky + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Configuration

+

This chapter describes all configuration options in config.yaml. You can download a reference file with all +configuration properties as JSON.

+
+reference configuration file +
upstream:
+  # these external DNS resolvers will be used. Blocky picks 2 random resolvers from the list for each query
+  # format for resolver: [net:]host:[port][/path]. net could be empty (default, shortcut for tcp+udp), tcp+udp, tcp, udp, tcp-tls or https (DoH). If port is empty, default port will be used (53 for udp and tcp, 853 for tcp-tls, 443 for https (Doh))
+  # this configuration is mandatory, please define at least one external DNS resolver
+  default:
+    # example for tcp+udp IPv4 server (https://digitalcourage.de/)
+    - 5.9.164.112
+    # Cloudflare
+    - 1.1.1.1
+    # example for DNS-over-TLS server (DoT)
+    - tcp-tls:fdns1.dismail.de:853
+    # example for DNS-over-HTTPS (DoH)
+    - https://dns.digitale-gesellschaft.ch/dns-query
+  # optional: use client name (with wildcard support: * - sequence of any characters, [0-9] - range)
+  # or single ip address / client subnet as CIDR notation
+  laptop*:
+    - 123.123.123.123
+
+# optional: timeout to query the upstream resolver. Default: 2s
+upstreamTimeout: 2s
+
+# optional: If true, blocky will fail to start unless at least one upstream server per group is reachable. Default: false
+startVerifyUpstream: true
+
+# optional: Determines how blocky will create outgoing connections. This impacts both upstreams, and lists.
+# accepted: dual, v4, v6
+# default: dual
+connectIPVersion: dual
+
+# optional: custom IP address(es) for domain name (with all sub-domains). Multiple addresses must be separated by a comma
+# example: query "printer.lan" or "my.printer.lan" will return 192.168.178.3
+customDNS:
+  customTTL: 1h
+  # optional: if true (default), return empty result for unmapped query types (for example TXT, MX or AAAA if only IPv4 address is defined).
+  # if false, queries with unmapped types will be forwarded to the upstream resolver
+  filterUnmappedTypes: true
+  # optional: replace domain in the query with other domain before resolver lookup in the mapping
+  rewrite:
+    example.com: printer.lan
+  mapping:
+    printer.lan: 192.168.178.3,2001:0db8:85a3:08d3:1319:8a2e:0370:7344
+
+# optional: definition, which DNS resolver(s) should be used for queries to the domain (with all sub-domains). Multiple resolvers must be separated by a comma
+# Example: Query client.fritz.box will ask DNS server 192.168.178.1. This is necessary for local network, to resolve clients by host name
+conditional:
+  # optional: if false (default), return empty result if after rewrite, the mapped resolver returned an empty answer. If true, the original query will be sent to the upstream resolver
+  # Example: The query "blog.example.com" will be rewritten to "blog.fritz.box" and also redirected to the resolver at 192.168.178.1. If not found and if `fallbackUpstream` was set to `true`, the original query "blog.example.com" will be sent upstream.
+  # Usage: One usecase when having split DNS for internal and external (internet facing) users, but not all subdomains are listed in the internal domain.
+  fallbackUpstream: false
+  # optional: replace domain in the query with other domain before resolver lookup in the mapping
+  rewrite:
+    example.com: fritz.box
+  mapping:
+    fritz.box: 192.168.178.1
+    lan.net: 192.168.178.1,192.168.178.2
+
+# optional: use black and white lists to block queries (for example ads, trackers, adult pages etc.)
+blocking:
+  # definition of blacklist groups. Can be external link (http/https) or local file
+  blackLists:
+    ads:
+      - https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
+      - https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
+      - http://sysctl.org/cameleon/hosts
+      - https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt
+      - |
+        # inline definition with YAML literal block scalar style
+        # hosts format
+        someadsdomain.com
+    special:
+      - https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts
+  # definition of whitelist groups. Attention: if the same group has black and whitelists, whitelists will be used to disable particular blacklist entries. If a group has only whitelist entries -> this means only domains from this list are allowed, all other domains will be blocked
+  whiteLists:
+    ads:
+      - whitelist.txt
+      - |
+        # inline definition with YAML literal block scalar style
+        # hosts format
+        whitelistdomain.com
+        # this is a regex
+        /^banners?[_.-]/
+  # definition: which groups should be applied for which client
+  clientGroupsBlock:
+    # default will be used, if no special definition for a client name exists
+    default:
+      - ads
+      - special
+    # use client name (with wildcard support: * - sequence of any characters, [0-9] - range)
+    # or single ip address / client subnet as CIDR notation
+    laptop*:
+      - ads
+    192.168.178.1/24:
+      - special
+  # which response will be sent, if query is blocked:
+  # zeroIp: 0.0.0.0 will be returned (default)
+  # nxDomain: return NXDOMAIN as return code
+  # comma separated list of destination IP addresses (for example: 192.100.100.15, 2001:0db8:85a3:08d3:1319:8a2e:0370:7344). Should contain ipv4 and ipv6 to cover all query types. Useful with running web server on this address to display the "blocked" page.
+  blockType: zeroIp
+  # optional: TTL for answers to blocked domains
+  # default: 6h
+  blockTTL: 1m
+  # optional: automatically list refresh period (in duration format). Default: 4h.
+  # Negative value -> deactivate automatically refresh.
+  # 0 value -> use default
+  refreshPeriod: 4h
+  # optional: timeout for list download (each url). Default: 60s. Use large values for big lists or slow internet connections
+  downloadTimeout: 4m
+  # optional: Download attempt timeout. Default: 60s
+  downloadAttempts: 5
+  # optional: Time between the download attempts. Default: 1s
+  downloadCooldown: 10s
+  # optional: if failOnError, application startup will fail if at least one list can't be downloaded / opened. Default: blocking
+  startStrategy: failOnError
+
+# optional: configuration for caching of DNS responses
+caching:
+  # duration how long a response must be cached (min value).
+  # If <=0, use response's TTL, if >0 use this value, if TTL is smaller
+  # Default: 0
+  minTime: 5m
+  # duration how long a response must be cached (max value).
+  # If <0, do not cache responses
+  # If 0, use TTL
+  # If > 0, use this value, if TTL is greater
+  # Default: 0
+  maxTime: 30m
+  # Max number of cache entries (responses) to be kept in cache (soft limit). Useful on systems with limited amount of RAM.
+  # Default (0): unlimited
+  maxItemsCount: 0
+  # if true, will preload DNS results for often used queries (default: names queried more than 5 times in a 2-hour time window)
+  # this improves the response time for often used queries, but significantly increases external traffic
+  # default: false
+  prefetching: true
+  # prefetch track time window (in duration format)
+  # default: 120
+  prefetchExpires: 2h
+  # name queries threshold for prefetch
+  # default: 5
+  prefetchThreshold: 5
+  # Max number of domains to be kept in cache for prefetching (soft limit). Useful on systems with limited amount of RAM.
+  # Default (0): unlimited
+  prefetchMaxItemsCount: 0
+  # Time how long negative results (NXDOMAIN response or empty result) are cached. A value of -1 will disable caching for negative results.
+  # Default: 30m
+  cacheTimeNegative: 30m
+
+# optional: configuration of client name resolution
+clientLookup:
+  # optional: this DNS resolver will be used to perform reverse DNS lookup (typically local router)
+  upstream: 192.168.178.1
+  # optional: some routers return multiple names for client (host name and user defined name). Define which single name should be used.
+  # Example: take second name if present, if not take first name
+  singleNameOrder:
+    - 2
+    - 1
+  # optional: custom mapping of client name to IP addresses. Useful if reverse DNS does not work properly or just to have custom client names.
+  clients:
+    laptop:
+      - 192.168.178.29
+# optional: configuration for prometheus metrics endpoint
+prometheus:
+  # enabled if true
+  enable: true
+  # url path, optional (default '/metrics')
+  path: /metrics
+
+# optional: write query information (question, answer, client, duration etc.) to daily csv file
+queryLog:
+  # optional one of: mysql, postgresql, csv, csv-client. If empty, log to console
+  type: mysql
+  # directory (should be mounted as volume in docker) for csv, db connection string for mysql/postgresql
+  target: db_user:db_password@tcp(db_host_or_ip:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local
+  #postgresql target: postgres://user:password@db_host_or_ip:5432/db_name
+  # if > 0, deletes log files which are older than ... days
+  logRetentionDays: 7
+  # optional: Max attempts to create specific query log writer, default: 3
+  creationAttempts: 1
+  # optional: Time between the creation attempts, default: 2s
+  creationCooldown: 2s
+  # optional: Which fields should be logged. You can choose one or more from: clientIP, clientName, responseReason, responseAnswer, question, duration. If not defined, it logs all fields
+  fields:
+    - clientIP
+    - duration
+
+# optional: Blocky can synchronize its cache and blocking state between multiple instances through redis.
+redis:
+  # Server address and port or master name if sentinel is used
+  address: redismaster
+  # Username if necessary
+  username: usrname
+  # Password if necessary
+  password: passwd
+  # Database, default: 0
+  database: 2
+  # Connection is required for blocky to start. Default: false
+  required: true
+  # Max connection attempts, default: 3
+  connectionAttempts: 10
+  # Time between the connection attempts, default: 1s
+  connectionCooldown: 3s
+  # Sentinal username if necessary
+  sentinelUsername: usrname
+  # Sentinal password if necessary
+  sentinelPassword: passwd
+  # List with address and port of sentinel hosts(sentinel is activated if at least one sentinel address is configured)
+  sentinelAddresses:
+    - redis-sentinel1:26379
+    - redis-sentinel2:26379
+    - redis-sentinel3:26379
+
+# optional: Mininal TLS version that the DoH and DoT server will use
+minTlsServeVersion: 1.3
+# if https port > 0: path to cert and key file for SSL encryption. if not set, self-signed certificate will be generated
+#certFile: server.crt
+#keyFile: server.key
+# optional: use these DNS servers to resolve blacklist urls and upstream DNS servers. It is useful if no system DNS resolver is configured, and/or to encrypt the bootstrap queries.
+bootstrapDns:
+  - tcp+udp:1.1.1.1
+  - https://1.1.1.1/dns-query
+  - upstream: https://dns.digitale-gesellschaft.ch/dns-query
+    ips:
+      - 185.95.218.42
+
+# optional: drop all queries with following query types. Default: empty
+filtering:
+  queryTypes:
+    - AAAA
+
+# optional: if path defined, use this file for query resolution (A, AAAA and rDNS). Default: empty
+hostsFile:
+  # optional: Path to hosts file (e.g. /etc/hosts on Linux)
+  filePath: /etc/hosts
+  # optional: TTL, default: 1h
+  hostsTTL: 60m
+  # optional: Time between hosts file refresh, default: 1h
+  refreshPeriod: 30m
+  # optional: Whether loopback hosts addresses (127.0.0.0/8 and ::1) should be filtered or not, default: false
+  filterLoopback: true
+
+# optional: ports configuration
+ports:
+  # optional: DNS listener port(s) and bind ip address(es), default 53 (UDP and TCP). Example: 53, :53, "127.0.0.1:5353,[::1]:5353"
+  dns: 53
+  # optional: Port(s) and bind ip address(es) for DoT (DNS-over-TLS) listener. Example: 853, 127.0.0.1:853
+  tls: 853
+  # optional: Port(s) and optional bind ip address(es) to serve HTTPS used for prometheus metrics, pprof, REST API, DoH... If you wish to specify a specific IP, you can do so such as 192.168.0.1:443. Example: 443, :443, 127.0.0.1:443,[::1]:443
+  https: 443
+  # optional: Port(s) and optional bind ip address(es) to serve HTTP used for prometheus metrics, pprof, REST API, DoH... If you wish to specify a specific IP, you can do so such as 192.168.0.1:4000. Example: 4000, :4000, 127.0.0.1:4000,[::1]:4000
+  http: 4000
+
+# optional: logging configuration
+log:
+  # optional: Log level (one from debug, info, warn, error). Default: info
+  level: info
+  # optional: Log format (text or json). Default: text
+  format: text
+  # optional: log timestamps. Default: true
+  timestamp: true
+  # optional: obfuscate log output (replace all alphanumeric characters with *) for user sensitive data like request domains or responses to increase privacy. Default: false
+  privacy: false
+
+# optional: add EDE error codes to dns response
+ede:
+  # enabled if true, Default: false
+  enable: true
+
+
+

Basic configuration

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeMandatoryDefault valueDescription
certFilepathnoPath to cert and key file for SSL encryption (DoH and DoT); if empty, self-signed certificate is generated
keyFilepathnoPath to cert and key file for SSL encryption (DoH and DoT); if empty, self-signed certificate is generated
dohUserAgentstringnoHTTP User Agent for DoH upstreams
minTlsServeVersionstringno1.2Minimum TLS version that the DoT and DoH server use to serve those encrypted DNS requests
startVerifyUpstreamboolnofalseIf true, blocky will fail to start unless at least one upstream server per group is reachable.
connectIPVersionenum (dual, v4, v6)nodualIP version to use for outgoing connections (dual, v4, v6)
+
+

Example

+
minTlsServeVersion: 1.1
+connectIPVersion: v4
+
+
+

Ports configuration

+

All logging port are optional.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeDefault valueDescription
ports.dns[IP]:port[,[IP]:port]*53Port(s) and optional bind ip address(es) to serve DNS endpoint (TCP and UDP). If you wish to specify a specific IP, you can do so such as 192.168.0.1:53. Example: 53, :53, 127.0.0.1:53,[::1]:53
ports.tls[IP]:port[,[IP]:port]*Port(s) and optional bind ip address(es) to serve DoT DNS endpoint (DNS-over-TLS). If you wish to specify a specific IP, you can do so such as 192.168.0.1:853. Example: 83, :853, 127.0.0.1:853,[::1]:853
ports.http[IP]:port[,[IP]:port]*Port(s) and optional bind ip address(es) to serve HTTP used for prometheus metrics, pprof, REST API, DoH... If you wish to specify a specific IP, you can do so such as 192.168.0.1:4000. Example: 4000, :4000, 127.0.0.1:4000,[::1]:4000
ports.https[IP]:port[,[IP]:port]*Port(s) and optional bind ip address(es) to serve HTTPS used for prometheus metrics, pprof, REST API, DoH... If you wish to specify a specific IP, you can do so such as 192.168.0.1:443. Example: 443, :443, 127.0.0.1:443,[::1]:443
+
+

Example

+
ports:
+  dns: 53
+  http: 4000
+  https: 443
+
+
+

Logging configuration

+

All logging options are optional.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeDefault valueDescription
log.levelenum (debug, info, warn, error)infoLog level
log.formatenum (text, json)textLog format (text or json).
log.timestampbooltrueLog time stamps (true or false).
log.privacyboolfalseObfuscate log output (replace all alphanumeric characters with *) for user sensitive data like request domains or responses to increase privacy.
+
+

Example

+
log:
+  level: debug
+  format: json
+  timestamp: false
+  privacy: true
+
+
+

Upstream configuration

+

To resolve a DNS query, blocky needs external public or private DNS resolvers. Blocky supports DNS resolvers with +following network protocols (net part of the resolver URL):

+
    +
  • tcp+udp (UDP and TCP, dependent on query type)
  • +
  • https (aka DoH)
  • +
  • tcp-tls (aka DoT)
  • +
+
+

Hint

+

You can (and should!) configure multiple DNS resolvers. Blocky picks 2 random resolvers from the list for each query and +returns the answer from the fastest one. This improves your network speed and increases your privacy - your DNS traffic +will be distributed over multiple providers.

+
+

Each resolver must be defined as a string in following format: [net:]host:[port][/path][#commonName].

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeMandatoryDefault value
netenum (tcp+udp, tcp-tls or https)notcp+udp
hostIP or hostnameyes
portint (1 - 65535)no53 for udp/tcp, 853 for tcp-tls and 443 for https
commonNamestringnothe host value
+

The commonName parameter overrides the expected certificate common name value used for verification.

+

Blocky needs at least the configuration of the default group. This group will be used as a fallback, if no client +specific resolver configuration is available.

+

You can use the client name (see Client name lookup), client's IP address or a client subnet as +CIDR notation.

+
+

Tip

+

You can use * as wildcard for the sequence of any character or [0-9] as number range

+
+
+

Example

+
upstream:
+  default:
+    - 5.9.164.112
+    - 1.1.1.1
+    - tcp-tls:fdns1.dismail.de:853
+    - https://dns.digitale-gesellschaft.ch/dns-query
+  laptop*:
+    - 123.123.123.123
+  10.43.8.67/28:
+    - 1.1.1.1
+    - 9.9.9.9
+
+
+

Use 123.123.123.123 as single upstream DNS resolver for client laptop-home, +1.1.1.1 and 9.9.9.9 for all clients in the sub-net 10.43.8.67/28 and 4 resolvers (default) for all others clients.

+
+

Note

+

Blocky needs at least one upstream DNS server

+
+

See List of public DNS servers if you need some ideas, which +public free DNS server you could use.

+

Upstream lookup timeout

+

Blocky will wait 2 seconds (default value) for the response from the external upstream DNS server. You can change this +value by setting the upstreamTimeout configuration parameter (in duration format).

+
+

Example

+
upstream:
+  default:
+    - 46.182.19.48
+    - 80.241.218.68
+upstreamTimeout: 5s
+
+
+

Bootstrap DNS configuration

+

These DNS servers are used to resolve upstream DoH and DoT servers that are specified as host names, and list domains. +It is useful if no system DNS resolver is configured, and/or to encrypt the bootstrap queries.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeMandatoryDefault valueDescription
upstreamUpstream (see above)no
ipsList of IPsyes, if upstream is DoT/DoHOnly valid if upstream is DoH or DoT
+

When using an upstream specified by IP, and not by hostname, you can write only the upstream and skip ips.

+
+

Note

+

Works only on Linux/*nix OS due to golang limitations under Windows.

+
+
+

Example

+
    bootstrapDns:
+      - upstream: tcp-tls:dns.example.com
+        ips:
+        - 123.123.123.123
+      - upstream: https://234.234.234.234/dns-query
+
+
+

Filtering

+

Under certain circumstances, it may be useful to filter some types of DNS queries. You can define one or more DNS query +types, all queries with these types will be dropped (empty answer will be returned).

+
+

Example

+
filtering:
+  queryTypes:
+    - AAAA
+
+
+

This configuration will drop all 'AAAA' (IPv6) queries.

+

FQDN only

+

In domain environments, it may be useful to only response to FQDN requests. If this option is enabled blocky respond immediately +with NXDOMAIN if the request is not a valid FQDN. The request is therefore not further processed by other options like custom or conditional. +Please be aware that by enabling it your hostname resolution will break unless every hostname is part of a domain.

+
+

Example

+
fqdnOnly: true
+
+
+

Custom DNS

+

You can define your own domain name to IP mappings. For example, you can use a user-friendly name for a network printer +or define a domain name for your local device on order to use the HTTPS certificate. Multiple IP addresses for one +domain must be separated by a comma.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeMandatoryDefault value
customTTLduration (no unit is minutes)no1h
rewritestring: string (domain: domain)no
mappingstring: string (hostname: address list)no
filterUnmappedTypesbooleannotrue
+
+

Example

+
customDNS:
+  customTTL: 1h
+  filterUnmappedTypes: true
+  rewrite:
+    home: lan
+    replace-me.com: with-this.com
+  mapping:
+    printer.lan: 192.168.178.3
+    otherdevice.lan: 192.168.178.15,2001:0db8:85a3:08d3:1319:8a2e:0370:7344
+
+
+

This configuration will also resolve any subdomain of the defined domain. For example a query "printer.lan" or " +my.printer.lan" will return 192.168.178.3 as IP address.

+

With the optional parameter rewrite you can replace domain part of the query with the defined part before the +resolver lookup is performed. +The query "printer.home" will be rewritten to "printer.lan" and return 192.168.178.3.

+

With parameter filterUnmappedTypes = true (default), blocky will filter all queries with unmapped types, for example: +AAAA for "printer.lan" or TXT for "otherdevice.lan". +With filterUnmappedTypes = false a query AAAA "printer.lan" will be forwarded to the upstream DNS server.

+

Conditional DNS resolution

+

You can define, which DNS resolver(s) should be used for queries for the particular domain (with all subdomains). This +is for example useful, if you want to reach devices in your local network by the name. Since only your router know which +hostname belongs to which IP address, all DNS queries for the local network should be redirected to the router.

+

The optional parameter rewrite behaves the same as with custom DNS.

+

The optional parameter fallbackUpstream, if false (default), return empty result if after rewrite, the mapped resolver returned an empty answer. If true, the original query will be sent to the upstream resolver.

+

Usage: One usecase when having split DNS for internal and external (internet facing) users, but not all subdomains are listed in the internal domain

+
+

Example

+
conditional:
+  fallbackUpstream: false
+  rewrite:
+    example.com: fritz.box
+    replace-me.com: with-this.com
+  mapping:
+    fritz.box: 192.168.178.1
+    lan.net: 192.170.1.2,192.170.1.3
+    # for reverse DNS lookups of local devices
+    178.168.192.in-addr.arpa: 192.168.178.1
+    # for all unqualified hostnames
+    .: 168.168.0.1
+
+
+
+

Tip

+

You can use . as wildcard for all non full qualified domains (domains without dot)

+
+

In this example, a DNS query "client.fritz.box" will be redirected to the router's DNS server at 192.168.178.1 and client.lan.net to 192.170.1.2 and 192.170.1.3. +The query "client.example.com" will be rewritten to "client.fritz.box" and also redirected to the resolver at 192.168.178.1.

+

If not found and if fallbackUpstream was set to true, the original query "blog.example.com" will be sent upstream.

+

All unqualified host names (e.g. "test") will be redirected to the DNS server at 168.168.0.1.

+

One usecase for fallbackUpstream is when having split DNS for internal and external (internet facing) users, but not all subdomains are listed in the internal domain.

+

Client name lookup

+

Blocky can try to resolve a user-friendly client name from the IP address or server URL (DoT and DoH). This is useful +for defining of blocking groups, since IP address can change dynamically.

+

Resolving client name from URL/Host

+

If DoT or DoH is enabled, you can use a subdomain prefixed with id- to provide a client name (wildcard ssl certificate +recommended).

+

Example: domain example.com

+

DoT Host: id-bob.example.com -> request's client name is bob +DoH URL: https://id-bob.example.com/dns-query -> request's client name is bob

+

For DoH you can also pass the client name as url parameter:

+

DoH URL: https://blocky.example.com/dns-query/alice -> request's client name is alice

+

Resolving client name from IP address

+

Blocky uses rDNS to retrieve client's name. To use this feature, you can configure a DNS server for client lookup ( +typically your router). You can also define client names manually per IP address.

+

Single name order

+

Some routers return multiple names for the client (host name and user defined name). With +parameter clientLookup.singleNameOrder you can specify, which of retrieved names should be used.

+

Custom client name mapping

+

You can also map a particular client name to one (or more) IP (ipv4/ipv6) addresses. Parameter clientLookup.clients +contains a map of client name and multiple IP addresses.

+
+

Example

+
clientLookup:
+  upstream: 192.168.178.1
+  singleNameOrder:
+    - 2
+    - 1
+  clients:
+    laptop:
+      - 192.168.178.29
+
+

Use 192.168.178.1 for rDNS lookup. Take second name if present, if not take first name. IP address 192.168.178.29 is mapped to laptop as client name.

+
+

Blocking and whitelisting

+

Blocky can download and use external lists with domains or IP addresses to block DNS query (e.g. advertisement, malware, +trackers, adult sites). You can group several list sources together and define the blocking behavior per client. +External blacklists must be either in the well-known Hosts format or just +a plain domain list (one domain per line). Blocky also supports regex as more powerful tool to define patterns to block.

+

Blocky uses DNS sinkhole approach to block a DNS query. Domain name from +the request, IP address from the response, and the CNAME record will be checked against configured blacklists.

+

To avoid over-blocking, you can define or use already existing whitelists.

+

Definition black and whitelists

+

Each black or whitelist can be either a path to the local file, a URL to download or inline list definition of a domains +in hosts format (YAML literal block scalar style). All Urls must be grouped to a group name.

+
+

Example

+
blocking:
+  blackLists:
+    ads:
+      - https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
+      - https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
+      - |
+        # inline definition with YAML literal block scalar style
+        someadsdomain.com
+        anotheradsdomain.com
+        # this is a regex
+        /^banners?[_.-]/
+    special:
+      - https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts
+  whiteLists:
+    ads:
+      - whitelist.txt
+      - |
+        # inline definition with YAML literal block scalar style
+        whitelistdomain.com
+
+

In this example you can see 2 groups: ads with 2 lists and special with one list. One local whitelist was defined for the ads group.

+
+
+

Warning

+

If the same group has black and whitelists, whitelists will be used to disable particular blacklist entries. +If a group has only whitelist entries -> this means only domains from this list are allowed, all other domains will +be blocked

+
+
+

Note

+

Please define also client group mapping, otherwise you black and whitelist definition will have no effect

+
+

Regex support

+

You can use regex to define patterns to block. A regex entry must start and end with the slash character (/). Some +Examples:

+
    +
  • /baddomain/ will block www.baddomain.com, baddomain.com, but also mybaddomain-sometext.com
  • +
  • /^baddomain/ will block baddomain.com, but not www.baddomain.com
  • +
  • /^apple\.(de|com)$/ will only block apple.de and apple.com
  • +
+

Client groups

+

In this configuration section, you can define, which blocking group(s) should be used for which client in your network. +Example: All clients should use the ads group, which blocks advertisement and kids devices should use the adult +group, which blocky adult sites.

+

Clients without a group assignment will use automatically the default group.

+

You can use the client name (see Client name lookup), client's IP address, client's full-qualified domain name +or a client subnet as CIDR notation.

+

If full-qualified domain name is used (for example "myclient.ddns.org"), blocky will try to resolve the IP address (A and AAAA records) of this domain. +If client's IP address matches with the result, the defined group will be used.

+
+

Example

+
blocking:
+  clientGroupsBlock:
+  # default will be used, if no special definition for a client name exists
+    default:
+      - ads
+      - special
+    laptop*:
+      - ads
+    192.168.178.1/24:
+      - special
+    kid-laptop:
+      - ads
+      - adult
+
+

All queries from network clients, whose device name starts with laptop, will be filtered against the ads group's lists. All devices from the subnet 192.168.178.1/24 against the special group and kid-laptop against ads and adult. All other clients: ads and special.

+
+
+

Tip

+

You can use * as wildcard for the sequence of any character or [0-9] as number range

+
+

Block type

+

You can configure, which response should be sent to the client, if a requested query is blocked (only for A and AAAA +queries, NXDOMAIN for other types):

+ + + + + + + + + + + + + + + + + + + + + + + + + +
blockTypeExampleDescription
zeroIPzeroIPThis is the default block type. Server returns 0.0.0.0 (or :: for IPv6) as result for A and AAAA queries
nxDomainnxDomainreturn NXDOMAIN as return code
custom IPs192.100.100.15, 2001:0db8:85a3:08d3:1319:8a2e:0370:7344comma separated list of destination IP addresses. Should contain ipv4 and ipv6 to cover all query types. Useful with running web server on this address to display the "blocked" page.
+
+

Example

+
blocking:
+  blockType: nxDomain
+
+
+

Block TTL

+

TTL for answers to blocked domains can be set to customize the time (in duration format) clients ask for those +domains again. Default Block TTL is 6hours. This setting only makes sense when blockType is set to nxDomain or +zeroIP, and will affect how much time it could take for a client to be able to see the real IP address for a domain +after receiving the custom value.

+
+

Example

+
blocking:
+  blockType: 192.100.100.15, 2001:0db8:85a3:08d3:1319:8a2e:0370:7344
+  blockTTL: 10s
+
+
+

List refresh period

+

To keep the list cache up-to-date, blocky will periodically download and reload all external lists. Default period is +4 hours. You can configure this by setting the blocking.refreshPeriod parameter to a value in duration format. +Negative value will deactivate automatically refresh.

+
+

Example

+
blocking:
+  refreshPeriod: 60m
+
+
+

Refresh every hour.

+

Download

+

You can configure the list download attempts according to your internet connection:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeMandatoryDefault valueDescription
downloadTimeoutduration formatno60sDownload attempt timeout
downloadAttemptsintno3How many download attempts should be performed
downloadCooldownduration formatno1sTime between the download attempts
+
+

Example

+
blocking:
+  downloadTimeout: 4m
+  downloadAttempts: 5
+  downloadCooldown: 10s
+
+
+

Start strategy

+

You can configure the blocking behavior during application start of blocky.
+If no starategy is selected blocking will be used.

+ + + + + + + + + + + + + + + + + + + + + +
startStrategyDescription
blockingall blocking lists will be loaded before DNS resolution starts
failOnErrorlike blocking but blocky will shut down if any download fails
fastDNS resolution starts immediately without blocking which will be enabled after list load is completed
+
+

Example

+
blocking:
+  startStrategy: failOnError
+
+
+

Concurrency

+

Blocky downloads and processes links in a single group concurrently. With parameter processingConcurrency you can adjust +how many links can be processed in the same time. Higher value can reduce the overall list refresh time, but more parallel + download and processing jobs need more RAM. Please consider to reduce this value on systems with limited memory. Default value is 4.

+
+

Example

+
blocking:
+  processingConcurrency: 10
+
+
+

Caching

+

Each DNS response has a TTL (Time-to-live) value. This value defines, how long is the record valid in seconds. The +values are maintained by domain owners, server administrators etc. Blocky caches the answers from all resolved queries +in own cache in order to avoid repeated requests. This reduces the DNS traffic and increases the network speed, since +blocky can serve the result immediately from the cache.

+

With following parameters you can tune the caching behavior:

+
+

Warning

+

Wrong values can significantly increase external DNS traffic or memory consumption.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeMandatoryDefault valueDescription
caching.minTimeduration formatno0 (use TTL)How long a response must be cached (min value). If <=0, use response's TTL, if >0 use this value, if TTL is smaller
caching.maxTimeduration formatno0 (use TTL)How long a response must be cached (max value). If <0, do not cache responses. If 0, use TTL. If > 0, use this value, if TTL is greater
caching.maxItemsCountintno0 (unlimited)Max number of cache entries (responses) to be kept in cache (soft limit). Default (0): unlimited. Useful on systems with limited amount of RAM.
caching.prefetchingboolnofalseif true, blocky will preload DNS results for often used queries (default: names queried more than 5 times in a 2 hour time window). Results in cache will be loaded again on their expire (TTL). This improves the response time for often used queries, but significantly increases external traffic. It is recommended to increase "minTime" to reduce the number of prefetch queries to external resolvers.
caching.prefetchExpiresduration formatno2hPrefetch track time window
caching.prefetchThresholdintno5Name queries threshold for prefetch
caching.prefetchMaxItemsCountintno0 (unlimited)Max number of domains to be kept in cache for prefetching (soft limit). Default (0): unlimited. Useful on systems with limited amount of RAM.
caching.cacheTimeNegativeduration formatno30mTime how long negative results (NXDOMAIN response or empty result) are cached. A value of -1 will disable caching for negative results.
+
+

Example

+
caching:
+  minTime: 5m
+  maxTime: 30m
+  prefetching: true
+
+
+

Redis

+

Blocky can synchronize its cache and blocking state between multiple instances through redis. +Synchronization is disabled if no address is configured.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeMandatoryDefault valueDescription
redis.addressstringnoServer address and port or master name if sentinel is used
redis.usernamestringnoUsername if necessary
redis.passwordstringnoPassword if necessary
redis.databaseintno0Database
redis.requiredboolnofalseConnection is required for blocky to start
redis.connectionAttemptsintno3Max connection attempts
redis.connectionCooldownduration formatno1sTime between the connection attempts
redis.sentinelUsernamestringnoSentinel username if necessary
redis.sentinelPasswordstringnoSentinel password if necessary
redis.sentinelAddressesstring[]noSentinel host list (Sentinel is activated if addresses are defined)
+
+

Example

+
redis:
+  address: redismaster
+  username: usrname
+  password: passwd
+  database: 2
+  required: true
+  connectionAttempts: 10
+  connectionCooldown: 3s
+  sentinelUsername: sentUsrname
+  sentinelPassword: sentPasswd
+  sentinelAddresses:
+    - redis-sentinel1:26379
+    - redis-sentinel2:26379
+    - redis-sentinel3:26379
+
+
+

Prometheus

+

Blocky can expose various metrics for prometheus. To use the prometheus feature, the HTTP listener must be enabled ( +see Basic Configuration).

+ + + + + + + + + + + + + + + + + + + + + + + +
ParameterMandatoryDefault valueDescription
prometheus.enablenofalseIf true, enables prometheus metrics
prometheus.pathno/metricsURL path to the metrics endpoint
+
+

Example

+
prometheus:
+  enable: true
+  path: /metrics
+
+
+

Query logging

+

You can enable the logging of DNS queries (question, answer, client, duration etc.) to a daily CSV file (can be opened +in Excel or OpenOffice Calc) or MySQL/MariaDB database.

+
+

Warning

+

Query file/database contains sensitive information. Please ensure to inform users, if you log their queries.

+
+

Query log types

+

You can select one of following query log types:

+
    +
  • mysql - log each query in the external MySQL/MariaDB database
  • +
  • postgresql - log each query in the external PostgreSQL database
  • +
  • csv - log into CSV file (one per day)
  • +
  • csv-client - log into CSV file (one per day and per client)
  • +
  • console - log into console output
  • +
  • none - do not log any queries
  • +
+

Query log fields

+

You can choose which information from processed DNS request and response should be logged in the target system. You can define one or more of following fields:

+
    +
  • clientIP - origin IP address from the request
  • +
  • clientName - resolved client name(s) from the origins request
  • +
  • responseReason - reason for the response (e.g. from which upstream resolver), response type and code
  • +
  • responseAnswer - returned DNS answer
  • +
  • question - DNS question from the request
  • +
  • duration - request processing time in milliseconds
  • +
+
+

Hint

+

If not defined, blocky will log all available information

+
+

Configuration parameters:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeMandatoryDefault valueDescription
queryLog.typeenum (mysql, postgresql, csv, csv-client, console, none (see above))noType of logging target. Console if empty
queryLog.targetstringnodirectory for writing the logs (for csv) or database url (for mysql or postgresql)
queryLog.logRetentionDaysintno0if > 0, deletes log files/database entries which are older than ... days
queryLog.creationAttemptsintno3Max attempts to create specific query log writer
queryLog.CreationCooldownduration formatno2Time between the creation attempts
queryLog.fieldslist enum (clientIP, clientName, responseReason, responseAnswer, question, duration)noallwhich information should be logged
+
+

Hint

+

Please ensure, that the log directory is writable or database exists. If you use docker, please ensure, that the directory is properly +mounted (e.g. volume)

+
+

example for CSV format with limited logging information

+
+

Example

+
queryLog:
+  type: csv
+  target: /logs
+  logRetentionDays: 7
+  fields:
+  - clientIP
+  - duration
+
+
+

example for Database

+
+

Example

+
queryLog:
+  type: mysql
+  target: db_user:db_password@tcp(db_host_or_ip:3306)/db_user?charset=utf8mb4&parseTime=True&loc=Local
+  logRetentionDays: 7
+
+
+

Hosts file

+

You can enable resolving of entries, located in local hosts file.

+

Configuration parameters:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeMandatoryDefault valueDescription
hostsFile.filePathstringnoPath to hosts file (e.g. /etc/hosts on Linux)
hostsFile.hostsTTLduration (no units is minutes)no1hTTL
hostsFile.refreshPeriodduration formatno1hTime between hosts file refresh
hostsFile.filterLoopbackboolnofalseFilter loopback addresses (127.0.0.0/8 and ::1)
+
+

Example

+
hostsFile:
+  filePath: /etc/hosts
+  hostsTTL: 60m
+  refreshPeriod: 30m
+
+
+

Deliver EDE codes as EDNS0 option

+

DNS responses can be extended with EDE codes according to RFC8914.

+

Configuration parameters:

+ + + + + + + + + + + + + + + + + + + +
ParameterTypeMandatoryDefault valueDescription
ede.enableboolnofalseIf true, DNS responses are deliverd with EDE codes
+
+

Example

+
ede:
+  enable: true
+
+
+

SSL certificate configuration (DoH / TLS listener)

+

See Wiki - Configuration of HTTPS +for detailed information, how to create and configure SSL certificates.

+

DoH url: https://host:port/dns-query

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/fb_dns_config.png b/fb_dns_config.png new file mode 100644 index 0000000000000000000000000000000000000000..7e2037147771545b8ebbba4ab1323daa1d28a562 GIT binary patch literal 40713 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%0D>j@*I7f$oLfN#kecPdrn(j>;3|%INg%X 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

S}*4EKIjI2hpZf)HAj4G| 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

HX;s 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 + + + + + + + + + + + + + + + + + + Abbreviations - blocky + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Abbreviations

+ + + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..a989fde6 --- /dev/null +++ b/index.html @@ -0,0 +1,573 @@ + + + + + + + + + + + + + + + + + + + + + + blocky + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Blocky

+
+ +
+ +

Blocky is a DNS proxy and ad-blocker for the local network written in Go with following features:

+

Features

+
    +
  • +

    Blocking - ⛔ Blocking of DNS queries with external lists (Ad-block, malware) and whitelisting

    +
      +
    • Definition of black and white lists per client group (Kids, Smart home devices, etc.)
    • +
    • Periodical reload of external black and white lists
    • +
    • Regex support
    • +
    • Blocking of request domain, response CNAME (deep CNAME inspection) and response IP addresses (against IP lists)
    • +
    +
  • +
  • +

    Advanced DNS configuration - 🤓 not just an ad-blocker

    +
      +
    • Custom DNS resolution for certain domain names
    • +
    • Conditional forwarding to external DNS server
    • +
    • Upstream resolvers can be defined per client group
    • +
    +
  • +
  • +

    Performance - 🚀 Improves speed and performance in your network

    +
      +
    • Customizable caching of DNS answers for queries -> improves DNS resolution speed and reduces amount of external DNS + queries
    • +
    • Prefetching and caching of often used queries
    • +
    • Using multiple external resolver simultaneously
    • +
    • Low memory footprint
    • +
    +
  • +
  • +

    Various Protocols - 💻 Supports modern DNS protocols

    +
      +
    • DNS over UDP and TCP
    • +
    • DNS over HTTPS (aka DoH)
    • +
    • DNS over TLS (aka DoT)
    • +
    +
  • +
  • +

    Security and Privacy - 🕶 Secure communication

    +
      +
    • Supports modern DNS extensions: DNSSEC, eDNS, ...
    • +
    • Free configurable blocking lists - no hidden filtering etc.
    • +
    • Provides DoH Endpoint
    • +
    • Uses random upstream resolvers from the configuration - increases your privacy through the distribution of your DNS + traffic over multiple provider
    • +
    • Open source development
    • +
    • Blocky does NOT collect any user data, telemetry, statistics etc.
    • +
    +
  • +
  • +

    Integration - 📔 various integration

    +
      +
    • Prometheus metrics
    • +
    • Prepared Grafana dashboards (Prometheus and database)
    • +
    • Logging of DNS queries per day / per client in CSV format or MySQL/MariaDB/PostgreSQL database - easy to analyze
    • +
    • Various REST API endpoints
    • +
    • CLI tool
    • +
    +
  • +
  • +

    Simple configuration - 👶 single configuration file in YAML format

    +
      +
    • Simple to maintain
    • +
    • Simple to backup
    • +
    +
  • +
  • +

    Simple installation/configuration - ☁ blocky was designed for simple installation

    +
      +
    • Stateless (no database, no temporary files)
    • +
    • Docker image with Multi-arch support
    • +
    • Single binary
    • +
    • Supports x86-64 and ARM architectures -> runs fine on Raspberry PI
    • +
    • Community supported Helm chart for k8s deployment
    • +
    +
  • +
+

Contribution

+

Issues, feature suggestions and pull requests are welcome! Blocky lives on GitHub.

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/installation/index.html b/installation/index.html new file mode 100644 index 00000000..a428af5f --- /dev/null +++ b/installation/index.html @@ -0,0 +1,873 @@ + + + + + + + + + + + + + + + + + + + + + + + + Installation - blocky + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + + + + + +
+
+ + + + + + + +

Installation

+

You can choose one of the following installation options:

+
    +
  • Run as standalone binary
  • +
  • Run as docker container
  • +
  • Kubernetes with helm chart
  • +
+

Prepare your configuration

+

Blocky supports single or multiple YAML files as configuration. Create new config.yaml with your configuration ( +see Configuration for more details and all configuration options).

+

Simple configuration file, which enables only basic features:

+
upstream:
+  default:
+    - 46.182.19.48
+    - 80.241.218.68
+    - tcp-tls:fdns1.dismail.de:853
+    - https://dns.digitale-gesellschaft.ch/dns-query
+blocking:
+  blackLists:
+    ads:
+      - https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
+  clientGroupsBlock:
+    default:
+      - ads
+port: 53
+httpPort: 4000
+
+

Run as standalone binary

+

Download the binary file from GitHub for your architecture and +run ./blocky --config config.yml.

+
+

Warning

+

Please be aware, if you want to use port 53 or 953 on Linux you should add CAP_NET_BIND_SERVICE capability +to the binary or run with root privileges (running as root is not recommended).

+
+

Run with docker

+

Alternative registry

+

Blocky docker images are deployed to DockerHub (spx01/blocky) and GitHub Container Registry (ghcr.io/0xerr0r/blocky) +.

+

Parameters

+

You can define the location of the config file in the container with environment variable "BLOCKY_CONFIG_FILE". +Default value is "/app/config.yml".

+

Docker from command line

+

Execute following command from the command line:

+
docker run --name blocky -v /path/to/config.yml:/app/config.yml -p 4000:4000 -p 53:53/udp spx01/blocky
+
+

Run with docker-compose

+

Create following docker-compose.yml file

+
version: "2.1"
+services:
+  blocky:
+    image: spx01/blocky
+    container_name: blocky
+    restart: unless-stopped
+    # Optional the instance hostname for logging purpose
+    hostname: blocky-hostname
+    ports:
+      - "53:53/tcp"
+      - "53:53/udp"
+      - "4000:4000/tcp"
+    environment:
+      - TZ=Europe/Berlin # Optional to synchronize the log timestamp with host
+    volumes:
+      # Optional to synchronize the log timestamp with host
+      - /etc/localtime:/etc/localtime:ro
+      # config file
+      - ./config.yml:/app/config.yml
+
+

and start docker container with

+
docker-compose up -d
+
+

Advanced setup

+

Following example shows, how to run blocky in a docker container and store query logs on a SAMBA share. Local black and +whitelists directories are mounted as volume. You can create own black or whitelists in these directories and define the +path like '/app/whitelists/whitelist.txt' in the config file.

+
+

Example

+
+
version: "2.1"
+services:
+  blocky:
+    image: spx01/blocky
+    container_name: blocky
+    restart: unless-stopped
+    ports:
+      - "53:53/tcp"
+      - "53:53/udp"
+      - "4000:4000/tcp" # Prometheus stats (if enabled).
+    environment:
+      - TZ=Europe/Berlin
+    volumes:
+      # config file
+      - ./config.yml:/app/config.yml
+      # write query logs in this volume
+      - queryLogs:/logs
+      # put your custom white and blacklists in these directories
+      - ./blacklists:/app/blacklists/
+      - ./whitelists:/app/whitelists/
+
+volumes:
+  queryLogs:
+    driver: local
+    driver_opts:
+      type: cifs
+      o: username=USER,password=PASSWORD,rw
+      device: //NAS_HOSTNAME/blocky  
+
+

Multiple configuration files

+

For complex setups, splitting the configuration between multiple YAML files might be desired. In this case, folder containing YAML files is passed on startup, Blocky will join all the files.

+

./blocky --config ./config/

+
+

Warning

+

Blocky simply joins the multiple YAML files. If a directive (e.g. upstream) is repeated in multiple files, the configuration will not load and start will fail.

+
+

Other installation types

+
+

Warning

+

These projects are maintained by other people.

+
+

Web UI

+

Blocky Frontend provides a Web UI to control blocky. See linked project for installation instructions.

+

Run with helm chart on Kubernetes

+

See this repo, +the documentation +and the configuration instructions for details about running blocky via helm in kubernetes.

+

Run as an App for TrueNAS SCALE

+

You can find the App in the TrueCharts App Catalog +or read the documentation +and configuration instructions for details about running blocky as a native TrueNAS SCALE App.

+

AUR package for Arch Linux

+

See https://aur.archlinux.org/packages/blocky/

+

Package for Alpine Linux

+

See https://pkgs.alpinelinux.org/package/edge/testing/x86/blocky

+

Installation script for CentOS/Fedora

+

See https://github.com/m0zgen/blocky-installer

+

Package for FreeBSD

+

See https://www.freebsd.org/cgi/ports.cgi?query=blocky&stype=all

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/interfaces/index.html b/interfaces/index.html new file mode 100644 index 00000000..e0671d25 --- /dev/null +++ b/interfaces/index.html @@ -0,0 +1,512 @@ + + + + + + + + + + + + + + + + + + + + + + + + Interfaces - blocky + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Interfaces

+

REST API

+

If http listener is enabled, blocky provides REST API. You can browse the API documentation (Swagger) documentation +under https://0xERR0R.github.io/blocky/swagger.html.

+

CLI

+

Blocky provides a CLI interface to control. This interface uses internally the REST API.

+

To run the CLI, please ensure, that blocky DNS server is running, then execute blocky help for help or

+
    +
  • ./blocky blocking enable to enable blocking
  • +
  • ./blocky blocking disable to disable blocking
  • +
  • ./blocky blocking disable --duration [duration] to disable blocking for a certain amount of time (30s, 5m, 10m30s, + ...)
  • +
  • ./blocky blocking disable --groups ads,othergroup to disable blocking only for special groups
  • +
  • ./blocky blocking status to print current status of blocking
  • +
  • ./blocky query <domain> execute DNS query (A) (simple replacement for dig, useful for debug purposes)
  • +
  • ./blocky query <domain> --type <queryType> execute DNS query with passed query type (A, AAAA, MX, ...)
  • +
  • ./blocky lists refresh reloads all white and blacklists
  • +
+
+

Tip

+

To run this inside docker run docker exec blocky ./blocky blocking status

+
+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/network_configuration/index.html b/network_configuration/index.html new file mode 100644 index 00000000..abc67451 --- /dev/null +++ b/network_configuration/index.html @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + Network configuration - blocky + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Network configuration

+

In order, to benefit from all the advantages of blocky like ad-blocking, privacy and speed, it is necessary to use +blocky as DNS server for your devices. You can configure DNS server on each device manually or use DHCP in your network +router and push the right settings to your device. With this approach, you will configure blocky only once in your +router and each device in your network will automatically use blocky as DNS server.

+

Transparent configuration with DHCP

+

Let us assume, blocky is installed on a Raspberry PI with fix IP address 192.168.178.2. Each device which connects to +the router will obtain an IP address and receive the network configuration. The IP address of the Raspberry PI should be +pushed to the device as DNS server.

+
┌──────────────┐         ┌─────────────────┐
+│              │         │ Raspberry PI    │
+│  Router      │         │   blocky        │        
+│              │         │ 192.168.178.2   │            
+└─▲─────┬──────┘         └────▲────────────┘        
+  │1    │                     │  3                  
+  │     │                     │                         
+  │     │                     │ 
+  │     │                     │                     
+  │     │                     │
+  │     │                     │
+  │     │                     │
+  │     │       ┌─────────────┴──────┐
+  │     │   2   │                    │
+  │     └───────►  Network device    │
+  │             │    Android         │
+  └─────────────┤                    │
+                └────────────────────┘
+
+

1 - Network device asks the DHCP server (on Router) for the network configuration

+

2 - Router assigns a free IP address to the device and says "Use 192.168.178.2" as DNS server

+

3 - Clients makes DNS queries and is happy to use blocky 😄

+
+

Warning

+

It is necessary to assign the server which runs blocky (e.g. Raspberry PI) a fix IP address.

+
+

Example configuration with FritzBox

+

To configure the DNS server in the FritzBox, please open in the FritzBox web interface:

+
    +
  • in navigation menu on the left side: Home Network -> Network
  • +
  • Network Settings tab on the top
  • +
  • "IPv4 Configuration" Button at the bottom op the page
  • +
  • Enter the IP address of blocky under "Local DNS server", see screenshot
  • +
+

FritzBox DNS configuration

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/prometheus_grafana/index.html b/prometheus_grafana/index.html new file mode 100644 index 00000000..a441e53f --- /dev/null +++ b/prometheus_grafana/index.html @@ -0,0 +1,652 @@ + + + + + + + + + + + + + + + + + + + + + + + + Prometheus / Grafana - blocky + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + +
+
+ + + +
+
+
+ + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + +

Integration in Grafana

+

Prometheus

+

Prometheus export

+

Blocky can optionally export metrics for Prometheus.

+

Following metrics will be exported:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
nameDescription
blocky_blacklist_cache / blocky_whitelist_cacheNumber of entries in blacklist/whitelist cache, partitioned by group
blocky_error_totalCounter for internal errors
blocky_query_totalNumber of total queries, partitioned by client and DNS request type (A, AAAA, PTR, etc)
blocky_request_duration_ms_bucketRequest duration histogram, partitioned by response type (Blocked, cached, etc)
blocky_response_totalNumber of responses, partitioned by response type (Blocked, cached, etc), DNS response code, and reason
blocky_blocking_enabled1 if blocking is enabled, 0 otherwise
blocky_cache_entry_countNumber of entries in cache
blocky_cache_hit_count / blocky_cache_miss_countCache hit/miss counters
blocky_prefetch_countAmount of prefetched DNS responses
blocky_prefetch_domain_name_cache_countAmount of domain names being prefetched
blocky_failed_download_countNumber of failed list downloads
+

Grafana dashboard

+

Example Grafana dashboard +definition as JSON +or at grafana.com +grafana-dashboard.

+

This dashboard shows all relevant statistics and allows enabling and disabling the blocking status.

+

Grafana configuration

+

Please install grafana-piechart-panel and +set disable-sanitize-html +in config or as env to use control buttons to enable/disable the blocking status.

+

Grafana and Prometheus example project

+

This repo contains example docker-compose.yml with +blocky, prometheus (with configured scraper for blocky) and grafana with prometheus datasource.

+

MySQL / MariaDB

+

If database query logging is activated (see Query logging), you can use following +Grafana Dashboard as JSON +or at grafana.com

+

grafana-dashboard.

+

Please define the MySQL source in Grafana, which points to the database with blocky's log entries.

+

Postgres

+

The JSON for a Grafana dashboard equivalent to the MySQL/MariaDB version is located here

+ + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 00000000..fb8701a0 --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Blocky","text":"

Blocky is a DNS proxy and ad-blocker for the local network written in Go with following features:

"},{"location":"#features","title":"Features","text":"
  • Blocking - Blocking of DNS queries with external lists (Ad-block, malware) and whitelisting

    • Definition of black and white lists per client group (Kids, Smart home devices, etc.)
    • Periodical reload of external black and white lists
    • Regex support
    • Blocking of request domain, response CNAME (deep CNAME inspection) and response IP addresses (against IP lists)
  • Advanced DNS configuration - not just an ad-blocker

    • Custom DNS resolution for certain domain names
    • Conditional forwarding to external DNS server
    • Upstream resolvers can be defined per client group
  • Performance - Improves speed and performance in your network

    • Customizable caching of DNS answers for queries -> improves DNS resolution speed and reduces amount of external DNS queries
    • Prefetching and caching of often used queries
    • Using multiple external resolver simultaneously
    • Low memory footprint
  • Various Protocols - Supports modern DNS protocols

    • DNS over UDP and TCP
    • DNS over HTTPS (aka DoH)
    • DNS over TLS (aka DoT)
  • Security and Privacy - Secure communication

    • Supports modern DNS extensions: DNSSEC, eDNS, ...
    • Free configurable blocking lists - no hidden filtering etc.
    • Provides DoH Endpoint
    • Uses random upstream resolvers from the configuration - increases your privacy through the distribution of your DNS traffic over multiple provider
    • Open source development
    • Blocky does NOT collect any user data, telemetry, statistics etc.
  • Integration - various integration

    • Prometheus metrics
    • Prepared Grafana dashboards (Prometheus and database)
    • Logging of DNS queries per day / per client in CSV format or MySQL/MariaDB/PostgreSQL database - easy to analyze
    • Various REST API endpoints
    • CLI tool
  • Simple configuration - single configuration file in YAML format

    • Simple to maintain
    • Simple to backup
  • Simple installation/configuration - blocky was designed for simple installation

    • Stateless (no database, no temporary files)
    • Docker image with Multi-arch support
    • Single binary
    • Supports x86-64 and ARM architectures -> runs fine on Raspberry PI
    • Community supported Helm chart for k8s deployment
"},{"location":"#contribution","title":"Contribution","text":"

Issues, feature suggestions and pull requests are welcome! Blocky lives on GitHub.

"},{"location":"additional_information/","title":"Additional information","text":""},{"location":"additional_information/#print-current-configuration","title":"Print current configuration","text":"

To print runtime configuration / statistics, you can send SIGUSR1 signal to running process.

Summary

Example output:

INFO server: current configuration:\nINFO server: -> resolver: 'ClientNamesResolver'\nINFO server:      singleNameOrder = \"[2 1]\"\nINFO server:      externalResolver = \"upstream 'tcp+udp:192.168.178.1:53'\"\nINFO server:      cache item count = 7\nINFO server: -> resolver: 'QueryLoggingResolver'\nINFO server:      logDir= \"/logs\"\nINFO server:      perClient = false\nINFO server:      logRetentionDays= 7\nINFO server: -> resolver: 'MetricsResolver'\nINFO server:      metrics:\nINFO server:        Enable = true\nINFO server:        Path   = /metrics\nINFO server: -> resolver: 'ConditionalUpstreamResolver'\nINFO server:      fritz.box = \"parallel upstreams 'upstream 'tcp+udp:192.168.178.1:53''\"\nINFO server: -> resolver: 'CustomDNSResolver'\nINFO server: runtime information:\n...\nINFO server: MEM Alloc =                 9 MB\nINFO server: MEM HeapAlloc =             9 MB\nINFO server: MEM Sys =                  88 MB\nINFO server: MEM NumGC =              1533\nINFO server: RUN NumCPU =                4\nINFO server: RUN NumGoroutine =         18\n

Hint

To send a signal to a process you can use kill -s USR1 <PID> or docker kill -s SIGUSR1 blocky for docker setup

"},{"location":"additional_information/#debug-profiling","title":"Debug / Profiling","text":"

If http listener is enabled, pprof endpoint (/debug/pprof) is enabled automatically.

"},{"location":"additional_information/#list-sources","title":"List sources","text":"

Some links/ideas for lists:

"},{"location":"additional_information/#blacklists","title":"Blacklists","text":"
  • https://github.com/StevenBlack/hosts
  • https://github.com/nickspaargaren/no-google
  • https://energized.pro/
  • https://github.com/Perflyst/PiHoleBlocklist
  • https://github.com/kboghdady/youTube_ads_4_pi-hole
  • https://github.com/chadmayfield/my-pihole-blocklists

Warning

Use only blacklists from the sources you trust!

"},{"location":"additional_information/#whitelists","title":"Whitelists","text":"
  • https://github.com/anudeepND/whitelist
"},{"location":"additional_information/#list-of-public-dns-servers","title":"List of public DNS servers","text":"

Warning

DNS server provider has access to all your DNS queries (all visited domain names). Some DNS providers can use (tracking, analyzing, profiling etc.). It is recommended to use different DNS upstream servers in blocky to distribute your DNS queries over multiple providers.

Please read the description before using the DNS server as upstream. Some of them provide already an ad-blocker, some filters other content. If you use external DNS server with included ad-blocker, you can't choose which domains should be blocked, and you can't use whitelisting.

This is only a small excerpt of all free available DNS servers and should only be understood as an idee.

Info

I will NOT rate the DNS providers in the list. This list is sorted alphabetically.

  • AdGuard
  • CloudFlare
  • Comodo
  • DigitalCourage
  • DigitaleGesellschaft
  • Dismail
  • dnsforge
  • Google
  • OpenDNS
  • Quad9
  • UncensoredDNS
"},{"location":"configuration/","title":"Configuration","text":"

This chapter describes all configuration options in config.yaml. You can download a reference file with all configuration properties as JSON.

reference configuration file
upstream:\n# these external DNS resolvers will be used. Blocky picks 2 random resolvers from the list for each query\n# format for resolver: [net:]host:[port][/path]. net could be empty (default, shortcut for tcp+udp), tcp+udp, tcp, udp, tcp-tls or https (DoH). If port is empty, default port will be used (53 for udp and tcp, 853 for tcp-tls, 443 for https (Doh))\n# this configuration is mandatory, please define at least one external DNS resolver\ndefault:\n# example for tcp+udp IPv4 server (https://digitalcourage.de/)\n- 5.9.164.112\n# Cloudflare\n- 1.1.1.1\n# example for DNS-over-TLS server (DoT)\n- tcp-tls:fdns1.dismail.de:853\n# example for DNS-over-HTTPS (DoH)\n- https://dns.digitale-gesellschaft.ch/dns-query\n# optional: use client name (with wildcard support: * - sequence of any characters, [0-9] - range)\n# or single ip address / client subnet as CIDR notation\nlaptop*:\n- 123.123.123.123\n\n# optional: timeout to query the upstream resolver. Default: 2s\nupstreamTimeout: 2s\n\n# optional: If true, blocky will fail to start unless at least one upstream server per group is reachable. Default: false\nstartVerifyUpstream: true\n\n# optional: Determines how blocky will create outgoing connections. This impacts both upstreams, and lists.\n# accepted: dual, v4, v6\n# default: dual\nconnectIPVersion: dual\n\n# optional: custom IP address(es) for domain name (with all sub-domains). Multiple addresses must be separated by a comma\n# example: query \"printer.lan\" or \"my.printer.lan\" will return 192.168.178.3\ncustomDNS:\ncustomTTL: 1h\n# optional: if true (default), return empty result for unmapped query types (for example TXT, MX or AAAA if only IPv4 address is defined).\n# if false, queries with unmapped types will be forwarded to the upstream resolver\nfilterUnmappedTypes: true\n# optional: replace domain in the query with other domain before resolver lookup in the mapping\nrewrite:\nexample.com: printer.lan\nmapping:\nprinter.lan: 192.168.178.3,2001:0db8:85a3:08d3:1319:8a2e:0370:7344\n\n# optional: definition, which DNS resolver(s) should be used for queries to the domain (with all sub-domains). Multiple resolvers must be separated by a comma\n# Example: Query client.fritz.box will ask DNS server 192.168.178.1. This is necessary for local network, to resolve clients by host name\nconditional:\n# optional: if false (default), return empty result if after rewrite, the mapped resolver returned an empty answer. If true, the original query will be sent to the upstream resolver\n# Example: The query \"blog.example.com\" will be rewritten to \"blog.fritz.box\" and also redirected to the resolver at 192.168.178.1. If not found and if `fallbackUpstream` was set to `true`, the original query \"blog.example.com\" will be sent upstream.\n# Usage: One usecase when having split DNS for internal and external (internet facing) users, but not all subdomains are listed in the internal domain.\nfallbackUpstream: false\n# optional: replace domain in the query with other domain before resolver lookup in the mapping\nrewrite:\nexample.com: fritz.box\nmapping:\nfritz.box: 192.168.178.1\nlan.net: 192.168.178.1,192.168.178.2\n\n# optional: use black and white lists to block queries (for example ads, trackers, adult pages etc.)\nblocking:\n# definition of blacklist groups. Can be external link (http/https) or local file\nblackLists:\nads:\n- https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt\n- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts\n- http://sysctl.org/cameleon/hosts\n- https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt\n- |\n# inline definition with YAML literal block scalar style\n# hosts format\nsomeadsdomain.com\nspecial:\n- https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts\n# definition of whitelist groups. Attention: if the same group has black and whitelists, whitelists will be used to disable particular blacklist entries. If a group has only whitelist entries -> this means only domains from this list are allowed, all other domains will be blocked\nwhiteLists:\nads:\n- whitelist.txt\n- |\n# inline definition with YAML literal block scalar style\n# hosts format\nwhitelistdomain.com\n# this is a regex\n/^banners?[_.-]/\n# definition: which groups should be applied for which client\nclientGroupsBlock:\n# default will be used, if no special definition for a client name exists\ndefault:\n- ads\n- special\n# use client name (with wildcard support: * - sequence of any characters, [0-9] - range)\n# or single ip address / client subnet as CIDR notation\nlaptop*:\n- ads\n192.168.178.1/24:\n- special\n# which response will be sent, if query is blocked:\n# zeroIp: 0.0.0.0 will be returned (default)\n# nxDomain: return NXDOMAIN as return code\n# comma separated list of destination IP addresses (for example: 192.100.100.15, 2001:0db8:85a3:08d3:1319:8a2e:0370:7344). Should contain ipv4 and ipv6 to cover all query types. Useful with running web server on this address to display the \"blocked\" page.\nblockType: zeroIp\n# optional: TTL for answers to blocked domains\n# default: 6h\nblockTTL: 1m\n# optional: automatically list refresh period (in duration format). Default: 4h.\n# Negative value -> deactivate automatically refresh.\n# 0 value -> use default\nrefreshPeriod: 4h\n# optional: timeout for list download (each url). Default: 60s. Use large values for big lists or slow internet connections\ndownloadTimeout: 4m\n# optional: Download attempt timeout. Default: 60s\ndownloadAttempts: 5\n# optional: Time between the download attempts. Default: 1s\ndownloadCooldown: 10s\n# optional: if failOnError, application startup will fail if at least one list can't be downloaded / opened. Default: blocking\nstartStrategy: failOnError\n\n# optional: configuration for caching of DNS responses\ncaching:\n# duration how long a response must be cached (min value).\n# If <=0, use response's TTL, if >0 use this value, if TTL is smaller\n# Default: 0\nminTime: 5m\n# duration how long a response must be cached (max value).\n# If <0, do not cache responses\n# If 0, use TTL\n# If > 0, use this value, if TTL is greater\n# Default: 0\nmaxTime: 30m\n# Max number of cache entries (responses) to be kept in cache (soft limit). Useful on systems with limited amount of RAM.\n# Default (0): unlimited\nmaxItemsCount: 0\n# if true, will preload DNS results for often used queries (default: names queried more than 5 times in a 2-hour time window)\n# this improves the response time for often used queries, but significantly increases external traffic\n# default: false\nprefetching: true\n# prefetch track time window (in duration format)\n# default: 120\nprefetchExpires: 2h\n# name queries threshold for prefetch\n# default: 5\nprefetchThreshold: 5\n# Max number of domains to be kept in cache for prefetching (soft limit). Useful on systems with limited amount of RAM.\n# Default (0): unlimited\nprefetchMaxItemsCount: 0\n# Time how long negative results (NXDOMAIN response or empty result) are cached. A value of -1 will disable caching for negative results.\n# Default: 30m\ncacheTimeNegative: 30m\n\n# optional: configuration of client name resolution\nclientLookup:\n# optional: this DNS resolver will be used to perform reverse DNS lookup (typically local router)\nupstream: 192.168.178.1\n# optional: some routers return multiple names for client (host name and user defined name). Define which single name should be used.\n# Example: take second name if present, if not take first name\nsingleNameOrder:\n- 2\n- 1\n# optional: custom mapping of client name to IP addresses. Useful if reverse DNS does not work properly or just to have custom client names.\nclients:\nlaptop:\n- 192.168.178.29\n# optional: configuration for prometheus metrics endpoint\nprometheus:\n# enabled if true\nenable: true\n# url path, optional (default '/metrics')\npath: /metrics\n\n# optional: write query information (question, answer, client, duration etc.) to daily csv file\nqueryLog:\n# optional one of: mysql, postgresql, csv, csv-client. If empty, log to console\ntype: mysql\n# directory (should be mounted as volume in docker) for csv, db connection string for mysql/postgresql\ntarget: db_user:db_password@tcp(db_host_or_ip:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local\n#postgresql target: postgres://user:password@db_host_or_ip:5432/db_name\n# if > 0, deletes log files which are older than ... days\nlogRetentionDays: 7\n# optional: Max attempts to create specific query log writer, default: 3\ncreationAttempts: 1\n# optional: Time between the creation attempts, default: 2s\ncreationCooldown: 2s\n# optional: Which fields should be logged. You can choose one or more from: clientIP, clientName, responseReason, responseAnswer, question, duration. If not defined, it logs all fields\nfields:\n- clientIP\n- duration\n\n# optional: Blocky can synchronize its cache and blocking state between multiple instances through redis.\nredis:\n# Server address and port or master name if sentinel is used\naddress: redismaster\n# Username if necessary\nusername: usrname\n# Password if necessary\npassword: passwd\n# Database, default: 0\ndatabase: 2\n# Connection is required for blocky to start. Default: false\nrequired: true\n# Max connection attempts, default: 3\nconnectionAttempts: 10\n# Time between the connection attempts, default: 1s\nconnectionCooldown: 3s\n# Sentinal username if necessary\nsentinelUsername: usrname\n# Sentinal password if necessary\nsentinelPassword: passwd\n# List with address and port of sentinel hosts(sentinel is activated if at least one sentinel address is configured)\nsentinelAddresses:\n- redis-sentinel1:26379\n- redis-sentinel2:26379\n- redis-sentinel3:26379\n\n# optional: Mininal TLS version that the DoH and DoT server will use\nminTlsServeVersion: 1.3\n# if https port > 0: path to cert and key file for SSL encryption. if not set, self-signed certificate will be generated\n#certFile: server.crt\n#keyFile: server.key\n# optional: use these DNS servers to resolve blacklist urls and upstream DNS servers. It is useful if no system DNS resolver is configured, and/or to encrypt the bootstrap queries.\nbootstrapDns:\n- tcp+udp:1.1.1.1\n- https://1.1.1.1/dns-query\n- upstream: https://dns.digitale-gesellschaft.ch/dns-query\nips:\n- 185.95.218.42\n\n# optional: drop all queries with following query types. Default: empty\nfiltering:\nqueryTypes:\n- AAAA\n\n# optional: if path defined, use this file for query resolution (A, AAAA and rDNS). Default: empty\nhostsFile:\n# optional: Path to hosts file (e.g. /etc/hosts on Linux)\nfilePath: /etc/hosts\n# optional: TTL, default: 1h\nhostsTTL: 60m\n# optional: Time between hosts file refresh, default: 1h\nrefreshPeriod: 30m\n# optional: Whether loopback hosts addresses (127.0.0.0/8 and ::1) should be filtered or not, default: false\nfilterLoopback: true\n\n# optional: ports configuration\nports:\n# optional: DNS listener port(s) and bind ip address(es), default 53 (UDP and TCP). Example: 53, :53, \"127.0.0.1:5353,[::1]:5353\"\ndns: 53\n# optional: Port(s) and bind ip address(es) for DoT (DNS-over-TLS) listener. Example: 853, 127.0.0.1:853\ntls: 853\n# optional: Port(s) and optional bind ip address(es) to serve HTTPS used for prometheus metrics, pprof, REST API, DoH... If you wish to specify a specific IP, you can do so such as 192.168.0.1:443. Example: 443, :443, 127.0.0.1:443,[::1]:443\nhttps: 443\n# optional: Port(s) and optional bind ip address(es) to serve HTTP used for prometheus metrics, pprof, REST API, DoH... If you wish to specify a specific IP, you can do so such as 192.168.0.1:4000. Example: 4000, :4000, 127.0.0.1:4000,[::1]:4000\nhttp: 4000\n\n# optional: logging configuration\nlog:\n# optional: Log level (one from debug, info, warn, error). Default: info\nlevel: info\n# optional: Log format (text or json). Default: text\nformat: text\n# optional: log timestamps. Default: true\ntimestamp: true\n# optional: obfuscate log output (replace all alphanumeric characters with *) for user sensitive data like request domains or responses to increase privacy. Default: false\nprivacy: false\n\n# optional: add EDE error codes to dns response\nede:\n# enabled if true, Default: false\nenable: true\n
"},{"location":"configuration/#basic-configuration","title":"Basic configuration","text":"Parameter Type Mandatory Default value Description certFile path no Path to cert and key file for SSL encryption (DoH and DoT); if empty, self-signed certificate is generated keyFile path no Path to cert and key file for SSL encryption (DoH and DoT); if empty, self-signed certificate is generated dohUserAgent string no HTTP User Agent for DoH upstreams minTlsServeVersion string no 1.2 Minimum TLS version that the DoT and DoH server use to serve those encrypted DNS requests startVerifyUpstream bool no false If true, blocky will fail to start unless at least one upstream server per group is reachable. connectIPVersion enum (dual, v4, v6) no dual IP version to use for outgoing connections (dual, v4, v6)

Example

minTlsServeVersion: 1.1\nconnectIPVersion: v4\n
"},{"location":"configuration/#ports-configuration","title":"Ports configuration","text":"

All logging port are optional.

Parameter Type Default value Description ports.dns [IP]:port[,[IP]:port]* 53 Port(s) and optional bind ip address(es) to serve DNS endpoint (TCP and UDP). If you wish to specify a specific IP, you can do so such as 192.168.0.1:53. Example: 53, :53, 127.0.0.1:53,[::1]:53 ports.tls [IP]:port[,[IP]:port]* Port(s) and optional bind ip address(es) to serve DoT DNS endpoint (DNS-over-TLS). If you wish to specify a specific IP, you can do so such as 192.168.0.1:853. Example: 83, :853, 127.0.0.1:853,[::1]:853 ports.http [IP]:port[,[IP]:port]* Port(s) and optional bind ip address(es) to serve HTTP used for prometheus metrics, pprof, REST API, DoH... If you wish to specify a specific IP, you can do so such as 192.168.0.1:4000. Example: 4000, :4000, 127.0.0.1:4000,[::1]:4000 ports.https [IP]:port[,[IP]:port]* Port(s) and optional bind ip address(es) to serve HTTPS used for prometheus metrics, pprof, REST API, DoH... If you wish to specify a specific IP, you can do so such as 192.168.0.1:443. Example: 443, :443, 127.0.0.1:443,[::1]:443

Example

ports:\ndns: 53\nhttp: 4000\nhttps: 443\n
"},{"location":"configuration/#logging-configuration","title":"Logging configuration","text":"

All logging options are optional.

Parameter Type Default value Description log.level enum (debug, info, warn, error) info Log level log.format enum (text, json) text Log format (text or json). log.timestamp bool true Log time stamps (true or false). log.privacy bool false Obfuscate log output (replace all alphanumeric characters with *) for user sensitive data like request domains or responses to increase privacy.

Example

log:\nlevel: debug\nformat: json\ntimestamp: false\nprivacy: true\n
"},{"location":"configuration/#upstream-configuration","title":"Upstream configuration","text":"

To resolve a DNS query, blocky needs external public or private DNS resolvers. Blocky supports DNS resolvers with following network protocols (net part of the resolver URL):

  • tcp+udp (UDP and TCP, dependent on query type)
  • https (aka DoH)
  • tcp-tls (aka DoT)

Hint

You can (and should!) configure multiple DNS resolvers. Blocky picks 2 random resolvers from the list for each query and returns the answer from the fastest one. This improves your network speed and increases your privacy - your DNS traffic will be distributed over multiple providers.

Each resolver must be defined as a string in following format: [net:]host:[port][/path][#commonName].

Parameter Type Mandatory Default value net enum (tcp+udp, tcp-tls or https) no tcp+udp host IP or hostname yes port int (1 - 65535) no 53 for udp/tcp, 853 for tcp-tls and 443 for https commonName string no the host value

The commonName parameter overrides the expected certificate common name value used for verification.

Blocky needs at least the configuration of the default group. This group will be used as a fallback, if no client specific resolver configuration is available.

You can use the client name (see Client name lookup), client's IP address or a client subnet as CIDR notation.

Tip

You can use * as wildcard for the sequence of any character or [0-9] as number range

Example

upstream:\ndefault:\n- 5.9.164.112\n- 1.1.1.1\n- tcp-tls:fdns1.dismail.de:853\n- https://dns.digitale-gesellschaft.ch/dns-query\nlaptop*:\n- 123.123.123.123\n10.43.8.67/28:\n- 1.1.1.1\n- 9.9.9.9\n

Use 123.123.123.123 as single upstream DNS resolver for client laptop-home, 1.1.1.1 and 9.9.9.9 for all clients in the sub-net 10.43.8.67/28 and 4 resolvers (default) for all others clients.

Note

Blocky needs at least one upstream DNS server

See List of public DNS servers if you need some ideas, which public free DNS server you could use.

"},{"location":"configuration/#upstream-lookup-timeout","title":"Upstream lookup timeout","text":"

Blocky will wait 2 seconds (default value) for the response from the external upstream DNS server. You can change this value by setting the upstreamTimeout configuration parameter (in duration format).

Example

upstream:\ndefault:\n- 46.182.19.48\n- 80.241.218.68\nupstreamTimeout: 5s\n
"},{"location":"configuration/#bootstrap-dns-configuration","title":"Bootstrap DNS configuration","text":"

These DNS servers are used to resolve upstream DoH and DoT servers that are specified as host names, and list domains. It is useful if no system DNS resolver is configured, and/or to encrypt the bootstrap queries.

Parameter Type Mandatory Default value Description upstream Upstream (see above) no ips List of IPs yes, if upstream is DoT/DoH Only valid if upstream is DoH or DoT

When using an upstream specified by IP, and not by hostname, you can write only the upstream and skip ips.

Note

Works only on Linux/*nix OS due to golang limitations under Windows.

Example

    bootstrapDns:\n- upstream: tcp-tls:dns.example.com\nips:\n- 123.123.123.123\n- upstream: https://234.234.234.234/dns-query\n
"},{"location":"configuration/#filtering","title":"Filtering","text":"

Under certain circumstances, it may be useful to filter some types of DNS queries. You can define one or more DNS query types, all queries with these types will be dropped (empty answer will be returned).

Example

filtering:\nqueryTypes:\n- AAAA\n

This configuration will drop all 'AAAA' (IPv6) queries.

"},{"location":"configuration/#fqdn-only","title":"FQDN only","text":"

In domain environments, it may be useful to only response to FQDN requests. If this option is enabled blocky respond immediately with NXDOMAIN if the request is not a valid FQDN. The request is therefore not further processed by other options like custom or conditional. Please be aware that by enabling it your hostname resolution will break unless every hostname is part of a domain.

Example

fqdnOnly: true\n
"},{"location":"configuration/#custom-dns","title":"Custom DNS","text":"

You can define your own domain name to IP mappings. For example, you can use a user-friendly name for a network printer or define a domain name for your local device on order to use the HTTPS certificate. Multiple IP addresses for one domain must be separated by a comma.

Parameter Type Mandatory Default value customTTL duration (no unit is minutes) no 1h rewrite string: string (domain: domain) no mapping string: string (hostname: address list) no filterUnmappedTypes boolean no true

Example

customDNS:\ncustomTTL: 1h\nfilterUnmappedTypes: true\nrewrite:\nhome: lan\nreplace-me.com: with-this.com\nmapping:\nprinter.lan: 192.168.178.3\notherdevice.lan: 192.168.178.15,2001:0db8:85a3:08d3:1319:8a2e:0370:7344\n

This configuration will also resolve any subdomain of the defined domain. For example a query \"printer.lan\" or \" my.printer.lan\" will return 192.168.178.3 as IP address.

With the optional parameter rewrite you can replace domain part of the query with the defined part before the resolver lookup is performed. The query \"printer.home\" will be rewritten to \"printer.lan\" and return 192.168.178.3.

With parameter filterUnmappedTypes = true (default), blocky will filter all queries with unmapped types, for example: AAAA for \"printer.lan\" or TXT for \"otherdevice.lan\". With filterUnmappedTypes = false a query AAAA \"printer.lan\" will be forwarded to the upstream DNS server.

"},{"location":"configuration/#conditional-dns-resolution","title":"Conditional DNS resolution","text":"

You can define, which DNS resolver(s) should be used for queries for the particular domain (with all subdomains). This is for example useful, if you want to reach devices in your local network by the name. Since only your router know which hostname belongs to which IP address, all DNS queries for the local network should be redirected to the router.

The optional parameter rewrite behaves the same as with custom DNS.

The optional parameter fallbackUpstream, if false (default), return empty result if after rewrite, the mapped resolver returned an empty answer. If true, the original query will be sent to the upstream resolver.

Usage: One usecase when having split DNS for internal and external (internet facing) users, but not all subdomains are listed in the internal domain

Example

conditional:\nfallbackUpstream: false\nrewrite:\nexample.com: fritz.box\nreplace-me.com: with-this.com\nmapping:\nfritz.box: 192.168.178.1\nlan.net: 192.170.1.2,192.170.1.3\n# for reverse DNS lookups of local devices\n178.168.192.in-addr.arpa: 192.168.178.1\n# for all unqualified hostnames\n.: 168.168.0.1\n

Tip

You can use . as wildcard for all non full qualified domains (domains without dot)

In this example, a DNS query \"client.fritz.box\" will be redirected to the router's DNS server at 192.168.178.1 and client.lan.net to 192.170.1.2 and 192.170.1.3. The query \"client.example.com\" will be rewritten to \"client.fritz.box\" and also redirected to the resolver at 192.168.178.1.

If not found and if fallbackUpstream was set to true, the original query \"blog.example.com\" will be sent upstream.

All unqualified host names (e.g. \"test\") will be redirected to the DNS server at 168.168.0.1.

One usecase for fallbackUpstream is when having split DNS for internal and external (internet facing) users, but not all subdomains are listed in the internal domain.

"},{"location":"configuration/#client-name-lookup","title":"Client name lookup","text":"

Blocky can try to resolve a user-friendly client name from the IP address or server URL (DoT and DoH). This is useful for defining of blocking groups, since IP address can change dynamically.

"},{"location":"configuration/#resolving-client-name-from-urlhost","title":"Resolving client name from URL/Host","text":"

If DoT or DoH is enabled, you can use a subdomain prefixed with id- to provide a client name (wildcard ssl certificate recommended).

Example: domain example.com

DoT Host: id-bob.example.com -> request's client name is bob DoH URL: https://id-bob.example.com/dns-query -> request's client name is bob

For DoH you can also pass the client name as url parameter:

DoH URL: https://blocky.example.com/dns-query/alice -> request's client name is alice

"},{"location":"configuration/#resolving-client-name-from-ip-address","title":"Resolving client name from IP address","text":"

Blocky uses rDNS to retrieve client's name. To use this feature, you can configure a DNS server for client lookup ( typically your router). You can also define client names manually per IP address.

"},{"location":"configuration/#single-name-order","title":"Single name order","text":"

Some routers return multiple names for the client (host name and user defined name). With parameter clientLookup.singleNameOrder you can specify, which of retrieved names should be used.

"},{"location":"configuration/#custom-client-name-mapping","title":"Custom client name mapping","text":"

You can also map a particular client name to one (or more) IP (ipv4/ipv6) addresses. Parameter clientLookup.clients contains a map of client name and multiple IP addresses.

Example

clientLookup:\nupstream: 192.168.178.1\nsingleNameOrder:\n- 2\n- 1\nclients:\nlaptop:\n- 192.168.178.29\n

Use 192.168.178.1 for rDNS lookup. Take second name if present, if not take first name. IP address 192.168.178.29 is mapped to laptop as client name.

"},{"location":"configuration/#blocking-and-whitelisting","title":"Blocking and whitelisting","text":"

Blocky can download and use external lists with domains or IP addresses to block DNS query (e.g. advertisement, malware, trackers, adult sites). You can group several list sources together and define the blocking behavior per client. External blacklists must be either in the well-known Hosts format or just a plain domain list (one domain per line). Blocky also supports regex as more powerful tool to define patterns to block.

Blocky uses DNS sinkhole approach to block a DNS query. Domain name from the request, IP address from the response, and the CNAME record will be checked against configured blacklists.

To avoid over-blocking, you can define or use already existing whitelists.

"},{"location":"configuration/#definition-black-and-whitelists","title":"Definition black and whitelists","text":"

Each black or whitelist can be either a path to the local file, a URL to download or inline list definition of a domains in hosts format (YAML literal block scalar style). All Urls must be grouped to a group name.

Example

blocking:\nblackLists:\nads:\n- https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt\n- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts\n- |\n# inline definition with YAML literal block scalar style\nsomeadsdomain.com\nanotheradsdomain.com\n# this is a regex\n/^banners?[_.-]/\nspecial:\n- https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts\nwhiteLists:\nads:\n- whitelist.txt\n- |\n# inline definition with YAML literal block scalar style\nwhitelistdomain.com\n

In this example you can see 2 groups: ads with 2 lists and special with one list. One local whitelist was defined for the ads group.

Warning

If the same group has black and whitelists, whitelists will be used to disable particular blacklist entries. If a group has only whitelist entries -> this means only domains from this list are allowed, all other domains will be blocked

Note

Please define also client group mapping, otherwise you black and whitelist definition will have no effect

"},{"location":"configuration/#regex-support","title":"Regex support","text":"

You can use regex to define patterns to block. A regex entry must start and end with the slash character (/). Some Examples:

  • /baddomain/ will block www.baddomain.com, baddomain.com, but also mybaddomain-sometext.com
  • /^baddomain/ will block baddomain.com, but not www.baddomain.com
  • /^apple\\.(de|com)$/ will only block apple.de and apple.com
"},{"location":"configuration/#client-groups","title":"Client groups","text":"

In this configuration section, you can define, which blocking group(s) should be used for which client in your network. Example: All clients should use the ads group, which blocks advertisement and kids devices should use the adult group, which blocky adult sites.

Clients without a group assignment will use automatically the default group.

You can use the client name (see Client name lookup), client's IP address, client's full-qualified domain name or a client subnet as CIDR notation.

If full-qualified domain name is used (for example \"myclient.ddns.org\"), blocky will try to resolve the IP address (A and AAAA records) of this domain. If client's IP address matches with the result, the defined group will be used.

Example

blocking:\nclientGroupsBlock:\n# default will be used, if no special definition for a client name exists\ndefault:\n- ads\n- special\nlaptop*:\n- ads\n192.168.178.1/24:\n- special\nkid-laptop:\n- ads\n- adult\n

All queries from network clients, whose device name starts with laptop, will be filtered against the ads group's lists. All devices from the subnet 192.168.178.1/24 against the special group and kid-laptop against ads and adult. All other clients: ads and special.

Tip

You can use * as wildcard for the sequence of any character or [0-9] as number range

"},{"location":"configuration/#block-type","title":"Block type","text":"

You can configure, which response should be sent to the client, if a requested query is blocked (only for A and AAAA queries, NXDOMAIN for other types):

blockType Example Description zeroIP zeroIP This is the default block type. Server returns 0.0.0.0 (or :: for IPv6) as result for A and AAAA queries nxDomain nxDomain return NXDOMAIN as return code custom IPs 192.100.100.15, 2001:0db8:85a3:08d3:1319:8a2e:0370:7344 comma separated list of destination IP addresses. Should contain ipv4 and ipv6 to cover all query types. Useful with running web server on this address to display the \"blocked\" page.

Example

blocking:\nblockType: nxDomain\n
"},{"location":"configuration/#block-ttl","title":"Block TTL","text":"

TTL for answers to blocked domains can be set to customize the time (in duration format) clients ask for those domains again. Default Block TTL is 6hours. This setting only makes sense when blockType is set to nxDomain or zeroIP, and will affect how much time it could take for a client to be able to see the real IP address for a domain after receiving the custom value.

Example

blocking:\nblockType: 192.100.100.15, 2001:0db8:85a3:08d3:1319:8a2e:0370:7344\nblockTTL: 10s\n
"},{"location":"configuration/#list-refresh-period","title":"List refresh period","text":"

To keep the list cache up-to-date, blocky will periodically download and reload all external lists. Default period is 4 hours. You can configure this by setting the blocking.refreshPeriod parameter to a value in duration format. Negative value will deactivate automatically refresh.

Example

blocking:\nrefreshPeriod: 60m\n

Refresh every hour.

"},{"location":"configuration/#download","title":"Download","text":"

You can configure the list download attempts according to your internet connection:

Parameter Type Mandatory Default value Description downloadTimeout duration format no 60s Download attempt timeout downloadAttempts int no 3 How many download attempts should be performed downloadCooldown duration format no 1s Time between the download attempts

Example

blocking:\ndownloadTimeout: 4m\ndownloadAttempts: 5\ndownloadCooldown: 10s\n
"},{"location":"configuration/#start-strategy","title":"Start strategy","text":"

You can configure the blocking behavior during application start of blocky. If no starategy is selected blocking will be used.

startStrategy Description blocking all blocking lists will be loaded before DNS resolution starts failOnError like blocking but blocky will shut down if any download fails fast DNS resolution starts immediately without blocking which will be enabled after list load is completed

Example

blocking:\nstartStrategy: failOnError\n
"},{"location":"configuration/#concurrency","title":"Concurrency","text":"

Blocky downloads and processes links in a single group concurrently. With parameter processingConcurrency you can adjust how many links can be processed in the same time. Higher value can reduce the overall list refresh time, but more parallel download and processing jobs need more RAM. Please consider to reduce this value on systems with limited memory. Default value is 4.

Example

blocking:\nprocessingConcurrency: 10\n
"},{"location":"configuration/#caching","title":"Caching","text":"

Each DNS response has a TTL (Time-to-live) value. This value defines, how long is the record valid in seconds. The values are maintained by domain owners, server administrators etc. Blocky caches the answers from all resolved queries in own cache in order to avoid repeated requests. This reduces the DNS traffic and increases the network speed, since blocky can serve the result immediately from the cache.

With following parameters you can tune the caching behavior:

Warning

Wrong values can significantly increase external DNS traffic or memory consumption.

Parameter Type Mandatory Default value Description caching.minTime duration format no 0 (use TTL) How long a response must be cached (min value). If <=0, use response's TTL, if >0 use this value, if TTL is smaller caching.maxTime duration format no 0 (use TTL) How long a response must be cached (max value). If <0, do not cache responses. If 0, use TTL. If > 0, use this value, if TTL is greater caching.maxItemsCount int no 0 (unlimited) Max number of cache entries (responses) to be kept in cache (soft limit). Default (0): unlimited. Useful on systems with limited amount of RAM. caching.prefetching bool no false if true, blocky will preload DNS results for often used queries (default: names queried more than 5 times in a 2 hour time window). Results in cache will be loaded again on their expire (TTL). This improves the response time for often used queries, but significantly increases external traffic. It is recommended to increase \"minTime\" to reduce the number of prefetch queries to external resolvers. caching.prefetchExpires duration format no 2h Prefetch track time window caching.prefetchThreshold int no 5 Name queries threshold for prefetch caching.prefetchMaxItemsCount int no 0 (unlimited) Max number of domains to be kept in cache for prefetching (soft limit). Default (0): unlimited. Useful on systems with limited amount of RAM. caching.cacheTimeNegative duration format no 30m Time how long negative results (NXDOMAIN response or empty result) are cached. A value of -1 will disable caching for negative results.

Example

caching:\nminTime: 5m\nmaxTime: 30m\nprefetching: true\n
"},{"location":"configuration/#redis","title":"Redis","text":"

Blocky can synchronize its cache and blocking state between multiple instances through redis. Synchronization is disabled if no address is configured.

Parameter Type Mandatory Default value Description redis.address string no Server address and port or master name if sentinel is used redis.username string no Username if necessary redis.password string no Password if necessary redis.database int no 0 Database redis.required bool no false Connection is required for blocky to start redis.connectionAttempts int no 3 Max connection attempts redis.connectionCooldown duration format no 1s Time between the connection attempts redis.sentinelUsername string no Sentinel username if necessary redis.sentinelPassword string no Sentinel password if necessary redis.sentinelAddresses string[] no Sentinel host list (Sentinel is activated if addresses are defined)

Example

redis:\naddress: redismaster\nusername: usrname\npassword: passwd\ndatabase: 2\nrequired: true\nconnectionAttempts: 10\nconnectionCooldown: 3s\nsentinelUsername: sentUsrname\nsentinelPassword: sentPasswd\nsentinelAddresses:\n- redis-sentinel1:26379\n- redis-sentinel2:26379\n- redis-sentinel3:26379\n
"},{"location":"configuration/#prometheus","title":"Prometheus","text":"

Blocky can expose various metrics for prometheus. To use the prometheus feature, the HTTP listener must be enabled ( see Basic Configuration).

Parameter Mandatory Default value Description prometheus.enable no false If true, enables prometheus metrics prometheus.path no /metrics URL path to the metrics endpoint

Example

prometheus:\nenable: true\npath: /metrics\n
"},{"location":"configuration/#query-logging","title":"Query logging","text":"

You can enable the logging of DNS queries (question, answer, client, duration etc.) to a daily CSV file (can be opened in Excel or OpenOffice Calc) or MySQL/MariaDB database.

Warning

Query file/database contains sensitive information. Please ensure to inform users, if you log their queries.

"},{"location":"configuration/#query-log-types","title":"Query log types","text":"

You can select one of following query log types:

  • mysql - log each query in the external MySQL/MariaDB database
  • postgresql - log each query in the external PostgreSQL database
  • csv - log into CSV file (one per day)
  • csv-client - log into CSV file (one per day and per client)
  • console - log into console output
  • none - do not log any queries
"},{"location":"configuration/#query-log-fields","title":"Query log fields","text":"

You can choose which information from processed DNS request and response should be logged in the target system. You can define one or more of following fields:

  • clientIP - origin IP address from the request
  • clientName - resolved client name(s) from the origins request
  • responseReason - reason for the response (e.g. from which upstream resolver), response type and code
  • responseAnswer - returned DNS answer
  • question - DNS question from the request
  • duration - request processing time in milliseconds

Hint

If not defined, blocky will log all available information

Configuration parameters:

Parameter Type Mandatory Default value Description queryLog.type enum (mysql, postgresql, csv, csv-client, console, none (see above)) no Type of logging target. Console if empty queryLog.target string no directory for writing the logs (for csv) or database url (for mysql or postgresql) queryLog.logRetentionDays int no 0 if > 0, deletes log files/database entries which are older than ... days queryLog.creationAttempts int no 3 Max attempts to create specific query log writer queryLog.CreationCooldown duration format no 2 Time between the creation attempts queryLog.fields list enum (clientIP, clientName, responseReason, responseAnswer, question, duration) no all which information should be logged

Hint

Please ensure, that the log directory is writable or database exists. If you use docker, please ensure, that the directory is properly mounted (e.g. volume)

example for CSV format with limited logging information

Example

queryLog:\ntype: csv\ntarget: /logs\nlogRetentionDays: 7\nfields:\n- clientIP\n- duration\n

example for Database

Example

queryLog:\ntype: mysql\ntarget: db_user:db_password@tcp(db_host_or_ip:3306)/db_user?charset=utf8mb4&parseTime=True&loc=Local\nlogRetentionDays: 7\n
"},{"location":"configuration/#hosts-file","title":"Hosts file","text":"

You can enable resolving of entries, located in local hosts file.

Configuration parameters:

Parameter Type Mandatory Default value Description hostsFile.filePath string no Path to hosts file (e.g. /etc/hosts on Linux) hostsFile.hostsTTL duration (no units is minutes) no 1h TTL hostsFile.refreshPeriod duration format no 1h Time between hosts file refresh hostsFile.filterLoopback bool no false Filter loopback addresses (127.0.0.0/8 and ::1)

Example

hostsFile:\nfilePath: /etc/hosts\nhostsTTL: 60m\nrefreshPeriod: 30m\n
"},{"location":"configuration/#deliver-ede-codes-as-edns0-option","title":"Deliver EDE codes as EDNS0 option","text":"

DNS responses can be extended with EDE codes according to RFC8914.

Configuration parameters:

Parameter Type Mandatory Default value Description ede.enable bool no false If true, DNS responses are deliverd with EDE codes

Example

ede:\nenable: true\n
"},{"location":"configuration/#ssl-certificate-configuration-doh-tls-listener","title":"SSL certificate configuration (DoH / TLS listener)","text":"

See Wiki - Configuration of HTTPS for detailed information, how to create and configure SSL certificates.

DoH url: https://host:port/dns-query

"},{"location":"installation/","title":"Installation","text":"

You can choose one of the following installation options:

  • Run as standalone binary
  • Run as docker container
  • Kubernetes with helm chart
"},{"location":"installation/#prepare-your-configuration","title":"Prepare your configuration","text":"

Blocky supports single or multiple YAML files as configuration. Create new config.yaml with your configuration ( see Configuration for more details and all configuration options).

Simple configuration file, which enables only basic features:

upstream:\ndefault:\n- 46.182.19.48\n- 80.241.218.68\n- tcp-tls:fdns1.dismail.de:853\n- https://dns.digitale-gesellschaft.ch/dns-query\nblocking:\nblackLists:\nads:\n- https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts\nclientGroupsBlock:\ndefault:\n- ads\nport: 53\nhttpPort: 4000\n
"},{"location":"installation/#run-as-standalone-binary","title":"Run as standalone binary","text":"

Download the binary file from GitHub for your architecture and run ./blocky --config config.yml.

Warning

Please be aware, if you want to use port 53 or 953 on Linux you should add CAP_NET_BIND_SERVICE capability to the binary or run with root privileges (running as root is not recommended).

"},{"location":"installation/#run-with-docker","title":"Run with docker","text":""},{"location":"installation/#alternative-registry","title":"Alternative registry","text":"

Blocky docker images are deployed to DockerHub (spx01/blocky) and GitHub Container Registry (ghcr.io/0xerr0r/blocky) .

"},{"location":"installation/#parameters","title":"Parameters","text":"

You can define the location of the config file in the container with environment variable \"BLOCKY_CONFIG_FILE\". Default value is \"/app/config.yml\".

"},{"location":"installation/#docker-from-command-line","title":"Docker from command line","text":"

Execute following command from the command line:

docker run --name blocky -v /path/to/config.yml:/app/config.yml -p 4000:4000 -p 53:53/udp spx01/blocky\n
"},{"location":"installation/#run-with-docker-compose","title":"Run with docker-compose","text":"

Create following docker-compose.yml file

version: \"2.1\"\nservices:\nblocky:\nimage: spx01/blocky\ncontainer_name: blocky\nrestart: unless-stopped\n# Optional the instance hostname for logging purpose\nhostname: blocky-hostname\nports:\n- \"53:53/tcp\"\n- \"53:53/udp\"\n- \"4000:4000/tcp\"\nenvironment:\n- TZ=Europe/Berlin # Optional to synchronize the log timestamp with host\nvolumes:\n# Optional to synchronize the log timestamp with host\n- /etc/localtime:/etc/localtime:ro\n# config file\n- ./config.yml:/app/config.yml\n

and start docker container with

docker-compose up -d\n
"},{"location":"installation/#advanced-setup","title":"Advanced setup","text":"

Following example shows, how to run blocky in a docker container and store query logs on a SAMBA share. Local black and whitelists directories are mounted as volume. You can create own black or whitelists in these directories and define the path like '/app/whitelists/whitelist.txt' in the config file.

Example

version: \"2.1\"\nservices:\nblocky:\nimage: spx01/blocky\ncontainer_name: blocky\nrestart: unless-stopped\nports:\n- \"53:53/tcp\"\n- \"53:53/udp\"\n- \"4000:4000/tcp\" # Prometheus stats (if enabled).\nenvironment:\n- TZ=Europe/Berlin\nvolumes:\n# config file\n- ./config.yml:/app/config.yml\n# write query logs in this volume\n- queryLogs:/logs\n# put your custom white and blacklists in these directories\n- ./blacklists:/app/blacklists/\n- ./whitelists:/app/whitelists/\n\nvolumes:\nqueryLogs:\ndriver: local\ndriver_opts:\ntype: cifs\no: username=USER,password=PASSWORD,rw\ndevice: //NAS_HOSTNAME/blocky  
"},{"location":"installation/#multiple-configuration-files","title":"Multiple configuration files","text":"

For complex setups, splitting the configuration between multiple YAML files might be desired. In this case, folder containing YAML files is passed on startup, Blocky will join all the files.

./blocky --config ./config/

Warning

Blocky simply joins the multiple YAML files. If a directive (e.g. upstream) is repeated in multiple files, the configuration will not load and start will fail.

"},{"location":"installation/#other-installation-types","title":"Other installation types","text":"

Warning

These projects are maintained by other people.

"},{"location":"installation/#web-ui","title":"Web UI","text":"

Blocky Frontend provides a Web UI to control blocky. See linked project for installation instructions.

"},{"location":"installation/#run-with-helm-chart-on-kubernetes","title":"Run with helm chart on Kubernetes","text":"

See this repo, the documentation and the configuration instructions for details about running blocky via helm in kubernetes.

"},{"location":"installation/#run-as-an-app-for-truenas-scale","title":"Run as an App for TrueNAS SCALE","text":"

You can find the App in the TrueCharts App Catalog or read the documentation and configuration instructions for details about running blocky as a native TrueNAS SCALE App.

"},{"location":"installation/#aur-package-for-arch-linux","title":"AUR package for Arch Linux","text":"

See https://aur.archlinux.org/packages/blocky/

"},{"location":"installation/#package-for-alpine-linux","title":"Package for Alpine Linux","text":"

See https://pkgs.alpinelinux.org/package/edge/testing/x86/blocky

"},{"location":"installation/#installation-script-for-centosfedora","title":"Installation script for CentOS/Fedora","text":"

See https://github.com/m0zgen/blocky-installer

"},{"location":"installation/#package-for-freebsd","title":"Package for FreeBSD","text":"

See https://www.freebsd.org/cgi/ports.cgi?query=blocky&stype=all

"},{"location":"interfaces/","title":"Interfaces","text":""},{"location":"interfaces/#rest-api","title":"REST API","text":"

If http listener is enabled, blocky provides REST API. You can browse the API documentation (Swagger) documentation under https://0xERR0R.github.io/blocky/swagger.html.

"},{"location":"interfaces/#cli","title":"CLI","text":"

Blocky provides a CLI interface to control. This interface uses internally the REST API.

To run the CLI, please ensure, that blocky DNS server is running, then execute blocky help for help or

  • ./blocky blocking enable to enable blocking
  • ./blocky blocking disable to disable blocking
  • ./blocky blocking disable --duration [duration] to disable blocking for a certain amount of time (30s, 5m, 10m30s, ...)
  • ./blocky blocking disable --groups ads,othergroup to disable blocking only for special groups
  • ./blocky blocking status to print current status of blocking
  • ./blocky query <domain> execute DNS query (A) (simple replacement for dig, useful for debug purposes)
  • ./blocky query <domain> --type <queryType> execute DNS query with passed query type (A, AAAA, MX, ...)
  • ./blocky lists refresh reloads all white and blacklists

Tip

To run this inside docker run docker exec blocky ./blocky blocking status

"},{"location":"network_configuration/","title":"Network configuration","text":"

In order, to benefit from all the advantages of blocky like ad-blocking, privacy and speed, it is necessary to use blocky as DNS server for your devices. You can configure DNS server on each device manually or use DHCP in your network router and push the right settings to your device. With this approach, you will configure blocky only once in your router and each device in your network will automatically use blocky as DNS server.

"},{"location":"network_configuration/#transparent-configuration-with-dhcp","title":"Transparent configuration with DHCP","text":"

Let us assume, blocky is installed on a Raspberry PI with fix IP address 192.168.178.2. Each device which connects to the router will obtain an IP address and receive the network configuration. The IP address of the Raspberry PI should be pushed to the device as DNS server.

\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510         \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502              \u2502         \u2502 Raspberry PI    \u2502\n\u2502  Router      \u2502         \u2502   blocky        \u2502        \n\u2502              \u2502         \u2502 192.168.178.2   \u2502            \n\u2514\u2500\u25b2\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2518         \u2514\u2500\u2500\u2500\u2500\u25b2\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518        \n  \u25021    \u2502                     \u2502  3                  \n  \u2502     \u2502                     \u2502                         \n  \u2502     \u2502                     \u2502 \n  \u2502     \u2502                     \u2502                     \n  \u2502     \u2502                     \u2502\n  \u2502     \u2502                     \u2502\n  \u2502     \u2502                     \u2502\n  \u2502     \u2502       \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n  \u2502     \u2502   2   \u2502                    \u2502\n  \u2502     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba  Network device    \u2502\n  \u2502             \u2502    Android         \u2502\n  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524                    \u2502\n                \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

1 - Network device asks the DHCP server (on Router) for the network configuration

2 - Router assigns a free IP address to the device and says \"Use 192.168.178.2\" as DNS server

3 - Clients makes DNS queries and is happy to use blocky

Warning

It is necessary to assign the server which runs blocky (e.g. Raspberry PI) a fix IP address.

"},{"location":"network_configuration/#example-configuration-with-fritzbox","title":"Example configuration with FritzBox","text":"

To configure the DNS server in the FritzBox, please open in the FritzBox web interface:

  • in navigation menu on the left side: Home Network -> Network
  • Network Settings tab on the top
  • \"IPv4 Configuration\" Button at the bottom op the page
  • Enter the IP address of blocky under \"Local DNS server\", see screenshot

"},{"location":"prometheus_grafana/","title":"Integration in Grafana","text":""},{"location":"prometheus_grafana/#prometheus","title":"Prometheus","text":""},{"location":"prometheus_grafana/#prometheus-export","title":"Prometheus export","text":"

Blocky can optionally export metrics for Prometheus.

Following metrics will be exported:

name Description blocky_blacklist_cache / blocky_whitelist_cache Number of entries in blacklist/whitelist cache, partitioned by group blocky_error_total Counter for internal errors blocky_query_total Number of total queries, partitioned by client and DNS request type (A, AAAA, PTR, etc) blocky_request_duration_ms_bucket Request duration histogram, partitioned by response type (Blocked, cached, etc) blocky_response_total Number of responses, partitioned by response type (Blocked, cached, etc), DNS response code, and reason blocky_blocking_enabled 1 if blocking is enabled, 0 otherwise blocky_cache_entry_count Number of entries in cache blocky_cache_hit_count / blocky_cache_miss_count Cache hit/miss counters blocky_prefetch_count Amount of prefetched DNS responses blocky_prefetch_domain_name_cache_count Amount of domain names being prefetched blocky_failed_download_count Number of failed list downloads"},{"location":"prometheus_grafana/#grafana-dashboard","title":"Grafana dashboard","text":"

Example Grafana dashboard definition as JSON or at grafana.com .

This dashboard shows all relevant statistics and allows enabling and disabling the blocking status.

"},{"location":"prometheus_grafana/#grafana-configuration","title":"Grafana configuration","text":"

Please install grafana-piechart-panel and set disable-sanitize-html in config or as env to use control buttons to enable/disable the blocking status.

"},{"location":"prometheus_grafana/#grafana-and-prometheus-example-project","title":"Grafana and Prometheus example project","text":"

This repo contains example docker-compose.yml with blocky, prometheus (with configured scraper for blocky) and grafana with prometheus datasource.

"},{"location":"prometheus_grafana/#mysql-mariadb","title":"MySQL / MariaDB","text":"

If database query logging is activated (see Query logging), you can use following Grafana Dashboard as JSON or at grafana.com

.

Please define the MySQL source in Grafana, which points to the database with blocky's log entries.

"},{"location":"prometheus_grafana/#postgres","title":"Postgres","text":"

The JSON for a Grafana dashboard equivalent to the MySQL/MariaDB version is located here

"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..4f05c916 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,43 @@ + + + + None + 2023-03-07 + daily + + + None + 2023-03-07 + daily + + + None + 2023-03-07 + daily + + + None + 2023-03-07 + daily + + + None + 2023-03-07 + daily + + + None + 2023-03-07 + daily + + + None + 2023-03-07 + daily + + + None + 2023-03-07 + daily + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..3d0886418a1a7d088fd6892b7655dd6b35c3f718 GIT binary patch literal 203 zcmV;+05ty}iwFpyWd~#e|8r?{Wo=<_E_iKh0PU1J4#F@DhIdX8Wp5J7z(Z-eF*3mc zqBOLT(xk+J!tF^PLcIW6Elak4|MIt)m+#i1mkwaOEAW;ujI>j}GOjN0?Rw4*xD*@y z3>I`m$?TxOO^n@%(!TErn5bLX0r8=xpqexQokhyX5sM8F}U?gT)fkq4&8Dg zA-28}Im>q$OSw;$SzFjtBVDcUK|e$#js0-CP$nY%Ay@bcU*Ug;k0pHx@daiL_3Tvy F002i8UHkw5 literal 0 HcmV?d00001 diff --git a/swagger.html b/swagger.html new file mode 100644 index 00000000..268bcc8c --- /dev/null +++ b/swagger.html @@ -0,0 +1,8639 @@ + + + + + + blocky API + + +
+

blocky API

+

+ Base URL: /api/, + Version: +

+

+

blocky API

+

+ + +
+ Schemes: + +
+ + +

Summary

+

Tag: blocking

+ +

+

+ + + + + + + + + + + + + + + + + + + + + +
OperationDescription
GET /blocking/disable

Disable blocking

+
GET /blocking/enable

Enable blocking

+
GET /blocking/status

Blocking status

+
+

Tag: lists

+ +

+

+ + + + + + + + + + + + + +
OperationDescription
POST /lists/refresh

List refresh

+
+

Tag: query

+ +

+

+ + + + + + + + + + + + + +
OperationDescription
POST /query

Performs DNS query

+
+ + +

Paths

+ + + +
+
+
Disable blocking
+

GET /blocking/disable

+ Tags: + blocking +
+
+
+

disable the blocking status

+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ duration +

duration of blocking (Example: 300s, 5m, 1h, 5m30s)

+
query + string (duration) + + + +
+ groups +

groups to disable (comma separated). If empty, disable all groups

+
query + string (string) + + + +
+
+ +
+ +
+
+ 200 OK + +
+
+
+
+

Blocking is disabled

+ +
+
+
+ +
+
+ +
+
+
+ 400 Bad Request + +
+
+
+
+

Unknown group

+ +
+
+
+ +
+
+ +
+
+
+
+
+
+ + +
+
+
Enable blocking
+

GET /blocking/enable

+ Tags: + blocking +
+
+
+

enable the blocking status

+ +
+ + +
+ +
+
+ 200 OK + +
+
+
+
+

Blocking is enabled

+ +
+
+
+ +
+
+ +
+
+
+
+
+
+ + +
+
+
Blocking status
+

GET /blocking/status

+ Tags: + blocking +
+
+
+

get current blocking status

+ +
+ + +
+

application/json +

+ +
+
+ 200 OK + +
+
+
+
+

Returns current blocking status

+ +
+
+
+ +
+ +
+ +
+
+
+
+
+
+ + +
+
+
List refresh
+

POST /lists/refresh

+ Tags: + lists +
+
+
+

Refresh all lists

+ +
+ + +
+ +
+
+ 200 OK + +
+
+
+
+

Lists were reloaded

+ +
+
+
+ +
+
+ +
+
+
+
+
+
+ + +
+
+
Performs DNS query
+

POST /query

+ Tags: + query +
+
+
+

Performs DNS query

+ +
+ + +
+ +

application/json +

+
+
+

+

query data

+

+
+
+ +
+
+
+ +
+

application/json +

+ +
+
+ 200 OK + +
+
+
+
+

query was executed

+ +
+
+
+ +
+
+ +
+
+ +
+
+
+ 400 Bad Request + +
+
+
+
+

Wrong request format

+ +
+
+
+ +
+
+ +
+
+
+
+
+
+ + +

Schema definitions

+ + +
+
+

api.BlockingStatus: + + object + + + +

+
+
+ +
+
+
+ autoEnableInSec: + + integer + + +
+
+

If blocking is temporary disabled: amount of seconds until blocking will be enabled

+ +
+ +
+
+
+ disabledGroups: + + string[] + + +
+
+

Disabled group names

+ +
+ +
+ + string + + +
+ +
+
+
+
+
+ enabled: + + boolean + + +
+
+

True if blocking is enabled

+ +
+ +
+
+
+
+
+
+
+
+

api.QueryRequest: + + object + + + +

+
+
+ +
+
+
+ query: + + string + + +
+
+

query for DNS request

+ +
+ +
+
+
+ type: + + string + + +
+
+

request type (A, AAAA, ...)

+ +
+ +
+
+
+
+
+
+
+
+

api.QueryResult: + + object + + + +

+
+
+ +
+
+
+ reason: + + string + + +
+
+

blocky reason for resolution

+ +
+ +
+
+
+ response: + + string + + +
+
+

actual DNS response

+ +
+ +
+
+
+ responseType: + + string + + +
+
+

response type (CACHED, BLOCKED, ...)

+ +
+ +
+
+
+ returnCode: + + string + + +
+
+

DNS return code (NOERROR, NXDOMAIN, ...)

+ +
+ +
+
+
+
+
+
+
+ + +

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 z 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�Bl_9NDUsE(e_7pe01TOU0H1X`7CG z{=UMkiKW}O${Br=6;P~1wNk92uS3ksG7?o*FWYf+H9Vp?I64(fp%COJ@9ISt|0YB< z-_exD!_R4|_^a`|WmBWBIC0+a4zk0GlFG80^Tm1YbUOmT`RMGjo81kUj1vY%e`rwT z$hcsmAMro6K62FrY|jrEUpYEi+0|z(?)#Z&hkFw1PZD|P=nsIGp5A-fyVH1=aFp+^ zOa~N?1&goB4GcX|AE;ok%TKCf^Kq2FfA6KE6%uPI5^7!|H(WP;gZceIs{febzvri1_rg{fXTk6rnTl+2NN{?~29uMIUVlWZ77t+^PnDmanI7_OfN8p>SyvxAIeyQl z?p7oir+7Efv;03CEq>IGwMSPKEmG+nM_uLT(EAn4!53MyIQ(#37VE0}=Ue&VVoQIT zuK4!O`&AjDCek>$ErL)6J34>prVH6~hf;ER-M!>(%j@}4)OzO+ z|H-NZ4K5Yof|y6(^GR^Es1|9pmj%WHBLv} z-DRIvr=P0$aW>_>)Ij=5;O-|c^=OPvLyWELIosz ztX8MIKdgquK4j6tcD8E8{j! z!oJ>g<6zL^ScfdS4FTjktqyB)O73V+TBw%sdNrB3JPe$?-&6kwtGL zBR3GWBWz;XtgNyY4TuEEI~onY5$zJcsn?r4&w1!NtwCLzHMCt#N&mWp2KZrk$a|b8 zp1$hBNg444Yue?qcWY_pgB1Z_`JkXKHOBDb2XVz-x?pbI=Vgbrl!4@63Ma>22SmUh z3|NS}7G>)RBynY|LR!pu6^X@x3;F%S(Q7nQzd0(ZF+yeIK=u#xw=&(_z~Rzw@*A|2 zeVx~fCG~>!u!(noGiZxpwfNK4qqeSG&Xa(aCAo4IB)EbAG6w$tqjqi4q z$$mBXz}JnnIy_NrE70ICG}Ak6L6o-vxLIR_;p;c?;&Ie>dmz9akqeWk>Nrg)n!ppC zd^5Yv_--wA)w5gx7Z%rid{mrtqzXejKe0=hPuK;g&bmGuqcqH)=L!1=+CS<}j1@2d zKDM!l16fid19Gq2Cf39|{%&9Xz4F0;gOP(4JzP_<%(#-CG@#Sk&=l*!u2(06x;h1^ zfqj0@Q? zhb8Lh(yyNyTl%V#j!fEa&vLpY0$DHfus!0X6RnGO9H*yeS+h z@OF>S*m3HP8dg)e?D4EmSZ4iG$!&kln((~=)G*@O&)e#uaw`PFw|-h%%Qj8>cO6LP z*zPy(ARU6>^3h8T2Ee3`70M67UJzFI0;IRi2Cv&;bkXsmqIu8m!AQb%FvOGc;ek*p z20MWn5CZUt=RR%#Vhqud7aBf<3qdCc&R)*%O7e&r^>U^DiEqtwInK6PWj;=iE6xLI zzUtYUVZ*-(NU!N%nz`z2h!b=uPdrHMfe+bJd|R>f$E-bBm)^8b3=TuAzbE{6KT?<2 zFqnjMiz=j`E@AsL?j1bUfg(DwFWZ|phWsUbz!|{k#{?cAlnX2k9{c zz|T^4!6DAM$4+tqw`G5e?PLGYy3^4Eo2` zP^Q48f63l+8HS^bLhL>avjUJ+b*q>s%a14)=d=d|*4GWoXI`$WE2dXT>Zg>j%;3lf z_s+L0Ir^8tHqmI2=fWNpJ7`xz9n}{N?O38XfQoyT&jgp*f)>5WHBoLUr*GV{SKF;OZ9hcp`Ueoc;@gBV70LyAgCIxvacvOTYV1tP3NPC379K)wg|)U}A@38LzmFQeKfN}}#xfNZ{=Hd(izh=%C$zDP z^>QWO(sJJgfYSnBUesReAdt2msO^-0cxHRnIim>}k4P`52Kf;R6;+FD7E^+M}*xmf69sQTz5XQ}llj zVofE^=a|KE>w|;AaPPA{(-OKbxUa$sYNe((^kG22f$2v7(g_j2JfZmQ=P3!*u)D=k zSLgP!;U!JAKzZ9p8}nS_xQS3x z34|;Ve0l1(wg>6+6!?aWeezOpF^zY#khXGT;GiGd(HL8$9Lsa}lfN*r3zGN9XdCmbvSdDD|`S9@tWw1B`wT zsQHaHug&V|jruC3_Q$=0arx^AiOA$ZNt%Ix!Sr3*k-z*+WR7= zBaiIQS}Un$U}@(C$o9U4q&7@e7uL0$^0ty%nHBTJi;#r@KTMzHR?-3y@BJ%GVSCja ztd`cg@o@oRfXTwDflX3IFkhdio5umwGezM0GbCe12;TL|Ye2=e!%fjcZ|w9{J4tQK z(2xEdWPr(rL1FBa$ra{b>?g^;6oHi@-@wJcUY@qL%kSSwVxy%X0JeX@1nk2}jKsc& z9^qVVYpRBM;MN_LBX|N;jM>EXe?vs<>HwQQeNN(L;^${jHt=tZj_Xa*8i+3K=eL*O&$$>ntiRTVEIMZ z)wqj^ncFju#{@%pnMbwR$%%BF`#!M)TzqhVQBk~}XM2~sA?KnGzWTqUf3RxLrSc>n z%+03oDH!yBCBT)40|0^sb))N>BBdKXQFDDH z7ps)3^UM+O&jZV{jvH`*wNbq8R)zI|&BDGaC#(5Cmr+JWpP$>mNDAHGe82I@mm>Td z5tx^XSOk86ZO?YoRyW<*ix~&9sC`2KSYy^uo9#z7MF?D=40nrFZNag3w92>oMhCr) zz?QoV9q_tZ?l5mBOz`Q@N8TxG=ID$?Dph32bpQa_xH2%))|V;leR4>;Iaid{)}{(0 z6ike8K^mzf2ZJW}aUe|YML>_lEtv;hM0^0~TkWd{gvhpc0B z@lWEf`L+`_yRkm|sDMojTC?c<$f>^3)x&sl8%*LgUHYp-TDP?6!HGs5aP$MlEq}e0 zjx*0;>{kMvYTgDu;%hw}+Mg&g8R~He0H0qtpR=S-sR`O5`(R=vFWK-Nf;!@1qCQyZ zRKv0y$tH%;^Yjx7qAkM10+Lf0+x@?z{D&*@e+58T#5U`Hr4ald0;vC$Ob}q(4E`&D l;G*mQD*$vt{=aGVN?Dchfo_1!sqmk8@-iyYRgxxO{s))s^56gf literal 0 HcmV?d00001 diff --git a/grafana-query-dashboard.png b/grafana-query-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..d72bc04aa091792afc2623364af3a38fa0c7d3c2 GIT binary patch literal 193087 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