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

DosHandler #12068

Merged
merged 48 commits into from
Oct 22, 2024
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
073719a
Experimental DosHandler
gregw Jul 22, 2024
a50561c
Converted to exponential moving average.
gregw Jul 24, 2024
a800fff
Javadoc
gregw Jul 24, 2024
28ef152
Experimental DosHandler
gregw Jul 25, 2024
14ae55e
Experimental DosHandler
gregw Jul 25, 2024
a929386
Experimental DosHandler
gregw Jul 25, 2024
73d546c
Experimental DosHandler
gregw Jul 31, 2024
71a3eb8
Experimental DosHandler
gregw Jul 31, 2024
52c533a
Experimental DosHandler
gregw Jul 31, 2024
d0a9eab
Experimental DosHandler
gregw Aug 1, 2024
51ba764
Experimental DosHandler
gregw Aug 1, 2024
fc6c2d3
Experimental DosHandler
gregw Aug 1, 2024
f1dbb02
Experimental DosHandler
gregw Aug 1, 2024
4f8d2f5
Experimental DosHandler
gregw Aug 1, 2024
b904bbf
Merge branch 'jetty-12.1.x' into experiment/jetty-12.0.x/DosHandler
gregw Aug 26, 2024
7363151
Updates from review
gregw Aug 27, 2024
41a6e8e
updates from review
gregw Aug 31, 2024
d769987
Merge branch 'jetty-12.1.x' into experiment/jetty-12.0.x/DosHandler
gregw Sep 1, 2024
04dbe06
Merge remote-tracking branch 'origin/jetty-12.1.x' into experiment/je…
gregw Sep 1, 2024
26ab55f
WIP updates from review
gregw Sep 22, 2024
3f5ec3d
Merge branch 'jetty-12.1.x' into experiment/jetty-12.0.x/DosHandler
gregw Sep 22, 2024
033f0bb
WIP updates from review
gregw Sep 22, 2024
65252a3
WIP updates from review
gregw Sep 24, 2024
40a68bf
WIP
gregw Sep 27, 2024
ea40b90
Merge remote-tracking branch 'origin/jetty-12.1.x' into experiment/je…
gregw Oct 8, 2024
5fdeb71
WIP
gregw Oct 8, 2024
ee08689
Updates from review
gregw Oct 9, 2024
af66815
WIP
gregw Oct 9, 2024
69def70
javadoc
gregw Oct 14, 2024
64eb866
updates from review
gregw Oct 14, 2024
4447abe
Simpler version of the original from experiment/jetty-12.0.x/DosHandl…
sbordet Oct 15, 2024
5cc5868
Merge remote-tracking branch 'origin/jetty-12.1.x' into experiment/je…
gregw Oct 15, 2024
f52eceb
Merge remote-tracking branch 'origin/jetty-12.0.x' into jetty-12.1.x
gregw Oct 15, 2024
fcacc36
added TODOs
gregw Oct 15, 2024
19bb159
added TODOs
gregw Oct 15, 2024
300e3d5
added TODOs
gregw Oct 16, 2024
b1d89b2
added TODOs
gregw Oct 16, 2024
19d482c
added TODOs
gregw Oct 16, 2024
8362165
increase default trackers
gregw Oct 16, 2024
0502ff1
increase default trackers
gregw Oct 16, 2024
f5d37b6
Try to find a tracker before checking the size.
gregw Oct 16, 2024
b8bf988
Try to find a tracker before checking the size.
gregw Oct 16, 2024
3d1fad7
Allow untrackable requests
gregw Oct 16, 2024
aed2bd1
Allow untrackable requests
gregw Oct 16, 2024
74932a1
fixed javadoc
gregw Oct 16, 2024
fed47c9
updates from review
gregw Oct 16, 2024
897ed1e
updates from review
gregw Oct 16, 2024
8071200
updates from review
gregw Oct 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions jetty-core/jetty-server/src/main/config/etc/jetty-dos.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "https://jetty.org/configure_10_0.dtd">

