<div dir="ltr">Hi Remi,<div><br></div><div>Thanks for your answer,</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Could you describe your use case a bit more so I understand why you<br>would like to be able to group dynamic blocks? It would be easy to make<br>it possible to aggregate IPs into fixed-size subnets, for example /64 or<br>/48 for IPv6, but doing dynamic aggregation would be more complicated.<br></blockquote><div><br></div><div>I found this issue. It sums up the need pretty well <a href="https://github.com/PowerDNS/pdns/issues/4993">https://github.com/PowerDNS/pdns/issues/4993</a> </div><div><br></div><div>Instead of banning one particular IP, the goal would be to ban the /24 subnet this IP is in. </div><div><div>This is also why I have been trying to use QPS rules with these subnet options.</div></div><div><br></div><div>While dnsdist seems to be pretty quick and efficient at creating a massive amount of blocks in case of a ddos, blocking /24 subnets can sometimes be the safest option.<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">You could however mimic that behaviour with custom Lua rules and actions.<br></blockquote><div><br></div><div>I will update this thread if I can make a custom rule that allow a certain percentage of queries to pass through the rule.</div><div><br></div><div>Best regards.</div><div>Thibaud</div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le jeu. 14 mai 2020 à 14:04, Remi Gacogne via dnsdist <<a href="mailto:dnsdist@mailman.powerdns.com">dnsdist@mailman.powerdns.com</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Thibaud,<br>
<br>
On 5/13/20 9:50 AM, Thib D via dnsdist wrote:<br>
> I am currently trying to set up a rate-limiting config and I have a few<br>
> questions about how Dynblocks and Packet policies rules work :<br>
> <br>
> When an IP is inserted in a DynBlockRule, an action is automatically<br>
> given to the query for some time.<br>
> Instead of dropping/truncating every query, I would like to have the<br>
> possibility to drop/truncate 50% for the queries coming from this<br>
> abusive IP. Is this currently possible to do so?<br>
<br>
I'm afraid there is currently no way to do that. At the moment only the<br>
following actions are supported for a dynamic block rule:<br>
<br>
DNSAction.Drop (the default), DNSAction.NoOp, DNSAction.NXDomain,<br>
DNSAction.Refused, DNSAction.Truncate and DNSAction.NoRecurse.<br>
<br>
> It looks like it's possible to come close to this behavior using<br>
> MaxQPSIPRule(10,24,48) and dropping the queries matching this rule.<br>
> Here, the abusive source would still be able to query at a 10 qps rate,<br>
> and the rest of the queries would be dropped.<br>
<br>
It's not exactly equivalent to what a dynamic block does but that would<br>
be closer to your expectations indeed. Please note that the second and<br>
third parameters that you are currently using would group by /24 for<br>
IPv4 and /48 for IPv6.<br>
<br>
> I would also like to have the same behaviour for queries by RCODE[1] and<br>
> QNAMEs[2]:<br>
> [1] : I would like to allow a source to have 10 NXDOmains/s, and drop<br>
> the rest of the NXDOmain queries from this source.<br>
> [2] : I would like to allow 10 queries per second for a single source on<br>
> a same domain, then drop the rest.<br>
> <br>
> From what I understand, DynBlocks are the only way to count responses<br>
> with a specific RCodes, and I'm wondering if there is a way to have<br>
> Dynblock not dropping/truncating every query (would LuaActions do the<br>
> trick ?), or setting up custom rules to have some sort of MaxQPSRule<br>
> limiting subnets abusing NXDOmains/SERVFAIL/REFUSED.<br>
<br>
Dynamic blocks have been designed to cut off the queries sent by an<br>
abusive client so at the moment there is no way to select which queries<br>
to block and which to keep once a dynamic block has been inserted.<br>
You could however mimic that behaviour with custom Lua rules and actions.<br>
<br>
> Last question : Will Dynblocks be able to deal with subnets instead of<br>
> IPs in the future?<br>
<br>
Could you describe your use case a bit more so I understand why you<br>
would like to be able to group dynamic blocks? It would be easy to make<br>
it possible to aggregate IPs into fixed-size subnets, for example /64 or<br>
/48 for IPv6, but doing dynamic aggregation would be more complicated.<br>
<br>
<br>
Best regards,<br>
-- <br>
Remi Gacogne<br>
PowerDNS.COM BV - <a href="https://www.powerdns.com/" rel="noreferrer" target="_blank">https://www.powerdns.com/</a><br>
<br>
_______________________________________________<br>
dnsdist mailing list<br>
<a href="mailto:dnsdist@mailman.powerdns.com" target="_blank">dnsdist@mailman.powerdns.com</a><br>
<a href="https://mailman.powerdns.com/mailman/listinfo/dnsdist" rel="noreferrer" target="_blank">https://mailman.powerdns.com/mailman/listinfo/dnsdist</a><br>
</blockquote></div>