<div style="font-family: Arial, sans-serif; font-size: 14px;"><p>Hello,<br>
<br>
Thanks for the help!<br>
<br>
I tried testing "MaxQPSIPRule" by setting it to "3" but the drop connection only occurs on every 4th request. <span lang="en"><span><span>We would like to be able to block all requests from the source IP after they reach a certain limit.</span></span></span><br>
<br><u>
Configuration:</u><br>
<br>
<span style="font-family: Menlo, Consolas, "Courier New", monospace; font-size: 9pt; line-height: normal;">addAction(MaxQPSIPRule(3), DropAction())</span><br>
<br><u>
Test results:</u><br>
<br>
<span style="font-family: Menlo, Consolas, "Courier New", monospace; font-size: 9pt; line-height: normal;">:~$ for a in {0..7}; do dig -t a <DOMAIN> @<DNSdist_IP> +short; done</span></p>
<p><span style="font-family: Menlo, Consolas, "Courier New", monospace; font-size: 9pt; line-height: normal;"></span></p><span style="font-family: Menlo, Consolas, "Courier New", monospace; font-size: 9pt; line-height: normal;">192.168.30.11</span><div><span style="font-family: Menlo, Consolas, "Courier New", monospace; font-size: 9pt; line-height: normal;">192.168.30.11</span></div><div><span style="font-family: Menlo, Consolas, "Courier New", monospace; font-size: 9pt; line-height: normal;">192.168.30.11</span></div><div><span style="font-family: Menlo, Consolas, "Courier New", monospace; font-size: 9pt; line-height: normal;">;; communications error to <DNSdist_IP>#53: timed out</span></div><div><span style="font-family: Menlo, Consolas, "Courier New", monospace; font-size: 9pt; line-height: normal;">192.168.30.11</span></div><div><span style="font-family: Menlo, Consolas, "Courier New", monospace; font-size: 9pt; line-height: normal;">192.168.30.11</span></div><div><span style="font-family: Menlo, Consolas, "Courier New", monospace; font-size: 9pt; line-height: normal;">192.168.30.11</span></div><div><span style="font-family: Menlo, Consolas, "Courier New", monospace; font-size: 9pt; line-height: normal;">;; communications error to <DNSdist_IP>#53: timed out</span></div><div><span style="font-family: Menlo, Consolas, "Courier New", monospace; font-size: 9pt; line-height: normal;">192.168.30.11</span></div><span style="font-family: Menlo, Consolas, "Courier New", monospace; font-size: 9pt; line-height: normal;">192.168.30.11</span><div style="margin-top: 14px; margin-bottom: 14px;"><span style="display: inline !important; background-color: rgb(255, 255, 255);">Am I missing something in the configuration? Do you maybe have an example or tips how it should look like?</span></div><div style="margin-top: 14px; margin-bottom: 14px;"><span style="display: inline !important; background-color: rgb(255, 255, 255);">Thanks in advance.</span></div><div style="margin-top: 14px; margin-bottom: 14px;">
On Monday, October 30th, 2023 at 11:19 AM, Remi Gacogne via dnsdist <a href="mailto:dnsdist@mailman.powerdns.com" rel="noreferrer nofollow noopener" target="_blank">dnsdist@mailman.powerdns.com</a> wrote:</div>
<p><br>
</p>
<blockquote>
<p>Hi,</p>
<p>On 30/10/2023 11:08, CamZie via dnsdist wrote:</p>
<blockquote>
<p>We would like to use DNSdist to block traffics that exceeds a QPS limit<br>
and we have configured the following as test:</p>
<p>local dbr = dynBlockRulesGroup()</p>
<p>dbr:setQueryRate(5, 1, "Exceeded query rate", 60)<br>
dbr:setQTypeRate(DNSQType.ANY, 2, 1, "Exceeded ANY rate", 60)</p>
<p>function maintenance()<br>
dbr:apply()<br>
end</p>
<p>However, when we do 10 queries with the following command, all 10<br>
requests still goes through successfully:</p>
<p>for a in {0..10}; do dig -t a <DOMAIN> @<DNSdist_IP> +short; done</p>
<p>From the console, we can see that the client has been detected and is<br>
listed in the blocklist but still the 10 queries has gone through even<br>
though we have limited it to 5.</p>
<blockquote>
<p>showDynBlocks()<br>
What Seconds Blocks Warning Action<br>
Reason<br>
<DNSdist_IP>/32 56 0 false Drop<br>
Exceeded query rate</p>
</blockquote>
</blockquote>
<p>This is expected, as 'maintenance' is called every second so it might<br>
take up to a second for the client to get blocked.</p>
<blockquote>
<p>Is there a way we can immediately drop the connection after reaching max<br>
5 queries per second as defined in the config? This is the same case<br>
with the ANY requests restriction.</p>
</blockquote>
<p>MaxQPSIPRule <a href="https://dnsdist.org/rules-actions.html#MaxQPSIPRule" rel="noreferrer nofollow noopener" target="_blank">1</a>should do that. It is a bit more expensive than dynamic<br>
blocks when you have a lot of queries per second because it has to<br>
update a state for every query, but the "shards" parameter added in<br>
1.8.0 should help a lot under heavy load.</p>
<p>Best regards,<br>
--<br>
Remi Gacogne<br>
<a href="http://PowerDNS.COM" rel="noreferrer nofollow noopener" target="_blank">PowerDNS.COM</a> BV - <a href="https://www.powerdns.com/" rel="noreferrer nofollow noopener" target="_blank">https://www.powerdns.com/</a></p>
<p>_______________________________________________<br>
dnsdist mailing list<br>
<a href="mailto:dnsdist@mailman.powerdns.com" rel="noreferrer nofollow noopener" target="_blank">dnsdist@mailman.powerdns.com</a><br>
<a href="https://mailman.powerdns.com/mailman/listinfo/dnsdist" rel="noreferrer nofollow noopener" target="_blank">https://mailman.powerdns.com/mailman/listinfo/dnsdist</a></p>
</blockquote></div>