Commits

Rainer Müller authored 952fe4aaae0
net/ucspi-tcp: New maintainer and new variants, closes https://trac.macports.org/ticket/15735

git-svn-id: https://svn.macports.org/repository/macports/trunk/dports@46009 d073be05-634f-4543-b044-5fe20cf6d1d6
No tags

net/ucspi-tcp/files/LIMITS.TXT

Added
1 +This patch (20060126) makes tcpserver from DJB's ucspi-tcp-0.88 package (see
2 +http://cr.yp.to/ucspi-tcp.html) to modify its behavior if some environment
3 +variables are present.
4 +
5 +The variables can be preset before starting tcpserver (thus acting as
6 +default for all connections), or, if you use 'tcpserver -x xxx.cdb', they
7 +can be set (or overridden) from xxx.cdb. If none of the variables are set,
8 +tcpserver behaves same as non patched version (except for negligible
9 +performance loss). Any or all variables can be set, as soon as first limit
10 +is reached the connection is dropped. I'd recommend using .cdb files
11 +exclusively though, as you can then modify configuration without killing
12 +tcpserver.
13 +
14 +The 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 +
84 +Notes:
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 +
96 +When you make changes, please check that they work as expected.
97 +
98 +Examples (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 +
128 +Any bugs introduced are ours, do not bother DJB with them.
129 +If you find any, or have neat ideas, or better documentation, or whatever,
130 +contact me.
131 +
132 +the 2006-01-26 version of the patch can be found at:
133 +http://linux.voyager.hr/ucspi-tcp/
134 +
135 +the 2007-12-22 version of the patch can be found at:
136 +http://qmail.jms1.net/ucspi-tcp/
137 +
138 +Enjoy,
139 +Matija Nalis < mnalis-tcpserver _at_ voyager.hr >
140 +John Simpson <jms1@jms1.net> (2007-12-22 version)

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut