<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
Remi,</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
Thanks for the input. Yes, we have legit customers participating in the PRSD floods.</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
Setting the DynBlockRulesGroup:setRCodeRatio is interesting, can you share a sample config of this rule?</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
Regarding the professional service, whom should I contact to get pricing details? </div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
Thanks</div>
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
AH</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> dnsdist <dnsdist-bounces@mailman.powerdns.com> on behalf of Remi Gacogne via dnsdist <dnsdist@mailman.powerdns.com><br>
<b>Sent:</b> Friday, April 1, 2022 8:12 AM<br>
<b>To:</b> dnsdist@mailman.powerdns.com <dnsdist@mailman.powerdns.com><br>
<b>Subject:</b> Re: [dnsdist] How to best handle DNS floods</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Hi,<br>
<br>
On 31/03/2022 10:59, me aharen via dnsdist wrote:<br>
> And added the action "addAction(RCodeRule(DNSRCode.SERVFAIL), <br>
> DropAction())" - although I am uncertain if this works as I think it would.<br>
<br>
This will not work as expected, as this rule is going to drop queries <br>
with a response code set to ServFail, not responses. If you want to drop <br>
responses instead, which I'm not sure is a very good idea, you need to do:<br>
<br>
addResponseAction(RCodeRule(DNSRCode.SERVFAIL), DropResponseAction())<br>
<br>
> I do have another QPS rule, "addAction(MaxQPSIPRule(50), <br>
> PoolAction("abuse"))", to redirect the flooders.<br>
> <br>
> The only thing I can't do is apply any delay or drop action which would <br>
> disrupt the user's legit queries.<br>
<br>
So you have legitimate clients that take part in these DNS floods? Or <br>
are you concerned about false positive?<br>
<br>
> Using Dynamic Rule is interesting, but it blocks queries once the <br>
> "exceedServFails" exceeds, blocks legit queries for /32 - which is <br>
> disruptive.<br>
<br>
You could use DynBlockRulesGroup:setRCodeRate() [1] to send a truncated <br>
answer to blocked clients instead of dropping their queries, so regular <br>
clients can retry over TCP. DynBlockRulesGroup:setRCodeRatio() [2] might <br>
even be better as it allows you to only block if the ratio of ServFail <br>
answers among all answers sent to a given client reaches a threshold.<br>
<br>
If you are using a recent enough Linux kernel, it is even possible to do <br>
that with XDP for much better performance, see [3].<br>
<br>
Note that it is also possible to use dnsdist to detect and block such <br>
PRSD attacks, with specific Lua scripts leveraging the ring buffers and <br>
dynamic blocks. Guidance and support for writing these scripts can be <br>
provided as part of our commercial solutions which include access to <br>
professional services.<br>
<br>
[1]: <br>
<a href="https://dnsdist.org/reference/config.html#DynBlockRulesGroup:setRCodeRate">https://dnsdist.org/reference/config.html#DynBlockRulesGroup:setRCodeRate</a><br>
[2]: <br>
<a href="https://dnsdist.org/reference/config.html#DynBlockRulesGroup:setRCodeRatio">https://dnsdist.org/reference/config.html#DynBlockRulesGroup:setRCodeRatio</a><br>
[3]: <a href="https://github.com/PowerDNS/pdns/pull/10498">https://github.com/PowerDNS/pdns/pull/10498</a><br>
<br>
Best regards,<br>
-- <br>
Remi Gacogne<br>
PowerDNS.COM BV - <a href="https://www.powerdns.com/">https://www.powerdns.com/</a><br>
</div>
</span></font></div>
</body>
</html>