Kako kriptovati mail box korisnika na serveru – deo 1

Dakle moja kombinacija je : RHEL6+Sendmail+Dovecot+Procmail+MailScanner, i treba mi da su mail inbox-i korisnika na samom serveru kriptovani. Dolazni i odlazni mail-ovi nisu kriptovani, samo inbox-i u /var/spool/mail-u.
Ni malo lak zadatak, kako se ispostavilo.

1a. Početak
PGP (pretty good privacy) u kombinaciji sa Procmail receptima i programom koji se zove “Arcane” za sada je najizglednije rešenje, (link). Arcane koristi GPG/PGP enkripciju.
Ove instalacije raditi kao root korisnik.
# yum install pgp*
# yum install python python-gpgme
Napomena 1 : sve se radi direktno na mail serveru.
Napomena 2 : sve MORA se radi kao korisnik za koga se generiše ključ! Ne vredi kao root!!!

1b. Prvo treba generisati novi GPG ključ
Od ove tačke pa na dalje raditi kao korisnik za koga i radimo enkripciju.
$ gpg-agent –daemon –use-standard-socket
GPG_AGENT_INFO=/root/.gnupg/S.gpg-agent:2464:1; export GPG_AGENT_INFO;
Gpg-agent mora da se stratuje pre kreiranja ključa, inače se javljaju greške! Gpg-agent služi da “traži” i pamti lozinke prilikom GPG procesa.
Treba takođe namestiti da se ovaj agent uvek pokreće posle restarta servera (videti kasnije kako).
Napomena : ispred daemon i use su DVA znaka minus “-“, ispred gen-key takođe.
Provera jeli se podigao :
# pgrep gpg-agent
2461
Dalji rad :
$ gpg –gen-key
…..
gpg: directory `/home/nalog/.gnupg’ created
gpg: new configuration file `/home/nalog/.gnupg/gpg.conf’ created
gpg: WARNING: options in `/home/nalog/.gnupg/gpg.conf’ are not yet active during this run
gpg: keyring `/home/nalog/.gnupg/secring.gpg’ created
gpg: keyring `/home/nalog/.gnupg/pubring.gpg’ created
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y
GnuPG needs to construct a user ID to identify your key.
Real name: MOJEIME
Email address: nalog@moj.domen
Comment:
You selected this USER-ID:
“MOJEIME <nalog@moj.domen>”

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.
Ovde ide par novih prozora sa upitom za lozinku.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

gpg: /home/nalog/.gnupg/trustdb.gpg: trustdb created
gpg: key C4C92B9D marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
pub 2048R/C4C92B9D 2014-06-11
Key fingerprint = 4CC2 654D 419F 163E C3B6 C79D 7295 18A3 C4C9 2B9D
uid MOJEIME <nalog@moj.domen>
sub 2048R/0A076B82 2014-06-11
Primedba : OBAVEZNO otvoriti još jednu konzolu, i tamo jedno 20x iskucati komadnu (ovo može i kao user nalog i kao root, svejedno je) :
# dd if=/dev/sda of=/dev/zero

Ovime se generiše dovoljno elemenata za “randomness” (videti super link po pitanju entropije!)

2. Kako proveriti upravo napravljene ključeve
Napomena : ovo se sve radi kao user “nalog”, za koji je ključ i kreiran.
Provera 1
$ gpg –list-keys
/home/nalog/.gnupg/pubring.gpg
————————
pub 2048R/BBC92B9D 2014-06-11
uid MOJEIME <nalog@moj.domen>
sub 2048R/GG076B82 2014-06-11
Prva stavka je GPG key ID, što se uvek koristi kada se on poziva.
Provera 2
Pravimo testni fajl sa bilo kakvim sadržajem :
$ vim test
$ gpg –encrypt –recipient nalog test
$ ll
…..
-rw-rw-r– 1 nalog nalog 18 Jun 12 13:40 test
-rw-rw-r– 1 nalog nalog 344 Jun 12 13:41 test.gpg
$ gpg –output test-dekriptovan –decrypt test.gpg
$ ll
…..
-rw-rw-r– 1 nalog nalog 18 Jun 12 13:40 test
-rw-rw-r– 1 nalog nalog 18 Jun 12 13:41 test-dekriptovan
-rw-rw-r– 1 nalog nalog 344 Jun 12 13:41 test.gpg

Primedba : kako da se pgp-agent pokrene automatski svaki put posle reseta računara – proveriti da li je podignut :
# ps -axf|grep gpg
…..
9204 ? Ss 0:00 gpg-agent –daemon –use-standard-socket
Ili :
$ pgrep gpg-agent
3041
Da bi se pgp-agent podigao u okruženju datog korisnika, u /home/nalog/.bash_profile fajl, na njegovok kraju, dodati ovo :
####################################
# Invoke GnuPG-Agent the first time we login.
# Does `.gpg-agent-info’ exist and points to a gpg-agent process accepting s
ignals?
if [ -f $HOME/.gpg-agent-info ] && \
kill -0 $(cut -d: -f 2 $HOME/.gpg-agent-info) 2>/dev/null
then
# Yes, `.gpg-agent.info’ points to valid gpg-agent process;
# Indicate gpg-agent process
GPG_AGENT_INFO=$(cat $HOME/.gpg-agent-info | cut -c 16-)
else
# No, no valid gpg-agent process available;
# Start gpg-agent
eval $(gpg-agent –daemon –no-grab –write-env-file $HOME/.gpg-agent-info)
fi
export GPG_TTY=$(tty)
export GPG_AGENT_INFO
#######################################
I tako za svakog korisnika kome ovo treba…..
Dobar link po ovom pitanju.

