Šíření událostí v síti pomocí PGP
V síti rozsahu CR!FreeNetu se může hodit automatizovat reakce na změnu konfigurace. Příkladem by mohla být automatická aktualizace konfiguračních souborů DHCP serverů, pro které se změnily podklady v computers. Postup jsem skutečně použil pro šíření aktualizací computers pro DNServer provozovaný na Rachel.
Předpoklady
K řešení úlohy jsem použil následující systémy.
- Odchozí pošta v místě vzniku události,
- příjem pošty v místě zpracování události
a program gpg na obou místech.
Klíče, bezpečnost
Předpokládá se, že místo vzniku události je pro místo jejího zpracování důvěryhodné. Následky případného přijetí záškodnické zprávy lze omezit vhodnými kontrolami v místě zpracování. Událost bude podepsána v místě vzniku a ověřena v místě zpracování.
Vypsání seznamu klíčů
veronika@carlos:~$ gpg --list-keys /home/veronika/.gnupg/pubring.gpg --------------------------------- pub 1024D/9BE1FDEC 2006-05-08 uid veronika@carlos (for distributing informations from carlos) <veronika@crfreenet.org> sub 2048g/7D218F01 2006-05-08
V místě vzniku události je nachystán soukromý klíč sloužící k podpisu události. Do místa jejího zpracování byl přenesen odpovídající věřejný klíč sloužící k ověření podpisu.
Export veřejného klíče v místě vzniku události
veronika@carlos:~$ gpg -a --export 9BE1FDEC -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.1 (GNU/Linux) mQGiBERfpusRBADKyWYQIBnjrHNQElAWfl8JIZQfQT8E6yQBCXXmbQXYqleK7Wc6 0ageTTijxaI/2FrkdcEm+7zeoCBvRYj+8Ndk09bNrOOi4iZrKqO+S31tuPSPnXB3 uFdHixFRzo1D1V3Vf9ys0cjhGp3YYUU2AjFdXQjpZqh7/QvBBXnvsQxlSwCg12Z1 JRWDWMCTBbFtSD91mJaMPHUEAJk+FTyIfGEkOYlqKBEYWO/YzjFSISEFzSoCSlkB YiCpCFrCmt97XkBG7QbaH7gv9djZekNRWeM8lQLVMEp34SZViilymPdUoCqLYqxL 6WJAQ9WgUvO0dnFtZQZVBGmUjI8ClQG0ol6txX9+8JTrrv4FvxD0kHzHrjOUPAjl 6QvtA/4wK6YmkiGAElkH/OZP5Yb2ngn7RQzviKgxe/VfzLGZ/TbibXAN4R68jQRn WhWjyW1520Ui1MQ5BXnfNhIHPvYm8xn1KV/c5nRPGuImA1ir5Q0hnm5kjuMSChP5 TnG1PKeIoYozusBrVoyBt7WU6vmvpF3Txh1LVGc7rY34f4Oo6LRUdmVyb25pa2FA Y2FybG9zIChmb3IgZGlzdHJpYnV0aW5nIGluZm9ybWF0aW9ucyBmcm9tIGNhcmxv cykgPHZlcm9uaWthQGNyZnJlZW5ldC5vcmc+iF4EExECAB4FAkRfpusCGwMGCwkI BwMCAxUCAwMWAgECHgECF4AACgkQqaJEF5vh/exJmACgzfm3GdsFYP+GWFnQBw3Y z2AV0YIAoIUT8u3MYFI1+5Zei0IjE2jMOs5buQINBERfpvsQCADc1AnvwZDnPRG/ 5No+LOyf880n8SZTD3qxnoykW8gzjMuyedLKpQxZ1JYiFIxAkuHIC+Au7jS4W1nG 38tEo29z0No6dTgLihfgX/WzVFkmghttYqdjE9ExPNtyjkx7csl37fxg/neh9lgM KXR7LMrXmNqbt8aBCeJ7YhmhJhZBQPsmyL9DFnskytO9nCvmDY5D9vJQsc6NdDon 6fOjok3oxLz2b1/0PiLd1rOI4PR2nkaUdU5otI6TjSiUnIOjZCfiKCKw8OaDQOHd 0JKtBCpCxjoPsZJuWl4wyH9pnU0egvMg2yBFnAAXrLgI6hGmzFRM1zn+atnBdkLF xZDR9jZLAAMFCADG6iiaDMyusZKNoVeMCPyHV19SaraUPrEE4Ou9KhoVaLjBuhg6 khTGzZ5m3yQWK4aFi5ll14M3B7TA36FIRxmkAcOGXu3K2Ms4P7xqeHKc8Xc9UJPh O81CB5n+kFFcQKbKm+7H4d0Y+W2EZ7ot8U+8iC5uFgZSND13OSTIZBhYaZiqJxud SeB7B7h53MVD2MO8xpHBsZdF6tsJEibGNGNeoWlw/hdwnRC+rfgSMnuljnVa/PW8 NCX6WlEhkRXtoPvWgqD7IPR5b1WRrVGEKiVMPRLTdGfgGwPq90V7xEgYtLkpiZse dNCUBmj3HBlehwkSiBlTli1G35uKb0ajCu5niEkEGBECAAkFAkRfpvsCGwwACgkQ qaJEF5vh/ezdYwCgn7yLtm7hFLg8Ew7hA9QcncMtLVsAnAkXKpnJxVaeCDC+csva A9TInhoS =MAFR -----END PGP PUBLIC KEY BLOCK-----
Import veřejného klíče v místě zpracování události (neověřeno)
gpg --import
Postup - odeslání
Příprava zprávy
Pro jednoduchost nejprve nachystám zprávu popisující událost.
Příprava zprávy v místě vzniku události
gpg --yes --armor -o /home/veronika/public_html/computers.gpg -s "$COMPUTERS"
Odeslání zprávy
Nachystaná zpráva je z místa vzniku odeslána programem mail do místa jejího zpracování. Pro jednoduchost se posílá přímo výstup programu gpg bez určení typu zprávy.
mail -s "computers-changed" veronika@rachel.rozhledna.chrudimsko.czf \ < /home/veronika/public_html/computers.gpg
Předmět zprávy událost identifikuje a slouží k výběru obsluhy v místě jejího zpracování.
Postup - zpracování
Spuštění obsluhy
Obsluhu doručené události spouští pravidlo uvedené v konfiguračním souboru .procmailrc.
Spuštění obsluhy události
veronika@rachel:~$ cat .procmailrc :0: * ^Subject: computers-changed | /home/veronika/bin/computers-changed-handle
Ověření podpisu
Skutečnou reakci na událost lze spustit teprve tehdy, je-li ověřen podpis. Zpráva je uložena do dočasného souboru. Následuje ověření podpisu. Je-li podpis úspěšně ověřen, je spuštěno zpracování (v příkladu programem computers-changed-handle.work}. Jinak se posílá chybové hlášení.
Kontrola podpisu a spuštění obsluhy
veronika@rachel:~$ cat bin/computers-changed-handle
#!/bin/bash
TMPFILE=`tempfile`
check_sign() {
local l
read l
expr match "$l" '.*DSA key ID 9BE1FDEC.*' > /dev/null || exit 1
read l
expr match "$l" 'gpg: Good signature from "veronika@carlos (for distributing informations from carlos) <veronika@crfreenet.org>".*' > /dev/null || exit 1
exit 0
}
if gpg --yes -o "$TMPFILE" 2>&1 | check_sign ; then
#signature OK
/home/veronika/bin/computers-changed-handle.work "$TMPFILE"
else
mail veronika@crfreenet.org -s "invalid computers changed report" < "$TMPFILE"
fi
rm "$TMPFILE"