mirror of https://gitlab.com/famedly/conduit.git
3 changed files with 58 additions and 0 deletions
@ -0,0 +1,55 @@
|
||||
# Rate Limiting |
||||
Conduit [rate-limits](https://en.wikipedia.org/wiki/Rate_limiting) security/privacy sensitive and |
||||
resource intensive endpoints, to protect against things like: |
||||
- Denial of service attacks, caused by things like overloading the media store |
||||
- Abuse by spammers, attempting to make use of your server to send spam in mass, which usually |
||||
leads to your server being put in policy lists, making it unable to participate in many rooms. |
||||
> **Note**: The easiest way to prevent this is to disable public registration, and use a strong |
||||
registration token to allow selective registration. |
||||
- Brute-force attacks to guess user's password or the servers registration token, the former leading |
||||
to potential impersination, as well as denial of service if an admin account is accessed. |
||||
|
||||
## Presets |
||||
|
||||
By default, Conduit uses the rate-limiting preset `private_small`, but there are more available if |
||||
this isn't the type of server you're planning on running: |
||||
- `private_small`: The default preset, designed for small private servers (i.e. single-user or for |
||||
family and friends). |
||||
- `private_medium`: Designed for medium-sized private servers (e.g. for an entire school class or year-group) |
||||
- `public_medium`: For medium-sized public servers (i.e. you intend 20-100 users to actively use it). |
||||
- `public_large`: For larger public server (i.e. you intend 200-1000 users to actively use it). |
||||
|
||||
Here is an example configuration using the `private_medium` preset: |
||||
```toml |
||||
[global.rate_limiting] |
||||
preset = "private_medium" |
||||
``` |
||||
|
||||
## Overrides |
||||
|
||||
Despite the variety of presets available, you may find the presets to be too restrictive and/or liberal. |
||||
You can override all the preset configurations directly in the configuration, and if you think your overrides |
||||
should be part of the preset, you can contribute and change them! |
||||
|
||||
The overrides are split into `client` and `federation` sections, for limits that apply to the |
||||
[client](https://spec.matrix.org/v1.17/client-server-api/) and |
||||
[federation](https://spec.matrix.org/v1.17/server-server-api/) APIs respectively, which are both |
||||
then split into `target` and `global` sections, which apply to specific [targets](#targets) and globally respectively. |
||||
|
||||
### Restrictions |
||||
|
||||
{{#include ../../target/docs/rate-limiting.md:restrictions}} |
||||
|
||||
### Targets |
||||
|
||||
A target is any client that call's Conduit's API endpoints, and are identified by one of the following: |
||||
- A user ID |
||||
- A Server Name (domain) |
||||
- An appservice ID |
||||
- An IP address, if it cannot be addressed by any of the above (i.e. the client is not authenticated) |
||||
|
||||
The rate limiting configurations under both `target` parts allow you to configure how many |
||||
resources/requests each unique client can access within the configured timeframe. |
||||
For example, while on a small server you might allow for all logged-in users to send out 100 invites |
||||
per day between them, you can set a cap of 5 for each individual user, not only so that they can't |
||||
use up the entire global cap, but also prevent potential spam from being spread by that user alone. |
||||
Loading…
Reference in new issue