3. Arcane instalacija
Arcane je program za enkripciju, koji radi na osnovu napravljenih ključeva.
Arcane kada se razvije, daje samo set komandi. Te komande ili staviti u folder već pokriven standardnim PATH-om, ili definisati folder u PATH-u (kako sam ja uradila u procmail receptu), ili navesti apsolutnu putanju komande.

4. Podesiti procmail link
# whereis procmail
procmail: /usr/bin/procmail /usr/share/man/man1/procmail.1.gz
# cd /etc/smrsh
# ln -s /usr/bin/procmail ./procmail
# ll
…..
lrwxrwxrwx 1 root root 17 Jun 12 09:45 procmail -> /usr/bin/procmail
I da, ovo je neophodno, inače poruke jednostavno neće biti isporučivane korisnicima.

5. Proveriti verziju za Python i da li ima argparse modul
# python -V
Python 2.6.6
Verzije Python-a veće od 2.7 imaju argparse ugrađen automatski.
Za niže verzije se on odvojeno spušta i instalira (link):
# wget http://argparse.googlecode.com/files/argparse-1.2.1.tar.gz
# tar -zxvf argparse-1.2.1.tar.gz
# easy_install argparse
I to je to.

6. Procmail recept za enkripciju
U folderu /home/nalog napraviti fajl .forward :
|exec /usr/bin/procmail
U folderu /home/nalog napraviti fajl .procmailrc :
# encryption
PATH=/bin:/usr/bin:/usr/local/bin:/opt/local/bin/:/nalog3/arcane-master:
SHELL=/bin/bash
LOGFILE=/home/nalog/procmailrc.log
VERBOSE=on
:0 fw
* <300000
| arcane-encrypt-mail –key BBC92B9D

Ovo zadnje je ID ključa korisnika “nalog” koji smo malopre generisali.
f – znači da se pravilo koristi kao filter
w – znači da ako arcane-encrypt-mail izađe sa greškom, treba nastaviti rad sa nefilterisanim porukama
Ovo omogućava kriptovanje novih poruka za mail nalog nalog@moj.domen koje dolaze na server.

Rezultat do sada urađenog
a. Ovako svaka nova poruka koja dolazi na nalog@moj.domen, u /var/spool/mail/nalog biva kriptovana.
b. Ako se priključimo sa RoundCube webmail na nalog, poruka se uopšte neće videti u inbox-u.
c. E-mail klijent (u mom slučaju Thunderbird) neće datu kriptovanu poruku spustiti na PC.
d. Čak ni root nalog direktno na serveru ne može da pročita fajl /var/spool/mail/nalog