In deze sectie wordt de instelling van je POP clientsoftware beschreven waarbij het gebruik maakt van de ssh forwarded connectie. Het is primair op fetchmail gericht (ESR's uitstekende mail-ophaal en forwarding utility), aangezien dat de meest flexibele software die ik voor het omgaan met POP heb gevonden. Fetchmail is te vinden op http://www.tuxedo.org/~esr/fetchmail/. Je verleent jezelf een grote dienst als je de uitstekende documentatie leest die met fetchmail wordt meegeleverd.
Hieronder volgt mijn .fetchmailrc
defaults
user msingh is manish
no rewrite
poll localhost with protocol pop3 and port 11110:
preconnect "ssh -C -f msingh@popserver -L 11110:popserver:110 sleep 5"
password foobar;
Tamelijk simpel, toch? fetchmail kent een rijkdom aan opdrachten, maar de
belangrijkste zijn de preconnect
regel en de optie poll
.
We maken geen directe verbinding met de POP-server, maar in plaats daarvan
met localhost en poort 11110.
De preconnect
doet de forwarding elke keer dat fetchmail wordt uitgevoerd,
de verbinding 5 seconden open latend, zodat fetchmail zijn eigen
verbinding kan opzetten. De rest doet fetchmail zelf.
Dus elke keer dat je fetchmail uitvoert, wordt er gevraagd om je ssh wachtwoord voor de authenticatie. Als je fetchmail in de achtergrond uitvoert (zoals ik doe), dan is dat niet handig. Wat ons brengt bij de volgende sectie.
ssh kan met veel manieren authenticeren. Een hiervan is een RSA public/private
sleutelpaar. Je kunt met ssh-keygen
een authenticatiesleutel
voor je account genereren. Er kan met een authenticatiesleutel een
wachtwoord worden geassocieerd of het wachtwoord kan worden leeggelaten.
Of je een wachtwoord wilt, hangt af van hoe veilig je meent dat het account is
dat je lokaal gebruikt.
Als je denkt dat je machine veilig is, ga dan verder en laat het
wachtwoord leeg. Dan werkt de bovenstaande .fetchmailrc
door het slechts uitvoeren van fetchmail. Je kunt fetchmail dan
in daemon modus uitvoeren wanneer je inbelt waarbij de mail automatisch
wordt opgehaald. Je bent klaar.
Als je echter meent een wachtwoord nodig te hebben, dan wordt het wat
complexer. ssh kan onder besturing van een agent worden uitgevoerd,
die sleutels kan registreren en wat voor ssh verbindingen er
ook onder worden gemaakt authenticeren. Dus maak ik gebruik van het
volgende script getmail.sh
:
#!/bin/sh
ssh-add
while true; do fetchmail --syslog --invisible; sleep 5m; done
Wanneer ik inbel, voer ik uit:
$ ssh-agent getmail.sh
Eenmaal wordt om mijn wachtwoord gevraagd, vervolgens wordt elke 5 minuten mijn mail gecontroleerd. Wanneer de inbelverbinding wordt gesloten, beëindig ik de ssh-agent. (Dit is geautomiseerd in mijn ip-up en ip-down scripts).
Wat als ik geen gebruik kan/wil maken van fetchmail? Pine, Netscape en nog een aantal andere clients hebben eigen POP-mechanismen. Overweeg eerst het gebruik van fetchmail! Het is veel flexibeler, en mailclients zouden zich hoe dan ook toch niet met dergelijke zaken bezig moeten houden. Zowel Pine als Netscape kunnen worden geconfigureerd dat ze gebruik maken van lokale mailsystemen.
Maar als je erop staat, dan moet je de ssh port forware de gehele tijd
dat je verbonden bent actief houden, tenzij je client een preconnect
feature heeft zoals fetchmail. Wat betekent het gebruik van
sleep 100000000
om de verbinding te behouden.
De systeembeheerders kunnen dit wellicht niet waarderen.
Ten tweede hebben een aantal clients (zoals Netscape) het poortnummmer hardcoded in 110. Dus wellicht dat je root moet zijn om port forwarding te gebruiken vanuit privileged poorten. Ook dit is ergerlijk. Maar het zou moeten functioneren.