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":
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?
Antworten:
Von man iptables :
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.
quelle