Dies ist der Befehl ferm, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
ferm – ein Firewall-Regelparser für Linux
ZUSAMMENFASSUNG
Firma Optionen Eingabedatei
BESCHREIBUNG
Firma ist ein Frontend für iptables. Es liest die Regeln aus einer strukturierten Konfigurationsdatei
und ruft an iptables(8), um sie in den laufenden Kernel einzufügen.
FirmaZiel ist es, Firewall-Regeln einfach zu schreiben und leicht lesbar zu machen. Es versucht zu reduzieren
Die mühsame Aufgabe, Regeln aufzuschreiben, wird dem Firewall-Administrator dadurch erspart
mehr Zeit für die Entwicklung guter Regeln als für die ordnungsgemäße Umsetzung der Regel.
Um das zu erreichen, Firma verwendet eine einfache, aber leistungsstarke Konfigurationssprache, die dies ermöglicht
Variablen, Funktionen, Arrays, Blöcke. Es ermöglicht Ihnen auch, andere Dateien einzubinden
Sie können Bibliotheken häufig verwendeter Strukturen und Funktionen erstellen.
Firma, ausgesprochen „firm“, steht für „For Easy Rule Making“.
VORSICHT
Diese Handbuchseite tut es nicht Ich möchte Ihnen beibringen, wie Firewalling funktioniert und wie man gut schreibt
Regeln. Es gibt bereits genügend Dokumentation zu diesem Thema.
EINFÜHRUNG
Beginnen wir mit einem einfachen Beispiel:
Kette INPUT {
Proto-TCP AKZEPTIEREN;
}
Dadurch wird der vordefinierten Eingabekette eine Regel hinzugefügt, die alle TCPs abgleicht und akzeptiert
Pakete. Ok, machen wir es komplizierter:
Kette (INPUT OUTPUT) {
proto (udp tcp) AKZEPTIEREN;
}
Dadurch werden 4 Regeln eingefügt, nämlich 2 in der Ketteneingabe und 2 in der Kettenausgabe, Matching und
Akzeptiert sowohl UDP- als auch TCP-Pakete. Normalerweise würden Sie Folgendes eingeben:
iptables -A INPUT -p tcp -j ACCEPT
iptables -A OUTPUT -p tcp -j AKZEPTIEREN
iptables -A INPUT -p udp -j ACCEPT
iptables -A OUTPUT -p udp -j AKZEPTIEREN
Beachten Sie, wie viel weniger Tippen wir tun müssen? :-)
Im Grunde ist das alles, was dazu gehört, obwohl Sie es noch komplexer gestalten können.
Etwas zum Anschauen:
Kette INPUT {
Politik AKZEPTIEREN;
daddr 10.0.0.0/8 Proto-TCP-Port! ftp Jump Mychain Sport :1023 TOS 4 Sätze 8 Mark 2;
daddr 10.0.0.0/8 proto tcp dport ftp REJECT;
}
Mein Punkt hier ist, dass *Sie* schöne Regeln aufstellen, sie für Sie lesbar halten müssen und
andere, und es nicht zu einem Chaos machen.
Es würde dem Leser helfen, wenn die resultierenden Firewall-Regeln hier als Referenz aufgeführt würden.
Außerdem könnten Sie die verschachtelte Version mit besserer Lesbarkeit einbinden.
Versuchen Sie, mithilfe von Kommentaren zu zeigen, was Sie tun:
# Diese Zeile ermöglicht transparentes http-Proxying für das interne Netzwerk:
Proto-TCP, wenn eth0 daddr ! 192.168.0.0/255.255.255.0
dport http REDIRECT to-ports 3128;
Du wirst später dafür dankbar sein!
Kette INPUT {
Politik AKZEPTIEREN;
Schnittstelle (eth0 ppp0) {
# Notorius-Hackern den Zugriff verweigern, hierher zurückkehren, wenn keine Übereinstimmung vorliegt
Es wurde festgestellt, dass # die normale Firewall wieder aufnimmt
springe Bösewichte;
Protokoll TCP-Sprung fw_tcp;
Protokoll UDP-Sprung fw_udp;
}
}
Je mehr Sie nisten, desto besser sieht es aus. Stellen Sie sicher, dass die von Ihnen angegebene Reihenfolge korrekt ist
würde das nicht machen wollen:
Kette VORWÄRTS {
Proto! udp DROP;
proto tcp dport ftp AKZEPTIEREN;
}
weil die zweite Regel niemals zutreffen wird. Der beste Weg ist, zuerst alles anzugeben
erlaubt, und dann alles andere leugnen. Weitere gute Schnappschüsse finden Sie in den Beispielen.
Die meisten Leute machen so etwas:
Proto-TCP {
Port (
ssh http ftp
) AKZEPTIEREN;
Port 1024:65535 ! syn AKZEPTIEREN;
TROPFEN;
}
STRUKTUR OF A FIREWALL FILE
Die Struktur einer richtigen Firewall-Datei sieht aus wie vereinfachter C-Code. Nur ein paar
In Ferm-Konfigurationsdateien werden syntaktische Zeichen verwendet. Außer diesen besonderen
Zeichen, Ferm verwendet „Schlüssel“ und „Werte“, stellen Sie sich diese als Optionen und Parameter oder als vor
Variablen und Werte, was auch immer.
Mit diesen Worten definieren Sie die Eigenschaften Ihrer Firewall. Jede Firewall
besteht aus zwei Dingen: Überprüfen Sie zunächst, ob der Netzwerkverkehr bestimmte Bedingungen erfüllt, und
Zweitens, was mit diesem Verkehr zu tun ist.
Sie können Bedingungen angeben, die für das von Ihnen verwendete Kernel-Schnittstellenprogramm gültig sind.
wahrscheinlich iptables(8). Wenn Sie beispielsweise in iptables versuchen, TCP-Pakete abzugleichen,
du würdest sagen:
iptables --protocol tcp
In ferm wird dies zu:
Protokoll TCP;
Das bloße Eintippen in ferm bringt nichts, Sie müssen es ferm mitteilen (eigentlich müssen Sie es tun).
erzählen iptables(8) und der Kernel), was mit jedem Datenverkehr zu tun ist, der diese Bedingung erfüllt:
iptables --protocol tcp -j AKZEPTIEREN
Oder übersetzt in Firma:
Protokoll TCP AKZEPTIEREN;
Die ; Der Charakter steht am Ende jeder Ferm-Regel. Ferm ignoriert Zeilenumbrüche, also die
Das obige Beispiel ist identisch mit dem folgenden:
protokoll tcp
AKZEPTIEREN;
Hier ist eine Liste der Sonderzeichen:
; Dieses Zeichen schließt eine Regel ab.
Durch Semikolons getrennt können Sie mehrere Regeln in eine Zeile schreiben, obwohl dies der Fall ist
verringert die Lesbarkeit:
Protokoll TCP AKZEPTIEREN; Protokoll udp DROP;
{} Das Verschachtelungssymbol definiert einen „Block“ von Regeln.
Die geschweiften Klammern enthalten beliebig viele verschachtelte Regeln. Alle Spiele vor dem
werden auf diese übertragen.
Die schließende geschweifte Klammer schließt den Regelsatz ab. Sie sollten kein „;“ schreiben. nach
das, denn das wäre eine leere Regel.
Ejemplo:
Kette INPUT proto icmp {
ICMP-Typ-Echo-Anfrage ACCEPT;
TROPFEN;
}
Dieser Block zeigt zwei Regeln innerhalb eines Blocks, die beide mit irgendetwas zusammengeführt werden
davor, sodass Sie zwei Regeln erhalten:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -j DROP
Es kann mehrere Verschachtelungsebenen geben:
Kette INPUT {
Proto-ICMP {
ICMP-Typ-Echo-Anfrage ACCEPT;
TROPFEN;
}
daddr 172.16.0.0/12 ABLEHNEN;
}
Beachten Sie, dass die Regel „REJECT“ nicht von „proto icmp“ betroffen ist, obwohl dies nicht der Fall ist
';' nach der schließenden geschweiften Klammer. In iptables übersetzt:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp -j DROP
iptables -A INPUT -d 172.16.0.0/12 -j REJECT
$ Variabler Ausbau. Ersetzt „$FOO“ durch den Wert der Variablen. Siehe den Abschnitt
VARIABLEN .
& Funktionsaufruf. Siehe den Abschnitt FUNKTIONEN .
() Das Array-Symbol. Mithilfe der Klammern können Sie eine „Liste“ von Werten definieren
ist für den Schlüssel links davon anzuwenden.
Ejemplo:
Protokoll (tcp udp icmp)
Daraus ergeben sich drei Regeln:
... -p tcp ...
... -p udp ...
... -p icmp ...
Es können nur Werte „aufgelistet“ werden, daher ist Folgendes nicht möglich:
Proto-TCP (ACCEPT LOG);
aber du kannst das machen:
Kette (INPUT OUTPUT FORWARD) proto (icmp udp tcp) DROP;
(was neun Regeln zur Folge hat!)
Werte werden durch Leerzeichen getrennt. Das Array-Symbol ist sowohl links- als auch rechts-
assoziativ, im Gegensatz zum Verschachtelungsblock, der nur linksassoziativ ist.
" # " Das Kommentarsymbol. Alles, was diesem Symbol bis zum Ende der Zeile folgt, ist
ignoriert.
„Befehl“
Führen Sie den Befehl in einer Shell aus und fügen Sie die Prozessausgabe ein. Siehe den Abschnitt
Backticks .
'string'
Zitieren Sie eine Zeichenfolge, die Leerzeichen, das Dollarzeichen usw. enthalten kann.
LOG log-prefix ' Hey, das ist mein Log-Präfix!';
"string"
Zitieren Sie eine Zeichenfolge (siehe oben), Variablenreferenzen mit einem Dollarzeichen jedoch
bewertet:
DNAT zu „$myhost:$myport“;
Stichwörter
Im vorherigen Abschnitt haben wir bereits einige grundlegende Schlüsselwörter wie „Kette“ eingeführt.
„Protokoll“ und „AKZEPTIEREN“. Lassen Sie uns ihre Natur erkunden.
Es gibt drei Arten von Schlüsselwörtern:
· Standort Schlüsselwörter definieren, wo eine Regel erstellt wird. Beispiel: „Tabelle“, „Kette“.
· Spiel Schlüsselwörter führen einen Test aller passierenden Pakete durch. Die aktuelle Regel ist ohne
Wirkung, wenn eines (oder mehrere) der Spiele nicht bestanden werden. Beispiel: „proto“, „daddr“.
Auf die meisten Übereinstimmungen folgt ein Parameter: „proto tcp“, „daddr 172.16.0.0/12“.
· Ziel Schlüsselwörter geben an, was mit einem Paket geschehen soll. Beispiel: „AKZEPTIEREN“, „ABLEHNEN“,
"springen".
Einige Ziele definieren weitere Schlüsselwörter, um Details anzugeben: „REJECT Reject-with ICMP-
net-unreachable".
Jede Regel besteht aus a Standort und eine Ziel, plus eine beliebige Anzahl von Streichhölzer:
Tabellenfilter # Speicherort
proto tcp dport (http https) # Übereinstimmung
AKZEPTIEREN; # Ziel
Streng genommen gibt es eine vierte Art: Firma Schlüsselwörter (die Ferms internes steuern
Verhalten), aber sie werden später erklärt.
Kenngrößen
Viele Schlüsselwörter benötigen Parameter. Diese können als Literale, Variablenreferenzen oder angegeben werden
Listen (Arrays):
Proto udp
saddr $TRUSTED_HOSTS;
Proto-TCP-Port (http https ssh);
LOG log-prefix „funky wardriver warning:“;
Einige davon können negiert werden (Listen können nicht negiert werden):
proto !esp;
proto udp dport !domain;
Schlüsselwörter, die keine Parameter annehmen, werden durch ein vorangestelltes „!“ negiert:
Proto-TCP !syn;
Lesen Sie mehr iptables(8) um zu sehen, wo die ! kann verwendet werden.
BASIC SCHLÜSSELWÖRTER
Standort Schlüsselwörter
Domain [ip|ip6]
Legen Sie die Domäne fest. „ip“ ist die Standardeinstellung und bedeutet „IPv4“ (iptables). „ip6“ steht für IPv6
Unterstützung mit „ip6tables“.
Tabelle [filter|nat|mangle]
Gibt an, in welche Netfilter-Tabelle diese Regel eingefügt wird: „filter“ (Standard),
„nat“ oder „mangle“.
Kette [Kettenname]
Gibt die Netzfilterkette (innerhalb der aktuellen Tabelle) an, die diese Regel sein soll
eingefügt. Gängige vordefinierte Kettennamen sind „INPUT“, „OUTPUT“, „FORWARD“,
„PREROUTING“, „POSTROUTING“, je nach Tabelle. Siehe Netzfilter
Dokumentation für Details.
Wenn Sie hier eine nicht vorhandene Kette angeben, fügt ferm die Regel einer benutzerdefinierten Kette hinzu
mit diesem Namen.
Datenschutzrichtlinien [AKZEPTIEREN|ENTFERNEN|..]
Gibt die Standardrichtlinie für die aktuelle Kette an (nur integriert). Kann einer von sein
die eingebauten Ziele (ACCEPT, DROP, REJECT, ...). Ein Paket, das keinen Regeln entspricht
in einer Kette werden wie in der Richtlinie angegeben behandelt.
Um Unklarheiten zu vermeiden, geben Sie immer die Richtlinien aller vordefinierten Ketten an
ausdrücklich.
@subchain ["KETTENNAME"] { ... }
Funktioniert wie die normalen Blockoperatoren (also ohne @subchain Schlüsselwort), außer
zur Abwicklung, Integrierung, Speicherung und Firma Verschiebt Regeln innerhalb der geschweiften Klammern in eine neue benutzerdefinierte Kette. Der Name
für diese Kette wird von ferm automatisch gewählt.
In vielen Fällen ist dies schneller als nur ein Block, da der Kernel möglicherweise einen überspringt
riesiger Regelblock, wenn eine Vorbedingung falsch ist. Stellen Sie sich das folgende Beispiel vor:
Tabellenfilterkette INPUT {
saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) {
proto tcp dport (http https ssh) ACCEPT;
proto udp dport domain AKZEPTIEREN;
}
}
Dadurch werden 20 Regeln generiert. Wenn ein Paket ankommt, das die Nachricht nicht passiert traurig
übereinstimmen, prüft es dennoch alle 20 Regeln. Mit @subchain, diese Prüfung ist abgeschlossen
einmal, was zu einer schnelleren Netzwerkfilterung und einer geringeren CPU-Last führt:
Tabellenfilterkette INPUT {
saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) @subchain {
proto tcp dport (http https ssh) ACCEPT;
proto udp dport domain AKZEPTIEREN;
}
}
Optional können Sie den Namen der Unterkette definieren:
saddr (1.2.3.4 2.3.4.5 3.4.5.6) @subchain „foobar“ {
proto tcp dport (http https ssh) ACCEPT;
proto udp dport domain AKZEPTIEREN;
}
Der Name kann entweder ein in Anführungszeichen gesetztes String-Literal oder ein erweiterter Ferm-Ausdruck sein
wie zum Beispiel @cat("interface_", $iface) oder @substr($var,0,20).
Sie können dasselbe erreichen, indem Sie explizit eine benutzerdefinierte Kette deklarieren, aber Sie haben vielleicht das Gefühl
das mit @subchain erfordert weniger Tippen.
Grundlagen iptables Spiel Schlüsselwörter
Schnittstelle [Schnittstellenname]
Definieren Sie den Schnittstellennamen, Ihre externe Netzwerkkarte, z. B. eth0, oder eine Einwahlverbindung
ppp1 oder welches Gerät auch immer Sie für die Weiterleitung von Paketen verwenden möchten. Es ist gleichwertig
zum „-i“-Schalter hinzufügen iptables(8).
Außenfläche [Schnittstellenname]
Identisch mit Schnittstelle, nur zum Abgleichen der ausgehenden Schnittstelle für ein Paket, wie in
iptables(8).
Protokoll [Protokollname|Protokollnummer]
Derzeit werden vom Kernel TCP, UDP und ICMP bzw. deren jeweilige Versionen unterstützt
Zahlen.
saddr|daddr [Adressspezifikation]
Entspricht Paketen, die von der angegebenen Adresse (saddr) stammen oder auf die sie abzielt
die Adresse (daddr).
Beispiele:
saddr 192.168/8 AKZEPTIEREN; # (identisch mit dem nächsten:)
saddr 192.168.0.0/255.255.255.0 AKZEPTIEREN;
daddr meine.domain.com AKZEPTIEREN;
Fragment
Geben Sie an, dass nur fragmentierte IP-Pakete abgeglichen werden sollen. Wenn Pakete sind
größer als die maximale Paketgröße, die Ihr System verarbeiten kann (genannt „Maximum“)
Transmission Unit oder MTU) werden sie in Bits zerhackt und einzeln als gesendet
einzelne Pakete. Sehen ifconfig(8) Wenn Sie die MTU für Ihr System ermitteln möchten (die
Der Standardwert beträgt normalerweise 1500 Byte.
Fragmente werden häufig bei DOS-Angriffen verwendet, da es keine Möglichkeit gibt, sie zu finden
den Ursprung eines Fragmentpakets herauszufinden.
Sport|Sport [Port-Spezifikation]
Entspricht Paketen am angegebenen TCP- oder UDP-Port. „Sport“ entspricht der Quelle
port und dport entspricht dem Zielport.
Diese Übereinstimmung kann nur verwendet werden, nachdem Sie „Protokoll TCP“ oder „Protokoll UDP“ angegeben haben.
denn nur diese beiden Protokolle haben tatsächlich Ports.
Und einige Beispiele für gültige Ports/Bereiche:
dport 80 AKZEPTIEREN;
dport http AKZEPTIEREN;
dport ssh:http AKZEPTIEREN;
dport 0:1023 AKZEPTIEREN; # entspricht :1023
dport 1023:65535 AKZEPTIEREN;
syn Geben Sie an, dass das SYN-Flag in einem TCP-Paket mit dem gewohnten übereinstimmen soll
Bauen Sie neue TCP-Verbindungen auf. Hiermit können Sie eingehende Verbindungen identifizieren, und
Entscheiden Sie, ob Sie es zulassen möchten oder nicht. Pakete, die dieses Flag nicht haben, sind
wahrscheinlich von einer bereits hergestellten Verbindung, daher wird es als vernünftig angesehen
es ist sicher, diese durchzulassen.
Modulen [Modulname]
Laden Sie ein iptables-Modul. Die meisten Module bieten mehr passende Schlüsselwörter. Wir werden es schaffen
das später.
Grundlagen Ziel Schlüsselwörter
springen [Name der benutzerdefinierten Kette]
Springt zu einer benutzerdefinierten Kette. Wenn keine Regel in der benutzerdefinierten Kette übereinstimmt, kehrt Netfilter zurück
zur nächsten Regel in der vorherigen Kette.
realgoto [Name der benutzerdefinierten Kette]
Gehen Sie zu einer benutzerdefinierten Kette. im Gegensatz zu den springen Option, RÜCKKEHR wird die Verarbeitung nicht fortsetzen
in dieser Kette, sondern in der Kette, die uns anrief springen.
Das Schlüsselwort realgoto wurde während der Übergangszeit gewählt, weil goto
(bereits veraltet) war früher ein Alias für springen.
Akzeptieren Akzeptiert passende Pakete.
DROP Verwerfen Sie passende Pakete ohne weitere Ankündigung.
ABLEHNEN Lehnt passende Pakete ab, d. h. sendet ein ICMP-Paket an den Absender, der portiert ist.
standardmäßig nicht erreichbar. Sie können einen anderen ICMP-Typ angeben.
ABLEHNEN; # Standardmäßig ist icmp-port-unreachable
REJECT ablehnen-mit icmp-net-unreachable;
Geben Sie „iptables -j REJECT -h“ ein, um weitere Informationen zu erhalten.
RÜCKKEHR Beenden Sie die aktuelle Kette und kehren Sie zur aufrufenden Kette zurück (falls „jump
[custom-chain-name]“ wurde verwendet).
NOP Überhaupt keine Aktion.
ZUSÄTZLICH SCHLÜSSELWÖRTER
Netfilter ist modular aufgebaut. Module können zusätzliche Ziele und passende Schlüsselwörter bereitstellen. Die Liste
Die Anzahl der Netfilter-Module wächst ständig und ferm versucht, mit der Unterstützung dieser Module Schritt zu halten
alle. In diesem Kapitel werden Module beschrieben, die derzeit unterstützt werden.
iptables Spiel Module
Konto Kontoverkehr für alle Hosts im definierten Netzwerk/in der definierten Netzmaske. Dies ist einer der
Passen Sie Module an, die sich wie ein Ziel verhalten, d. h. Sie müssen meistens das verwenden NOP
Ziel.
Mod-Konto aname mynetwork aaddr 192.168.1.0/24 ashort NOP;
Adressentyp
Überprüfen Sie den Adresstyp. entweder Quelladresse oder Zieladresse.
mod addrtype src-type BROADCAST;
mod addrtype dst-type LOCAL;
Geben Sie „iptables -m addrtype -h“ ein, um weitere Informationen zu erhalten.
ah Überprüft den SPI-Header in einem AH-Paket.
mod ah ahspi 0x101;
mod ah ahspi ! 0x200:0x2ff;
Zusätzliche Argumente für IPv6:
mod ah ahlen 32 AKZEPTIEREN;
mod ah ahlen !32 AKZEPTIEREN;
mod ah ahres AKZEPTIEREN;
Kommentar Fügt einer Regel einen Kommentar mit bis zu 256 Zeichen hinzu, ohne dass dies Auswirkungen hat. Beachten Sie, dass
Im Gegensatz zu Ferm-Kommentaren ('#') wird dieser in „iptables -L“ angezeigt.
Mod-Kommentar Kommentar „Das ist mein Kommentar.“ AKZEPTIEREN;
Zustand
Entspricht, wenn ein Wert in /proc/net/ipt_condition/NAME 1 ist (Pfad ist
/proc/net/ip6t_condition/NAME für die IP6-Domäne).
mod Bedingung Bedingung (abc def) ACCEPT;
Mod-Bedingung Bedingung !foo ACCEPT;
connbytes
Übereinstimmung mit der Anzahl der Bytes oder Pakete einer Verbindung (oder einem der beiden Flüsse).
die die Verbindung bilden) bisher übertragen wurden, oder nach durchschnittlichen Bytes pro
Paket.
mod connbytes connbytes 65536: connbytes-dir beide connbytes-mode Bytes ACCEPT;
mod connbytes connbytes !1024:2048 connbytes-dir Reply connbytes-mode packets ACCEPT;
Gültige Werte für connbytes-dir: Original, antworten, beide; zum Connbytes-Modus:
Pakete, Bytes, avgpkt.
connlimit
Ermöglicht Ihnen, die Anzahl der parallelen TCP-Verbindungen zu einem Server pro zu beschränken
Client-IP-Adresse (oder Adressblock).
mod connlimit connlimit-above 4 REJECT;
mod connlimit connlimit-above !4 ACCEPT;
mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;
connmark
Überprüfen Sie das mit der Verbindung verknüpfte Markierungsfeld, das durch das CONNMARK-Ziel festgelegt wird.
Mod Connmark Mark 64;
Mod Connmark Mark 6/7;
Conntrack
Überprüfen Sie die Informationen zur Verbindungsverfolgung.
mod conntrack ctstate (ESTABLISHED RELATED);
mod conntrack ctproto tcp;
mod conntrack ctorigsrc 192.168.0.2;
mod conntrack ctorigdst 1.2.3.0/24;
mod conntrack ctorigsrcport 67;
mod conntrack ctorigdstport 22;
mod conntrack ctreplsrc 2.3.4.5;
mod conntrack ctrepldst ! 3.4.5.6;
mod conntrack ctstatus ASSURED;
mod conntrack ctexpire 60;
mod conntrack ctexpire 180:240;
Geben Sie „iptables -m conntrack -h“ ein, um weitere Informationen zu erhalten.
DCCP Überprüfen Sie die DCCP-spezifischen Attribute (Datagram Congestion Control Protocol). Das
Das Modul wird automatisch geladen, wenn Sie „Protokoll DCCP“ verwenden.
proto dccp sport 1234 dport 2345 AKZEPTIEREN;
proto dccp dccp-types (SYNCACK ACK) ACCEPT;
proto dccp dccp-types !REQUEST DROP;
proto dccp dccp-option 2 ACCEPT;
dscp Passen Sie das 6-Bit-DSCP-Feld innerhalb des TOS-Felds an.
mod dscp dscp 11;
mod dscp dscp-klasse AF41;
ecn Passen Sie die ECN-Bits eines IPv4-TCP-Headers an.
mod ecn ecn-tcp-cwr;
mod ecn ecn-tcp-ece;
mod ecn ecn-ip-ect 2;
Geben Sie „iptables -m ecn -h“ ein, um weitere Informationen zu erhalten.
esp Überprüft den SPI-Header in einem ESP-Paket.
mod esp espspi 0x101;
mod esp espspi ! 0x200:0x2ff;
eu64 „Dieses Modul entspricht dem EUI-64-Teil einer zustandslosen automatisch konfigurierten IPv6-Adresse.
Es vergleicht den EUI-64, der von der Quell-MAC-Adresse im Ethernet-Frame abgeleitet wurde
die unteren 64 Bits der IPv6-Quelladresse. Das Bit „Universal/Lokal“ ist jedoch nicht vorhanden
verglichen. Dieses Modul stimmt nicht mit anderen Link-Layer-Frames überein und ist nur in gültig
die PREROUTING-, INPUT- und FORWARD-Ketten.“
mod eui64 AKZEPTIEREN;
unscharf „Dieses Modul entspricht einer Ratenbegrenzung basierend auf einem Fuzzy-Logic-Controller [FLC].“
Mod Fuzzy Untergrenze 10 Obergrenze 20 AKZEPTIEREN;
hbh Entspricht dem Hop-by-Hop-Options-Header (ip6).
mod hbh hbh-len 8 AKZEPTIEREN;
mod hbh hbh-len !8 AKZEPTIEREN;
mod hbh hbh-opts (1:4 2:8) AKZEPTIEREN;
hl Entspricht dem Hop-Limit-Feld (ip6).
mod hl hl-eq (8 10) AKZEPTIEREN;
mod hl hl-eq !5 AKZEPTIEREN;
mod hl hl-gt 15 AKZEPTIEREN;
mod hl hl-lt 2 AKZEPTIEREN;
Helfer Überprüft, welches Conntrack-Hilfsmodul diese Verbindung verfolgt. Der Port kann sein
angegeben mit „-portnr“.
Mod-Helfer-Helfer IRC ACCEPT;
mod helper helper ftp-21 AKZEPTIEREN;
icmp Überprüfen Sie ICMP-spezifische Attribute. Dieses Modul wird automatisch geladen, wenn Sie es verwenden
„Protokoll ICMP“.
proto icmp icmp-type echo-request ACCEPT;
Diese Option kann auch in be verwendet werden ip6 Domain, obwohl dies so heißt icmpv6 in
ip6tables.
Verwenden Sie „iptables -p icmp „-h““, um eine Liste gültiger ICMP-Typen zu erhalten.
IP-Bereich Passen Sie einen Bereich von IPv4-Adressen an.
mod iprange src-range 192.168.2.0-192.168.3.255;
mod iprange dst-range ! 192.168.6.0-192.168.6.255;
IPv4-Optionen
Passen Sie IPv4-Header-Optionen wie Quellrouting, Aufzeichnungsroute, Zeitstempel usw. an
Router-Alarm.
mod ipv4options ssrr AKZEPTIEREN;
mod ipv4options lsrr ACCEPT;
mod ipv4options no-srr ACCEPT;
mod ipv4options !rr ACCEPT;
mod ipv4options !ts ACCEPT;
mod ipv4options !ra AKZEPTIEREN;
mod ipv4options !any-opt ACCEPT;
ipv6header
Entspricht dem IPv6-Erweiterungsheader (ip6).
mod ipv6header header !(hop frag) ACCEPT;
mod ipv6header Header (auth dst) ACCEPT;
Hashlimit
Ähnlich wie „Mod Limit“, bietet aber zusätzlich die Möglichkeit, pro Ziel oder pro Port hinzuzufügen
Grenzwerte werden in einer Hash-Tabelle verwaltet.
mod hashlimit hashlimit 10/Minute hashlimit-burst 30/Minute
Hashlimit-Modus dstip Hashlimit-Name foobar ACCEPT;
Mögliche Werte für hashlimit-mode: dstip dstport srcip srcport (oder eine Liste mit
mehr als eines davon).
Es gibt weitere mögliche Einstellungen, geben Sie dafür „iptables -m hashlimit -h“ ein
Dokumentation.
Länge Überprüfen Sie die Paketlänge.
Mod-Länge Länge 128; # genau 128 Bytes
Mod-Länge Länge 512:768; # Bereich
mod Länge Länge ! 256; # negiert
begrenzen Begrenzt die Paketrate.
Mod-Limit-Limit 1/Sekunde;
Mod-Limit-Limit 15/Minute Limit-Burst 10;
Geben Sie „iptables -m limit -h“ ein, um weitere Informationen zu erhalten.
mac Passen Sie die Quell-MAC-Adresse an.
mod mac mac-source 01:23:45:67:89;
Kennzeichen Gleicht Pakete basierend auf ihrem Netfilter-Markierungsfeld ab. Dies kann eine 32-Bit-Ganzzahl sein
zwischen 0 und 4294967295.
Mod-Markierung 42;
mh Entspricht dem Mobility-Header (Domäne ip6).
proto mh mh-type binding-update ACCEPT;
Multiport
Passen Sie eine Reihe von Quell- oder Zielports an (nur UDP und TCP).
Mod Multiport-Quellports (https ftp);
mod Multiport-Zielports (MySQL-Domäne);
Diese Regel hat gegenüber „dport“ und „sport“ einen großen Vorteil: Sie generiert nur eine Regel
für bis zu 15 Ports anstelle einer Regel für jeden Port.
nth Passen Sie jedes n'te Paket an.
mod nth alle 3;
Mod n-ter Zähler 5 alle 2;
Mod. n. Start 2 alle 3;
Mod n-ter Start 5 Paket 2 alle 6;
Geben Sie „iptables -m nth -h“ ein, um weitere Informationen zu erhalten.
osf Ordnen Sie Pakete je nach Betriebssystem des Absenders zu.
Mod OSF Genre Linux;
mod osf ! Genre FreeBSD TTL 1 Log 1;
Geben Sie „iptables -m osf -h“ ein, um weitere Informationen zu erhalten.
Eigentümer Überprüfen Sie die Informationen zum Paketersteller, nämlich Benutzer-ID, Gruppen-ID, Prozess-ID,
Sitzungs-ID und Befehlsname.
Mod-Besitzer UID-Besitzer 0;
Mod-Besitzer GID-Besitzer 1000;
Mod-Besitzer PID-Besitzer 5432;
Mod-Besitzer Sid-Owner 6543;
Mod-Besitzer cmd-Besitzer „sendmail“;
(„cmd-owner“, „pid-owner“ und „sid-owner“ erfordern keine speziellen Kernel-Patches
im Vanilla-Linux-Kernel enthalten)
physdev Entspricht dem physischen Gerät, auf dem ein Paket eingegangen ist oder das gerade verlassen wird
Maschine. Dies ist nützlich für überbrückte Schnittstellen.
mod physdev physdev-in ppp1;
mod physdev physdev-out eth2;
mod physdev physdev-is-in;
mod physdev physdev-is-out;
mod physdev physdev-is-bridged;
pkttype Überprüfen Sie den Pakettyp der Verbindungsschicht.
mod pkttype pkt-type unicast;
mod pkttype pkt-type Broadcase;
mod pkttype pkt-type Multicast;
Datenschutzrichtlinien Entspricht der IPsec-Richtlinie, die auf dieses Paket angewendet wird.
Mod Policy Dir Out Pol IPsec ACCEPT;
Mod-Richtlinie streng reqid 23 spi 0x10 proto ah AKZEPTIEREN;
Mod-Richtlinienmodus Tunnel tunnel-src 192.168.1.2 ACCEPT;
Mod-Richtlinienmodus Tunnel tunnel-dst 192.168.2.1 ACCEPT;
Mod-Richtlinie strikt nächste Anforderung 24 SPI 0x11 AKZEPTIEREN;
Beachten Sie, dass das Schlüsselwort deshalb wird auch als Kurzform von verwendet Protokoll
(eingebautes Match-Modul). Sie können diesen Konflikt beheben, indem Sie immer das long verwenden
Stichwort Protokoll.
psd Erkennen Sie TCP/UDP-Port-Scans.
mod psd psd-weight-threshold 21 psd-delay-threshold 300
psd-lo-ports-weight 3 psd-hi-ports-weight 1 DROP;
Aktie Implementiert Netzwerkkontingente durch Dekrementieren eines Bytezählers mit jedem Paket.
Mod-Quota-Kontingent 65536 AKZEPTIEREN;
zufällig Passen Sie einen zufälligen Prozentsatz aller Pakete an.
Mod-Zufallsdurchschnitt 70;
Reich Passen Sie den Routing-Bereich an. Nützlich in Umgebungen, die BGP verwenden.
Mod Realm Realm 3;
kürzlich Quell-IP-Adressen vorübergehend markieren.
Mod zuletzt eingestellt;
mod letzten rcheck Sekunden 60;
Mod hat kürzlich den Ressourcennamen „badguy“ festgelegt;
Mod zuletzt eingestellt rdest;
Mod kürzlich rcheck rsource name „badguy“ Sekunden 60;
Mod letztes Update Sekunden 120 Hitcount 3 RTTL;
Dieses Netfilter-Modul weist einen Designfehler auf: Obwohl es als Match implementiert ist
Modul verfügt es über ein zielähnliches Verhalten, wenn das Schlüsselwort „set“ verwendet wird.
<http://snowman.net/projects/ipt_recent/>
rt Passen Sie den IPv6-Routing-Header an (nur IP6).
mod rt rt-type 2 rt-len 20 AKZEPTIEREN;
mod rt rt-type !2 rt-len !20 ACCEPT;
mod rt rt-segsleft 2:3 AKZEPTIEREN;
mod rt rt-segsleft !4:5 ACCEPT;
mod rt rt-0-res rt-0-addrs (::1 ::2) rt-0-not-strict ACCEPT;
sctp Überprüfen Sie die SCTP-spezifischen Attribute (Stream Control Transmission Protocol). Das
Das Modul wird automatisch geladen, wenn Sie „protocol sctp“ verwenden.
proto sctp sport 1234 dport 2345 AKZEPTIEREN;
Nur Proto-Sctp-Chunk-Typen DATA:Be ACCEPT;
proto sctp chunk-types any (INIT INIT_ACK) ACCEPT;
proto sctp chunk-types !all (HEARTBEAT) ACCEPT;
Verwenden Sie „iptables -p sctp „-h““, um eine Liste gültiger Chunk-Typen zu erhalten.
kompensieren Überprüft die Quell- oder Ziel-IP/Port/MAC anhand eines Satzes.
Mod-Set set badguys src DROP;
Sehenhttp://ipset.netfilter.org/> für weitere Informationen.
Zustand Überprüft den Verbindungsverfolgungsstatus.
Mod-Zustandszustand INVALID DROP;
Mod-Zustandszustand (BEZOGEN) ACCEPT;
Geben Sie „iptables -m state -h“ ein, um weitere Informationen zu erhalten.
Statistik
Nachfolger von nth und zufällig, derzeit nicht dokumentiert in der iptables(8) Handbuchseite.
Mod-Statistikmodus Zufallswahrscheinlichkeit 0.8 AKZEPTIEREN;
Mod-Statistikmodus n-tes alle 5 Pakete 0 DROP;
Schnur Entspricht einer Zeichenfolge.
Mod-String string „foo bar“ ACCEPT;
Mod-String Algo KMP von 64 auf 128 Hex-String „deadbeef“ ACCEPT;
TCP Überprüft TCP-spezifische Attribute. Dieses Modul wird automatisch geladen, wenn Sie es verwenden
„Protokoll TCP“.
Proto-TCP-Sport 1234;
Proto-TCP-Port 2345;
Proto-TCP-TCP-Flags (SYN ACK) SYN;
Proto-TCP-TCP-Flags! (SYN ACK) SYN;
proto tcp tcp-flags ALL (RST ACK);
Proto-TCP-Syn;
Proto-TCP TCP-Option 2;
Proto-TCP-MSS 512;
Geben Sie „iptables -p tcp -h“ ein, um weitere Informationen zu erhalten.
tcpmss Überprüfen Sie das TCP-MSS-Feld eines SYN- oder SYN/ACK-Pakets.
mod tcpmss mss 123 AKZEPTIEREN;
mod tcpmss mss 234:567 AKZEPTIEREN;
Zeit Überprüfen Sie, ob die Ankunftszeit eines Pakets im angegebenen Bereich liegt.
Mod-Zeit Start 12:00;
Mod-Zeit Timestop 13:30;
Mod-Zeittage (Mo. Mi. Fr.);
Mod-Zeitdatumstart 2005:01:01;
Mod-Zeitdatumstart 2005:01:01:23:59:59;
Mod-Zeit datestop 2005:04:01;
Mod-Zeit MonatTag (30 31);
Mod-Zeit wochentags (Mi Do);
Mod-Zeit Start 12:00 UTC;
Mod-Zeit timestart 12:00 localtz;
Geben Sie „iptables -m time -h“ ein, um weitere Informationen zu erhalten.
tos Entspricht einem Paket mit dem angegebenen TOS-Wert.
mod tos tos Minimize-Cost AKZEPTIEREN;
mod tos tos !Normal-Service ACCEPT;
Geben Sie „iptables -m tos -h“ ein, um weitere Informationen zu erhalten.
ttl Entspricht dem TTL-Feld (Time to Live) im IP-Header.
mod ttl ttl-eq 12; # ttl gleich
mod ttl ttl-gt 10; # ttl größer als
mod ttl ttl-lt 16; # ttl kleiner als
u32 Vergleicht Rohdaten aus dem Paket. Sie können in einem Ferm mehr als einen Filter angeben
Liste; diese werden nicht in mehrere Regeln erweitert.
mod u32 u32 '6&0xFF=1' AKZEPTIEREN;
mod u32 u32 ('27&0x8f=7' '31=0x527c4833') DROP;
unrein Entspricht Paketen, die fehlerhaft oder ungewöhnlich erscheinen. Dieses Match hat kein weiteres
Parameter.
iptables Ziel Module
Die folgenden zusätzlichen Ziele sind in ferm verfügbar, sofern Sie sie aktiviert haben
Dein Kernel:
KLASSIFIZIEREN
Legen Sie die CBQ-Klasse fest.
CLASSIFY set-class 3:50;
CLUSTERIP
Konfigurieren Sie einen einfachen Cluster von Knoten, die eine bestimmte IP- und MAC-Adresse gemeinsam nutzen.
Verbindungen werden statisch zwischen den Knoten verteilt.
CLUSTERIP neuer Hashmodus sourceip Clustermac 00:12:34:45:67:89
Gesamtknoten 4 Lokalknoten 2 Hash-Init 12345;
CONNMARK
Legt den Netfilter-Markierungswert fest, der einer Verbindung zugeordnet ist.
CONNMARK-Setzmarke 42;
CONNMARK-Speichermarke;
CONNMARK-Wiederherstellungsmarke;
CONNMARK Save-Mark-Maske 0x7fff;
CONNMARK Restore-Mark-Maske 0x8000;
CONNSECMARK
Dieses Modul kopiert Sicherheitsmarkierungen von Paketen in Verbindungen (sofern nicht gekennzeichnet).
und von Verbindungen zurück zu Paketen (auch nur, wenn sie nicht gekennzeichnet sind). Typischerweise verwendet in
In Verbindung mit SECMARK ist es nur in der Mangle-Tabelle gültig.
CONNSECMARK speichern;
CONNSECMARK-Wiederherstellung;
DTA zu [IP-Adresse|IP-Bereich|IP-Port-Bereich]
Ändern Sie die Zieladresse des Pakets.
DNAT bis 10.0.0.4;
DNAT bis 10.0.0.4:80;
DNAT bis 10.0.0.4:1024-2048;
DNAT bis 10.0.1.1-10.0.1.20;
ECN Dieses Ziel ermöglicht es, bekannte ECN-Schwarze Löcher gezielt zu umgehen. Es kann nur
in der Mangle-Tabelle verwendet werden.
ECN ecn-tcp-remove;
HL Ändern Sie das Feld IPv6-Hop-Limit (nur IP6/Mangle).
HL HL-Set 5;
HL hl-dez 2;
HL hl-inc 1;
IPV4OPTSSTRIP
Entfernen Sie alle IP-Optionen aus einem Paket. Dieses Modul benötigt keine Optionen.
IPV4OPTSSTRIP;
LOG Protokollieren Sie alle Pakete, die dieser Regel entsprechen, im Kernel-Protokoll. Gehen Sie vorsichtig mit dem Protokoll um
Überschwemmung. Beachten Sie, dass es sich hierbei um ein „nicht terminierendes Ziel“ handelt, also um eine Regelüberschreitung
fährt mit der nächsten Regel fort.
LOG Warnung auf Protokollebene log-prefix „Sehen Sie sich das an:“;
LOG log-tcp-sequence log-tcp-options;
LOG log-ip-options;
MARK Legt das Netzfilter-Markierungsfeld für das Paket fest (eine 32-Bit-Ganzzahl zwischen 0 und
4294967295):
MARK Set-Marke 42;
MARK set-xmark 7/3;
MARKIEREN und markieren 31;
MARKIEREN oder-markieren 1;
MARK xor-mark 12;
MASQUERADE
Maskiert passende Pakete. Optional gefolgt von einem Port oder Portbereich für
iptables. Geben Sie als „123“, „123-456“ oder „123:456“ an. Der Portbereichsparameter
Gibt an, von welchen lokalen Ports maskierte Verbindungen stammen sollen.
MASKERADE;
MASQUERADE zu den Häfen 1234:2345;
MASQUERADE to-ports 1234:2345 zufällig;
SPIEGEL Experimentelles Demonstrationsziel, das die Quell- und Zielfelder umkehrt
im IP-Header.
SPIEGEL;
NETMAP Ordnen Sie ein ganzes Netzwerk einem anderen Netzwerk zu nat Tabelle.
NETMAP bis 192.168.2.0/24;
KEINE SPUR Deaktivieren Sie die Verbindungsverfolgung für alle Pakete, die dieser Regel entsprechen.
proto tcp dport (135:139 445) NOTRACK;
NFLLOG Pakete über Netlink protokollieren; Dies ist der Nachfolger von ULOG.
NFLOG nflog-group 5 nflog-prefix „Sehen Sie sich das an:“;
NFLOG nflog-range 256;
NFLOG nflog-Schwellenwert 10;
NFQUEUE Userspace-Warteschlangen erfordern nfnetlink_queue-Kernelunterstützung.
proto tcp dport ftp NFQUEUE queue-num 20;
WARTESCHLANGE Userspace-Warteschlangen, der Vorgänger von NFQUEUE. Alle Pakete landen in der Warteschlange 0.
Proto-TCP-Dport-FTP-Warteschlange;
UMLEITEN zu Häfen [Häfen]
Transparentes Proxying: Ändern Sie die Ziel-IP des Pakets an die Maschine
sich.
proto tcp dport http REDIRECT to-ports 3128;
proto tcp dport http REDIRECT to-ports 3128 random;
GLEICH Ähnlich wie SNAT, aber ein Client wird für alle seine derselben Quell-IP zugeordnet
Verbindungen.
GLEICH wie 1.2.3.4-1.2.3.7;
GLEICHE zu 1.2.3.8-1.2.3.15 Nicken;
GLEICHE zu 1.2.3.16-1.2.3.31 zufällig;
SECMARK Dies wird verwendet, um den Sicherheitsmarkierungswert festzulegen, der dem Paket zur Verwendung durch zugeordnet ist
Sicherheitssubsysteme wie SELinux. Es ist nur in der Mangle-Tabelle gültig.
SECMARK selctx "system_u:object_r:httpd_packet_t:s0";
SET [add-set|del-set] [Name einsetzen] [Flaggen)]
Fügen Sie die IP zum angegebenen Satz hinzu. Sehenhttp://ipset.netfilter.org/>
proto icmp icmp-type echo-request SET add-set badguys src;
SNAT zu [IP-Adresse|IP-Bereich|IP-Port-Bereich]
Ändern Sie die Quelladresse des Pakets.
SNAT auf 1.2.3.4;
SNAT zu 1.2.3.4:20000-30000;
SNAT zu 1.2.3.4 zufällig;
TCPMSS Ändern Sie den MSS-Wert von TCP-SYN-Paketen.
TCPMSS set-mss 1400;
TCPMSS clamp-mss-to-pmtu;
AGB Set-tos [Wert]
Setzen Sie das TCP-Paket-Typ-of-Service-Bit auf diesen Wert. Dies wird von verwendet
Was auch immer der Verkehrsplaner bereit ist, meistens Ihr eigener Linux-Rechner, aber vielleicht
mehr. Die ursprünglichen tos-Bits werden durch diesen Wert ausgeblendet und überschrieben.
TOS-Set-tos Maximize-Throughput;
AGB und-tos 7;
TOS oder-tos 1;
TOS xor-tos 4;
Geben Sie „iptables -j TOS -h“ ein, um weitere Informationen zu erhalten.
TTL Ändern Sie das TTL-Header-Feld.
TTL TTL-Set 16;
TTL TTL-Dez 1; # um 1 verringern
TTL ttl-inc 4; # um 4 erhöhen
ULOG Protokollieren Sie Pakete in einem Userspace-Programm.
ULOG ulog-nlgroup 5 ulog-prefix „Sehen Sie sich das an:“;
ULOG ulog-cprange 256;
ULOG ulog-qthreshold 10;
anderes DOMAINS
Seit Version 2.0, Firma unterstützt nicht nur ip und ip6, aber auch arp (ARP-Tabellen) und eb
(Ethernet-Bridging-Tabellen). Die Konzepte ähneln iptables.
Arptables Schlüsselwörter
Quell-IP, Ziel-IP
Entspricht der Quell- oder Ziel-IPv4-Adresse. Gleich wie traurig und Papa in England, ip
Domäne.
Quelle-Mac, Ziel-Mac
Entspricht der Quell- oder Ziel-MAC-Adresse.
Schnittstelle, Außenfläche
Eingabe- und Ausgabeschnittstelle.
h-Länge
Hardwarelänge des Pakets.
Kette INPUT h-Länge 64 AKZEPTIEREN;
Opcode Operationscode, Einzelheiten finden Sie im iptables(8).
Opcode 9 AKZEPTIEREN;
H-Typ Hardwaretyp.
h-Typ 1 AKZEPTIEREN;
Prototyp
Protokolltyp.
Prototyp 0x800 ACCEPT;
Mangeln
Die Schlüsselwörter mangle-ip-s, mangle-ip-d, mangle-mac-s, mangle-mac-d, mangle-target
kann zum ARP-Mangling verwendet werden. Sehen iptables(8) für Details.
ebtables Schlüsselwörter
deshalb Entspricht dem Protokoll, das den Frame erstellt hat, z. B IPv4 or PPP. Eine Liste finden Sie unter
/etc/ethertypes.
Schnittstelle, Außenfläche
Physische Ein- und Ausgabeschnittstelle.
logisch-in, logisch-aus
Die logische Bridge-Schnittstelle.
traurig, Papa
Entspricht der Quell- oder Ziel-MAC-Adresse.
Match Module
Die folgenden Match-Module werden unterstützt: 802.3, arp, ip, mark_m, pkttype, stp,
vlan, log.
Target Erweiterungen
Die folgenden Zielerweiterungen werden unterstützt: arpreply, dnat, mark, redirect,
schnapp.
Bitte beachten Sie, dass ein Konflikt zwischen --Markierung von dem mark_m Match-Modul
und -j Kennzeichen. Da beides mit dem Schlüsselwort ferm implementiert werden würde KennzeichenWir
Ich beschloss, dieses Problem zu lösen, indem ich den Namen des Ziels wie im anderen Fall in Großbuchstaben schrieb
Domänen. Das folgende Beispiel schreibt Markierung 1 in 2 um:
Markierung 1 Markierung 2;
Fortgeschritten MERKMALE
Variablen
In komplexen Firewall-Dateien ist es hilfreich, Variablen zu verwenden, um z. B. ein Netzwerk anzugeben
Geben Sie der Schnittstelle einen aussagekräftigen Namen.
Um Variablen festzulegen, schreiben Sie:
@def $DEV_INTERNET = eth0;
@def $PORTS = (http ftp);
@def $MORE_PORTS = ($PORTS 8080);
Im echten Ferm-Code werden Variablen wie alle anderen Schlüsselwortparameter verwendet:
Kette INPUT-Schnittstelle $DEV_INTERNET proto tcp dport $MORE_PORTS ACCEPT;
Beachten Sie, dass Variablen nur in Schlüsselwortparametern („192.168.1.1“, „http“); Sie
darf keine Ferm-Schlüsselwörter wie „proto“ oder „interface“ enthalten.
Variablen sind nur im aktuellen Block gültig:
@def $DEV_INTERNET = eth1;
Kette INPUT {
Proto-TCP {
@def $DEV_INTERNET = ppp0;
Schnittstelle $DEV_INTERNET dport http ACCEPT;
}
Schnittstelle $DEV_INTERNET DROP;
}
wird erweitert auf:
Kette INPUT {
Proto-TCP {
Schnittstelle ppp0 dport http ACCEPT;
}
Schnittstelle eth1 DROP;
}
Das „def $DEV_INTERNET = ppp0“ ist nur im „proto tcp“-Block gültig; der übergeordnete Block
Weiß immer noch „set $DEV_INTERNET = eth1“.
Include-Dateien sind etwas Besonderes – Variablen, die in einer eingebundenen Datei deklariert wurden, sind weiterhin in verfügbar
der aufrufende Block. Dies ist nützlich, wenn Sie eine Datei einbinden, die nur Variablen deklariert.
automatische Variablen
Einige Variablen werden intern von ferm gesetzt. Ferm-Skripte können sie wie alle anderen verwenden
variabel.
$DATEINAME
Der Name der Konfigurationsdatei relativ zum Verzeichnis, in dem ferm gestartet wurde.
$FILEBNAME
Der Basisname der Konfigurationsdatei.
$DIRNAME
Das Verzeichnis der Konfigurationsdatei.
$DOMAIN Die aktuelle Domäne. Einer von ip, ip6, arp, eb.
$TABLE Die aktuelle Netfilter-Tabelle.
$CHAIN Die aktuelle Netfilter-Kette.
$LINE Die Zeile des aktuellen Skripts. Es kann wie folgt verwendet werden:
@def &log($msg) = {
LOG log-prefix „rule=$msg:$LINE“;
}
.
.
.
&log("Protokollnachricht");
Funktionen
Funktionen ähneln Variablen, außer dass sie Parameter haben können und Folgendes bereitstellen
ferm-Befehle, keine Werte.
@def &FOO() = proto (tcp udp) dport domain;
&FOO() AKZEPTIEREN;
@def &TCP_TUNNEL($port, $dest) = {
Tabellenfilterkette FORWARD-Schnittstelle ppp0 proto tcp dport $port daddr $dest externalface eth0 ACCEPT;
Tabelle NAT-Kette PREROUTING-Schnittstelle ppp0 proto tcp dport $port daddr 1.2.3.4 DNAT zu $dest;
}
&TCP_TUNNEL(http, 192.168.1.33);
&TCP_TUNNEL(ftp, 192.168.1.30);
&TCP_TUNNEL((ssh smtp), 192.168.1.2);
Ein Funktionsaufruf, der einen Block (wie '{...}') enthält, muss der letzte Befehl in einem Ferm sein
Regel, dh es muss ein ';' folgen. Der '&FOO()'Beispiel enthält also keinen Block
Sie können nach dem Anruf „AKZEPTIEREN“ schreiben. Um dies zu umgehen, können Sie die Schlüsselwörter neu anordnen:
@def &IPSEC() = { proto (esp ah); Proto-UDP-Dport 500; }
Kette INPUT ACCEPT &IPSEC();
Backticks
Mit Backticks können Sie die Ausgabe eines externen Befehls verwenden:
@def $DNSSERVERS = `grep-Nameserver / Etc / resolv.conf | awk '{print $2}'`;
Kette INPUT proto tcp saddr $DNSSERVERS ACCEPT;
Der Befehl wird mit der Shell ausgeführt (/ Bin / sh), genau wie Backticks in Perl. Ferm tut es
Führen Sie hier keine Variablenerweiterung durch.
Die Ausgabe wird dann tokenisiert und als Ferm-Liste (Array) gespeichert. Zeilen beginnend mit „#“
werden ignoriert; Die anderen Zeilen können eine beliebige Anzahl von Werten enthalten, getrennt durch Leerzeichen.
Enthält
Die @enthalten Mit dem Schlüsselwort können Sie externe Dateien einschließen:
@include 'vars.ferm';
Der Dateiname ist relativ zur aufrufenden Datei, z. B. beim Einfügen von „von“.
/etc/ferm/ferm.conf, die obige Aussage beinhaltet /etc/ferm/vars.ferm. Variablen und
In einer eingebundenen Datei deklarierte Funktionen sind in der aufrufenden Datei weiterhin verfügbar.
das funktioniert innerhalb eines Blocks:
Kette INPUT {
@include 'input.ferm';
}
Wenn Sie ein Verzeichnis angeben (mit einem abschließenden „/“), werden alle Dateien in diesem Verzeichnis angezeigt
enthalten, alphabetisch sortiert:
@include 'ferm.d/';
Mit einem nachlaufenden Rohrsymbol, Firma führt einen Shell-Befehl aus und analysiert seine Ausgabe:
@include '/root/generate_ferm_rules.sh $HOSTNAME|'
Bedingte
Das Schlüsselwort @wenn führt einen bedingten Ausdruck ein:
@if $condition DROP;
Ein Wert wird genau wie in Perl als wahr ausgewertet: Null, leere Liste, leerer String sind falsch,
alles andere ist wahr. Beispiele für wahre Werte:
(ab); 1; 'foo'; (0 0)
Beispiele für falsche Werte:
(); 0; '0'; ''
Es gibt auch @anders:
@if $condition DROP; @else ABLEHNEN;
Beachten Sie das Semikolon vor dem @anders.
Es ist möglich, danach geschweifte Klammern zu verwenden @wenn or @anders:
@if $condition {
MARK Set-Marke 2;
ZURÜCK;
} @anders {
MARK Set-Marke 3;
}
Da die schließende geschweifte Klammer auch den Befehl abschließt, ist kein Semikolon erforderlich.
Es gibt kein @elsif, benutzen Sie @anders @wenn stattdessen.
Ejemplo:
@def $have_ipv6 = `test -f /proc/net/ip6_tables_names && echo 1 || echo`;
@if $have_ipv6 {
Domain IP6 {
# ....
}
}
Haken
Um benutzerdefinierte Befehle auszuführen, können Sie Hooks installieren:
@hook pre "echo 0 >/proc/sys/net/ipv4/conf/eth0/forwarding";
@hook post „echo 1 >/proc/sys/net/ipv4/conf/eth0/forwarding";
@hook blush "echo 0 >/proc/sys/net/ipv4/conf/eth0/forwarding";
Der angegebene Befehl wird über die Shell ausgeführt. „pre“ bedeutet, dass der Befehl vorher ausgeführt wird
Anwenden der Firewall-Regeln und „posten“ bedeutet, dass der Befehl anschließend ausgeführt wird. „bündige“ Haken
werden ausgeführt, nachdem ferm die Firewall-Regeln geleert hat (Option --flush). Sie können beliebige installieren
Anzahl der Haken.
EINGEBAUT FUNKTIONEN
Es gibt mehrere integrierte Funktionen, die für Sie nützlich sein könnten.
@eq(a,b)
Prüft zwei Werte auf Gleichheit. Beispiel:
@if @eq($DOMAIN, ip6) DROP;
@ne(a,b)
Ähnlich wie bei @eq prüft dies auf Ungleichheit.
@nicht(x)
Negiert einen booleschen Wert.
@resolve((hostname1 Hostname2 ...), [Typ])
Normalerweise werden Hostnamen von iptables aufgelöst. Um Ferm Hostnamen auflösen zu lassen, verwenden Sie die
Funktion @resolve:
saddr @resolve(my.host.foo) proto tcp dport ssh ACCEPT;
saddr @resolve((another.host.foothird.host.foo)) proto tcp dport openvpn ACCEPT;
daddr @resolve(ipv6.google.com, AAAA) proto tcp dport http ACCEPT;
Beachten Sie die doppelten Klammern in der zweiten Zeile: das innere Paar zum Erstellen einer Ferm-Liste,
und das äußere Paar als Funktionsparameterbegrenzer.
Der zweite Parameter ist optional und gibt den DNS-Eintragstyp an. Der Standardwert ist „A“.
Seien Sie vorsichtig mit aufgelösten Hostnamen in der Firewall-Konfiguration. DNS-Anfragen können das blockieren
Firewall-Konfiguration über einen längeren Zeitraum, wodurch der Computer angreifbar wird oder es zu einem Ausfall kommen kann.
@cat(a, b, ...)
Verketten Sie alle Parameter zu einer Zeichenfolge.
@substr(Ausdruck, Offset, Länge)
Extrahiert einen Teilstring aus dem Ausdruck und gibt ihn zurück. Das erste Zeichen hat den Offset 0. Wenn
OFFSET ist negativ und beginnt so weit vom Ende der Zeichenfolge entfernt.
@length(Ausdruck)
Gibt die Länge des Werts von EXPR in Zeichen zurück.
@basename(pfad)
Gibt den Basisnamen der Datei für einen bestimmten Pfad zurück (File::Spec::splitpath).
@Verzeichnisname(Pfad)
Gibt den Namen des letzten Verzeichnisses für einen bestimmten Pfad zurück, vorausgesetzt, die letzte Komponente ist ein
Dateiname (File::Spec::splitpath).
@ipfilter(Liste)
Filtert die IP-Adressen heraus, die offensichtlich nicht zur aktuellen Domäne passen. Das ist
nützlich, um gemeinsame Variablen und Regeln für IPv4 und IPv6 zu erstellen:
@def $TRUSTED_HOSTS = (192.168.0.40 2001:abcd:ef::40);
Domain (IP IP6) Kette INPUT {
saddr @ipfilter($TRUSTED_HOSTS) proto tcp dport ssh ACCEPT;
}
REZEPTE
Die ./Beispiele/ Das Verzeichnis enthält zahlreiche Ferm-Konfigurationen, die zum Starten verwendet werden können
eine neue Firewall. Dieser Abschnitt enthält weitere Beispiele, Rezepte und Tricks.
Einfach port Weiterleitung
Mit der Ferm-Funktion lassen sich Routineaufgaben schnell und einfach erledigen:
@def &FORWARD_TCP($proto, $port, $dest) = {
Tabellenfilterkette FORWARD-Schnittstelle $DEV_WORLD äußere Oberfläche $DEV_DMZ daddr $dest proto $proto dport $port ACCEPT;
Tabelle NAT-Kette PREROUTING Schnittstelle $DEV_WORLD daddr $HOST_STATIC proto $proto dport $port DNAT zu $dest;
}
&FORWARD_TCP(tcp, http, 192.168.1.2);
&FORWARD_TCP(tcp, smtp, 192.168.1.3);
&FORWARD_TCP((tcp udp), domain, 192.168.1.4);
Verbund Firma
Wenn der Zielcomputer nicht ausgeführt werden kann Firma aus irgendeinem Grund (vielleicht ein eingebettetes Gerät).
ohne Perl), können Sie die bearbeiten Firma Konfigurationsdatei auf einen anderen Computer kopieren und dort speichern Firma
Generieren Sie dort ein Shell-Skript.
Beispiel für OpenWRT:
ferm --remote --shell mywrt/ferm.conf >mywrt/firewall.user
chmod +x mywrt/firewall.user
scp mywrt/firewall.user mywrt.local.net:/ Etc /
ssh mywrt.local.net /etc/firewall.user
OPTIONAL
--noexec Führen Sie das nicht aus iptables(8) Befehle, aber stattdessen überspringen. Auf diese Weise können Sie
Analysieren Sie Ihre Daten und verwenden Sie sie --Linien um die Ausgabe anzuzeigen.
--spülen Löscht die Firewall-Regeln und setzt die Richtlinie aller Ketten auf ACCEPT. Firma
benötigt dazu eine Konfigurationsdatei, um zu bestimmen, um welche Domänen und Tabellen es sich handelt
betroffen.
--Linien Zeigt die Firewall-Zeilen an, die aus den Regeln generiert wurden. Sie werden angezeigt
kurz bevor sie ausgeführt werden, also wenn Sie Fehlermeldungen von erhalten iptables(8)
usw. können Sie sehen, welche Regel den Fehler verursacht hat.
--interaktiv
Wenden Sie die Firewall-Regeln an und bitten Sie den Benutzer um Bestätigung. Kehrt zum zurück
vorherigen Regelsatz, wenn innerhalb von 30 Sekunden keine gültige Benutzerantwort erfolgt (siehe
--Auszeit). Dies ist nützlich für die Remote-Firewall-Verwaltung: Sie können es testen
die Regeln, ohne Angst davor zu haben, sich auszusperren.
--Auszeit S If --interaktiv verwendet wird, führen Sie einen Rollback durch, wenn keine gültige Benutzerantwort vorliegt
nach dieser Anzahl von Sekunden. Der Standardwert ist 30.
--help Zeigt eine kurze Liste der verfügbaren Befehlszeilenoptionen an.
--Version Zeigt die Versionsnummer des Programms an.
--schnell Schnellmodus aktivieren: ferm generiert eine iptables-save(8)-Datei und installiert sie
mit iptables-restore(8). Das geht viel schneller, weil ferm ruft iptables(8)
Standardmäßig einmal für jede Regel.
Der Schnellmodus ist seitdem standardmäßig aktiviert Firma 2.0, diese Option wird nicht mehr unterstützt.
--langsam Deaktivieren Sie den Schnellmodus, dh ausführen iptables(8) für jede Regel und nicht verwenden
iptables-restore(8).
--Schale Generieren Sie ein Shell-Skript, das aufruft iptables-restore(8) und druckt es aus.
Impliziert --fast --lines.
--Fernbedienung Generieren Sie Regeln für einen Remote-Computer. Impliziert --noexec und --Linien. Kann sein
kombiniert mit --Schale.
--Domain {ip|ip6}
Behandeln Sie nur die angegebene Domäne. Firma Die Ausgabe kann leer sein, wenn die Domäne leer ist
nicht in der Eingabedatei konfiguriert.
--def '$name=Wert'
Überschreiben Sie eine in der Konfigurationsdatei definierte Variable.
Nutzen Sie ferm online über die Dienste von onworks.net