<Configure id="Server" class="org.eclipse.jetty.server.Server">
<Call name="insertHandler">
<Arg>
<New id="DosHandler" class="org.eclipse.jetty.server.handler.DosHandler">
<Arg name="getId">
<Get>
<Name><Property name="jetty.dos.id.type" default="ID_FROM_REMOTE_ADDRESS"/></Name>
<Class><Property name="jetty.dos.id.class" default="org.eclipse.jetty.server.handler.DosHandler"/></Class>
</Get>
</Arg>
<Arg name="rateFactory">
gregw marked this conversation as resolved.
Show resolved Hide resolved
<New>
<Class><Property name="jetty.dos.rateControlFactory" default="org.eclipse.jetty.server.handler.DosHandler$ExponentialMovingAverageRateControlFactory"/></Class>
<Arg name="samplePeriodMs" type="long"><Property name="jetty.dos.samplePeriodMs" default="-1"/></Arg>
<Arg name="alpha" type="double"><Property name="jetty.dos.alpha" default="-1.0"/></Arg>
<Arg name="maxRequestsPerSecond" type="int"><Property name="jetty.dos.maxRequestsPerSecond" default="100"/></Arg>
gregw marked this conversation as resolved.
Show resolved Hide resolved
</New>
</Arg>
<Arg name="rejectHandler">
<New>
<Class><Property name="jetty.dos.rejectHandler" default="org.eclipse.jetty.server.handler.DosHandler$DelayedRejectHandler"/></Class>
<Arg name="delayMs" type="long"><Property name="jetty.dos.delayMs" default="1000"/></Arg>
<Arg name="maxDelayQueue" type="int"><Property name="jetty.dos.maxDelayQueue" default="1000"/></Arg>
<Arg name="reject">
<New class="org.eclipse.jetty.server.handler.DosHandler$StatusRejectHandler">
<Arg name="status"><Property name="jetty.dos.rejectStatus" default="429"/></Arg>
</New>
</Arg>
</New>
</Arg>
<Arg name="maxTrackers" type="int"><Property name="jetty.dos.maxTrackers" default="-1"/></Arg>

<Call name="includeInetAddressPattern">
<Arg>
<Call class="org.eclipse.jetty.util.StringUtil" name="csvSplit">
<Arg><Property name="jetty.dos.include.inet" default="" /></Arg>
</Call>
</Arg>
</Call>
<Call name="excludeInetAddressPattern">
<Arg>
<Call class="org.eclipse.jetty.util.StringUtil" name="csvSplit">
<Arg><Property name="jetty.dos.exclude.inet" default="" /></Arg>
</Call>
</Arg>
</Call>
<Call name="includePath">
<Arg>
<Call class="org.eclipse.jetty.util.StringUtil" name="csvSplit">
<Arg><Property name="jetty.dos.include.path" default="" /></Arg>
</Call>
</Arg>
</Call>
<Call name="excludePath">
<Arg>
<Call class="org.eclipse.jetty.util.StringUtil" name="csvSplit">
<Arg><Property name="jetty.dos.exclude.path" default="" /></Arg>
</Call>
</Arg>
</Call>
</New>
</Arg>
</Call>
</Configure>
59 changes: 59 additions & 0 deletions jetty-core/jetty-server/src/main/config/modules/dos.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# DO NOT EDIT THIS FILE - See: https://eclipse.dev/jetty/documentation/

[description]
Enables the DosHandler for the server.

[tags]
connector

[depend]
server

[xml]
etc/jetty-dos.xml

[ini-template]

## The algorithm to use for obtaining an Id from an Request: ID_FROM_REMOTE_ADDRESS, ID_FROM_REMOTE_PORT, ID_FROM_REMOTE_ADDRESS_PORT, ID_CONNECTION
gregw marked this conversation as resolved.
Show resolved Hide resolved
#jetty.dos.id.type=ID_FROM_REMOTE_ADDRESS
#jetty.dos.id.class=org.eclipse.jetty.server.handler.DosHandler

## The class to use to create RateControl instances to track the rate of requests
#jetty.dos.rateControlFactory=org.eclipse.jetty.server.handler.DosHandler$ExponentialMovingAverageRateControlFactory

## The sample period(ms) to determine the request rate, or -1 for a default value
#jetty.dos.samplePeriodMs=100

## The Exponential factor for the moving average rate
#jetty.dos.alpha=0.2

## The maximum requests per second per client
#jetty.dos.maxRequestsPerSecond=100

## The Handler class to use to reject DOS requests
#jetty.dos.rejectHandler=org.eclipse.jetty.server.handler.DosHandler$TooManyRequestsRejectHandler

## The period to delay dos requests before rejecting them.
#jetty.dos.delayMs=1000

## The maximum number of requests to be held in the delay queue
#jetty.dos.maxDelayQueueSize=1000

## The maximum number of clients to track; or -1 for a default value
#jetty.dos.maxTrackers=10000

## The status code used to reject requests; or 0 to abort the request; or -1 for a default
#jetty.dos.rejectStatus=429

## List of InetAddress patterns to include
#jetty.dos.include.inet=10.10.10-14.0-128

## List of InetAddressPatterns to exclude
#jetty.dos.exclude.inet=10.10.10-14.0-128

## List of path patterns to include
#jetty.dos.include.path=/context/*

## List of path to exclude
#jetty.dos.exclude.path=/context/*

Loading
Loading