Erstellen einer IPTABLES-Kette, deren Regeln ignoriert werden, sofern das Paket nicht von einem bestimmten Port stammt?

Erstellen einer IPTABLES-Kette, deren Regeln ignoriert werden, sofern das Paket nicht von einem bestimmten Port stammt?

Ich möchte Folgendes bestätigen. Wenn ich eine Kette erstelle, deren erste Regel lautet:

iptables -I INPUT -p tcp -m multiport --dports 25,465 -j name

Bedeutet das, dass alle weiteren in der Kette angegebenen Regeln nicht überprüft werden, es sei denn, das Paket stammt von diesen Ports?

Ich verwende fail2banund habe einen Filter mit einer Sperrregel erstellt, die Port 25, 465, mit angibt -m multiport --dports 25,465. Dieser Filter hat jedoch letztendlich eine so große Anzahl von Regeln erstellt, dass der ksoftirqdProzess gelegentlich viel CPU-Leistung verbrauchte und das Netzwerk langsam wurde. Mir ist aufgefallen, dass dies auftrat, wenn auf dem Server viele E/A-Vorgänge auf anderen Ports stattfanden.

Ich gehe davon aus, dass jedes Paket alle Regeln in meiner Kette überprüft hat. Ich hoffe, dass ich dies vermeiden kann, indem ich die erste oben gezeigte Regel hinzufüge, sodass Pakete, die nicht an die Ports 25 und 465 gesendet werden, sich nicht die Mühe machen, die restlichen Regeln in dieser Kette zu überprüfen. Wenn dies nicht der Fall ist, wäre ich für jede andere mögliche Lösung dankbar.

Antwort1

Nicht „von“, sondern „bis“. --dportsListenZielPorts. Die Regel, wie Sie sie geschrieben haben, bedeutet: „Wenn das Paket an meinen Dienst gesendet wurde, der auf TCP-Port 25 oder 465 lauscht, verarbeiten Sie es in der Kette name.“ Wie es verarbeitet wird, hängt vom Inhalt dieser Kette ab. Wenn es keinem entsprichtletzte Aktion( ACCEPT, REJECT, DROP) Regel in dieser Kette, oder wenn sie mit einer Regel mit der RETURNAktion übereinstimmt, wird ihre Verarbeitung in der aufrufenden Kette ( INPUT) mit der dieser folgenden Regel fortgesetzt.

Standardmäßig fail2banwird eine Kette und eine Regel erstellt, die die Kette nur für Pakete aufruft, die an einen bestimmten Port gerichtet sind (es sei denn, Sie verwenden ...-allportseine Aktion, die nicht die Standardeinstellung ist). In diese Kette wird für jede gesperrte IP eine DROP-Regel eingefügt. So werden beispielsweise Webserverpakete nicht zur Verarbeitung an die für das sshdbereitgestellte Jail erstellte Kette gesendet. Daher ist das absichtliche „Ausschließen“ bestimmter Ports von der Fail2ban-Verarbeitung auf die von Ihnen vorgeschlagene Weise nicht produktiv; so funktioniert es bereits.

Um die Erstellung einer Kette mit zu vielen Regeln mit fail2ban zu vermeiden, untersuchen Sieipset-bezogene Aktionen. Anstatt eine Kette zu erstellen, f2b-jailnamewird eineIP-Adresse festgelegtund eine einzelne Regel, die auf das IP-Set zutrifft. Jede gesperrte IP wird dem IP-Set hinzugefügt, anstatt eine separate Regel in der Kette zu erstellen. Das IP-Set hat die Komplexitätseigenschaft O(1), was bedeutet, dass seine Verarbeitungsgeschwindigkeit nicht von der Anzahl der darin enthaltenen Elemente abhängt; es kann bis zu 65536 Elemente enthalten.

Um dies zu verwenden, müssen Sie kurz gesagt die Standardeinstellungen für Ihre Jails überschreiben . Sie sollten niemals banaction = iptablesdie banaction = iptables-ipsetvon der Distribution bereitgestellten Konfigurationsdateien ändern. Erstellen Sie stattdessen /etc/fail2ban/jail.localeine Datei, in der Sie Ihre Überschreibungen hinzufügen:

[postfix]
bantime = 1h
enabled = true
banaction = iptables-ipset

postfix(Dabei wird der bereitgestellte Mailfilter verwendet und auf alle smtpdDienste des Typs reagiert. Wenn Sie einen anderen Mailserver verwenden, passen Sie ihn entsprechend an.)

Eine weitere Möglichkeit, eine bessere Firewall-Effizienz zu erreichen, ist der EinsatznftablesFramework statt iptables. Es verfügt über Funktionen von IP-Setsintegriert, und Sie können es mit fail2ban verwenden, indem Sie verwenden banaction = nftables. Der Effizienzgewinn für große Mengen ist ungefähr der gleiche.

verwandte Informationen