In het verleden, gebruikten we gecomprimeerde bestanden om diskruimte te besparen. Tegenwoordig is diskruimte goedkoop - maar is bandbreedte beperkt. Door het comprimeren van gegevensstromen bereik je twee doelen:
1) Je bespaart op bandbreedte/transfered volume (dat is belangrijk als je voor verkeer moet betalen of als je netwerk is geladen).
2) Versnellen van low-bandwith connecties (Modem, GSM, ISDN).
In deze HowTo wordt uitgelegd hoe je op zowel bandbreedte als verbindingstijd kan beparen door gebruik te maken van tools als SSH1, SSH2, OpenSSH of LSH.
Mijn kantoor is verbonden met een 64KBit ISDN lijn naar het internet, dus de maximum transportsnelheid is ongeveer 7K/s. Je kunt de connectie versnellen door het te comprimeren: als ik bestanden download, toont Netscape een transportsnelheid tot aan 40K/s (Logbestanden zijn comprimeerbaar tot een factor 15). SSH is een tool welke hoofdzakelijk is ontworpen om veilige verbindingen tot stand te brengen over onbeveiligde netwerken. Bovendien is het met SSH mogelijk connecties te comprimeren en behoort port forwarding tot de mogelijkheden (zoals rinetd of redir). Dus is het de juiste tool voor het comprimeren van iedere eenvoudige TCP/IP-connectie. "Eenvoudig" betekent dat er slechts één TCP-connectie geopend is. FTP-connecties of een connectie tussen between M$-Outlook en MS-Exchange zijn niet eenvoudig aangezien er verscheidene verbindingen tot stand worden gebracht. SSH gebruikt het LempleZiv (LZ77) compressie algoritme - dus je zal dezelfde hoge compressie-verhouding bereiken als met winzip/pkzip. Om alle HTTP-connecties vanaf mijn intranet naar het internet te comprimeren, hoef ik op mijn dial-in computer slechts één opdracht uit te voeren:
ssh -l <login ID> <hostname> -C -L8080:<proxy_at_ISP>:80
-f sleep 10000
<hostname
> = host bij mijn ISP. SSH-toegang is vereist.
<login ID
> = mijn login-ID op <hostname
>
<proxy_at_ISP> =
de web proxy van mijn ISP
Mijn browser is zodanig geconfigureerd dat het localhost:8080
als proxy gebruikt. Mijn laptop is verbonden met dezelfde socket.
De verbinding wordt gecomprimeerd en door SSH naar de echte proxy doorgestuurd.
De infrastructuur ziet er ongeveer zo uit:
64KBit ISDN Mijn PC------------------------------Een PC (Unix/Linux/Win-NT) bij mijn ISP SSH-Client gecomprimeerd SSH-Server, Poort 22 Poort 8080 | | | | | | | |10MBit Ethernet |100MBit |niet gecomprimeerd |niet gecomprimeerd | | | | Mijn tweede PC ISP's WWW-proxy met Netscape,... Poort 80 (Laptop)
De meeste mensen halen hun email vanaf de mailserver op via POP3. POP3 is een protocol met vele nadelen:
Je zou POP3 kunnen comprimeren door localhost:110 via een gecomprimeerde connectie naar je ISP's POP3-socket door te sturen. Daarna moet je je mail-client vertellen een verbinding te maken met localhost:110 om mail te downloaden. Dat beveiligt en versnelt de connectie -- maar de downloadtijd ondergaat nog steeds de aan POP3 inherente protocol overhead.
Het heeft zin POP3 door een wat efficiënter protocol te vervangen. De gedachte hierachter is de gehele mailbox in één keer te downloaden zonder het genereren van de protocol overhead. Bovendien heeft het zin de connecties te comprimeren. De juiste tool welke beide mogelijkheden biedt is SCP. Je kunt je mailbestand als volgt downloaden:
scp -C -l loginId:/var/spool/mail/loginid /tmp/newmail
Maar er is een probleem: wat gebeurt er als een nieuwe email arriveert op de server tijdens het downloaden van je mailbox? De nieuwe mail zou verloren gaan. Daarom heeft het meer zin de volgende opdrachten te gebruiken:
ssh -l loginid mailserver -f mv /var/spool/mail/loginid /tmp/loginid_fetchme
scp -C -l loginid:/tmp/my_new_mail /tmp/loginid_fetchme
Een verplaatsing (mv) is een elementaire bewerking, dus je geraakt niet
in moeilijkheden als je tijdens de uitvoering van de opdrachten nieuwe mail
ontvangt. Maar als de directory's /tmp/ en /var/spool/mail op de mailserver
niet op dezelfde disk staan, krijg je wellicht problemen.
Een oplossing hiervoor is een lockbestand op de server aan te maken voordat
je de mv uitvoert:
touch /var/spool/mail/loginid.lock
. Je zou het erna moeten
verwijderen. Een betere oplossing is het bestand loginid naar dezelfde
directory te verplaatsen:
ssh -l loginid mailserver -f mv /var/spool/mail/loginid /var/spool/mail/loginid_fetchme
Daarna kun je formail gebruiken in plaats van procmail om /tmp/newmail
naar de juiste foler(s) te filteren:
formail -s procmail < /tmp/newmail
Je stuurt email over gecomprimeerde en versleutelde SSH-connecties om te: to:
Als je SSH-toegang op de mailserver hebt, heb je de volgende opdracht nodig:
ssh -C -l loginid mailserver -L2525:mailserver:25
Als je geen SSH-toegang tot de mailserver hebt, maar tot een server die het toestaat dat je je mailserver als relay gebruikt, is de opdracht:
ssh -C -l loginid other_server -L2525:mailserver:25
Daarna kun je je mailclient (of mailserver: zie "smarthost") zodanig configureren dat het mail naar de localhost poot 2525 stuurt.
Uiteraard neemt de compressie/encryptie CPU-tijd. Het bleek dat een oude Pentium-133 ongeveer 1GB/uur kon versleutelen en comprimeren -- dat is heel wat. Als je SSH met de optie "--with-none" compileert, kun je SSH laten weten geen encryptie te gebruiken. Dat bespaart wat van de performance. Hier is een vergelijking tussen verscheidene download methoden (tijdens de test, werd een ongecomprimeerd 6MB-bestand getransporteerd vanaf een 133MHz-Pentium-1 naar een 233MHz Pentium2 laptop over een 10MBit ethernet zonder andere load).
+---------------+------+-----------+-----------+----------------------+ | | FTP |versleuteld| gecompri- | gecomprimeerd & | | | | | meerd | versleuteld | +---------------+------+-----------+-----------+----------------------+ +---------------+------+-----------+-----------+----------------------+ |Verstreken tijd| 7.6s | 26s | 9s | 23s | +---------------+------+-----------+-----------+----------------------+ |Doorvoer |790K/s| 232K/s | 320K/s | 264K/s | +---------------+------+-----------+-----------+----------------------+ |Compressie | | | | | |Factor | 1 | 1 | 3.8 | 3.8 | +---------------+------+-----------+-----------+----------------------+
Met dank aan Harald König <koenig@tat.physik.uni-tuebingen.de>, wie
rcp gebruikte om complete mailboxen te downloaden. De laatste versie van deze
howto is beschikbaar op http://www.syss.de/howto.