Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

use in production? #24

Closed
dudicoco opened this issue Jan 10, 2021 · 10 comments
Closed

use in production? #24

dudicoco opened this issue Jan 10, 2021 · 10 comments

Comments

@dudicoco
Copy link

Hi,

Is this plugin safe to use in production?

According to this comment it has only been lightly tested: coredns/coredns#2311 (comment)

Just making sure that since then it has been properly tested :)

Thanks

@chrisohaver
Copy link
Member

It is used in production.

@dudicoco
Copy link
Author

Thanks @chrisohaver.
In that case why is this plugin external and not part of the core essential plugins? I believe rate limiting should be an essential part of coredns, otherwise a rogue application and dns flood coredns.

@chrisohaver
Copy link
Member

In that case why is this plugin external and not part of the core essential plugins?

Until now, no one has asked for it. However, there is a known limitation regarding wildcards (in which an attacker could use wildcards to launch an undetected amplification attack).

a rogue application and dns flood coredns

The primary feature of RRL (response rate limiting) doesn't protect against that. It helps mitigate "amplification attacks" against other endpoints not CoreDNS itself. RRL secondarily allows request rate limiting, which is different and could help a little bit there, but would not do well to prevent a client from flooding CoreDNS with queries (CoreDNS still has to receive the DNS requests and count them).

@dudicoco
Copy link
Author

@chrisohaver so what would be the proper mitigation for request rate limiting in that case?
We've encountered an issue on which an application sent thousands of requests to coredn, thus overloading it.

@chrisohaver
Copy link
Member

chrisohaver commented Jan 11, 2021

Whether or not rrl's request rate limiting would help depends on the situation. It would do better if the following are true ...

  • the attacker isn't spoofing its source address (e.g. using random source address for each query)
  • the responses for the queries are not cached (some types of error responses are not cache by CoreDNS)
  • the cost of resolving the answers is high, e.g. the requests are being forwarded by CoreDNS to an upstream DNS server, or perhaps that the responses are very large.

I'm guessing that an application errantly (not maliciously) sending thousands of requests to CoreDNS, would probably be sending the same query repeatedly. If CoreDNS is sending the queries upstream, and the answer is a non-cachable error, then rrl request rate limiting could help.

@ltagliamonte-dd
Copy link

would love to see this added to the official list of plugins @chrisohaver
i a shared infrastructure we need a way to block noisy neighbors

@fedor-git
Copy link

[WARNING] An external plugin (/go/src/github.com/coredns/coredns/plugin/rrl/setup.go line 67) is using the deprecated function Normalize. This will be removed in a future versions of CoreDNS. The plugin should be updated to use OriginsFromArgsOrServerBlock or NormalizeExact instead.

Will it be updated in the future?

@chrisohaver
Copy link
Member

[WARNING] An external plugin (/go/src/github.com/coredns/coredns/plugin/rrl/setup.go line 67) is using the deprecated function Normalize. This will be removed in a future versions of CoreDNS. The plugin should be updated to use OriginsFromArgsOrServerBlock or NormalizeExact instead.

Will it be updated in the future?

Yes

@chrisohaver
Copy link
Member

would love to see this added to the official list of plugins

@ltagliamonte-dd, I added it to the "official list" of external plugins: https://coredns.io/explugins/

@ltagliamonte
Copy link

@chrisohaver thank you, what i meant it was to see the plugin part of the official release. In this way we don't have to maintain a internal fork.
Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants