Thread icmp-port-unreachable erzeugen (13 answers)
Opened by Nobody at 2021-08-19 14:20

Linuxer
 2021-08-22 20:58
#193554 #193554
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Nein, selbst wenn Du die IP hast, kann - meiner Meinung nach - Dein Perl-Skript da nichts sinnvolles ausrichten.

Damit ein "icmp-port-unreachable" Sinn ergibt, müssen verschiedene Informationen des ankommenden Paketes vorhanden sein. Das braucht mehr als nur die IP-Adresse. Der Kernel hat alle diese Informationen vorliegen. Daher definiert z.B. fail2ban die Regeln über iptables, damit die gewünschte Aktion vom Kernel ausgeführt wird.
Z.B. Regel: Wenn ein Paket von IP X zum Port Y ankommt, weise es ab mit einem "icmp port unreachable". Wenn jetzt ein Paket ankommt, auf das die Beschreibung passt, entnimmt der Kernel notwendige Infos aus diesem Paket und generiert damit die "icmp-port-unreachable" Meldung.

Wenn Dein Perl-Skript die IP hat und wenn es damit ein icmp-port-unreachable generieren würde, hätte es keinen Bezug zum originalen Paket, weil eben weitere Informationen fehlen. Damit wäre solch ein icmp-Paket für den Absender sinnfrei (weil es keiner Verbindung bzw. keinem Verbindungsaufbau zuzuordnen ist) und damit unbedeutend und zu verwerfen.

Dann muss ein solches Paket in engem zeitlichen Abstand zum ankommenden Paket generiert werden. Wie bekommt das Perl-Skript etwas davon mit, wann ein Paket ankommt, auf das ein icmp Paket generiert werden soll.


Damit Dein Perl-Skript selber einen Bezug herstellen kann, müsste es selber auf den zu überwachenden Ports lauschen. Und dann eben anhand von zu definierenden Parametern (z.B. Absender-IP) entsprechende Aktionen auslösen.

Z.B. Gültige IP == Weiterreichen an die eigentliche Applikation (die dann auf einem anderen Port oder einer anderen IP lauschen muss) oder ungültige IP == icmp-port-unreachable zurücksenden. Dafür müsstest Du Dir die Socket-Programmierung mit Perl anschauen. Inwieweit das von mir beschriebene überhaupt machbar ist, weiß ich nicht.
Im Prinzip müsstest Du also eine Proxy-Funktionalität in Perl nachbilden, in der Du die entsprechende Logik nachbildest.

Meine Meinung:
  • ich erkenne keinen Sinn in der gewünschten Aktion und vermute einen Denkfehler in Deinem Konzept.
  • Da Du nicht näher darauf eingehst und auch die Nachfrage nach genauerer Erläuterung ignoriert hast, muss das wohl so bestehen bleiben.
  • Ich könnte es mir maximal als Übungsaufgabe vorstellen; aber dann wäre der Denkfehler immer noch vorhanden.
  • Ich würde das nicht produktiv einsetzen, sondern auf etablierte Lösungen zurückgreifen und dann eher diese mit Perl steuern (Kernel und iptables, für Proxy-Dienste eher squid oder apache). Muss man halt schauen, was die jeweils leisten und ob die gewünschte Funktion damit machbar wäre.
  • fail2ban zeigt da meiner Meinung nach schon den korrekteren Ansatz.
  • Ansonsten schaue Dir den Themenkomplex Socket-Programmierung mit Perl an; siehe Perldoc:IO::Socket
  • Vielleicht hilft auch ein zu installierendes Perl Modul bei Deinem Vorhaben: CPAN:Net::RawIP


Viele Glück und Erfolg.

Linuxer
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread icmp-port-unreachable erzeugen