Lösung 1:
Allgemein:
Zum Anzeigen und Ändern der Firewall-Konfiguration sind Administratorrechte erforderlich (root
) als Öffnungsdienste im eingeschränkten Portnummernbereich. Das bedeutet, dass Sie entweder als root
eingeloggt sein sollten oder verwenden Sie alternativ sudo
um den Befehl als root auszuführen. Ich werde versuchen, solche Befehle mit dem optionalen [sudo]
zu kennzeichnen .
Inhalt:
- Die Reihenfolge ist wichtig oder der Unterschied zwischen
-I
und-A
- Anzeige der aktuellen Firewall-Konfiguration
- Interpretieren der Ausgabe von
iptables -L -v -n
- Kenne deine Umgebung
- Die INPUT- und FORWARD-Ketten
- Kernel-Module
1. Die Reihenfolge ist wichtig oder der Unterschied zwischen -I
und -A
Denken Sie daran, dass Firewall-Regeln in der Reihenfolge geprüft werden, in der sie aufgelistet sind. Der Kernel stoppt die Verarbeitung der Kette, wenn eine Regel ausgelöst wird, die ein Paket oder eine Verbindung entweder zulässt oder nicht zulässt.
Ich denke, der häufigste Fehler für unerfahrene Firewall-Administratoren ist, dass sie die richtigen Anweisungen befolgen, um einen neuen Port zu öffnen, wie z. B. den folgenden:
[sudo] iptables -A INPUT -i eth0 -p tcp --dport 8080 -j ACCEPT
und stellen Sie dann fest, dass es nicht wirksam wird.
Der Grund dafür ist, dass die -A
Option fügt diese neue Regel nach allen bestehenden Regeln hinzu und da sehr oft die letzte Regel in der bestehenden Firewall eine war, die den gesamten Verkehr blockiert, der nicht ausdrücklich erlaubt ist, was zu
...
7 2515K 327M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
8 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
Oder gleichwertig in iptables-save:
...
iptables -A INPUT -j REJECT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
und die neue Regel, die den TCP-Port 8080 öffnet, wird niemals erreicht. (wie die Zähler belegen, die hartnäckig bei 0 Paketen und null Bytes bleiben).
Durch Einfügen der Regel mit -I
die neue Regel wäre die erste in der Kette gewesen und wird funktionieren.
2. Anzeige der aktuellen Firewall-Konfiguration
Meine Empfehlung für den Firewall-Administrator ist, sich die tatsächliche Konfiguration anzusehen, die der Linux-Kernel ausführt, anstatt zu versuchen, Firewall-Probleme mit benutzerfreundlichen Tools zu diagnostizieren. Sobald Sie die zugrunde liegenden Probleme verstanden haben, können Sie sie oft leicht in einer Angelegenheit lösen, die von diesen Tools unterstützt wird.
Der Befehl [sudo] iptables -L -v -n
ist dein Freund (obwohl einige Leute iptables-save
mögen besser). Bei Diskussionen über Konfigurationen ist es oft sinnvoll, den --line-numbers
zu verwenden Option auch zu Zahlenreihen. Der Verweis auf Regel #X macht die Diskussion etwas einfacher.
Hinweis: NAT-Regeln sind in iptables-save
enthalten ausgegeben, müssen aber durch Hinzufügen des -t nat
separat aufgeführt werden Option, d. h. [sudo] iptables -L -v -n -t nat --line-numbers
.
Das mehrmalige Ausführen des Befehls und das Überprüfen auf inkrementierende Zähler kann ein nützliches Werkzeug sein, um zu sehen, ob eine neue Regel tatsächlich ausgelöst wird.
[[email protected] ~]# iptables -L -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 784K 65M fail2ban-SSH tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 2789K 866M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 15 1384 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 44295 2346K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 40120 2370K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
6 16409 688K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443
7 2515K 327M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 25 packets, 1634 bytes)
num pkts bytes target prot opt in out source destination
Chain fail2ban-SSH (1 references)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 117.239.37.150 0.0.0.0/0 reject-with icmp-port-unreachable
2 4 412 REJECT all -- * * 117.253.208.237 0.0.0.0/0 reject-with icmp-port-unreachable
Alternativ die Ausgabe von iptables-save
gibt ein Skript, das die obige Firewall-Konfiguration regenerieren kann:
[[email protected] ~]# iptables-save
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [441:59938]
:fail2ban-SSH - [0:0]
-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A fail2ban-SSH -s 117.239.37.150/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-SSH -s 117.253.208.237/32 -j REJECT --reject-with icmp-port-unreachable
COMMIT
Es ist eine Frage der Präferenz, was für Sie leichter verständlich ist.
3. Interpretieren der Ausgabe von iptables -L -v -n
Die Richtlinie legt die Standardaktion fest, die die Kette verwendet, wenn keine explizite Regel zutrifft. Im INPUT
Kette, die auf AKZEPTIEREN des gesamten Datenverkehrs eingestellt ist.
Die erste Regel in der INPUT-Kette ist sofort interessant, sie sendet den gesamten Datenverkehr (Quelle 0.0.0.0/0 und Ziel 0.0.0.0/0) an TCP-Port 22 (tcp dpt:22
). ) der Standardport für SSH zu einem benutzerdefinierten Ziel (fail2ban-SSH
).Wie der Name schon sagt, wird diese Regel von fail2ban gepflegt (ein Sicherheitsprodukt, das unter anderem Systemprotokolldateien auf möglichen Missbrauch scannt und die IP-Adresse des Täters blockiert).
Diese Regel wäre von einer iptables-Befehlszeile ähnlich wie iptables -I INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
erstellt worden oder wird in der Ausgabe von iptables-save als -A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
gefunden . Oft finden Sie eine dieser Notationen in der Dokumentation.
Die Zähler zeigen an, dass diese Regel 784'000 Pakete und 65 Megabyte Daten abgeglichen hat.
Datenverkehr, der dieser ersten Regel entspricht, wird dann von fail2ban-SSH
verarbeitet Kette, die als Nicht-Standard-Kette unterhalb der OUTPUT-Kette aufgeführt wird.
Diese Kette besteht aus zwei Regeln, eine für jeden Missbraucher (Quell-IP-Adresse 117.253.221.166 oder 58.218.211.166), der (mit einem reject-with icm-port-unreachable
) blockiert wird ).
-A fail2ban-SSH -s 117.253.221.166/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-SSH -s 58.218.211.166/32 -j REJECT --reject-with icmp-port-unreachable
SSH-Pakete, die nicht von diesen blockierten Hosts stammen, sind noch weder erlaubt noch verboten und werden jetzt, da die benutzerdefinierte Kette abgeschlossen ist, anhand der zweiten Regel in der INPUT-Kette geprüft.
Alle Pakete, die nicht für Port 22 bestimmt waren, haben die erste Regel in der INPUT-Kette passiert und werden auch in INPUT-Regel Nr. 2 ausgewertet.
Die INPUT-Regel Nummer 2 bedeutet, dass dies eine statefull Firewall sein soll , das Verbindungen nachverfolgt. Das hat einige Vorteile, nur die Pakete für neue Verbindungen müssen gegen den vollständigen Regelsatz geprüft werden, aber sobald sie erlaubt sind, werden zusätzliche Pakete, die zu einer bestehenden oder verwandten Verbindung gehören, ohne weitere Prüfung akzeptiert.
Eingaberegel Nr. 2 stimmt mit allen offenen und verwandten Verbindungen überein, und Pakete, die mit dieser Regel übereinstimmen, müssen nicht weiter ausgewertet werden.
Hinweis: Regeländerungen in der Konfiguration einer Stateful Firewall wirken sich nur auf neue Verbindungen aus, nicht auf bestehende Verbindungen.
Im Gegensatz dazu testet ein einfacher Paketfilter jedes Paket anhand des vollständigen Regelsatzes, ohne den Verbindungsstatus zu verfolgen. In einer solchen Firewall kein Zustand Schlüsselwörter verwendet werden.
INPUT-Regel Nr. 3 ist ziemlich langweilig, der gesamte Datenverkehr wird mit dem Loopback verbunden (lo
oder 127.0.0.1) Schnittstelle ist erlaubt.
Die INPUT-Regeln 4, 5 und 6 werden verwendet, um die TCP-Ports 22, 80 und 443 (die Standardports für bzw. SSH, HTTP und HTTPS) zu öffnen, indem Zugriff auf NEUE Verbindungen gewährt wird (vorhandene Verbindungen werden bereits durch INPUT-Regel 2 zugelassen).
In einer zustandslosen Firewall würden diese Regeln ohne die Zustandsattribute erscheinen:
4 44295 2346K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
5 40120 2370K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
6 16409 688K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0
oder
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
Die letzte INPUT-Regel Nr. 7 ist eine Regel, die den gesamten Datenverkehr blockiert, dem in den INPUT-Regeln 1–7 KEIN Zugriff gewährt wurde. Eine ziemlich verbreitete Konvention:Alles, was nicht erlaubt ist, wird verweigert. Theoretisch hätte diese Regel weggelassen werden können, indem die Standardrichtlinie auf REJECT gesetzt wurde.
Untersuchen Sie immer die gesamte Kette.
4. Kenne deine Umgebung
4.1 . Die Einstellungen in einer Software-Firewall wirken sich nicht auf Sicherheitseinstellungen aus, die an anderer Stelle im Netzwerk verwaltet werden, d. h. trotz Öffnen eines Netzwerkdienstes mit iptables
Die unveränderten Zugriffskontrolllisten auf Routern oder anderen Firewalls in Ihrem Netzwerk blockieren möglicherweise weiterhin den Datenverkehr...
4.2 . Wenn kein Dienst zuhört, können Sie keine Verbindung herstellen und erhalten unabhängig von den Firewall-Einstellungen einen Verbindungsverweigerungsfehler. Deshalb:
- Bestätigen Sie mit
[sudo] netstat -plnut
, dass ein Dienst zuhört (auf der richtigen Netzwerkschnittstelle/IP-Adresse) und die Portnummern verwendet, die Sie erwarten oder verwenden Sie alternativss -tnlp
. - Falls Ihre Dienste noch nicht laufen sollen, emulieren Sie einen einfachen Listener mit zB netcat:
[sudo] nc -l -p 123
oderopenssl s_server -accept 1234 [options]
wenn Sie einen TLS/SSL-Listener benötigen (überprüfen Sieman s_server
für Optionen). - Stellen Sie sicher, dass Sie sich vom Server selbst verbinden können, d. h.
telnet <IP of Server> 123
oderecho "Hello" | nc <IP of Server> 123
oder beim Testen des TLS/SSL-gesicherten Dienstesopenssl s_client -connect <IP of Server>:1234
, bevor Sie dasselbe von einem entfernten Host aus versuchen.
4.3 . Machen Sie sich mit den von Ihren Diensten verwendeten Protokollen vertraut. Sie können Dienste, die Sie nicht ausreichend verstehen, nicht richtig aktivieren/deaktivieren. Zum Beispiel:
- wird TCP oder UDP oder beides verwendet (wie bei DNS)?
- Verwendet der Dienst einen festen Standardport (zum Beispiel so etwas wie TCP-Port 80 für einen Webserver)?
- wird alternativ eine dynamische Portnummer gewählt, die variieren kann (d.h. RPC-Dienste wie klassisches NFS, die sich bei Portmap registrieren)?
- berüchtigtes FTP verwendet sogar zwei Ports , sowohl eine feste als auch eine dynamische Portnummer, wenn sie für die Verwendung des passiven Modus konfiguriert ist...
- die Dienst-, Port- und Protokollbeschreibungen in
/etc/services
stimmen nicht unbedingt mit dem tatsächlichen Dienst überein, der einen Port verwendet.
4.4 . Der Kernel-Paketfilter ist nicht das einzige, was die Netzwerkkonnektivität einschränken kann:
- SELinux schränkt möglicherweise auch Netzwerkdienste ein.
getenforce
bestätigt, ob SELinux ausgeführt wird. - Obwohl TCP-Wrapper immer mehr in Vergessenheit geraten, sind sie immer noch ein mächtiges Werkzeug zur Durchsetzung der Netzwerksicherheit. Prüfen Sie mit
ldd /path/to/service |grep libwrap
und der/hosts.[allow|deny]
Steuerdateien.
5. INPUT
oder FORWARD
Ketten
Das Konzept der Ketten wird hier ausführlicher erklärt, aber kurz gesagt:
Die INPUT
In der Kette öffnen und/oder schließen Sie Netzwerkports für Dienste, die lokal auf dem Host ausgeführt werden, auf dem Sie die iptables-Befehle ausgeben.
Der FORWARD
In der Kette wenden Sie Regeln an, um den Datenverkehr zu filtern, der vom Kernel an andere Systeme, tatsächliche Systeme, aber auch Docker-Container und virtuelle Gastserver-Server weitergeleitet wird, wenn Ihr Linux-Computer als Bridge, Router, Hypervisor fungiert und/oder Netzwerkadressen übersetzt und Portweiterleitung.
Ein weit verbreiteter Irrglaube ist, dass, da ein Docker-Container oder KVM-Gast lokal läuft, die anzuwendenden Filterregeln in der INPUT-Kette stehen sollten, aber das ist normalerweise nicht der Fall.
6. Kernel-Module
Da der Paketfilter im Linux-Kernel läuft, kann er auch als dynamisches Modul kompiliert werden, eigentlich mehrere Module. Die meisten Distributionen enthalten Netfilter als Module und die erforderlichen Netfilter-Module werden nach Bedarf in den Kernel geladen, aber für einige Module muss ein Firewall-Administrator manuell sicherstellen, dass sie geladen werden. Dies betrifft in erster Linie die Connection-Tracking-Module wie nf_conntrack_ftp
die mit insmod
geladen werden kann .
Die aktuell in den laufenden Kernel geladenen Module können mit lsmod
angezeigt werden .
Die Methode, um sicherzustellen, dass Module über Neustarts hinweg dauerhaft geladen werden, hängt von der Linux-Distribution ab.
Lösung 2:
Iptables/Firewall "Einführung"
Eine Firewall ist im Grunde ein richtlinienbasierter Netzwerkfilter. Linux-Firewalls basieren auf Netfilter; das Netzwerkpaketverarbeitungs-Framework des Kernels, das aus mehreren Kernelmodulen besteht, die bestimmte Aufgaben ausführen:
- Das FILTER-Modul (standardmäßig immer geladen) ermöglicht uns hauptsächlich, IP-Pakete basierend auf bestimmten Übereinstimmungskriterien zu AKZEPTIEREN oder zu LÖSCHEN.
- Der NAT-Modulsatz ermöglicht uns die Durchführung von Network Address Translations (SNAT, DNAT, MASQUERADE).
- Das MANGLE-Modul ermöglicht es uns, bestimmte IP-Paketfelder (TOS, TTL) zu ändern.
Benutzer konfigurieren das Netfilter-Framework so, dass es ihren Firewall-Anforderungen entspricht, indem sie iptables von der Befehlszeile aus verwenden. Mit iptables definieren wir Regeln, die den Kernel anweisen, was mit IP-Paketen zu tun ist, wenn sie unsere Linux-Box erreichen, passieren oder verlassen. Sie haben mehrere spezifische Hook-Punkte auf der Netzwerkpaketflusskarte, an denen sie vom Kernel aufgerufen werden, um ihre Aufgaben zu erfüllen. und POSTROUTING. Es ist leicht zu merken, wenn wir eine TABELLE mit einem "Prozesstyp" und eine KETTE mit dem "Ort" auf der Netzwerkpaketflusskarte verknüpfen, wo Instanzen dieser Prozesse aufgerufen werden.
Da ein IP-Paket auf einer Netzwerkschnittstelle empfangen oder von einem lokalen Prozess erstellt wird, bis es endgültig zugestellt oder verworfen wird, testet die Netfilter-Engine nacheinander die Regeln, die in der Netzwerkpaketflusskarte enthalten sind, und wendet sie an. An jedem Block, der durch ein [email protected] gekennzeichnet ist, kann der Benutzer eine oder mehrere dieser aufeinanderfolgenden Regeln hinzufügen, die ein IP-Paket-Übereinstimmungskriterium und eine entsprechende Vorgehensweise enthalten. Es gibt Aktionen (z. B. ACCEPT, DROP usw.), die von mehr als einer TABLE ausgeführt werden können, und andere Aktionen (z. B. SNAT, DNAT usw.), die TABLE-spezifisch sind.
d.h. wenn ein IP-Paket von einer Netzwerkschnittstelle ankommt, wird es zuerst von der PREROUTING-Kette verarbeitet, die die benutzerdefinierten Regeln der MANGLE-Tabelle, falls vorhanden, aufruft. Wenn es keine Regeln gibt, die mit dem aktuellen Paket übereinstimmen, gilt die entsprechende Standardaktion oder "Richtlinie" von [email protected]. Wenn das Paket an diesem Punkt nicht verworfen wurde, wird der Prozess jetzt fortgesetzt, indem die Regeln der NAT-Tabelle in der PREROUTING-Kette aufgerufen werden (siehe Karte) und so weiter. Um das Regellayout zu vereinfachen, können Benutzer auch ihre eigenen benutzerdefinierten Ketten erstellen und von verschiedenen Punkten der Karte nach Belieben in sie "springen".
Während eingebaute Ketten benutzerdefinierte Richtlinien von entweder ACCEPT- oder DROP-Paketen haben können, haben benutzerdefinierte Ketten immer eine unveränderliche Standardrichtlinie von RETURN an den Aufrufer, um den Prozess fortzusetzen.
Iptables-Befehle
Die Hauptbefehle von iptables füllen die Netzwerkpaketflusskarte mit den erforderlichen Verarbeitungsregeln.
Die generische iptables-Regel kann wie folgt geschrieben werden:
# iptables <table> <Add/Insert/Delete> <CHAIN> <PKT_MATCHING_CRITERIA> <ACTION>
Es könnte wie folgt gelesen werden:
Netfilter (kernel module) please <Add/Insert/Delete> this rule for <table> at <CHAIN> where packets matching <PKT_MATCHING_CRITERIA> have to be <ACTION>ed
<table>
-t filter (the filter table is assumed when omitted)
-t nat
-t mangle
<Add/Insert/Delete>
-A (append rule at the end of the chain list)
-I (insert rule at the begining of the chain list)
-D (Delete rule)
<CHAIN>
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
USER_DEFINED_CHAIN
<PKT_MATCHING_CRITERIA>
ISO Level-2 matching:
-i [!] <if_name> or --in-interface [!] <if_name>
(OUTPUT and POSTROUTING chains cannot match on input interfaces)
-o [!] <if_name> or --out-interface [!] <if_name>
(INPUT and PREROUTING chains cannot match on output interfaces)
-mac-source [!] <xx-xx-xx-xx-xx-xx>
(OUTPUT and POSTROUTING chains cannot match on input interfaces)
ISO Level-3 matching:
-s [!] <src_ip> or --src [!] <src_ip> or --source [!] <src_ip>
-d [!] <dst_ip> or --src [!] <dst_ip> or --destination [!] <dst_ip>
ISO Level-4 matching:
-p [!] <prot_name> or --protocol [!] <prot_name> (udp|tcp|icmp)
Also available when ICMP protocol is defined
--icmp-type [!] <icmp_type>
Also available when UDP protocol is defined
--source-port [!] <udp_src_port> or --sport [!] <udp_src_port>
--destination-port [!] <udp_dst_port> or --dport [!] <udp_dst_port>
Also available when TCP protocol is defined
--source-port [!] <tcp_src_port> or --sport [!] <tcp_src_port>
--destination-port [!] <tcp_dst_port> or --dport [!] <tcp_dst_port>
--tcp-flags [!] <tcp_flags> (SYN|ACK|FIN|RST|URG|PSH|ALL|NONE)
--syn
--tcp-option [!] <tcp_option#>
--state [!] <state>
-m <match> [options]
note: [!] = negation operator
<ACTION> (also called TARGET)
-j ACCEPT (process continues with rules of the next table in map)
-j DROP (discard current packet)
-j REJECT (discard current packet with ICMP notification)
option:
--reject-with <reject_type>
-j USER_DEFINED_CHAIN (start traversing USER_DEFINED_CHAIN rules)
-j RETURN (return from USER_DEFINED_CHAIN)
-j LOG (log to syslog, then process next rule in table)
options:
--log-level <level>
--log-prefix <prefix>
--log-tcp-sequence
--log-tcp-options
--log-ip-options
--log-uid
nat table specific
-j SNAT (rewrite the source IP address of the packet)
option:
--to <ip_address>
-j SAME (idem SNAT; used when more than one source address)
options:
--nodst
--to <a1-a2>
-j MASQUERADE (idem SNAT; used when the replace IP is dynamic)
-j DNAT (rewrite the destination IP address of the packet)
option:
--to <ip_address>
-j REDIRECT (rewrite dst IP to 127.0.0.1, PREROUTING and OUTPUT only)
option:
–-to-port <port#>
mangle table specific
-j ROUTE (explicitly route packets, valid at PREROUTING)
options:
--iface <iface_name>
--ifindex <iface_idx>
-j MARK (set Netfilter mark values)
options:
--set-mark <value>
--and-mark <value>
--or-mark <value>
-j TOS (set the IP header Type of Service field)
option:
--set-tos <value>
-j DSCP (set the IP header Differentiated Services Field)
options:
--set-dscp <value>
--set-dscp-class <class>
-j TTL (set the IP header Time To Live field)
options:
--ttl-set <value>
--ttl-dec <value>
--ttl-inc <value>
Die iptables-Hilfsbefehle vervollständigen das Szenario, in dem Standardbedingungen, Listenregeln, Flush-Regeln usw. festgelegt werden.
#iptables -t <table> -L
(Lists the <table> rules in all chains)
#iptables -t <table> -L <CHAIN>
(Lists the <table> rules in <CHAIN>)
#iptables -t <table> -N <CHAIN>
(Creates a user-defined <CHAIN> for holding <table> rules)
#iptables -t <table> -E <CHAIN> <NEWCHAIN>
(Renames <CHAIN> that holds <table> rules to <NEWCHAIN>)
#iptables -t <table> -X
(Deletes all user-defined chains created for holding <table> rules)
#iptables -t <table> -X <CHAIN>
(Deletes user-defined <CHAIN> created for holding <table> rules)
#iptables -t <table> -P <CHAIN> <ACTION> where <ACTION> = ACCEPT|DROP
(Sets the default policy of <table> rules at <CHAIN> to <ACTION>)
#iptables -t <table> -F
(Flushes (deletes) all <table> rules in all chains)
#iptables -t <table> -F <CHAIN>
(Flushes (deletes) all <table> rules in <CHAIN>)
#iptables -t <table> -R <CHAIN> <INDEX> <NEWRULE>
(Replaces <table> rule at position <INDEX> in <CHAIN> with <NEWRULE>
Iptables lädt unsere Befehle zur Laufzeit in die Netfilter-Engine, Netfilter erzwingt sofort die geladenen Regeln und Einstellungen, aber sie sind nicht persistent. Nach einem Neustart gehen alle zuvor geladenen Netfilter-Regeln und -Einstellungen verloren. Aus diesem Grund gibt es iptables-Utilities, die es erlauben, den aktuell aktiven Regelsatz in einer Datei zu speichern und später wieder zu laden.
#iptables-save > fileName
(Save the currently active Netfilter ruleset to fileName)
#iptables-restore < fileName
(Restore Netfilter ruleset to the one saved in fileName)
IPtables-Zusammenfassung
Netfilter ist ein extrem flexibles und leistungsstarkes Framework, aber dafür muss man seinen Preis zahlen; Iptables ist komplex. Aus Benutzersicht passen bestimmte Begriffe wie TABLE, CHAIN, TARGET nicht wirklich gut zu dem Konzept, das sie repräsentieren, und machen zunächst nicht viel Sinn. Das Thema ist lang, Befehle scheinen eine endlose Liste von Parametern zu haben. Um die Sache noch schlimmer zu machen, gibt es kein einziges Buch, das Iptables wirklich beherrscht. Sie fallen meistens in zwei Kategorien:"Rezeptbuch" oder "Manpage-Buch". Ich denke, diese Einführung gibt Ihnen einen Schnappschuss der Netfilter/Iptables-Landschaft plus die notwendige Dosis an vorgefertigtem Manpage-Zeug. Wenn Sie neu bei iptables sind, werden Sie nach mehrmaligem Lesen dieser Abschnitte in der Lage sein, iptables-Beispiele zu lesen. Mit etwas Übung werden Sie bald feststellen, dass Sie Ihre eigenen Regeln schreiben.
Firewalls
Eine Firewall ist hauptsächlich darauf ausgelegt, Netzwerkverkehr basierend auf einer Reihe von Regeln dynamisch zuzulassen oder zu verweigern. An dieser Stelle ist leicht zu verstehen, warum das Linux-Framework Netfilter/Iptables perfekt für den Aufbau von Firewalls geeignet ist. Wenn wir uns die Netzwerkpaketflusskarte ansehen, finden wir zwei besonders interessante Punkte auf der FILTER-Tabelle bei den INPUT- und FORWARD-Ketten; Wir können dort über IP-Quelladresse, IP-Protokoll (UDP/TCP), Zielport (80, 21, 443 usw.) usw. entscheiden, ob wir ein bestimmtes IP-Paket AKZEPTIEREN, ABLEHNEN oder einfach VERLASSEN. Das macht eine Firewall in 80% der Fälle, wenn sie z. B. einen Webserver vor nicht autorisierten Netzwerkanfragen schützt. Die anderen 20 % der Zeit manipulieren (NAT, MANGLE) Netzwerkpakete.
Firewall-Szenarien
Es gibt Hunderte verschiedener Firewall-Layouts für unterschiedliche Anforderungen, aber 3 davon könnten als die typischsten Firewall-Szenarien angesehen werden.
- Einfacher Webserver mit einer oder mehreren Schnittstellen, die mit dem Internet verbunden sind. Die Richtlinie umfasst grundlegende Regeln, um eingeschränkten eingehenden Zugriff, uneingeschränkten ausgehenden Zugriff und Anti-Spoofing-Regeln zuzulassen. IP-Weiterleitung ist deaktiviert.
- Diese Firewall stellt eine Verbindung zum Internet und zu einem geschützten internen Bereich her. Die Richtlinie umfasst grundlegende Regeln, um eingeschränkten eingehenden Zugriff, uneingeschränkten ausgehenden Zugriff und Anti-Spoofing-Regeln zuzulassen. Da der geschützte Bereich private IP-Adressen verwendet, wird Quell-NAT benötigt. Die IP-Weiterleitung ist aktiviert.
- Diese Firewall verbindet sich mit dem Internet, einem internen geschützten und demilitarisierten Bereich. Die Richtlinie umfasst grundlegende Regeln, um eingeschränkten eingehenden Zugriff, uneingeschränkten ausgehenden Zugriff und Anti-Spoofing-Regeln zuzulassen. Da geschützte und DMZ-Bereiche private IP-Adressen verwenden, benötigen sie Quell- und Ziel-NAT. Die IP-Weiterleitung ist aktiviert.
Ich habe dies geschrieben für:http://www.vercot.com/~jeoss/howto/JeossEasyFirewall.html
Lösung 3:
Häufige Probleme mit verschiedenen Protokollen
DNS: DNS verwendet standardmäßig Port 53 UDP, aber Nachrichten, die nicht in ein einzelnes UDP-Datagramm passen, werden stattdessen über TCP übertragen (normalerweise Zonenübertragungen und dergleichen), was erfordert, dass auch Port 53 TCP geöffnet wird, wenn Sie einen Nameserver betreiben.
E-Mail: Viele Verbraucher-ISPs blockieren den SMTP-Verkehr (oder zumindest den Standardport TCP 25), was es unmöglich macht, E-Mails direkt zu empfangen oder zu senden, und ihre Kunden sind gezwungen, das SMTP-Relay des ISPs für alle ausgehenden E-Mails und manchmal auch für eingehende E-Mails zu verwenden. Bezieht sich auf §1.1.
FTP: FTP ist ein seltsames Protokoll, da zwei Verbindungen verwendet werden. Die erste ist die Steuerverbindung, standardmäßig lauscht ein FTP-Server auf TCP-Port 21. Die Steuerverbindung wird für die Authentifizierung und das Ausgeben von Befehlen verwendet. Die eigentlichen Dateiübertragungen und Dinge wie die Ausgabe einer Verzeichnisliste laufen über eine zweite TCP-Verbindung, die DATA-Verbindung . Bei aktivem FTP würde diese DATEN-Verbindung vom FTP-Server über TCP-Port 20 initiiert und mit dem FTP-Client verbunden. Aktives FTP funktioniert nicht allzu gut mit Benutzern hinter Firewalls und NAT-Gateways, sodass es größtenteils nicht mehr verwendet wird. Die meisten FTP-Server unterstützen stattdessen Passives FTP. Bei Passive FTP öffnet der FTP-Server einen Listener für die DATA-Verbindung auf einem zweiten Port, zu dem sich der FTP-Client dann verbinden kann. Das Problem für eine Firewall besteht darin, dass der DATA-Port jeder verfügbare nicht privilegierte Port zwischen 1024-65536 sein kann.
In einer zustandslosen Firewall wird dies normalerweise gelöst, indem die Anzahl der passiven Ports, die der FTP-Server zuweisen kann, eingeschränkt und diese Ports dann explizit geöffnet werden. d.h.
iptables -A INPUT -p tcp --match multiport --dports 21000:21050 -j ACCEPT
In einer Stateful Firewall müssen Sie den DATA-Port nicht explizit öffnen, das Netfilter-Hilfsmodul erkennt den zugewiesenen dynamischen Port und öffnet diesen Port dynamisch für den richtigen Client, indem es die DATA-Verbindung als RELATED
markiert Danach wird es mit der allgemeinen Regel übereinstimmen:
iptables -I INPUT -p tcp -m state ESTABLISHED,RELATED -j ACCEPT
Voraussetzung dafür ist das richtige Kernel-Modul geladen wird, im FTP-Fall manuell durch Ausführen von beispielsweise insmod nf_conntrack_ftp
, das dauerhaft zu machen, hängt vom Neustart ab, hängt von der Distribution ab.
Hinweis: Das FTP-Verbindungsverfolgungsmodul schlägt fehl, wenn FTP mit SSL verwendet wird, da die Kontrollverbindung verschlüsselt wird und nf_conntrack_ftp die PASV-Antwort nicht mehr lesen kann.
NFS und ähnliche RPC-Dienste: Das Problem bei RPC-Diensten besteht darin, dass sie konstruktionsbedingt keinen bestimmten festen Port verwenden. Sie können jeden verfügbaren Port nach dem Zufallsprinzip auswählen, der dann beim RPC-Portmap-Daemon registriert wird. Ein Client, der versucht, eine Verbindung herzustellen, fragt den Portmap-Daemon ab und verbindet sich dann direkt mit dem richtigen Port. Das löste das Problem, dass die reservierten Ports zur Neige gingen...
Aus Firewall-Sicht muss der TCP/UDP-Port 111 geöffnet werden und der aktuelle Port, den der RPC-Dienst derzeit verwendet. Das Problem des Öffnens eines solchen zufälligen Ports in einer Firewall wird normalerweise gelöst, indem der RPC-Dienst wie NFS eingeschränkt wird Server, um einen vordefinierten festen Port zu verwenden.