lumitro
Goto Top

Cisco ASA, max. Verbindungen je Client limitieren

Ich möchte (um eine DoS-Attacke zu vermeiden) auf meiner ASA die eingehenden Verbindungen pro Client (Websitebesucher) auf z.B. 3 beschränken. Sodass nicht ein User mit einem kleinen Tool viele Anfragen bzw. Clicks pro Sekunde an meinen Webserver schicken kann.

Am schönsten wäre das natürlich, wenn das zeitlich variable wäre.. also z.B. max. 30 Anfragen pro Minute oder sowas.

Content-ID: 89857

Url: https://administrator.de/contentid/89857

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

SchmuFoo
SchmuFoo 07.11.2008 um 14:05:52 Uhr
Goto Top
Hallo zusammen,

auch wenn der Thread schon was älter ist möchte ich als neues Mitglied hier meinen Einstand geben face-wink

Das geht bei der 5500 Cisco ASA Serie über das MPF (Modular Policy Framwork) bei dem z.B. die von Dir angefragten Connection Limits dann über sogenannte Service Policies abgewickelt werden.

Beachten sollte man bei solchen Limitierung jedoch dass dadurch z.B. auch Firmen-Proxy's etc bei denen halt sehr viele Connections von einer IP kommen beeinträchtigt werden könnten.

Zunächst aber mal eine Übersicht über das Feature:

Applying Connection Limits and TCP Normalization

„You can limit TCP and UDP connections and embryonic connections. Limiting the number of connections and embryonic connections protects you from a DoS attack. The security appliance uses the embryonic limit to trigger TCP Intercept, which protects inside systems from a DoS attack perpetrated by flooding an interface with TCP SYN packets. An embryonic connection is a connection request that has not finished the necessary handshake between source and destination.“

Die bei Cisco Embryonic Connection genannte Option ist jeh nach Linux Distribution übrigens auch auf Servern einstellbar und wird dort als SYN-Cookie bezeichnet.

Detailierte Beschreibung der Optionen im ASDM: http://www.cisco.com/en/US/docs/security/asa/asa72/asdm52/user/guide/sv ...

Anlegung via SSH http://www.cisco.com/en/US/docs/security/asa/asa72/configuration/guide/ ...


Beispiel einer globalen Limitierung der TCP and UDP connections

access-list outside_mpc line 1 extended permit tcp 0.0.0.0 0.0.0.0 host IP.IP.IP.IP eq http
class-map outside-class
match access-list outside_mpc
policy-map outside-policy
class outside-class
set connection conn-max *GewünschteAnzahl* embryonic-conn-max 0 random-sequence-number enable
service-policy outside-policy interface outside


Beispiel Pro-Client Connection Limit (Kann jedoch NICHT via ASDM sondern nur via SSH eingestellt und eingesehen werden, funktioniert aber..)

access-list outside_mpc line 1 extended permit tcp 0.0.0.0 0.0.0.0 host IP.IP.IP.IP eq http
class-map outside-class
match access-list outside_mpc
policy-map outside-policy
class outside-class
set connection conn-max 0 connection per-client-max *GewünschteAnzahl*
service-policy outside-policy interface outside


Beispiel Service-Policy um nur eingehende TCP-Verbindungen auf Port 80 zu limitieren:

class-map inside-class
match port tcp eq http
policy-map inside-policy
class inside-class
inspect http
set connection conn-max *GewünschteAnzahl* embryonic-conn-max 0 random-sequence-number enable
service-policy inside-policy interface inside


Sollte es zu geziehlten Layer7 Service Attacks kommen kann eine Limietierung auch auf ACL Basis geconft werden:

access-list dos-limit extended permit tcp any host IP.IP.IP.IP eq www

class-map dos-limit
match access-list dos-limit
policy-map dos-limit
class dos-limit
set connection per-client-max 25
service-policy dos-limit interface outside


Entweder man klickt sich das oben dargestellte im „Service Policy Rules“ Bereich zusammen oder fügt es via „Tools → Command Line Interface“ (oder per SSH im exec mode) direkt ein.

Das „inspect http“ kann auch weggelassen werden, jeh nachdem wieviele http Requests/s auf dem Interface eingehen kann das einiges an Ressourcen brauchen.


Zusammengefasst gesagt kann die ASA auf Layer 3-4 die Connections Limitieren, dies aber nur in Abhängigkeit von Layer 3-4 Adressen (IP/Port) und auch nicht über einen Counter a la "Gab es von der Source schonmal eine Anfrage innerhalb von x Stunden".

Auf Layer 7 Basis kann desweiteren untersucht/limitiert werden, z.B. über eine URI Liste wo eine RegEx a la /uri-foo/ gematched wird, aber das kann wiederum nicht mit einen Counter auf Layer 3 (Source) Basis kombiniert werden.


Cheers