2024. április 20., szombat

Gyorskeresés

Titkosított e-mail küldése parancssorból, OpenWRT alatt

[ ÚJ BEJEGYZÉS ]

Az alábbi leírást dokumentálás végett írom, hátha másnak is a segítségére lesz. Nem célja, hogy átfogó képet adjon a titkosításról, levelezésről, vagy a használt programok részletesebb beállítási lehetőségeiről. Javasolt a felhasznált programok dokumentációjának tanulmányozása.
A leírás feltételezi továbbá, hogy rendelkezünk alapvető elméleti ismeretekkel a nyilvános kulcs alapú titkosításról, valamint nem teljesen idegen a parancssor használata, a csomagtelepítés mikéntje.

A környezet:
- OpenWrt vargalex v1.1.7 r35342 firmware
- TP-Link TL-WR1043ND router (Ver. 1.8)

Felhasznált csomagok, verziók:
root@sol:/tmp# opkg list-installed | grep -E 'mutt|ssmtp|gnupg'
gnupg - 1.4.12-1
mutt - 1.5.21-1
ssmtp - 2.64-4
root@sol:/tmp# opkg depends mutt ssmtp gnupg
mutt depends on:
libc
libopenssl
libncursesw
ssmtp depends on:
libc
libopenssl
gnupg depends on:
libc
zlib
libncurses
libreadline

Főbb lépések:
1. Csomagok telepítése
2. Mutt beállítása
3. Ssmtp beállítása
4. Kulcspár generálás, használatba vétel
5. Összegyúrás

A Mutt és ssmtp beállításra megfelelő leírás található az alábbi wiki címen:
http://wiki.openwrt.org/doc/howto/smtps.client

Az alábbi ssmtp.conf emellett jó kiindulási alap lehet a Gmail smtp használatára
root=username@gmail.com
# See also http://mail.google.com/support/bin/answer.py?answer=78799
mailhub=smtp.gmail.com:587
rewriteDomain=gmail.com
hostname=localhost
UseTLS=Yes
UseSTARTTLS=Yes
# Username/Password
AuthUser=username
AuthPass=password
# Email 'From header's can override the default domain?
FromLineOverride=yes

A Mutt és GnuPG csomagok beszerezhetőek az OpenWRT trunk tárolójából, az alábbi címről:
http://downloads.openwrt.org/snapshots/trunk/
(TL-WR1043ND esetén ar71xx)

GnuPG telepítés, beállítás:
Ideiglenes mappába a csomagot letöltjük, majd telepítjük.
A gpg alapértelmezésben a user home könyvtárát használja a kulcsok tárolásásra, jelen esetben ez a /tmp:
root@sol:/tmp# gpg --help | grep Home
Home: /tmp

Mivel a /tmp ramdisken van, minden újraindítás után búcsút inthetnénk a kulcsainknak, ami nem épp a legideálisabb felállás. Első körben tehát megtanítjuk a programnak, hogy máshol található a kulcstárolónk. Errre az alábbi parancssori kapcsoló szolgál:
gpg --homedir /etc/gnupg

Nyilván a /etc/gnupg ízlés szerint módosítható. Tegyük is be tehát az alábbi sort a /etc/profile állományba, hogy parancssori használatnál már ne kelljen ezzel foglalkozni:
alias gpg='gpg --homedir /etc/gnupg'

A következő ssh bejelentkezés után már az alábbiakat kell látnunk:
root@sol:/tmp# gpg --help | grep Home
Home: /etc/gnupg

Jöhet a privát és publikus kulcsok generálása. Az én esetbemben sajnos a routerről ez a művelet nem sikerült, mert nem volt elég entrópia. Kénytelen voltam a lépést Windows alól elvégezni, de ugyanez a lépéssor OpenWRT-n is. A Windows verzió innen letölthető: http://gpg4win.org/
Letöltés, telepítés után Windows cmd-ben az alábbi paranccsal tudunk kulcsot generálni:
gpg --gen-key

A felajánlott alapértelmezett értékek tökéletesen megfelelnek az esetek 99%-ban:
> gpg --gen-key
gpg (GnuPG) 1.4.11; Copyright (C) 2010 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

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) 2048
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Teszt Elek
Email address: tesztelek@teszt.elek
Comment:
You selected this USER-ID:
"Teszt Elek <tesztelek@teszt.elek>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

Az (O)kay kiválasztása után megadhatunk még egy jelszót (passphrase), jelen esetben nem lesz rá szükség, hagyjuk simán üresen. Ezután legenerálja a kulcspárunkat, majd ha készen van, az alábbi üzenettel tájékoztat:
gpg: key F36B5718 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: 5 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 5u
pub 2048R/F36B5718 2014-02-02
Key fingerprint = 2B6B EB87 7046 97F5 7EAD A334 E51A 73F7 F36B 5718
uid Teszt Elek <tesztelek@teszt.elek>
sub 2048R/0ADEEDE4 2014-02-02

A fenti üzenetben a F36B5718 jelöli a kulcs ID-t, ezzel fogunk tudni hivatkozni a kulcs tárolónkban a kulcsra. Miután megvan ez a csodaszép kulcspárunk, már csak át kell költöztetnünk a routerre, majd használatba venni.
Exportáljuk tehát a kulcsainkat:
gpg --export -a F36B5718 > public.key
gpg --export-secret-key -a F36B5718 > private.key

