Sshpop

Uit Linuxdocs.nl
Ga naar: navigatie, zoeken

Secure POP via SSH mini-how2

Geschreven door: Michaell Bakker
Website: www.linuxdocs.nl


Introductie

Normale POP sessies, zijn van nature erg onveilig. Het wachtwoord word namelijk in gewone tekst formaat (ASCII) verstuurd, zodat iedereen de mogelijkheid heeft deze te lezen.
Hoewel dit voor sommige mensen gewoon acceptabel is, moet je je bedenken dat op een openbare plek, zoals op school of in een internet cafe, iedereen die gewapend is met een simpele "sniffer" jouw wachtwoord kan aftappen. Bijkomend is het feit, dat veel mensen hun mail programma zo hebben ingesteld, dat deze om de zoveel tijd automatisch controleerd op nieuwe E-mail. Dit maakt het alleen maar gemakkelijker om het wachtwoord te verkrijgen via een "sniffer".

Met dit verkregen wachtwoord, kan een "hacker" jouw E-mail account benaderen en jouw mail lezen. Het is ook niet ongewoon, dat dit zelfde wachtwoord hetzelfde is als de gebruiker zijn shell account, dus de mogelijkheid op meer schade is groot.

Door al het POP verkeer via een gecodeerd kanaal te verzenden, worden er geen in normale ASCII tekst formaat gegevens uitgewisseld tussen de client en de server. We kunnen gebruik maken van de manier waarmee het programma ssh gegevens versleuteld en verstuurd via een netwerk.

Er zijn echter nog meer manieren, om gegevens te ver sleutelen. Een paar voorbeelden hiervan zijn: APOP, KPOP en IMAP. Hoe dan ook, ssh heeft het voordeel, dat het ook werkt met een normale POP configuraties, zonder dat u er een speciale client of server programma voor moet hebben (alleen sshd moet draaien op de server).

De basis techniek

Deze techniek is gebaseerd op een basis feature van ssh: port forwarding.

Er zijn vele variaties van dit onderwerp, die afhankelijk zijn van uw set-up. Zij vereisen allemaal ssh, welke gratis te downloaden is van http://www.ssh.fi" en mirrors. RPM pakketten zijn te verkrijgen van: ftp://ftp.replay.com/pub/crypto/ en Debian pakketten zijn te vinden op ftp://non-us.debian.org/debian-non-US/.

Port forwarding opzetten

Om port forwarding te starten, geeft u de volgende opdracht:

[root@linuxdocs.nl dir]# ssh -C -f popserver -L 11110:popserver:110 sleep 5

Laten we deze opdracht eens nader bekijken:

  • ssh: Het ssh programma zelf.
  • -C: Dit schakeld de compressie in van het data verkeer. Hoewel niet verplicht, is het makkelijk voor 56K modem gebruikers.
  • -f: Start ssh als een achtergrond proces.
  • popserver: De POP-server waar we een verbinding mee willen maken.
  • -L 11110:popserver:110: Stuur al het verkeer van de locale poort 11110 door naar poort 110 van de server popserver. We gebruiken een hoge locale poort (11110) zodat de gebruiker de koppeling kan maken.
  • sleep 5: Nadat ssh zichzelf heeft genesteld als een achtergrond proces, draait het als een opdracht. We gebruiken sleep zodat de connectie lang genoeg openblijft zodat ons mail programma een connectie tot stand kan brengen met de server. 5 seconden is normaal gesproken genoeg tijd om dit te laten gebeuren.

U kunt de meeste andere opties ook doorspelen aan ssh indien deze van toepassing zijn. Een veelgebruikt argument kan een gebruikersnaam zijn, omdat het waarschijnlijk anders kan zijn op de POP server.

Dit alles vereist wel dat sshd op de server gestart is! Hoe dan ook, het is niet verplicht om ook een account daarop te hebben. De tijd die nodig is om de boodschap "You cannot telnet here" te tonen, is genoeg om een connectie op te bouwen.

Uitproberen

Nadat u de bovenstaande opdracht heeft uitgevogeld, kunt u deze opdracht gebruiken. Tik nu dus in:

[gebruiker@linuxdocs.nl ~]$ ssh -C -f kees@popserver -L 11110:popserver:110 sleep 1000

In dit voorbeeld is popserver de naam van mijn POP-server. Mijn gebruikersnaam op mijn locale pc is pietje, en mijn gebruikersnaam op de POP-server is kees. Dus het is noodzakelijk dat ik dit vermeld (indien de gebruikersnaam zowel op de POP-server als die op uw locale pc hetzelfde zijn, is het kees@ stukje onnodig).

Indien u het correct heeft gedaan, zal de volgende melding op het scherm verschijnen:

kees@popserver's password:_

Tik nu uw wachtwoord in (Indien u op uw locale pc een ander wachtwoord gebruikt dan voor de POP-server, dient u uw locale wachtwoord te gebruiken). Nu zijn we klaar! Dus kunnen we het volgende proberen:

