Reduzieren Sie die Firewall-Regeln um die Hälfte - eine Iptables-Regel für TCP und UDP

12

Ich habe eine Reihe von iptables-Regeln in meiner Firewall, die folgendermaßen aussehen:

iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT

Gibt es eine Verknüpfung für zwei Regeln - eine für TCP und eine für UDP - für jede Adresse? Ich meine, kann ich so etwas machen:

iptables -A zone_lan_forward -p tcp,udp -d 1.2.3.0/24 -j ACCEPT
Big McLargeHuge
quelle

Antworten:

22

Erstellen Sie eine neue Kette, die alle TCP- und UDP-Pakete akzeptiert, und springen Sie von den einzelnen zulässigen IP / Port-Regeln zu dieser Kette:

iptables -N ACCEPT_TCP_UDP
iptables -A ACCEPT_TCP_UDP -p tcp -j ACCEPT
iptables -A ACCEPT_TCP_UDP -p udp -j ACCEPT

iptables -A zone_lan_forward -d 1.2.3.0/24 -j ACCEPT_TCP_UDP

Dies erhöht den Overhead einiger zusätzlicher Zeilen, halbiert jedoch die Anzahl der TCP / UDP-Regeln.

Ich würde das Argument nicht auslassen -p, da Sie nicht nur die Firewall für ICMP öffnen, sondern auch jedes andere Protokoll. Von der Manpage zu iptables auf -p:

Das angegebene Protokoll kann eines von tcp, udp, icmp oder all sein, oder es kann ein numerischer Wert sein, der eines dieser Protokolle oder ein anderes darstellt. Ein Protokollname aus / etc / protocol ist ebenfalls zulässig.

Sie können nicht auf alle Protokolle mit Ausnahme von TCP, UDP und ICMP horchen jetzt , aber wer weiß , was die Zukunft bringen mag. Es wäre eine schlechte Praxis, die Firewall unnötig offen zu lassen.

Haftungsausschluss: Die iptables-Befehle befinden sich auf meinem Kopf. Ich habe keinen Zugang zu einer Box, an der ich sie am Geldautomaten testen kann.

s.co.tt.
quelle
Dies ist eine sehr elegante Lösung, bei der die Firewall nicht unnötig geöffnet bleibt.
Big McLargeHuge
4
Diese Methode zum Erstellen einer neuen Kette schlägt jedoch fehl, wenn die Filterung über die Zielportnummer erfolgt. Kann jemand vorschlagen, wie man das oben erwähnte Problem löst?
Amor
@Amor In diesem Beispiel wird möglicherweise das erreicht, wonach Sie suchen, wenn Sie -p allin allen --dportRegeln der zone_lan_forwardKette verwendet haben. Ich gehe natürlich davon aus, dass es aufgrund der ACCEPT_TCP_UDPKette keinen anderen Weg gibt, mit einem Nicht-TCP / UDP-Protokoll in diese Kette zu gelangen. Offensichtlich ist dies eine riskante Strategie, wenn mehrere Personen Zugriff auf Änderungsregeln haben und jemand vorbeikommt und Ihre Regeln bearbeitet, ohne diese Subtilität zu verstehen.
Samuel Harmer
Hoppla. Ich habe die Reihenfolge der Ketten nicht bemerkt. Sie müssten auch in diesem Beispiel die Reihenfolge der Ketten ändern, damit das, was ich gerade gesagt habe, richtig funktioniert. Also ACCEPT_TCP_UDPspringt zu zone_lan_forwarddem dann springt zu ACCEPT.
Samuel Harmer
2

Wenn Sie sich nicht wirklich für den ICMP-Verkehr interessieren (den Sie ohnehin global mit einer Regel blockieren können), können Sie das Flag -p einfach weglassen und alle Protokolle abdecken.

Nathan C.
quelle
Sollte ich mich um ICMP-Verkehr kümmern? Ich beschäftige mich hauptsächlich mit dem HTTP-Zugriff.
Big McLargeHuge
Nicht wirklich. Sie können ICMP (Ping) blockieren, wenn Sie möchten, aber da es ohnehin HTTP-Verkehr bedient, macht es nicht viel Sinn.
Nathan C
@ NathanC, ich denke, der Rat, ALLE Ports zu öffnen, wenn das OP fragt, wie seine Regeln halbiert werden sollen, kann jetzt oder in Zukunft zu Problemen führen.
Jed Daniels
@JedDaniels Der Schalter -p gibt die Protokolle und nicht die Ports an. Die Antwort unten hat eine Alternative, wenn sie etwas anderes als tcp & udp sperren möchten.
Nathan C
@NathanC Ja, und das Entfernen von -p bedeutet "alle Protokolle öffnen, nicht nur tcp oder udp", was rücksichtslos, wenn nicht gefährlich ist.
Jed Daniels