Ticket #15735: LIMITS.TXT

File LIMITS.TXT, 5.7 KB (added by compconsultant@…, 16 years ago)

This is the doc for the limits variant, goes in the files directory

Line 
1This patch (20060126) makes tcpserver from DJB's ucspi-tcp-0.88 package (see
2http://cr.yp.to/ucspi-tcp.html) to modify its behavior if some environment
3variables are present.
4
5The variables can be preset before starting tcpserver (thus acting as
6default for all connections), or, if you use 'tcpserver -x xxx.cdb', they
7can be set (or overridden) from xxx.cdb. If none of the variables are set,
8tcpserver behaves same as non patched version (except for negligible
9performance loss). Any or all variables can be set, as soon as first limit
10is reached the connection is dropped. I'd recommend using .cdb files
11exclusively though, as you can then modify configuration without killing
12tcpserver.
13
14The variables are:
15
16(1) MAXLOAD
17    maximum 1-minute load average * 100. For example, if you have line
18    :allow,MAXLOAD="350"
19    in your rules file from which you created .cdb, the connection will be
20    accepted only if load average is below 3.50
21
22    See COMPILING instructions above for info on supported systems.
23 
24(2) MAXCONNIP
25    maximum connections from one IP address. tcpserver's -c flag defines
26    maximum number of allowed connections, but it can be abused if
27    just one host goes wild and eats all the connections - no other host
28    would be able to connect then. If you created your .cdb with:
29    :allow,MAXCONNIP="5"
30    and run tcpserver -c 50, then each IP address would be able to have at
31    most 5 concurrent connections, while there still could connect 50
32    clients total.
33    0 is valid value and means 'always reject'
34
35(3) MAXCONNC
36
37    maximum connections from whole C-class (256 addresses). Extension of
38    MAXCONNIP, as sometimes the problematic client has a whole farm of
39    client machines with different IP addresses instead of just one IP
40    address, and they all try to connect. It might have been more useful to
41    be able to specify CIDR block than C-class, but I've decided to KISS.
42
43    for example tcpserver -c 200, and .cdb with:
44    :allow,MAXCONNC="15"
45    will allow at most 15 host from any x.y.z.0/24 address block, while
46    still allowing up to 200 total connections.
47    0 is valid value and means 'always reject'
48
49(4) DIEMSG
50   
51    if set and one of the above limits is exceeded, this is the message
52    to be sent to client (CRLF is always added to the text) before terminating
53    connection. If unset, the connection simply terminates (after 1 sec delay)
54    if limit is exceeded.
55
56    For example:
57    DIEMSG="421 example.com Service temporarily not available, closing
58    transmission channel"
59
60(5) DIEMSG_MAXLOAD
61
62    If set, and a connection is denied because the MAXLOAD limit is exceeded,
63    this value will be used instead of DIEMSG.
64
65    For example:
66    DIEMSG_MAXLOAD="421 example.com Server busy, try again later."
67
68(6) DIEMSG_MAXCONNIP
69
70    If set, and a connection is denied because the MAXCONNIP limit is exceeded,
71    this value will be used instead of DIEMSG.
72
73    For example:
74    DIEMSG_MAXCONNIP="421 example.com Too many connections from your IP."
75
76(7) DIEMSG_MAXCONNC
77
78    If set, and a connection is denied because the MAXCONNC limit is exceeded,
79    this value will be used instead of DIEMSG.
80
81    For example:
82    DIEMSG_MAXCONNC="421 example.com Too many connections from your network."
83
84Notes:
85
86- if a connection is dropped due to some of those variables set, it will be
87  flagged (if you run tcpserver -v) with "MAXLOAD:", "MAXCONNIP:" or
88  "MAXCONNC:" at the end of the "tcpserver: deny" line. If that bothers you
89  (eg. you have a strict log parsers), don't apply that chunk of the patch.
90
91- the idea for this patch came from my previous experience with xinetd, and
92  need to limit incoming bursts of virus/spam SMTP connections, since I was
93  running qmail-scanner to scan incoming and outgoing messages for viruses
94  and spam.
95
96When you make changes, please check that they work as expected.
97
98Examples (for tcprules created .cdb)
99(a) 192.168.:allow,MAXLOAD="1000"
100    :allow,MAXCONNIP="3"
101
102    this would allow any connection from your local LAN (192.168.*.*
103    addresses) if system load is less than 10.00. non-LAN connections would
104    be accepted only if clients from that IP address have not already opened
105    more than 2 connections (as your connection would be last allowed -- 3rd)
106
107(b) 192.168.:allow
108    5.6.7.8:allow,MAXCONNIP="3"
109    1.2.:allow,MAXLOAD="500",MAXCONNIP="1",MAXCONNC="5"
110    :allow,MAXLOAD="1000",MAXCONNIP="3",DIEMSG="421 example.com unavailable"
111
112    if client connects from 192.168.*.* (ex: your LAN), it is allowed.
113    if it connects from 5.6.7.8 (ex: little abusive customer of yours),
114     it is allowed unless there are already 3active connections from 5.6.7.8
115     to this service
116    if it connects from 1.2.*.* (ex: some problematic networks which caused
117     you grief in the past) it will connect only if load is less than 5.0,
118     there is less than 5 active connections from whole C class
119     (1.2.*.0/24), and if that specific IP address does not already have
120     connection open.
121    in all other cases, the client will be permitted to connect if load is
122     less than 10.00 and client has 2 or less connections open. If load is
123     higher than 10.00 or there are 3 or more connections open from this
124     client, the message "421 example.com unavailable" will be returned to
125     the client and connection terminated.
126
127
128Any bugs introduced are ours, do not bother DJB with them.
129If you find any, or have neat ideas, or better documentation, or whatever,
130contact me.
131
132the 2006-01-26 version of the patch can be found at:
133http://linux.voyager.hr/ucspi-tcp/
134
135the 2007-12-22 version of the patch can be found at:
136http://qmail.jms1.net/ucspi-tcp/
137
138Enjoy,
139Matija Nalis < mnalis-tcpserver _at_ voyager.hr >
140John Simpson <jms1@jms1.net> (2007-12-22 version)