Merge pull request #4804 from matrix-org/babolivier/ratelimit_registration_improvements
Improve ratelimit on registration
This commit is contained in:
commit
20dd3403ee
|
@ -0,0 +1 @@
|
||||||
|
Add configurable rate limiting to the /register endpoint.
|
|
@ -393,6 +393,17 @@ federation_rc_reject_limit: 50
|
||||||
#
|
#
|
||||||
federation_rc_concurrent: 3
|
federation_rc_concurrent: 3
|
||||||
|
|
||||||
|
# Number of registration requests a client can send per second.
|
||||||
|
# Defaults to 1/minute (0.17).
|
||||||
|
#
|
||||||
|
#rc_registration_requests_per_second: 0.17
|
||||||
|
|
||||||
|
# Number of registration requests a client can send before being
|
||||||
|
# throttled.
|
||||||
|
# Defaults to 3.
|
||||||
|
#
|
||||||
|
#rc_registration_request_burst_count: 3.0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Directory where uploaded images and attachments are stored.
|
# Directory where uploaded images and attachments are stored.
|
||||||
|
@ -580,6 +591,8 @@ turn_allow_guests: True
|
||||||
|
|
||||||
|
|
||||||
## Registration ##
|
## Registration ##
|
||||||
|
# Registration can be rate-limited using the parameters in the "Ratelimiting"
|
||||||
|
# section of this file.
|
||||||
|
|
||||||
# Enable registration for new users.
|
# Enable registration for new users.
|
||||||
enable_registration: False
|
enable_registration: False
|
||||||
|
@ -657,17 +670,6 @@ trusted_third_party_id_servers:
|
||||||
#
|
#
|
||||||
autocreate_auto_join_rooms: true
|
autocreate_auto_join_rooms: true
|
||||||
|
|
||||||
# Number of registration requests a client can send per second.
|
|
||||||
# Defaults to 1/minute (0.17).
|
|
||||||
#
|
|
||||||
#rc_registration_requests_per_second: 0.17
|
|
||||||
|
|
||||||
# Number of registration requests a client can send before being
|
|
||||||
# throttled.
|
|
||||||
# Defaults to 3.
|
|
||||||
#
|
|
||||||
#rc_registration_request_burst_count: 3.0
|
|
||||||
|
|
||||||
|
|
||||||
## Metrics ###
|
## Metrics ###
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,13 @@ class RatelimitConfig(Config):
|
||||||
self.federation_rc_reject_limit = config["federation_rc_reject_limit"]
|
self.federation_rc_reject_limit = config["federation_rc_reject_limit"]
|
||||||
self.federation_rc_concurrent = config["federation_rc_concurrent"]
|
self.federation_rc_concurrent = config["federation_rc_concurrent"]
|
||||||
|
|
||||||
|
self.rc_registration_requests_per_second = config.get(
|
||||||
|
"rc_registration_requests_per_second", 0.17,
|
||||||
|
)
|
||||||
|
self.rc_registration_request_burst_count = config.get(
|
||||||
|
"rc_registration_request_burst_count", 3,
|
||||||
|
)
|
||||||
|
|
||||||
def default_config(self, **kwargs):
|
def default_config(self, **kwargs):
|
||||||
return """\
|
return """\
|
||||||
## Ratelimiting ##
|
## Ratelimiting ##
|
||||||
|
@ -62,4 +69,15 @@ class RatelimitConfig(Config):
|
||||||
# single server
|
# single server
|
||||||
#
|
#
|
||||||
federation_rc_concurrent: 3
|
federation_rc_concurrent: 3
|
||||||
|
|
||||||
|
# Number of registration requests a client can send per second.
|
||||||
|
# Defaults to 1/minute (0.17).
|
||||||
|
#
|
||||||
|
#rc_registration_requests_per_second: 0.17
|
||||||
|
|
||||||
|
# Number of registration requests a client can send before being
|
||||||
|
# throttled.
|
||||||
|
# Defaults to 3.
|
||||||
|
#
|
||||||
|
#rc_registration_request_burst_count: 3.0
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -54,13 +54,6 @@ class RegistrationConfig(Config):
|
||||||
config.get("disable_msisdn_registration", False)
|
config.get("disable_msisdn_registration", False)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.rc_registration_requests_per_second = config.get(
|
|
||||||
"rc_registration_requests_per_second", 0.17,
|
|
||||||
)
|
|
||||||
self.rc_registration_request_burst_count = config.get(
|
|
||||||
"rc_registration_request_burst_count", 3,
|
|
||||||
)
|
|
||||||
|
|
||||||
def default_config(self, generate_secrets=False, **kwargs):
|
def default_config(self, generate_secrets=False, **kwargs):
|
||||||
if generate_secrets:
|
if generate_secrets:
|
||||||
registration_shared_secret = 'registration_shared_secret: "%s"' % (
|
registration_shared_secret = 'registration_shared_secret: "%s"' % (
|
||||||
|
@ -71,6 +64,8 @@ class RegistrationConfig(Config):
|
||||||
|
|
||||||
return """\
|
return """\
|
||||||
## Registration ##
|
## Registration ##
|
||||||
|
# Registration can be rate-limited using the parameters in the "Ratelimiting"
|
||||||
|
# section of this file.
|
||||||
|
|
||||||
# Enable registration for new users.
|
# Enable registration for new users.
|
||||||
enable_registration: False
|
enable_registration: False
|
||||||
|
@ -147,17 +142,6 @@ class RegistrationConfig(Config):
|
||||||
# users cannot be auto-joined since they do not exist.
|
# users cannot be auto-joined since they do not exist.
|
||||||
#
|
#
|
||||||
autocreate_auto_join_rooms: true
|
autocreate_auto_join_rooms: true
|
||||||
|
|
||||||
# Number of registration requests a client can send per second.
|
|
||||||
# Defaults to 1/minute (0.17).
|
|
||||||
#
|
|
||||||
#rc_registration_requests_per_second: 0.17
|
|
||||||
|
|
||||||
# Number of registration requests a client can send before being
|
|
||||||
# throttled.
|
|
||||||
# Defaults to 3.
|
|
||||||
#
|
|
||||||
#rc_registration_request_burst_count: 3.0
|
|
||||||
""" % locals()
|
""" % locals()
|
||||||
|
|
||||||
def add_arguments(self, parser):
|
def add_arguments(self, parser):
|
||||||
|
|
|
@ -61,7 +61,7 @@ class RegistrationHandler(BaseHandler):
|
||||||
self.user_directory_handler = hs.get_user_directory_handler()
|
self.user_directory_handler = hs.get_user_directory_handler()
|
||||||
self.captcha_client = CaptchaServerHttpClient(hs)
|
self.captcha_client = CaptchaServerHttpClient(hs)
|
||||||
self.identity_handler = self.hs.get_handlers().identity_handler
|
self.identity_handler = self.hs.get_handlers().identity_handler
|
||||||
self.ratelimiter = hs.get_ratelimiter()
|
self.ratelimiter = hs.get_registration_ratelimiter()
|
||||||
|
|
||||||
self._next_generated_user_id = None
|
self._next_generated_user_id = None
|
||||||
|
|
||||||
|
|
|
@ -196,7 +196,7 @@ class RegisterRestServlet(RestServlet):
|
||||||
self.identity_handler = hs.get_handlers().identity_handler
|
self.identity_handler = hs.get_handlers().identity_handler
|
||||||
self.room_member_handler = hs.get_room_member_handler()
|
self.room_member_handler = hs.get_room_member_handler()
|
||||||
self.macaroon_gen = hs.get_macaroon_generator()
|
self.macaroon_gen = hs.get_macaroon_generator()
|
||||||
self.ratelimiter = hs.get_ratelimiter()
|
self.ratelimiter = hs.get_registration_ratelimiter()
|
||||||
self.clock = hs.get_clock()
|
self.clock = hs.get_clock()
|
||||||
|
|
||||||
@interactive_auth_handler
|
@interactive_auth_handler
|
||||||
|
|
|
@ -206,6 +206,7 @@ class HomeServer(object):
|
||||||
self.clock = Clock(reactor)
|
self.clock = Clock(reactor)
|
||||||
self.distributor = Distributor()
|
self.distributor = Distributor()
|
||||||
self.ratelimiter = Ratelimiter()
|
self.ratelimiter = Ratelimiter()
|
||||||
|
self.registration_ratelimiter = Ratelimiter()
|
||||||
|
|
||||||
self.datastore = None
|
self.datastore = None
|
||||||
|
|
||||||
|
@ -251,6 +252,9 @@ class HomeServer(object):
|
||||||
def get_ratelimiter(self):
|
def get_ratelimiter(self):
|
||||||
return self.ratelimiter
|
return self.ratelimiter
|
||||||
|
|
||||||
|
def get_registration_ratelimiter(self):
|
||||||
|
return self.registration_ratelimiter
|
||||||
|
|
||||||
def build_federation_client(self):
|
def build_federation_client(self):
|
||||||
return FederationClient(self)
|
return FederationClient(self)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue