Skip to content

Commit cd978ea

Browse files
committed
Allow configuration of express-rate-limit's ipv6Subnet
56 is a moderately aggressive default. It may be increased to if users are being incorrectly blocked (try 60 or 64), or decreased if you are seeing evidence of abuse. See: https://express-rate-limit.mintlify.app/reference/configuration#ipv6subnet
1 parent eee1f50 commit cd978ea

File tree

5 files changed

+9
-0
lines changed

5 files changed

+9
-0
lines changed

config/config.example.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ ui:
1414
rateLimiter:
1515
windowMs: 60000 # 1 minute
1616
limit: 500 # limit each IP to 500 requests per windowMs
17+
# IPv6 subnet mask applied to IPv6 addresses.
18+
# See: https://express-rate-limit.mintlify.app/reference/configuration#ipv6subnet
19+
ipv6Subnet: 56
1720
# Trust X-FORWARDED-* headers from proxies (default = true)
1821
useProxies: true
1922

src/config/config.util.spec.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ describe('Config Util', () => {
4545
expect(appConfig.cache.msToLive.default).toEqual(15 * 60 * 1000); // 15 minute
4646
expect(appConfig.ui.rateLimiter.windowMs).toEqual(1 * 60 * 1000); // 1 minute
4747
expect(appConfig.ui.rateLimiter.limit).toEqual(500);
48+
expect(appConfig.ui.rateLimiter.ipv6Subnet).toEqual(56);
4849
expect(appConfig.ui.useProxies).toEqual(true);
4950

5051
expect(appConfig.submission.autosave.metadata).toEqual([]);
@@ -59,6 +60,7 @@ describe('Config Util', () => {
5960
const rateLimiter = {
6061
windowMs: 5 * 50 * 1000, // 5 minutes
6162
limit: 1000,
63+
ipv6Subnet: 56,
6264
};
6365
appConfig.ui.rateLimiter = rateLimiter;
6466

@@ -83,6 +85,7 @@ describe('Config Util', () => {
8385
expect(mockProductionEnvironment.cache.msToLive.default).toEqual(msToLive);
8486
expect(mockProductionEnvironment.ui.rateLimiter.windowMs).toEqual(rateLimiter.windowMs);
8587
expect(mockProductionEnvironment.ui.rateLimiter.limit).toEqual(rateLimiter.limit);
88+
expect(mockProductionEnvironment.ui.rateLimiter.ipv6Subnet).toEqual(rateLimiter.ipv6Subnet);
8689
expect(mockProductionEnvironment.ui.useProxies).toEqual(false);
8790
expect(mockProductionEnvironment.submission.autosave.metadata[0]).toEqual(autoSaveMetadata[0]);
8891
expect(mockProductionEnvironment.submission.autosave.metadata[1]).toEqual(autoSaveMetadata[1]);

src/config/default-app-config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export class DefaultAppConfig implements AppConfig {
5353
rateLimiter: {
5454
windowMs: 1 * 60 * 1000, // 1 minute
5555
limit: 500, // limit each IP to 500 requests per windowMs
56+
ipv6Subnet: 56, // IPv6 subnet mask applied to IPv6 addresses
5657
},
5758

5859
// Trust X-FORWARDED-* headers from proxies

src/config/ui-server-config.interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export class UIServerConfig extends ServerConfig {
99
rateLimiter?: {
1010
windowMs: number;
1111
limit: number;
12+
ipv6Subnet: number;
1213
};
1314

1415
// Trust X-FORWARDED-* headers from proxies

src/environments/environment.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export const environment: BuildConfig = {
4848
rateLimiter: {
4949
windowMs: 1 * 60 * 1000, // 1 minute
5050
limit: 500, // limit each IP to 500 requests per windowMs
51+
ipv6Subnet: 56,
5152
},
5253
useProxies: true,
5354
},

0 commit comments

Comments
 (0)