[server] port knocking
Ik ben KiTTY aan het configureren en bij het onderdeel "Connection" kun je een "Port knocking sequence" invoeren. Nu vraag ik me af wat port knocking precies is en hoe dat werkt. Ik heb gelezen dat het lijkt alsof je SSH-poort dichtstaat, maar dat die door op een bepaalde manier te "kloppen" opengaat. Kan iemand me uitleggen hoe zoiets werkt? Wat houdt het in, en hoe stel je zo'n sequence dan in? Weet iemand dat toevallig?
Het heeft verder weinig met de ssh-server te maken daar het 2 verschillende verhalen zijn. Het port knocking verhaal is het aantal keren dat deze ssh-client probeert een connectie met de voorgedefinieerde server te maken, gaat dit mis, houdt het op.
Zo uit mijn hoofd, kun je 5x een verbinding met een ssh-server proberen te maken, Klopt na 5x de gebruikersnaam of het wachtwoord niet wordt je gebanned & is het einde oefening.
Meer informatie is te vinden in een /etc/ssh/sshd_config (Linux) of Google op een sshd_config.
Gewijzigd op 25/01/2015 09:19:57 door Yoop Overmaat
Toevoeging op 25/01/2015 12:33:45:
Verder zou je even moeten google-n op 'putty port knocking' voor wat uitleg en waarom het putty-team dat niets vindt
>> Het heeft verder weinig met de ssh-server te maken daar het 2 verschillende verhalen zijn.
Dat klopt, maar het was enkel even een introductie-verhaaltje hoe ik bij dat port knocking terecht kwam.
>> Verder zou je even moeten google-n op 'putty port knocking' voor wat uitleg en waarom het putty-team dat niets vindt
Dit heb ik gelezen inderdaad, maar ik heb er ook positieve reacties over gelezen. Je SSH-poort is namelijk niet meer zichtbaar. Vandaar dat ik benieuwd ben hoe het nu eigenlijk werkt.
Ik kon zo gauw geen plaatje van KiTTY vinden, maar hier van een vergelijkbaar programma in een vreemde taal. Maar rechts onderin zie je dus dat je een port knocking sequence kan invoeren. Nu zie ik daar verschillende getallen staan: 3333.tcp, 9999:udp enz. Wat houdt dat in?
Nu kan je in KiTTY dus ook zo'n sequence invoeren. Maar stel dat mijn PHP-editor dat niet ondersteunt, dan kan ik daar dus niet meer mee inloggen als ik het goed begrijp?
Gewijzigd op 25/01/2015 14:54:00 door Ozzie PHP
"In computer networking, port knocking is a method of externally opening ports on a firewall by generating a connection attempt on a set of prespecified closed ports. Once a correct sequence of connection attempts is received, the firewall rules are dynamically modified to allow the host which sent the connection attempts to connect over specific port(s). A variant called Single Packet Authorization exists, where only a single "knock" is needed, consisting of an encrypted packet.[1][2][3]"
Als je die uitleg combineert net een een komma gescheiden lijst van string in het formaat <nummer>.<tcp/udp> dan snap ik niet hoe iemand het niet kan snappen. Tenzij hij/zij niet weet wat TCP en UDP is, maar daar is googe/wikipedia ook voor te raadplegen.
Het komt neer op een secret knock zoals je in films wel eens ziet: je wordt alleen binnen gelaten als je op de juiste manier op de deur klopt.
"Nu kan je in KiTTY dus ook zo'n sequence invoeren. Maar stel dat mijn PHP-editor dat niet ondersteunt, dan kan ik daar dus niet meer mee inloggen als ik het goed begrijp?"
Putty laat je tunnels opzetten, ik neem aan KiTTY ook.
Wat betekend dat je je PHP editor naar localhost kan wijzen. Welke port hang er van af op welke port je de tunnel hebt opgezet.
Gewijzigd op 25/01/2015 17:28:06 door Dos Moonen
>> Het komt neer op een secret knock zoals je in films wel eens ziet: je wordt alleen binnen gelaten als je op de juiste manier op de deur klopt.
Oké. Maar klop je dan een paar keer op dezelfde SSH poort, waarna die poort opengaat? Of klop je op verschillende poorten waarna de SSH poort opengaat?
>> Putty laat je tunnels opzetten, ik neem aan KiTTY ook.
Ja, ik kan tunnels instellen, maar ik heb hier (nog) geen ervaring mee.
>> Wat betekend dat je je PHP editor naar localhost kan wijzen. Welke port hang er van af op welke port je de tunnel hebt opgezet.
Kun je dit principe eens uitleggen? In mijn editor kan ik een SFTP verbinding maken, moet ik die nu dan naar localhost laten verwijzen? En log ik dan via de editor in of via KiTTY (PuTTY)?
Sorry, wellicht voor jou een rare vraag, maar voor mij is dit geen gesneden koek en ik heb zoiets nooit eerder gedaan.
Toevoeging op 26/01/2015 00:07:33:
En oh ja ... hoe weet de server dan eigenlijk op welke sequence ie moet reageren?
Secret knock:
Stuur een packet via port 3333 met het TCP protocol.
Stuur een packet via port 9999 met het UDP protocol.
Stuur een packet via port 1010 met het UDP protocol.
Stuur een packet via port 8675 met het TCP protocol.
Breng een SSH (of wat dan ook) verbinding tot stand.
"En oh ja ... hoe weet de server dan eigenlijk op welke sequence ie moet reageren?"
De server's firewall moet support hebben voor port knocking voor zover ik het begrijp.
Tunnels voor zover ik ze begrijp (en versimpelt):
Een utility verbind met de opgegeven server op de opgegeven port.
De zelfde utility gaat op jouw pc luisteren naar de andere opgegeven port.
Packets die het lokaal ontvangt stuurt het het op die bestaande verbinding door naar de externe server. Packets die het ontvangt van de externe server stuurt het door via de lokale verbinding.
De utility logt dus in op de externe server.
PS. ja, ik weet dat de P in TCP en UDP voor Protocol staat
Helaas zonder de plaatjes:
In de linker kolom van het putty/ kitty connectie scherm klik je SSH open.
Klik op Tunnels
vul daar in bij Source port 3306
en bij Destination localhost:3306
klik Add
crol in de balk terug naar boven en klik op Session
Kies een leuke naam om de verbinding op te slaan. (MYNAME)
en kies SAVE.
Daarna kun je in het grote vlak dubbelklikken op de naam, of de button Open kiezen.
Er wordt een ssh verbinding opgebouwd.
De tunnel zorgt dat wat je op je pc op poort 3306 aanspreekt, doorgeleid wordt naar de server.
(als je het leuk vindt, kun je ook poort 3399 (door die bij Source Port in te vullen ) doorverbinden naar 3306 op de server. Dat geeft je de mogelijkheid om tegelijk op meerdere remote servers te werken.)
Werkt ook voor andere poorten, zoals voor ftp, DNS etc etc.
@Dos:
>> De server's firewall moet support hebben voor port knocking voor zover ik het begrijp.
Ah oké, dan moet ik eens uitzoeken hoe zoiets werkt met IPTABLES.
@Ivo:
Stel ik heb een PHP editor, waar vul ik dan die "localhost:3306" in? Vul ik dat in waar ik normaal de SFTP host en poortnummer invul? Of moet ik nu juist bij het FTP gedeelte invullen?
Jij zou de ftp port(s) moetem tunnelen
je server wordt dan "localhost" op de plek waar eerst ftp.ozziesserver.nl stond
google zelf even de portnummers
Ik gebruik SSH om te connecten met mijn server, en niet FTP. Moet ik dan niet de SSH poort gebruiken? In mijn editor is een SFTP port waar ik de host en poortnummer invul. Moet ik daar dan niet localhost invullen? En die poort moet toch de lokale poort op mijn pc zijn (en niet op de server)?
het moet de port zijn die jij localhost gebruikt en "forwardt" naar de server.
Maar vaak ondersteunen editors al ftp-via-ssh (niet te verwarren met sftp)
In KiTTY gebruik ik dan denk ik de normale sessie, maar dan voeg ik daar dus die tunneling port aan toe. Correct? Of moet ik voor die tunneling een aparte sessie aanmaken? Ik zou denken dat ik gewoon 1 sessie kan gebruiken, die dan ondertussen gewoon ook luistert naar een bepaalde poort. Of gaat het dan mis als ik in de terminal en de PHP editor tegelijkertijd iets aan het doen ben?
Maar goed, ik zeg dus tegen KiTTY dat ie de lokale poort 1234 moet connecten met poort 22 op de server. En mijn vraag is dan, waar moet ik in de editor die localhost en poort 1234 invullen?
Dit is een nieuwere versie van Zend Studio, maar ziet er volgens mij vergelijkbaar uit met hoe ik normaal een server-connectie maak:
bij remote port komt 1234
Kitty zit intussen te luisten naar port 1234. Komt daar iets langs, dan stuurt Kitty dat door naar de remote server waar Kitty mee verbonden is, en biedt dat daar aan op port 22.
Ik snap nu hoe het werkt, maar kan ik in KiTTY de tunneling optie onderbrengen in dezelfde sessie die ik normaal gesproken gebruik om in te loggen op SSH? Dit zou dan inhouden dat wanneer ik niet met de PHP-editor aan het werken ben, maar wel iets in KiTTY aan het doen ben, dat ie dan toch luistert naar port 1234. Ik kan ook 2 sessies maken, eentje met en eentje zonder tunneling. Of is dat niet de bedoeling?
Gewijzigd op 26/01/2015 13:41:23 door Ozzie PHP
Regular FTP is precies dat: plaintext passwords verzenden om te authenticeren, files plaintext senden zonder dat de ontvangen kan detecteren of een man in de middle iets aangepast heeft.
Of Kitty meteen ook een CLI tevoorschijn tovert als je een tunnel opzet weet ik niet. Twee sessies hoort geen issue te zijn.
Ja, zoals je in het plaatje kunt zien, hebben ze het inderdaad over SFTP Settings en SFTP Details.
>> Regular FTP is precies dat: plaintext passwords verzenden om te authenticeren, files plaintext senden zonder dat de ontvangen kan detecteren of een man in de middle iets aangepast heeft.
Oké, maar als ik die tunneling ga gebruiken via KiTTY/PuTTY, maakt het dan nog iets uit waar ik die localhost en die poort instel in de PHP-editor? Kan ik beter de SFTP optie gebruiken of de regular FTP optie?
>> Of Kitty meteen ook een CLI tevoorschijn tovert als je een tunnel opzet weet ik niet.
Hoe bedoel je dit? Hoe ik het begreep moet je wel eerst je gebruikersnaam en wachtwoord invoeren. Ik neem dus aan dat er om die reden een CLI tevoorschijn komt. Ik neem dan ook aan dat als ik vervolgens inlog als Dos en vervolgens mijn PHP-editor start, dat ik dan met die PHP-editor ook als user Dos ben ingelogd. En als ik als Ozzie inlog via KiTTY dat ik dan met de PHP-editor als user Ozzie ben ingelogd. Correct, of zeg ik nu iets geks?
>> Twee sessies hoort geen issue te zijn.
Wat bedoel je hier precies mee? Bedoel je 2 sessies die je afzonderlijk instelt in KiTTY, dus bijv. "Dos Server (normal)" en "Dos Server (tunneling)"? Of bedoel je 2 sessies in de zin van dat je inlogt en tegelijkertijd dingen in KiTTY doet en tegelijkertijd met de PHP-editor werkt?
Gewijzigd op 26/01/2015 14:41:11 door Ozzie PHP
via het menu (icoontje links boven) kun je opvragen of er portforwarding actief is.
let wel dat er maar 1 instantie van het programma een port kan forwarden.
dus niet 2x port 666 naar dezelfde server, en ook niet naar 2 verschillende servers.
zelf forward ik localhost 3306 naar mijn server 6 naar mysql en 3307 naar server 7 etc
Zolang Heidi verbinding heeft met de database, kan ik trouwens de instantie van Kitty die de forwarding regelt, niet afsluiten (tenminste niet soft)
--
ik verwar nu zelf de verschillende namen van ftp (s)
http://nl.wikipedia.org/wiki/SSH_File_Transfer_Protocol
Toevoeging op 26/01/2015 14:41:59:
http://nl.wikipedia.org/wiki/FTP_over_SSL
>> Kitty toont gewoon zoals zonder tunnel ook een zwart scherm met de cursor. (of een andere kleur als je dat liever hebt).
Maar begrijp ik nu dat een "tunnel" session afwijkt van een normale session? Ik dacht eigenlijk om dus een tunnel toe te voegen aan mijn "normale", reeds bestaande session. Als ik je goed begrijp werkt dat niet? Moet ik dan op het Session tabblad ook geen host of ip-adres invullen?
Toevoeging op 26/01/2015 14:53:06:
Wat ik dus dacht is ... ik heb in KiTTY een normale sessie waarmee ik verbind met SSH. In de configuratie opties voeg ik de tunneling poorten toe.
Ik start de sessie. Ik voer Ozzie en mijn wachtwoord in. Vervolgens kan ik gewoon in KiTTY m'n dingen doen, maar ondertussen luistert KiTTY ook naar poort 1234. Als ik vervolgens de PHP editor opstart, dan laat ik die verbinden met poort 1234 waardoor ik binnen de PHP editor automatisch ben ingelogd als user Ozzie. Klopt dit, of niet?
Gewijzigd op 26/01/2015 14:49:47 door Ozzie PHP
nee, je bent niet automatisch ingelogd. Dat zal mogelijk van de toepassing afhangen, maar bijv. voor Mysql moet je nog steeds username en ww opgeven.
vergelijk het met dat je in Kitty, nadat verbinding hebt gemaakt, in het zwarte scherm intikt:
Oké, dus ik moet gewoon nog steeds op het Session tabblad de host of ip-adres invoeren?
Maar goed, dan verbind ik dus met de SSH poort. Kan ik dan na invoeren van username en ww KiTTY nog gewoon gebruiken zoals ik dat normaliter doe? Kan ik nog gewoon commando's invoeren? Of gaat dat niet, omdat de tunneling optie is geactiveerd?