Kedvenc módszerünkkel átmásoljuk őket a routerre, mondjuk a /tmp mappába. Windows alól erre a célra - többek között - alkalmas az ingyenes pscp.exe, mely az alábbi címről szerezhető be:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Másoljuk át a kulcsokat a routerre:
pscp.exe -scp -pw "jelszó" public.key root@192.168.1.1:/tmp/public.key
pscp.exe -scp -pw "jelszó" private.key root@192.168.1.1:/tmp/private.key

Értelemszerűen az idézőjelek közé a root jelszó kerüljön, az IP címnek pedig a router IP címét adjuk meg. Ha ezzel megvagyunk, a routeren importáljuk a kulcsokat a tárolóba, hogy használatba tudjuk venni:
root@sol:/tmp# gpg --import public.key
root@sol:/tmp# gpg --allow-secret-key-import --import private.key

Megtanítjuk a gpg-t, hogy teljes mértékben bízunk ebben a kulcsban (még szép, hiszen a miénk):
root@sol:/tmp# gpg --edit-key F36B5718

Az elinduló gpg shellben kiadjuk a trust parancsot:
gpg> trust

Majd kiválasztjuk az 5. opciót, azaz teljes mértékben megbízunk benne:
Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) y

pub 2048R/F36B5718 created: 2014-02-02 expires: never usage: SC
trust: ultimate validity: ultimate
sub 2048R/0ADEEDE4 created: 2014-02-02 expires: never usage: E
[ultimate] (1). Teszt Elek <tesztelek@teszt.elek>

gpg> quit

A gnupg könyvtár jogosultságait állítsuk át, különben figyelmeztetést kapunk a gpg használatánál. Ilyet:
gpg: WARNING: unsafe permissions on homedir '/etc/gnupg'

Állítsuk 700-ra a jogosultságát és a gpg nem panaszkodik rá többet:
root@sol:/etc# chmod 700 /etc/gnupg

A beállításokkal készen is vagyunk, küldjünk egy teszt üzenetet:
echo "Teszt body" | gpg -ea -r F36B5718 | mutt -s "Teszt subject" -- teszt@email.cim

Ha mindent jól beállítottunk, akkor megérkezik a postafiókunkba a titkosított üzenet és bonthatjuk is a doboz hideg sört. Az üzenet aláírása a -ea kapcsoló helyett a -eas kapcsolóval lehetséges.

Belefuthatunk olyan problémába, hogy ha például shell script küldi az üzenetet, akkor az elhasal az alábbi üzenettel:
root@sol:/tmp# /mnt/scripts/test.sh
gpg: no default secret key: secret key not available
gpg: [stdin]: sign+encrypt failed: secret key not available

Teszi mégpedig ezt annak ellenére, hogy a scriptben használt parancs tökéletesen lefutott, amikor közvetlenül adtuk ki parancssorban. Itt a zavart az okozza, hogy amikor bejelentkezünk a routerre, beolvassa a /etc/profile állományt, ahol is ugye korábban aliasban megtanítottuk a gpg-nek, hogy hol van a home könyvtár. Szerencsétlen scriptünk erről semmit nem tud, meg kell neki mutatni. A parancsot emiatt az alábbiak szerint módosítsuk a scriptben:
echo "Teszt body" | gpg --homedir /etc/gnupg -eas -r F36B5718 | mutt -s "Teszt subject"
-- teszt@email.cim

Innentől ez is pipa, most már tényleg bonthatjuk a sört.

Hasznos linkek:
http://www.mutt.org/doc/manual/
http://www.gnupg.org/documentation/
http://wiki.openwrt.org/doc/howto/smtps.client
http://irtfweb.ifa.hawaii.edu/~lockhart/gpg/
http://forums.gentoo.org/viewtopic-t-529419-start-0.html

Hozzászólások

(#1) ivana


ivana
Ármester

Nem trollkodásból, de ezt miért pont egy routeren csinálod, nem lenne egyszerűbb egy rendes gépen?

(#2) r0by válasza ivana (#1) üzenetére


r0by
addikt

Gondolom azért, amiért mindenki más ilyen esetekben. Pl. olcsó üzemeltetés(0/24 órára gondolok), halk, könnyebb elérhetőség, torrent, médiaszerver, fájlszerver egyben, sorolhatnám.. :)

(#3) csupe válasza ivana (#1) üzenetére


csupe
csendes tag

Alapvetően nem levelező szerver, vagy kliens funkciót lát el a router, de bizonyos eseményekről küld üzenetet. Emellett napi riportot a syslogról, stb. Ezeket az e-maileket akartam letitkosítani.
Erre vonatkozott a kérdésed?

(#4) ivana válasza csupe (#3) üzenetére


ivana
Ármester

Erre vonatkozott, így már értem akkor mire jó.

[ Szerkesztve ]

(#5) Honkydoo


Honkydoo
őstag

Jó kis leírás, köszönjük! :C

"Légy olyan, mint bárki más, tégy olyat, mint senki más."

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.