[gebruiker@linuxdocs.nl ~]$ telnet localhost 11110

U moet een melding terug krijgen dat op het volgende lijkt:

QUALCOMM POP v3.33 ready.

Yes! Het werkt! Alle gegevens die u nu zult versturen zullen worden ver sleutelt.

Mail cliënten instellen

Dit stukje zal u beschrijven hoe u uw POP-client kunt configureren voor onze ssh port forwarding. Het zal zich met name focussen op het gratis Opensource mail programma fetchmail. Fetchmail kunt u downloaden vanaf: http://www.catb.org/~esr/fetchmail/.

Fetchmail configureren

Het onderstaande maakt deel uit van mijn ~/.fetchmailrc bestand:

defaults
        user kees is pietje
        no rewrite

poll localhost with protocol pop3 and port 11110:
        preconnect "ssh -C -f kees@popserver -L 11110:popserver:110 sleep 5"
        password foobar;

Ziet er simpel uit nietwaar? Fetchmail kent een grote hoeveelheid aan opdrachten, maar de meest belangrijke zijn de preconnect regel en de poll optie.

We maken geen directe connectie met onze POP-server, maar in plaats daarvan maken we een verbinding met localhost:11110. De preconnect optie, zal iedere keer de verwijzing van localhost:11110 naar popserver:110 automatisch voor u tot stand brengen voor de gedurende 5 seconden, dus fetchmail kan zelf de juiste verbinding tot stand brengen.

Dus elke keer dat u fetchmail start, zal u gevraagd worden naar uw ssh wachtwoord en gebruikersnaam om u aan te melden. Indien u fetchmail gebruikt als een achtergrond proces, is het lastig als u iedere keer uw gebruikersnaam en wachtwoord moet intikken. Dit laatste brenkt ons naar het volgende hoofdstukje.

Alles automatiseren

ssh kent vele manieren van aanmelden. Een hiervan is de RSA public/private key methode. U kunt uw eigen aanmeld sleutel maken voor uw account m.b.v. ssh-keygen. Een aanmeld sleutel kan inloggegevens bevatten, of deze kunnen blank zijn. Of u wilt dat deze inloggegevens moet bevatten, hangt af van hoe veilig u denkt dat uw account nou eigenlijk is.

Als u denkt, dat uw computer veilig genoeg is, ga dan uw gang, en maak geen gebruik van de inloggegevens in uw sleutel. In dat geval kunt u gewoon het bovenstaande ~/.fetchemailrc bestand gebruiken. U kunt dan fetchmail starten als een achtergrond proces en bent u klaar.

Maar, als u wel logingegevens wilt meesturen in de sleutel, dan word het zaakje wat meer complex. Ssh kan draaien met behulp van een zogenaamde agent, welke sleutels kan registreren en aanmelden ongeacht welke ssh connecties u er ook mee maakt. Dus heb ik het volgende gemaakt en opgeslagen in een bestand genaamd getmail.sh:

#!/bin/sh
ssh-add
while true; do fetchmail --syslog --invisible; sleep 5m; done

Iedere keer als ik verbinding met het internet maak, dan geef ik op:

[gebruiker@linuxdocs.nl ~]$ ssh-agent getmail.sh

Dit zal eenmalig om mijn wachtwoord gaan vragen, en zal vervolgens elke 5 minuten controleren of ik nieuwe mailtjes heb. Indien ik mijn internet verbinding verbreek, zal ik het proces stoppen. (Dit kan ook automatisch gedaan worden met de scripts in ip-up en ip-down.

Fetchmail niet gebruiken

Maar wat als ik fetchmail niet kan/wil gebruiken? Pine, Netscape, Mozilla en andere mailclienten hebben hun eigen POP mechanisme. Overweeg eerst om toch Fetchmail te gebruiken. Het is veel flexibeler, en mailclienten horen dit soort dingen eigenlijk helemaal niet te doen. Zowel Pine als Netscape kunnen geconfigureerd worden om mail op te halen van uw lokale systeem.

Maar als het echt noodzakelijk is, tenzij uw client een preconnect feature heeft zoals fetchmail, zult u de ssh service continu actief moeten laten voor zolang u een verbinding heeft met het internet. Dit betekend, dat u sleep in zult moeten stellen op een waarde als "10000000000" om de verbinding tot stand te houden. Dit zal hoogstwaarschijnlijk niet ten goede aarde vallen bij de eigenaar van de POP server.

Ten tweede, sommige clienten (zoals Netscape) hebben hun poort nummer voor POP voorgeprogrammeerd op 110. Dus dient u root rechten te hebben om poorten door te koppelen van gereserveerde diensten. Dit kan ook vervelend zijn. Maar het zal prima werken.



How-TO's | Hoofdpagina | Linux Nieuws | Externe links | Help