In diesem Dokument wird beschrieben, wie die Cisco Security Appliances ASA/PIX 8.x, die reguläre Ausdrücke verwenden, mit dem Modular Policy Framework (MPF) konfiguriert werden, um bestimmte FTP-Sites nach Servernamen zu blockieren oder zuzulassen.
In diesem Dokument wird davon ausgegangen, dass die Cisco Security Appliance richtig konfiguriert ist und funktioniert.
Die Informationen in diesem Dokument basierend auf folgenden Software- und Hardware-Versionen:
Cisco Adaptive Security Appliance (ASA) der Serie 5500 mit Softwareversion 8.0(x) oder höher
Cisco Adaptive Security Device Manager (ASDM) Version 6.x für ASA 8.x
Die Informationen in diesem Dokument beziehen sich auf Geräte in einer speziell eingerichteten Testumgebung. Alle Geräte, die in diesem Dokument benutzt wurden, begannen mit einer gelöschten (Nichterfüllungs) Konfiguration. Wenn Ihr Netz Live ist, überprüfen Sie, ob Sie die mögliche Auswirkung jedes möglichen Befehls verstehen.
Weitere Informationen zu Dokumentkonventionen finden Sie unter Cisco Technical Tips Conventions (Technische Tipps von Cisco zu Konventionen).
MPF bietet eine konsistente und flexible Möglichkeit zur Konfiguration der Funktionen von Security Appliances. Sie können beispielsweise MPF verwenden, um eine Timeout-Konfiguration zu erstellen, die für eine bestimmte TCP-Anwendung spezifisch ist, im Gegensatz zu einer Konfiguration, die für alle TCP-Anwendungen gilt.
MPF unterstützt folgende Funktionen:
TCP-Normalisierung, TCP- und UDP-Verbindungslimits und -Timeouts, TCP-Sequenznummern-Randomisierung
CSC
Anwendungsinspektion
IPS
QoS-Eingangsüberwachung
QoS-Ausgaberichtung
QoS-Prioritätswarteschlange
Die Konfiguration des MPF umfasst vier Aufgaben:
Identifizieren Sie den Layer-3- und Layer-4-Datenverkehr, auf den Sie Aktionen anwenden möchten. Weitere Informationen finden Sie unter Identifying Traffic Using a Layer 3/4 Class Map.
(Nur Anwendungsinspektion.) Definieren Sie spezielle Aktionen für Anwendungsinspektionsverkehr. Weitere Informationen finden Sie unter Konfigurieren von Sonderaktionen für Anwendungsinspektionen.
Wenden Sie Aktionen auf den Datenverkehr von Layer 3 und Layer 4 an. Weitere Informationen finden Sie unter Definieren von Aktionen mithilfe einer Layer-3/4-Richtlinienzuordnung.
Aktivieren der Aktionen auf einer Schnittstelle Weitere Informationen finden Sie unter Anwenden einer Layer-3/4-Richtlinie auf eine Schnittstelle mithilfe einer Servicerichtlinie.
Ein regulärer Ausdruck gleicht Textzeichenfolgen entweder wörtlich als exakte Zeichenfolge oder mithilfe von Metazeichen ab, sodass Sie mehrere Varianten einer Textzeichenfolge zuordnen können. Sie können einen regulären Ausdruck verwenden, um den Inhalt eines bestimmten Anwendungsdatenverkehrs abzugleichen. Sie können beispielsweise eine URL-Zeichenfolge in einem HTTP-Paket abgleichen.
Hinweis: Verwenden Sie Strg+V, um alle Sonderzeichen in der CLI, wie Fragezeichen (?) oder Tabulatoren, zu umgehen. Geben Sie beispielsweise d[Strg+V]g ein, um d?g in die Konfiguration einzugeben.
Um einen regulären Ausdruck zu erstellen, verwenden Sie den Befehl regex. Darüber hinaus kann der Befehl regex für verschiedene Funktionen verwendet werden, für die eine Textübereinstimmung erforderlich ist. Beispielsweise können Sie spezielle Aktionen für die Anwendungsinspektion mithilfe der MPF konfigurieren, die eine Inspektionsrichtlinienzuordnung verwendet. Weitere Informationen finden Sie im Befehl policy-map type inspect.
In der Prüfrichtlinienzuordnung können Sie den Datenverkehr identifizieren, auf den Sie reagieren möchten, wenn Sie eine Prüfklassenzuordnung erstellen, die einen oder mehrere Übereinstimmungsbefehle enthält, oder Sie können Übereinstimmungsbefehle direkt in der Prüfrichtlinienzuordnung verwenden. Mit einigen Übereinstimmungsbefehlen können Sie Text in einem Paket mithilfe eines regulären Ausdrucks identifizieren. Sie können beispielsweise URL-Zeichenfolgen in HTTP-Paketen zuordnen. Sie können reguläre Ausdrücke in einer Klassenzuordnung für reguläre Ausdrücke gruppieren. Weitere Informationen finden Sie im Befehl class-map type regex.
In dieser Tabelle werden die Metazeichen aufgelistet, die eine besondere Bedeutung haben.
Zeichen | Beschreibung | Hinweise |
. | Punkt | Entspricht einem beliebigen Zeichen. d.g entspricht beispielsweise dog, dag, dtg und allen Wörtern, die diese Zeichen enthalten, z. B. doggonnit. |
Exp. | Teilausdruck | Ein Teilausdruck trennt Zeichen von umgebenden Zeichen, sodass Sie andere Metazeichen im Teilausdruck verwenden können. Beispielsweise entspricht d(o|a)g Hund und dag, aber do|ag stimmt mit do und ag überein. Ein Teilausdruck kann auch mit Repeat-Quantifizierern verwendet werden, um die für die Wiederholung gedachten Zeichen zu differenzieren. Beispielsweise stimmt ab(xy){3}z mit abxyxyz überein. |
| | Wechsel | Entspricht einem der Ausdrücke, die getrennt werden. dog|cat entspricht beispielsweise dog oder cat. |
? | Fragezeichen | Ein Quantifizierer, der angibt, dass es 0 oder 1 des vorherigen Ausdrucks gibt. Zum Beispiel entspricht lo?se lse oder lose. Hinweis: Sie müssen Strg+V eingeben und dann wird das Fragezeichen oder die Hilfe-Funktion aufgerufen. |
* | Sternchen | Ein Quantifizierer, der angibt, dass es 0, 1 oder eine beliebige Zahl des vorherigen Ausdrucks gibt. Beispielsweise entspricht lo*se lse, lose, lose usw. |
{x} | Quantifizierer wiederholen | Wiederholen Sie den Vorgang genau x Mal. Beispielsweise stimmt ab(xy){3}z mit abxyxyz überein. |
{x} | Minimaler Wiederholungsquantifizierer | Wiederholen Sie den Vorgang mindestens x Mal. Beispielsweise stimmt ab(xy){2,}z mit abxyz, abxyxyxyz usw. überein. |
[Abc] | Zeichenklasse | Entspricht einem beliebigen Zeichen in Klammern. [abc] entspricht beispielsweise a, b oder c. |
[^abc] | Negative Zeichenklasse | Entspricht einem einzelnen Zeichen, das nicht in Klammern enthalten ist. [^abc] entspricht beispielsweise jedem anderen Zeichen als a, b oder c. [^A-Z] stimmt mit einem einzelnen Zeichen überein, das kein Großbuchstabe ist. |
[a-c] | Zeichenbereichsklasse | Entspricht einem beliebigen Zeichen im Bereich. [a-z] entspricht einem Kleinbuchstaben. Sie können Zeichen und Bereiche mischen: [abcq-z] entspricht a, b, c, q, r, s, t, u, v, w, x, y, z, und so auch [a-cq-z]. Der Bindestrich (-) ist nur dann literal, wenn es sich um das letzte oder das erste Zeichen innerhalb der Klammern handelt: [abc-] oder [-abc]. |
"" | Anführungszeichen | Speichert nachfolgende oder führende Leerzeichen in der Zeichenfolge. "test" behält beispielsweise den führenden Leerraum bei, wenn nach einer Übereinstimmung gesucht wird. |
^ | Caret | Gibt den Anfang einer Zeile an. |
\ | Escape-Zeichen | Bei Verwendung mit einem Metazeichen wird ein Literalzeichen verwendet. \[entspricht beispielsweise der linken eckigen Klammer. |
kohlen | Zeichen | Wenn das Zeichen kein Metazeichen ist, stimmt es mit dem Literalzeichen überein. |
\r | Wagenrücklauf | Entspricht einem Wagenrücklauf: 0x0d. |
\n | Neuzeile | Entspricht einer neuen Zeile: 0x0a. |
\t | Registerkarte | Entspricht einem Tab: 0x09. |
\f | Formfeed | Entspricht einem Formular-Feed: 0x0c. |
\xNN | Hexadezimalzahl mit Escapezeichen | Trifft auf ein ASCII-Zeichen zu, das ein Hexadezimalzeichen mit genau zwei Ziffern verwendet. |
\NNN | Oktalzahl mit Escapezeichen | Trifft auf ein ASCII-Zeichen mit genau drei Ziffern zu. Das Zeichen 040 stellt z. B. ein Leerzeichen dar. |
In diesem Abschnitt erfahren Sie, wie Sie die in diesem Dokument beschriebenen Funktionen konfigurieren können.
Hinweis: Verwenden Sie das Tool für die Suche nach Befehlen (nur registrierte Kunden), um weitere Informationen zu den in diesem Abschnitt verwendeten Befehlen zu erhalten.
In diesem Dokument wird die folgende Netzwerkeinrichtung verwendet:
Hinweis: Ausgewählte FTP-Sites werden mithilfe von regulären Ausdrücken zugelassen oder blockiert.
In diesem Dokument werden folgende Konfigurationen verwendet:
CLI-Konfiguration der ASA |
---|
ciscoasa#show run
: Saved
:
ASA Version 8.0(4)
!
hostname ciscoasa
domain-name cisco.com
enable password 8Ry2YjIyt7RRXU24 encrypted
passwd 2KFQnbNIdI.2KYOU encrypted
names
!
interface GigabitEthernet0/0
nameif outside
security-level 0
ip address 10.66.79.86 255.255.255.224
!
interface GigabitEthernet0/1
nameif inside
security-level 100
ip address 10.238.26.129 255.255.255.248
!
interface Management0/0
shutdown
no nameif
no security-level
no ip address
!
!--- Write regular expression (regex) to match the FTP site you want !--- to access. NOTE: The regular expression written below must match !--- the response 220 received from the server. This can be different !--- than the URL entered into the browser. For example, !--- FTP Response: 220 g1u0103c.austin.hp.com
regex FTP_SITE1 "([0-9A-Za-z])*[Hh][Pp]\.[Cc][Oo][Mm]"
regex FTP_SITE2 "([0-9A-Za-z])* CISCO SYSTEMS ([0-9A-Za-z])*"
!--- NOTE: The regular expression will be checked against every line !--- in the Response 220 statement (which means if the FTP server !--- responds with multiple lines, the connection will be denied if !--- there is no match on any one line).
boot system disk0:/asa804-k8.bin
ftp mode passive
pager lines 24
logging enable
logging timestamp
logging buffered debugging
mtu outside 1500
mtu inside 1500
no failover
icmp unreachable rate-limit 1 burst-size 1
asdm image disk0:/asdm-61557.bin
no asdm history enable
arp timeout 14400
global (outside) 1 interface
nat (inside) 1 0.0.0.0 0.0.0.0
route outside 0.0.0.0 0.0.0.0 10.66.79.65 1
timeout xlate 3:00:00
timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 icmp 0:00:02
timeout sunrpc 0:10:00 h323 0:05:00 h225 1:00:00 mgcp 0:05:00 mgcp-pat 0:05:00
timeout sip 0:30:00 sip_media 0:02:00 sip-invite 0:03:00 sip-disconnect 0:02:00
timeout sip-provisional-media 0:02:00 uauth 0:05:00 absolute
dynamic-access-policy-record DfltAccessPolicy
http server enable
http 0.0.0.0 0.0.0.0 inside
http 0.0.0.0 0.0.0.0 outside
no snmp-server location
no snmp-server contact
snmp-server enable traps snmp authentication linkup linkdown coldstart
telnet timeout 5
ssh scopy enable
ssh timeout 5
console timeout 0
management-access inside
threat-detection basic-threat
threat-detection statistics access-list
no threat-detection statistics tcp-intercept
class-map type regex match-any FTP_SITES
match regex FTP_SITE1
match regex FTP_SITE2
!−−− Class map created in order to match the server names !−−− of FTP sites to be blocked by regex.
class-map type inspect ftp match-all FTP_class_map
match not server regex class FTP_SITES
!−−− Write an FTP inspect class map and match based on server !--- names, user name, FTP commands, and so on. Note that this !--- example allows the sites specified with the regex command !--- since it uses the match not command. If you need to block !--- specific FTP sites, use the match command without the not option.
class-map inspection_default
match default-inspection-traffic
policy-map type inspect dns preset_dns_map
parameters
message-length maximum 512
policy-map type inspect ftp FTP_INSPECT_POLICY
parameters
class FTP_class_map
reset log
!−−− Policy map created in order to define the actions !--- such as drop, reset, or log.
policy-map global_policy
class inspection_default
inspect dns preset_dns_map
inspect h323 h225
inspect h323 ras
inspect netbios
inspect rsh
inspect rtsp
inspect skinny
inspect esmtp
inspect sqlnet
inspect sunrpc
inspect tftp
inspect sip
inspect xdmcp
inspect icmp
inspect ftp strict FTP_INSPECT_POLICY
!--- The FTP inspection is specified with strict option !--- followed by the name of policy.
service-policy global_policy global
prompt hostname context
Cryptochecksum:40cefb1189e8c9492ed7129c7577c477
: end |
Führen Sie die folgenden Schritte aus, um die regulären Ausdrücke zu konfigurieren und auf MPF anzuwenden, um bestimmte FTP-Sites zu blockieren:
Ermitteln Sie den FTP-Servernamen.
Die FTP-Prüfungs-Engine kann die Prüfung anhand verschiedener Kriterien wie Befehl, Dateiname, Dateityp, Server und Benutzername durchführen. Bei diesem Verfahren wird der Server als Kriterium verwendet. Die FTP-Prüfungs-Engine verwendet die Server 220-Antwort, die von der FTP-Site als Serverwert gesendet wurde. Dieser Wert kann sich vom Domänennamen unterscheiden, der von der Site verwendet wird. In diesem Beispiel wird Wireshark verwendet, um FTP-Pakete für die Website zu erfassen, die überprüft wird, um den Antwortwert 220 für die Verwendung in unserem regulären Ausdruck in Schritt 2 zu erhalten.
Basierend auf der Erfassung lautet der Wert von response 220 für ftp://hp.com (z. B. q5u0081c.atlanta.hp.com).
Erstellen von regulären Ausdrücken
Wählen Sie Configuration > Firewall > Objects > Regular Expressions aus, und klicken Sie auf der Registerkarte Regulärer Ausdruck auf Hinzufügen, um reguläre Ausdrücke wie in diesem Verfahren beschrieben zu erstellen:
Erstellen Sie einen regulären Ausdruck, FTP_SITE1, um die Antwort 220 (wie in der Paketerfassung in Wireshark oder einem anderen verwendeten Tool zu sehen) abzugleichen, die von der FTP-Site empfangen wurde (z. B. ".* hp\.com.*"), und klicken Sie auf OK.
Hinweis: Sie können auf Erstellen klicken, um Hilfe zum Erstellen von erweiterten regulären Ausdrücken zu erhalten.
Nachdem der reguläre Ausdruck erstellt wurde, klicken Sie auf Apply.
Erstellen Sie Klassen für reguläre Ausdrücke.
Wählen Sie Configuration > Firewall > Objects > Regular Expressions aus, und klicken Sie im Abschnitt Reguläre Ausdrucksklassen auf Hinzufügen, um die Klasse wie in diesem Verfahren beschrieben zu erstellen:
Erstellen Sie eine Klasse für reguläre Ausdrücke, FTP_SITES, um einen der regulären Ausdrücke FTP_SITE1 und FTP_SITE2 zu verwenden, und klicken Sie auf OK.
Klicken Sie nach dem Erstellen der Klassenzuordnung auf Apply.
Untersuchen Sie den identifizierten Datenverkehr mithilfe von Klassenzuordnungen.
Wählen Sie Configuration > Firewall > Objects > Class Maps > FTP > Add aus, klicken Sie mit der rechten Maustaste, und wählen Sie Add aus, um eine Klassenzuordnung zum Überprüfen des FTP-Datenverkehrs zu erstellen, der durch verschiedene reguläre Ausdrücke identifiziert wird, wie in diesem Verfahren beschrieben:
Erstellen Sie eine Klassenzuordnung, FTP_Block_Site, um die FTP-Antwort 220 mit den von Ihnen erstellten regulären Ausdrücken abzustimmen.
Wenn Sie die im regulären Ausdruck angegebenen Sites ausschließen möchten, klicken Sie auf das Optionsfeld Keine Übereinstimmung.
Wählen Sie im Abschnitt Value entweder einen regulären Ausdruck oder eine Klasse für einen regulären Ausdruck aus. Wählen Sie für diese Prozedur die Klasse aus, die zuvor erstellt wurde.
Klicken Sie auf Apply (Anwenden).
Legen Sie die Aktionen für den abgeglichenen Datenverkehr in der Überprüfungsrichtlinie fest.
Wählen Sie Configuration > Firewall > Objects > Inspect Maps > FTP> Add, um eine Überprüfungsrichtlinie zu erstellen, und legen Sie die Aktion für den abgeglichenen Datenverkehr nach Bedarf fest.
Geben Sie den Namen und eine Beschreibung für die Prüfrichtlinie ein. (Beispiel: FTP_INSPECT_POLICY.)
Klicken Sie auf Details.
Klicken Sie auf die Registerkarte Inspektionen. (1)
Klicken Sie auf Hinzufügen. (2)
Klicken Sie auf das Optionsfeld Mehrere Übereinstimmungen, und wählen Sie die Datenverkehrsklasse aus der Dropdown-Liste aus. (3)
Wählen Sie die gewünschte Rücksetzaktion zum Aktivieren oder Deaktivieren aus. In diesem Beispiel wird das Zurücksetzen der FTP-Verbindung für alle FTP-Sites aktiviert, die nicht mit den angegebenen Sites übereinstimmen. (4)
Klicken Sie auf OK, klicken Sie erneut auf OK, und klicken Sie dann auf Übernehmen. (5)
Wenden Sie die FTP-Prüfrichtlinie auf die globale Prüfliste an.
Wählen Sie Configuration > Firewall > Service Policy Rules aus.
Wählen Sie auf der rechten Seite die inspection_default-Richtlinie aus, und klicken Sie auf Edit.
Klicken Sie auf der Registerkarte Regelaktionen (1) auf die Schaltfläche Konfigurieren für FTP. (2)
Aktivieren Sie im Dialogfeld FTP-Inspektionszuordnung auswählen das Kontrollkästchen Striktes FTP verwenden, und klicken Sie dann auf das Optionsfeld FTP-Inspektionszuordnung für eine feine Kontrolle über die Inspektion.
Die neue FTP-Überprüfungsrichtlinie FTP_INSPECT_POLICY sollte in der Liste angezeigt werden.
Klicken Sie auf OK, klicken Sie erneut auf OK, und klicken Sie dann auf Übernehmen.
Nutzen Sie diesen Abschnitt, um zu überprüfen, ob Ihre Konfiguration ordnungsgemäß funktioniert.
Das Output Interpreter-Tool (OIT) (nur registrierte Kunden) unterstützt bestimmte show-Befehle. Verwenden Sie das OIT, um eine Analyse der show-Befehlsausgabe anzuzeigen.
show running-config regex: Zeigt die konfigurierten regulären Ausdrücke an.
ciscoasa#show running-config regex regex FTP_SITE1 "[Cc][Ii][Ss][Cc][Oo]\.[Cc][Oo][Mm]" regex FTP_SITE2 ".*hp\.com.*"
show running-config class−map: Zeigt die konfigurierten Klassenzuordnungen an.
ciscoasa#show running-config class-map class-map type regex match-any FTP_SITES match regex FTP_SITE1 match regex FTP_SITE2 class-map type inspect ftp match-all FTP_Block_Site match not server regex class FTP_SITES class-map inspection_default match default-inspection-traffic !
show running-config policy-map type inspect http: Zeigt die Richtlinienzuordnungen an, die den konfigurierten HTTP-Datenverkehr überprüfen.
ciscoasa#show running-config policy-map type inspect ftp ! policy-map type inspect ftp FTP_INSPECT_POLICY parameters mask-banner mask-syst-reply class FTP_Block_Site reset log !
Show running-config policy-map (Laufende Richtlinienzuordnung anzeigen): Zeigt alle Richtlinienzuordnungskonfigurationen sowie die Standardkonfiguration der Richtlinienzuordnung an.
ciscoasa#show running-config policy-map ! policy-map type inspect dns preset_dns_map parameters message-length maximum 512 policy-map type inspect ftp FTP_INSPECT_POLICY parameters mask-banner mask-syst-reply class FTP_Block_Site reset log policy-map global_policy class inspection_default inspect dns preset_dns_map inspect h323 h225 inspect h323 ras inspect netbios inspect rsh inspect rtsp inspect skinny inspect esmtp inspect sqlnet inspect sunrpc inspect tftp inspect sip inspect xdmcp inspect ftp strict FTP_INSPECT_POLICY !
show running-config service-policy: Zeigt alle derzeit ausgeführten Dienstrichtlinienkonfigurationen an.
ciscoasa#show running-config service-policy service-policy global_policy global
In diesem Abschnitt finden Sie Informationen zur Behebung von Fehlern in Ihrer Konfiguration.
Mit dem Befehl show service-policy können Sie überprüfen, ob die Prüfungs-Engine den Datenverkehr überprüft und ihn korrekt zulässt oder verwirft.
ciscoasa#show service-policy Global policy: Service-policy: global_policy Class-map: inspection_default Inspect: dns preset_dns_map, packet 0, drop 0, reset-drop 0 Inspect: h323 h225 _default_h323_map, packet 0, drop 0, reset-drop 0 Inspect: h323 ras _default_h323_map, packet 0, drop 0, reset-drop 0 Inspect: netbios, packet 0, drop 0, reset-drop 0 Inspect: rsh, packet 0, drop 0, reset-drop 0 Inspect: rtsp, packet 0, drop 0, reset-drop 0 Inspect: skinny , packet 0, drop 0, reset-drop 0 Inspect: esmtp _default_esmtp_map, packet 0, drop 0, reset-drop 0 Inspect: sqlnet, packet 0, drop 0, reset-drop 0 Inspect: sunrpc, packet 0, drop 0, reset-drop 0 Inspect: tftp, packet 0, drop 0, reset-drop 0 Inspect: sip , packet 0, drop 0, reset-drop 0 Inspect: xdmcp, packet 0, drop 0, reset-drop 0 Inspect: ftp strict FTP_INSPECT_POLICY, packet 40, drop 0, reset-drop 2
Überarbeitung | Veröffentlichungsdatum | Kommentare |
---|---|---|
1.0 |
21-Jul-2009 |
Erstveröffentlichung |