From ed08ef3ea307de4dd0a72b84ee353cdf1ff70d1d Mon Sep 17 00:00:00 2001 From: Scott Ullrich Date: Wed, 4 May 2005 04:02:24 +0000 Subject: [PATCH] Backend and support for allow limiting of TCP connections by establishment rate Useful for protecting against sudden outburts, etc. --- etc/inc/filter.inc | 8 ++++---- usr/local/www/firewall_rules_edit.php | 28 +++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/etc/inc/filter.inc b/etc/inc/filter.inc index eb711e2897..770807bc67 100644 --- a/etc/inc/filter.inc +++ b/etc/inc/filter.inc @@ -1287,7 +1287,6 @@ function generate_user_filter_rule($rule, $ngcounter) { if( isset($rule['source-track']) or isset($rule['max-src-nodes']) or isset($rule['max-src-states']) ) if($rule['protocol'] == "tcp") $line .= "flags S/SA "; - /* # keep state works with TCP, UDP, and ICMP. @@ -1327,10 +1326,11 @@ function generate_user_filter_rule($rule, $ngcounter) { $line .= "max-src-states " . $rule['max-src-states'] . " "; if(isset($rule['statetimeout']) & $rule['statetimeout'] <> "") $line .= "tcp.established " . $rule['statetimeout'] . " "; - if(isset($rule['max-src-conn-rate']) & $rule['max-src-conn-rate'] <> "") + if(isset($rule['max-src-conn-rate']) & $rule['max-src-conn-rate'] <> "" + and isset($rule['max-src-conn-rates']) & $rule['max-src-conn-rates'] <> "") { $line .= "max-src-conn-rate " . $rule['max-src-conn-rate'] . " "; - if(isset($rule['max-src-conn-rates']) & $rule['max-src-conn-rates'] <> "") - $line .= "/" . $rule['max-src-conn-rates'] . ", overload flush global "; + $line .= "/" . $rule['max-src-conn-rates'] . ", overload flush global "; + } $line .= " ) "; } } diff --git a/usr/local/www/firewall_rules_edit.php b/usr/local/www/firewall_rules_edit.php index 12a3f02cf6..66e6379209 100755 --- a/usr/local/www/firewall_rules_edit.php +++ b/usr/local/www/firewall_rules_edit.php @@ -155,10 +155,16 @@ if (isset($id) && $a_filter[$id]) { $pconfig['disabled'] = isset($a_filter[$id]['disabled']); $pconfig['log'] = isset($a_filter[$id]['log']); $pconfig['descr'] = $a_filter[$id]['descr']; + + /* advanced */ $pconfig['max-src-nodes'] = $a_filter[$id]['max-src-nodes']; $pconfig['max-src-states'] = $a_filter[$id]['max-src-states']; $pconfig['statetype'] = $a_filter[$id]['statetype']; $pconfig['statetimeout'] = $a_filter[$id]['statetimeout']; + + /* advanced - new connection per second banning*/ + $pconfig['max-src-conn-rate'] = $a_filter[$id]['max-src-conn-rate']; + $pconfig['max-src-conn-rates'] = $a_filter[$id]['max-src-conn-rates']; } else { /* defaults */ @@ -352,6 +358,9 @@ if ($_POST) { $a_filter[] = $filterent; } + $filterent['max-src-conn-rate'] = $_POST['max-src-conn-rate']; + $filterent['max-src-conn-rates'] = $_POST['max-src-conn-rates']; + write_config(); touch($d_filterconfdirty_path); @@ -781,18 +790,29 @@ Hint: the difference between block and reject is that with reject, a packet (TCP
You may enter a description here for your reference (not parsed). - - Advanced Options
Simultaneous client connection limit


Maximum state entries per host

- + / + +
+ New connections / per second

NOTE: Leave these fields blank to disable this feature. - State Type