Veilige UNIX-pipes met spiped

Als je netwerkverkeer veilig wil forwarden, kun je daarvoor ssh -L gebruiken, maar Colin Percival heeft een eenvoudiger oplossing: spiped, een versleutelde en geauthenticeerde pipe over het netwerk.

Spiped ontstond uit Colin Percivals nood om op zijn back-updienst Tarsnap de web front-end te scheiden van de back-uplogica en de communicatie daartussen op een veilige manier uit te voeren.

Spiped
Je kunt zo'n veilige verbinding wel met ssh -L opstellen, maar Percival wantrouwt complexiteit. Een ssh-daemon die publiek toegankelijk is, vond hij maar niets, evenals het feit dat hij in principe elke keer de ssh host-sleutels moest controleren. Hij ontwikkelde daarom vorig jaar spiped, wat een alternatief voor ssh -L biedt en maar 4000 regels code bevat.

Spiped is een tool om veilige tunnels te creŽren met gebruik van een pre-shared key. De client-side spiped tunnelt op een veilige manier een socket op de client naar een socket op de server via de server-side spiped. De twee daemons gebruiken de pre-shared key om encryptie- en authenticatiesleutels af te spreken, zodat de tunnel versleuteld en in beide richtingen geauthenticeerd is.

Veilige mail
Het klassieke scenario is een tunnel om op een veilige manier e-mail te verzenden via een smtp-server. Je kunt dit met ssh -L doen, maar met spiped gaat dit als volgt. Je maakt een sleutel aan en start spiped op de mailserver:


# dd if=/dev/urandom bs=32 count=1 of=keyfile

# spiped -d -s '[0.0.0.0]:8025' -t '[127.0.0.1]:25' -k keyfile



En dan kopieer je de sleutel naar je client en start je daar eveneens spiped:



# spiped -e -s '[127.0.0.1]:25' -t $SERVERNAME:8025 -k keyfile



Als je dan in je e-mailclient e-mail stuurt naar localhost:25, wordt die via poort 8025 op een veilige manier getunneld naar de server, die de e-mail volledig transparant lokaal aflevert op poort 25, waarna de mailserver de e-mail verstuurt.

Veiliger ssh
Je kunt spiped ook gebruiken om de toegang tot een ssh-daemon te beperken. Hierdoor kan enkel wie beschikt over het sleutelbestand op de ssh-server inloggen. Op de ssh-server maak je hiervoor een sleutel aan en start je spiped:



# dd if=/dev/urandom bs=32 count=1 of=/etc/ssh/spiped.key

# spiped -d -s '[0.0.0.0]:8022' -t '[127.0.0.1]:22' -k /etc/ssh/spiped.key



Kopieer nu de sleutel naar ~/.ssh/spiped_$SERVERNAME_key op je client en plaats de volgende regels in je ~/.ssh/config:


Host HOSTNAME

ProxyCommand spipe -t %h:8022 -k ~/.ssh/spiped_%h_key



Als je nu de opdracht ssh $HOSTNAME intypt, zal automatisch door de ProxyCommand-opdracht het client-programma spipe opgestart worden dat een verbinding met de server maakt op poort 8022 en hiervoor de juiste sleutel gebruikt.

De verbinding naar de server gebeurt via de spiped-tunnel en wordt pas op de server lokaal omgeleid naar poort 22 op localhost, waarna je ingelogd bent. Je kunt nu op de firewall van de server poort 22 dichttimmeren en toch nog inloggen, maar enkel vanaf een client-machine die over de juiste sleutel beschikt.