netfilter / iptables: warum nicht die rohe Tabelle verwenden?

22

Unter Linux verwenden wir normalerweise die "Filter" -Tabelle, um eine allgemeine Filterung durchzuführen:

iptables --table filter --append INPUT --source 1.2.3.4 --jump DROP
iptables --table filter --append INPUT --in-interface lo --jump ACCEPT

Gemäß dem folgenden Netzfilter-Flussdiagramm durchlaufen die Pakete zuerst die Tabelle "raw":

Bildbeschreibung hier eingeben

So können wir schreiben:

iptables --table raw --append PREROUTING --source 1.2.3.4 --jump DROP
iptables --table raw --append PREROUTING --in-interface lo --jump ACCEPT
  • die pakete werden schneller bearbeitet, ohne dass conntrack + mangle + nat + routing durchlaufen werden muss. So wird etwas weniger CPU / Speicher verbraucht (und dies wird wiederum durch die Tatsache, dass das iptable_raw-Modul geladen werden muss, leicht kompensiert)
  • Nur eine Regel, falls die Box auch ein Router ist (wird natürlich nicht für alle Regeln in Ordnung sein), da für Filter / Forward nicht dieselbe Regel hinzugefügt werden muss

Ich habe nur Schnelltests gemacht, und das funktioniert einwandfrei.
Die gefundenen Dokumentationen beschreiben immer die rohe Tabelle, die in strengen Fällen verwendet werden soll. Aber keine gibt auch nur die kleinste Rechtfertigung.

Frage: Gibt es Gründe, die rohe Tabelle nicht zu verwenden, abgesehen von dogmatischen?

Gregory MOUSSAT
quelle
Wenn Sie einfach den gesamten Datenverkehr von bestimmten IP-Adressen löschen möchten, ist die Basistabelle in Ordnung. Allerdings ist das Firewalling oft etwas feinkörniger, sodass Sie am Ende einige unformatierte Regeln und einige Filterregeln haben. Dies macht die Wartung zu einem Problem, und die Vereinfachung ist ein paar CPU-Zyklen wert.
Wurtel
1
Wenn es nur ein Problem mit Kopfschmerzen ist, denke ich, sollten wir einige Beispiele finden, die sich auf die rohe Tabelle beziehen. Da dies nicht der Fall ist, ist die Kopfschmerztheorie wahrscheinlich nicht der Hauptfaktor.
Gregory MOUSSAT
1
Der Autor von ipset empfiehlt, die Basistabelle für ipset iptables rules zu verwenden. Ipset.netfilter.org/tips.html
Stuart Cardall

Antworten:

17

Von man iptables :

raw: This table is used mainly for configuring exemptions from connection
     tracking in combination with the NOTRACK target. It registers at the
     netfilter hooks with higher priority and is thus called before
     ip_conntrack, or any other IP tables.
     It  provides the following built-in chains:

     - PREROUTING (for packets arriving via any network interface)
     - OUTPUT (for packets generated by local processes)

Analyse :

Die RAW-Tabelle befindet sich also vor conntrack und wurde mit dem Ziel erstellt, die NOTRACK-Markierung für Pakete zu setzen, die Sie nicht in netfilter verfolgen möchten.

Die -j-Ziele sind nicht nur auf NOTRACK beschränkt. Sie können also Pakete in der Basistabelle mit den Vorteilen eines geringeren CPU- / Speicherverbrauchs filtern.

In den meisten Fällen müssen Server nicht alle Verbindungen überwachen. Sie müssen nur nachverfolgen, wenn Sie Pakete in iptables basierend auf zuvor eingerichteten Verbindungen filtern müssen. Auf Servern, die nur einen einfachen Zweck erfüllen, beispielsweise wenn nur Port 80 (und möglicherweise 21) geöffnet ist, ist dies nicht erforderlich. In diesen Fällen können Sie die Verbindungsnachverfolgung deaktivieren.

Wenn Sie jedoch versuchen, einen NAT-Router auszuführen, werden die Dinge etwas kompliziert. Um etwas zu NAT zu machen, müssen Sie diese Verbindungen nachverfolgen, damit Sie Pakete vom externen Netzwerk an das interne Netzwerk übermitteln können.

Wenn eine ganze Verbindung mit NOTRACK eingerichtet wurde, können Sie auch keine verwandten Verbindungen verfolgen. Conntrack- und Nat-Helfer funktionieren einfach nicht für nicht überwachte Verbindungen, und auch keine verwandten ICMP-Fehler. Sie müssen sich also manuell dafür öffnen. Bei komplexen Protokollen wie FTP, SCTP und anderen kann dies sehr schwierig zu handhaben sein.

Anwendungsfälle :

Ein Beispiel wäre, wenn Sie einen stark frequentierten Router haben, auf dem Sie den eingehenden und ausgehenden Datenverkehr, aber nicht den gerouteten Datenverkehr durch eine Firewall schützen möchten. Dann könnten Sie die NOTRACK-Markierung zum Ignorieren des weitergeleiteten Verkehrs setzen, um Rechenleistung zu sparen.

Ein weiteres Beispiel für die Verwendung von NOTRACK ist, dass Sie, wenn Sie einen stark frequentierten Webserver haben, eine Regel festlegen können, nach der die Überwachung von Port 80 für alle IP-Adressen in lokalem Besitz oder für diejenigen, die tatsächlich den Webverkehr bedienen. Anschließend können Sie alle anderen Dienste mit Statusstatus verfolgen, mit Ausnahme des Webverkehrs, durch den auf einem bereits überlasteten System Verarbeitungsleistung eingespart werden kann.

Beispiel -> Ausführen eines Semi-Stateless-Linux-Routers für ein privates Netzwerk

Fazit : Es gibt keinen triftigen Grund, die RAW-Tabelle nicht zu verwenden, aber es gibt einige Gründe, vorsichtig zu sein, wenn Sie das NOTRACK-Ziel in der RAW-Tabelle verwenden.

Facundo Victor
quelle