From: Remi Gacogne Date: Wed, 6 Jul 2022 16:13:49 +0000 (+0200) Subject: dnsdist: Add DISABLE_DYNBLOCKS option X-Git-Tag: rec-4.9.0-alpha0~27^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3dec225165c28f1e273639346465bdb4fd3d6a52;p=thirdparty%2Fpdns.git dnsdist: Add DISABLE_DYNBLOCKS option --- diff --git a/pdns/dnsdist-dynblocks.hh b/pdns/dnsdist-dynblocks.hh index 7bd9d97e1d..98ce71a083 100644 --- a/pdns/dnsdist-dynblocks.hh +++ b/pdns/dnsdist-dynblocks.hh @@ -21,6 +21,7 @@ */ #pragma once +#ifndef DISABLE_DYNBLOCKS #include #include "dolog.hh" @@ -435,3 +436,5 @@ private: static std::list s_metricsData; static size_t s_topN; }; + +#endif /* DISABLE_DYNBLOCKS */ diff --git a/pdns/dnsdist-lua-inspection.cc b/pdns/dnsdist-lua-inspection.cc index fa652e23e9..6e02284c74 100644 --- a/pdns/dnsdist-lua-inspection.cc +++ b/pdns/dnsdist-lua-inspection.cc @@ -94,6 +94,7 @@ static LuaArray>> getGenResponses(uint } #endif /* DISABLE_TOP_N_BINDINGS */ +#ifndef DISABLE_DYNBLOCKS #ifndef DISABLE_DEPRECATED_DYNBLOCK typedef std::unordered_map counts_t; @@ -241,6 +242,7 @@ static counts_t exceedRespByterate(unsigned int rate, int seconds) } #endif /* DISABLE_DEPRECATED_DYNBLOCK */ +#endif /* DISABLE_DYNBLOCKS */ void setupLuaInspection(LuaContext& luaCtx) { @@ -736,6 +738,7 @@ void setupLuaInspection(LuaContext& luaCtx) } }); +#ifndef DISABLE_DYNBLOCKS #ifndef DISABLE_DEPRECATED_DYNBLOCK luaCtx.writeFunction("exceedServFails", [](unsigned int rate, int seconds) { setLuaNoSideEffect(); @@ -882,4 +885,5 @@ void setupLuaInspection(LuaContext& luaCtx) }); luaCtx.registerFunction("setQuiet", &DynBlockRulesGroup::setQuiet); luaCtx.registerFunction("toString", &DynBlockRulesGroup::toString); +#endif /* DISABLE_DYNBLOCKS */ } diff --git a/pdns/dnsdist-lua.cc b/pdns/dnsdist-lua.cc index c81cb6cbde..414b3e930d 100644 --- a/pdns/dnsdist-lua.cc +++ b/pdns/dnsdist-lua.cc @@ -1438,6 +1438,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) luaCtx.writeFunction("setECSOverride", [](bool override) { g_ECSOverride = override; }); +#ifndef DISABLE_DYNBLOCKS luaCtx.writeFunction("showDynBlocks", []() { setLuaNoSideEffect(); auto slow = g_dynblockNMG.getCopy(); @@ -1571,6 +1572,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) luaCtx.writeFunction("setDynBlocksPurgeInterval", [](uint64_t interval) { DynBlockMaintenance::s_expiredDynBlocksPurgeInterval = interval; }); +#endif /* DISABLE_DYNBLOCKS */ #ifdef HAVE_DNSCRYPT luaCtx.writeFunction("addDNSCryptBind", [](const std::string& addr, const std::string& providerName, LuaTypeOrArrayOf certFiles, LuaTypeOrArrayOf keyFiles, boost::optional vars) { @@ -1838,6 +1840,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) } }); +#ifndef DISABLE_DYNBLOCKS #ifndef DISABLE_DEPRECATED_DYNBLOCK luaCtx.writeFunction("addBPFFilterDynBlocks", [](const std::unordered_map& m, std::shared_ptr dynbpf, boost::optional seconds, boost::optional msg) { if (!dynbpf) { @@ -1856,6 +1859,7 @@ static void setupLuaConfig(LuaContext& luaCtx, bool client, bool configCheck) } }); #endif /* DISABLE_DEPRECATED_DYNBLOCK */ +#endif /* DISABLE_DYNBLOCKS */ #endif /* HAVE_EBPF */ diff --git a/pdns/dnsdist-web.cc b/pdns/dnsdist-web.cc index 1e50a3f7b0..f94571df2a 100644 --- a/pdns/dnsdist-web.cc +++ b/pdns/dnsdist-web.cc @@ -837,6 +837,7 @@ static void handlePrometheus(const YaHTTP::Request& req, YaHTTP::Response& resp) addRulesToPrometheusOutput(output, g_cachehitrespruleactions); addRulesToPrometheusOutput(output, g_selfansweredrespruleactions); +#ifndef DISABLE_DYNBLOCKS output << "# HELP dnsdist_dynblocks_nmg_top_offenders_hits_per_second " << "Number of hits per second blocked by Dynamic Blocks (netmasks) for the top offenders, averaged over the last 60s" << "\n"; output << "# TYPE dnsdist_dynblocks_nmg_top_offenders_hits_per_second " << "gauge" << "\n"; auto topNetmasksByReason = DynBlockMaintenance::getHitsForTopNetmasks(); @@ -854,6 +855,7 @@ static void handlePrometheus(const YaHTTP::Request& req, YaHTTP::Response& resp) output << "dnsdist_dynblocks_smt_top_offenders_hits_per_second{reason=\"" << entry.first << "\",suffix=\"" << suffix.first.toString() << "\"} " << suffix.second << "\n"; } } +#endif /* DISABLE_DYNBLOCKS */ output << "# HELP dnsdist_info " << "Info from dnsdist, value is always 1" << "\n"; output << "# TYPE dnsdist_info " << "gauge" << "\n"; @@ -914,6 +916,7 @@ static void handleJSONStats(const YaHTTP::Request& req, YaHTTP::Response& resp) } else if (command == "dynblocklist") { Json::object obj; +#ifndef DISABLE_DYNBLOCKS auto nmg = g_dynblockNMG.getLocal(); struct timespec now; gettime(&now); @@ -945,7 +948,7 @@ static void handleJSONStats(const YaHTTP::Request& req, YaHTTP::Response& resp) obj.insert({dom, thing}); } }); - +#endif /* DISABLE_DYNBLOCKS */ Json my_json = obj; resp.body = my_json.dump(); resp.headers["Content-Type"] = "application/json"; diff --git a/pdns/dnsdist.cc b/pdns/dnsdist.cc index dcbfc9e1c6..f151a61293 100644 --- a/pdns/dnsdist.cc +++ b/pdns/dnsdist.cc @@ -937,6 +937,7 @@ static bool applyRulesToQuery(LocalHolders& holders, DNSQuestion& dq, const stru } } +#ifndef DISABLE_DYNBLOCKS /* the Dynamic Block mechanism supports address and port ranges, so we need to pass the full address and port */ if (auto got = holders.dynNMGBlock->lookup(AddressAndPortRange(*dq.remote, dq.remote->isIPv4() ? 32 : 128, 16))) { auto updateBlockStats = [&got]() { @@ -1055,6 +1056,7 @@ static bool applyRulesToQuery(LocalHolders& holders, DNSQuestion& dq, const stru } } } +#endif /* DISABLE_DYNBLOCKS */ DNSAction::Action action=DNSAction::Action::None; string ruleresult; @@ -1874,12 +1876,14 @@ static void maintThread() } } +#ifndef DISABLE_DYNBLOCKS static void dynBlockMaintenanceThread() { setThreadName("dnsdist/dynBloc"); DynBlockMaintenance::run(); } +#endif #ifndef DISABLE_SECPOLL static void secPollThread() @@ -2757,8 +2761,10 @@ int main(int argc, char** argv) thread healththread(healthChecksThread); +#ifndef DISABLE_DYNBLOCKS thread dynBlockMaintThread(dynBlockMaintenanceThread); dynBlockMaintThread.detach(); +#endif /* DISABLE_DYNBLOCKS */ #ifndef DISABLE_SECPOLL if (!g_secPollSuffix.empty()) { diff --git a/pdns/dnsdistdist/dnsdist-dynblocks.cc b/pdns/dnsdistdist/dnsdist-dynblocks.cc index 30d4f2ccfd..75f6d688b4 100644 --- a/pdns/dnsdistdist/dnsdist-dynblocks.cc +++ b/pdns/dnsdistdist/dnsdist-dynblocks.cc @@ -6,6 +6,8 @@ GlobalStateHolder> g_dynblockNMG; GlobalStateHolder> g_dynblockSMT; DNSAction::Action g_dynBlockAction = DNSAction::Action::Drop; +#ifndef DISABLE_DYNBLOCKS + void DynBlockRulesGroup::apply(const struct timespec& now) { counts_t counts; @@ -754,3 +756,4 @@ std::map>> DynBlockMaint { return s_tops.lock()->topSMTsByReason; } +#endif /* DISABLE_DYNBLOCKS */ diff --git a/pdns/dnsdistdist/dnsdist-lua-inspection-ffi.cc b/pdns/dnsdistdist/dnsdist-lua-inspection-ffi.cc index 13158faa03..4c50e4bf15 100644 --- a/pdns/dnsdistdist/dnsdist-lua-inspection-ffi.cc +++ b/pdns/dnsdistdist/dnsdist-lua-inspection-ffi.cc @@ -23,6 +23,7 @@ #include "dnsdist.hh" #include "dnsdist-dynblocks.hh" +#ifndef DISABLE_DYNBLOCKS uint64_t dnsdist_ffi_stat_node_get_queries_count(const dnsdist_ffi_stat_node_t* node) { return node->self.queries; @@ -104,3 +105,4 @@ void dnsdist_ffi_state_node_set_reason(dnsdist_ffi_stat_node_t* node, const char { node->reason = std::string(reason, reasonSize); } +#endif /* DISABLE_DYNBLOCKS */ diff --git a/pdns/dnsdistdist/test-dnsdistdynblocks_hh.cc b/pdns/dnsdistdist/test-dnsdistdynblocks_hh.cc index 6640ef08f0..dda6ff8d4c 100644 --- a/pdns/dnsdistdist/test-dnsdistdynblocks_hh.cc +++ b/pdns/dnsdistdist/test-dnsdistdynblocks_hh.cc @@ -11,6 +11,8 @@ Rings g_rings; shared_ptr g_defaultBPFFilter{nullptr}; +#ifndef DISABLE_DYNBLOCKS + BOOST_AUTO_TEST_SUITE(dnsdistdynblocks_hh) BOOST_AUTO_TEST_CASE(test_DynBlockRulesGroup_QueryRate) { @@ -1504,3 +1506,4 @@ BOOST_AUTO_TEST_CASE(test_NetmaskTreePort) { } BOOST_AUTO_TEST_SUITE_END() +#endif /* DISABLE_DYNBLOCKS */