Šíř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.

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"

crfreenet: SireniUdalostiPgp (last edited 2009-05-24 18:21:44 by localhost)

[CRFreeNet] [Galerie] [CZFree.Net] [zen#blog]