Hi ho,
ich habe ein Problem, daß mich noch in den Wahnsinn treibt.
Seit kurzem habe ich mir eine Firewall installiert (Tiny Firewall). Ich habe versucht alles so gut wie es geht einzuschränken, aber aus der services.exe (ich habe w2k) werde ich nicht ganz schlau.
Ich brauche diese Datei nur um DNS Auflösungen durchzuführen (Port 53, soweit ich weiß). Also habe ich die Regel eingestellt, daß dieses Programm alles über Port 53 machen darf (für incomming, als auch outgoing). Für simple DNS lookups müßte das doch reichen, oder ?
Hatte ich zumindest gedacht. Er sendet auf Port 53 was raus (OK darf er ja), aber der Nameserver sendet auf irgendeinem Port (1000 - 3000 ungefähr) was zurück.
Jetzt endlich die Frage: Ist es richtig, daß die Nameserver sich den Antwortsports selber aussuchen ? (Kann ich mir nicht vorstellen, denn dann müsste ich alle incoming Ports erlauben, was nicht so prickelnd ist)
Wer hat dieses Problem auch schon gehabt, bzw. eine Lösung dafür.
Gruß
PandoraX
Heimnetzwerke - WIFI, LAN, Router und Co 16.538 Themen, 81.400 Beiträge
ja und nein..ja, es stimmt, daß irgendein port genommen wird um zu kommunizieren und nein, du mußt nicht alle incoming freigeben. du unterliegst auch einem irrtum wenn du denkst dein rechner sendet die anfrage vom eigenen port 53 aus, dein rechner sendet auf einem beliebigen port raus, aber auf port 53 des servers, dabei ist zu beachten, daß sowohl tcp als auch udp genutzt wird von dns.
jede firewall ist zumindest ein statefull packet filter, es sei denn es handelt sich nur um einen portblocker (sorry, mit tiny hab ich keinerlei erfahrungen). ein statefull packet filter analysiert die einkommenden ip-pakete durch ihren header, in dem quellip, zielip ausgangsport, zielport und noch einiges mehr enthalten ist.
kurze erklärung..dein rechner schickt ne dns anfrage raus an port 53 eine dsn-servers mit gesetztem syn-bit und bittet um eine verbindung auf...der server sendet zurück mit den syn-ack bit und bietet einen kommunilationsport an, deine firewall sieht das paket, liest, daß sie von der ip kommt an die gesendet wurde von port soundso an port 53 und lässt das paket als antwort durch, dein os liest das paket, akzieptiert den angebotenen port (im normalfall) und schickt ein paket mit dem gesetzten ack-bit wieder an den dns zurück, deine firewall analysiert wieder und hält diesen socket offen.
ungefähr so läuft das ganze in den meisten fällen, aber eben nicht in allen ;o)
Dank dir für die antwort,
ich habe mir sowas schon fast gedacht, wollte es aber nicht wahrhaben ;-)
mit tiny habe ich etwas rumprobiert. es läuft nur wenn ich für die services.exe (die für die dns auflösung zuständig ist) local alle ports erlaube und auf dem remote system nur den port 53 (für in- als auch outgoing).
die einstellung ist zwar nicht ganz das was ich wollte, aber es schein ja anders leider nicht zu gehen, obwohl ich immer noch nicht ganz verstehe, warum bei mir nicht die anfrage auch vom port 53 gestartet wird. wieso ist dieser port dynamisch ?
Gruß PandoraX
hm...ich glaube du solltest dir mal ein paar artikel über protokolle durchlesen, du scheinst nämlich noch einen grundlegenden aber verbreiteten denkfehler zu machen. ports sind irgendwie immer dynamisch und beliebig. es gibt nur der einfachheit halber die vereinbarung, daß bestimmte protokolle kontakt über bestimmte ports aufnehmen, sie können aber auch beliebige andere ports belegen, nur weiß halt dann der client nicht, auf welchen port er kontaktieren muss. aber genausogut könnte der dns-server auf port 5300 abhören. außerdem findet nur die kontaktaufnahme auf dem port statt, nach dem ACK wird auch vom server aus auf einem freien port weiter kommuniziert. mal ein beispiel:
dein rechner nimmt kontakt mit nem webserver auf. er startet eine verbindungsanfrage von port xxxx auf port 80 des servers, outbound traffic (das heißt ausgehender verkehr) von deinem rechner auf die ip des servers muß in der firewall erlaubt sein.
auf dem http-server geht die anfrage ein, inbound traffic auf dem dns (eingehender verkehr) von deiner ip aus muß auf dem dns erlaubt sein. der server schaut welche verbindungen er schon offen hat und sucht sich nen freien unprevelegierten port (sprich einen port über 1023) den er für die verbindung nutzen will, schickt das angebot des ports zu (SYN-ACK) dir. die firewall hat entweder inbound vom server schon als regel zulassen in der tabelle, oder sieht daß es die antwort auf eine intern abgesendete anfrage ist und lässt die verbindung von port yyyy, den der server angeboten hat, zu port xxxx bei dir zu, was dein client nochmal per ACK bestätigt. von nun an erfolgt der datenaustausch von xxxx nach yyyy. ein neuer socket ist erstellt. das ganze dient dazu den port 80 des http-servers wieder frei zu machen, um auf neue verbindungen zu lauschen, da er ansonsten durch den traffic mit dir blockiert wäre für neue verbindungsversuche anderer clients...das ganze öffnet natürlich ein paar lücken die für nette attacken (SYN_FLOOD, IP_SPOOF) genutzt werden können.
noch ein netter ms-bug...wenn du nun im internet surfst und eine verbindung zu einem webserver hast, dabei einen netstat -a durchführst und es analysierst wird dir auffallen, daß die verbindung von deinem port xxxx an port 80 des servers angezeigt wird, und zwar permanent. das ist aber falsch...ist ein alter ms-bug im ip-stack, der nie behoben wurde. es wird immer nur der ursprungsport angezeigt, was auch zu dem verbreiteten irrtum führt, daß der gesamte traffic des servers auf dem 80er port stattfindet....
so...genug getippt..ich hoffe du kannst damit was anfangen...
hui das war eine ausführliche antwort ... vielen dank ! jetzt hab ichs wohl verstanden.
du schreibst ein webserver würde den port 80 nur für den verbindungsaufbau nutzen und dann den port wechseln. das kann nicht sein, denn ich habe für den ie dir regel festgelegt, daß er nur über port 80 kommunizieren darf.
es können auch mehrere clients gleichzeitig auf einem port datenaustauschen. ich habe schon ein chat server + client programmiert, da war das auch kein problem (jeder client connectete sich zum gleichen serverport).
ich habe den netstat befehl benutzt und du hast recht. die lokalen port, von dennen die verbindungen aufgemacht werden sind wirklich zufällig gewählt.
Gruß PandoraX
das du ihm vorgibst nur über port 80 zu kommunizieren bedeutet aber nur, daß der verbindugsaufbau darüber erfolgt. alles weitere erfolgt dynamisch, und wenn du ne firewall drauf hast akzieptiert sie auch den portwechsel, da es ja ein genehmigter socket ist. mittels eines sniffers könntest du das mal genauer überprüfen.
ich werde es ausprobieren. nochmal vielen dank für deine hilfe.
ich habs getestet .. bei http bleibt er auf port 80
das einzige wo mir sowas bekannt ist, ist ftp. port 21 meist steuerung und ein hoher port ist der datenkanal.
Genau !!!
Bei Firewalls muss man eben zwischen der Richtung des Verbindungsaufbaus und
der Senderichtung der Pakete unterscheiden. Bei einer DNS-Anfrage ins Internet
ist der Verbindungsaufbau "Outgoing" ,die Pakete laufen zwangsläufig aber in
beiden Richtungen (Man benötigt ja auch eine Antwort auf seine Anfrage :-)
Gruß von Dino
Dir auch Danke für die Antwort, obwohl ich glaube, daß Du meine Frage nicht verstanden hast ;-)
Gruß PandoraX