OpenVPN Diegimas ir Naudojimas

G
  • 12 Grd '14

Įsigaliojus naujajam Lietuvos Seimo šviesulių siūlytam įstatymui:
http://www3.lrs.lt/pls/inter/w5_show?p_ ... 3559&p_k=1

Noriu aprašyti, kaip įsidiegti bei naudotis OpenVPN paketu, gal kam pravers

Jums reikės VPS - virtualaus privataus serverio. Daug vietos diske ar siaubingai daug operatyvios atminties nereikia. Svarbiausia, kad būtų gera greitaveika. Sakyčiau, idealus kainos ir kiekybės santykis būtų 5GB disko, 1GB RAM ir gigabitinė linija su užsieniu. Monstrinis procesorius nereikalingas, nes paprasčiausiai neturėtų darbo.

Pasibandymui VPS nebūtinas, galite sujungti du namie esančius kompiuterius arba/ir virtualias mašinas viename kompiuteryje.

Manau, nebloga VPN technologijų apžvalga yra pateikiama šiuo adresu:
https://www.ivpn.net/pptp-vs-l2tp-vs-openvpn

Taigi OpenVPN yra saugiausias ir sparčiausias, tik kaip jį įsidiegti?

Labai paprastai:

sudo apt-get install openvpn

Toliau darau prielaidą, kad nuosekliai seksite komandas, neperkraudami kompiuterio/serverio, neišjungdami terminalo lango.

Prisijungiam kaip root naudotojas ir susikuriam katalogus, kuriuose laikysim reikalingus įrankius ir kt.:

sudo su
cd /etc/openvpn
mkdir easy-rsa raktai
cd easy-rsa
cp -a /usr/share/doc/openvpn/examples/easy-rsa/2.0/* .

Dabar susikonfiguruojam parametrus, pagal kuriuos generuosim sertifikatus.
Nukopijuokit visą kodą apačioj ir vienu ypu įklijuokit terminale:

cat > vars <<EOF
export EASY_RSA="`pwd`"
export OPENSSL="openssl"
export PKCS11TOOL="pkcs11-tool"
export GREP="grep"
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_DIR="$EASY_RSA/keys"
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
export KEY_SIZE=2048
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
export KEY_COUNTRY="LT"
export KEY_PROVINCE=""
export KEY_CITY=""
export KEY_ORG="ubuntu.lt"
export KEY_CN="Ghost"
export KEY_NAME="pavyzdys"
export KEY_OU="VPN"
export KEY_EMAIL="vardenis@pavardenis.lt"
export PKCS11_MODULE_PATH=FNKcQrqRrjTlI
export PKCS11_PIN=12349876
EOF
source vars

Žinoma, galit pasikeisti parametrus pagal skonį.

Apsišluojam ir susikuriam laikiną katalogą raktam:

./clean-all

Susigeneruojam privatų raktą ir sertifikatą:

./build-ca --pass

Pasirinkit tvirtą slaptažodį. Jei trūksta fantazijos, galit susigeneruoti:

cat /dev/urandom | tr -dc '[[:alnum:]]' | head -c 16; echo

Visur kitur galite tiesiog spausti Enter klavišą nieko neįvedę.

Dabar generuosim serverio sertifikatą:

./build-key-server Ghost

Kai pasirodys eilutė:

Enter pass phrase for /etc/openvpn/easy-rsa/keys/ca.key:

Įveskite savo pasirinktą privataus rakto slaptažodį, visur kitur vėlgi galite tiesiog spausti Enter.

Kai klaus, ar norite pasirašyti sertifikatą - sutikite (y):

Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

Generuojam naudotojo raktų rinkinį:

./build-key-pass naudotojas1

Jūsų ir vėl paprašys surinkti privataus rakto slaptažodį - tvarka ta pati.
Pastaba: Jei reikia daugiau naudotojų - parinkite skirtingus vardus (pvz.: naudotojas2).

Belieka sugeneruoti dar porą parametrų saugiam raktų tikrinimui:

openvpn --genkey --secret keys/ta.key
./build-dh

Gali praeiti tikrai nemažai laiko, kol paskutinė komanda baigs darbą, tad laisvai galit eit ko nors užkąsti ar pasidaryt arbatėlės

Perkeliam serverio raktų rinkinį į jam paruoštą vietą:

cp ./keys/{ca.crt,Ghost.crt,Ghost.key,ta.key,dh2048.pem} ../raktai/

Sukuriam serverio sąrankos failą (aš siūlau tokią konfiguraciją):

cat > /etc/openvpn/srv.conf <<EOF
## Pagrindiniai parametrai
server 10.1.1.0 255.255.255.0
dev tun
proto udp
port 1194
keepalive 10 120
cipher AES-128-CBC
comp-lzo
daemon
verb 4
log-append /var/log/openvpn.log
status /etc/openvpn/srv-bukle.txt
## Nusimetam privilegijas, kad jaustumemes saugiau
user nobody
group nogroup
persist-key
persist-tun
## Raktu rinkiniai
ca /etc/openvpn/raktai/ca.crt
cert /etc/openvpn/raktai/Ghost.crt
key /etc/openvpn/raktai/Ghost.key
dh /etc/openvpn/raktai/dh2048.pem
tls-auth /etc/openvpn/raktai/ta.key 0
## Naudotoju saranka
ifconfig-pool-persist /etc/openvpn/isiminti_ip.txt
max-clients 10
client-to-client
push "route 10.1.1.0 255.255.255.0"
EOF

Vėlgi nurodymai tie patys, nukopinat viską ir vienu ypu įklijuojat terminale.

Savo kompiuteryje sukuriate naudotojo sąrankos failą:

cat > /etc/openvpn/usr.conf <<EOF
## Pagrindiniai parametrai
client
proto udp
remote 192.168.0.21
port 1194
nobind
dev tun
ns-cert-type server
keepalive 10 60
cipher AES-128-CBC
comp-lzo
daemon
log-append /var/log/openvpn.log
verb 3
## Naudotojo raktai
ca /etc/openvpn/raktai/ca.crt
cert /etc/openvpn/raktai/naudotojas1.crt
key /etc/openvpn/raktai/naudotojas1.key
tls-auth /etc/openvpn/raktai/ta.key 1
EOF

Viskas taip pat - nukopinat viską ir vienu ypu įklijuojat terminale.
Taip pat nepamirškit pasikeisti IP adreso (viršuje 192.168.0.21) į savo VPS.

Be to, šįkart iš serverio nusikopijuojate savo kompiuteryje į /etc/openvpn/raktai sekančius failus (reiks root teisių):

ca.crt 
naudotojas1.crt 
naudotojas1.key 
ta.key

Sudėtingoji dalis baigta

Savo VPS paleidžiate OpenVPN serverį:

openvpn --config /etc/openvpn/srv.conf

Analogiškai, savo kompiuteryje prijungiate naudotoją:

openvpn --config /etc/openvpn/usr.conf

Jūsų paprašys surinkti slaptažodį, kurį pasirinkote generuodami naudotojo raktus.

Įvykdę komandas, tiek serveryje, tiek savo kompiuteryje rasite naują virtualią tinklo įrangą.

Serveryje:

# ifconfig
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.1.1.1  P-t-P:10.1.1.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:336 (336.0 B)  TX bytes:336 (336.0 B)

Pas jus:

# ifconfig
tun1: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.1.1.6  netmask 255.255.255.255  destination 10.1.1.5
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 100  (UNSPEC)
        RX packets 4  bytes 336 (336.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4  bytes 336 (336.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Belieka patikrinti, ar viskas veikia

[root@arch openvpn]# ping 10.1.1.1 -c 10
PING 10.1.1.1 (10.1.1.1) 56(84) bytes of data.
64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=4.60 ms
64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=4.88 ms
64 bytes from 10.1.1.1: icmp_seq=3 ttl=64 time=4.32 ms
64 bytes from 10.1.1.1: icmp_seq=4 ttl=64 time=5.46 ms
64 bytes from 10.1.1.1: icmp_seq=5 ttl=64 time=6.57 ms
64 bytes from 10.1.1.1: icmp_seq=6 ttl=64 time=5.56 ms
64 bytes from 10.1.1.1: icmp_seq=7 ttl=64 time=4.54 ms
64 bytes from 10.1.1.1: icmp_seq=8 ttl=64 time=3.72 ms
64 bytes from 10.1.1.1: icmp_seq=9 ttl=64 time=3.89 ms
64 bytes from 10.1.1.1: icmp_seq=10 ttl=64 time=7.13 ms

--- 10.1.1.1 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9015ms
rtt min/avg/max/mdev = 3.727/5.072/7.136/1.061 ms

Sėkmės!

E
  • 12 Grd '14

VPN - saugus tunelis į internetą, taip?
Ar interneto tiekėjui neišliks galimybė stebėti kompiuterio veiksmų, net ir su OpenVPN? Juk interneto srautas tai tas pats, kaip VPN'as veikia šiuo atžvilgiu? Ar tu siūlai pirkti VPS'ą užsienį ir rašytis OpenVPN?

G
  • 12 Grd '14

@eko rašė:
VPN - saugus tunelis į internetą, taip?

Taip. Bendru atveju - tai tunelis iki tavo vartų į internetą.

@eko rašė:
Ar interneto tiekėjui neišliks galimybė stebėti kompiuterio veiksmų, net ir su OpenVPN? Juk interneto srautas tai tas pats, kaip VPN'as veikia šiuo atžvilgiu? Ar tu siūlai pirkti VPS'ą užsienį ir rašytis OpenVPN?

Siūlau pirktis VPS ten, kur jausies saugus. Tai gali būti ir Kinija, Rusija, JAV, Rumunija, Švedija, bet kas. Kitaip tariant, pats pasirinktum, kur bus tavo vartai į pasaulį. Šiuo atveju suinteresuoti asmenys turėtų kreiptis į šalies, talpinančios tavo VPS, teisėsaugą prašydami teikti duomenis apie tavo VPS.

Tavo interneto paslaugų teikėjas matytų, kad tavo kompiuteris jungiasi prie kažkokio IP nežinia kur. Srautas užkoduotas, todėl IPT negalėtų nustatyti, nei ką siuntiesi, nei kokius puslapius naršai, trumpai tariant, neturėtų jokių statistinių duomenų apie tavo srautą, išskyrus jo intensyvumą (kol kas neturime įstatymo, kuris įpareigotų pagrįsti srauto intensyvumą tarp taško A ir taško B, sakykim kodėl 1 val. nakties kažką siunteisi 5MB/s greičiu, o 1 val. dienos 50KB/s greičiu, bet su mūsų tešlagalviais Seime niekada negali žinot...).

Bendru atveju, manau, greit bus saugiau turėti vartus į internetą kažkur kitur Europos Sąjungoje, nei Lietuvoje. Bet kuris kelių patrulis negalės tavęs sekti ar atjungti tau internetą motyvuodamas, kad tavo veikla internete jam kelia įtarimų. Šiuo atveju jam tektų raštu kreiptis į kitos šalies teisėsaugą, kuri dėl lankstesnių ES direktyvų greičiausiai atsisakytų teikti informaciją.

E
  • 12 Grd '14

Tiek suprantu. Mano klausimas - šis OpenVPN galioja tik diegiant į užsienyje esantį VPS/VDS? Dabartiniu mano suvokimu, atsakymas yra - taip.

G
  • 12 Grd '14

Trumpai tariant, atsakymas - taip.

O šiaip, aš, matyt, nelabai suprantu tavo klausimo arba tau sunkiai sekas suprast, kas tas VPN yra.

Taigi VPN - Virtual Private Network arba virtualus vietinis tinklas, dar kitaip tariant adresai tik 10.x.x.x, 172.16.x.x, 192.168.x.x. Dažniausiai naudojamas, kai ofisai išsibarstę po visą pasaulį, bet norima juos apjungti į vieną tinklą, kurį lengva administruoti.

Tačiau niekas nemaišo pritaikyti ir kitoms reikmėms

OpenVPN - tai tik programa. Ji veikia (“galioja”) vienodai tiek Lietuvoje, tiek Indijoje.

Visą kitą, man rodos, labai aiškiai išdėsčiau ankstesniame savo pranešime.

Jei nori, gali susikonfiguruoti serverius, kurie talpinami Lietuvoje, bet tada nieko neišloši, kas liečia tavo privatumą. Srautas iš tavo namų ar kontoros iki serverio bus koduotas ir atrodys kaip visiškas kosmosas tavo IPT, tačiau jei kam pasirodysi įtartinas, IPT perduos tavo VPS IP žandaram, kurie pagal dabar galiojančius įstatymus, galės stebėti įeinantį ir išeinantį srautą iš tavo VPS, taigi naudos jokios, taip ir liksi po didinamuoju stiklu..

VPN principinė schema:

E
  • 12 Grd '14

@Ghost rašė:
Srautas iš tavo namų ar kontoros iki serverio bus koduotas ir atrodys kaip visiškas kosmosas tavo IPT, tačiau jei kam pasirodysi įtartinas, IPT perduos tavo VPS IP žandaram, kurie pagal dabar galiojančius įstatymus, galės stebėti įeinantį ir išeinantį srautą iš tavo VPS, taigi naudos jokios, taip ir liksi po didinamuoju stiklu..

Va, tai mane ir domino. Ačiū už išsamų atsakymą.

Smalsus aš vis tik... Tai dabar LR institucijos tiesiogine prasme gaudys piratus ir tuos, kurie ieško piratinės įrangos (muzika/filmai/paveikslėliai taip pat)?

T
Techtronic
Mindaugas N.
  • 12 Grd '14

O kaip del sertifikatu ne self signed? Atrodo online dabar galima gauti normalu for free

G
  • 12 Grd '14

Ar bus labai pikti ir įsiutę, manau, greit pamatysim. Bet juk kiekvienam gavus naują įrankį norisi jį kuo greičiau išbandyti
Bet kuriuo atveju, manau, bus keletas nelaimėlių, kurie bus sudraskyti matant miniai, kad masės prisibijotų, nes didysis brolis juos stebi. Suprask, ilgai ir nekompetetingai apie tai bus diskutuojama žiniasklaidoje, turbūt bus skirtos didesnės nei vidutinės baudos.

G
  • 12 Grd '14

@Techtronic rašė:
O kaip del sertifikatu ne self signed? Atrodo online dabar galima gauti normalu for free

Neteko bandyti, taip pat nežinau, ką tuom išloštum?
Čia ne tas atvejis, kur daugiau dūmų nei veiksmo?

Aš visad už "pasidaryk pats - jei moki, nes niekas kitas geriau nežinos, ko tau reikia"

T
Techtronic
Mindaugas N.
  • 12 Grd '14

As visiskai su tavim sutinku, bet matai SSL certificates yra "saugios|trusted" tik tada, kai yra signed is patikimu signing authority.

Suprantama, kad saviems darbams jeigu programos nekreipia demesio i sertifikatus, visiskai pakanka ir self-signed. Bet jeigu paleistas VPN kokiam VPS uz doleri, gal ir vertetu apie tai padiskutuoti, nors ir vel tureciau sutikti su kolega, nes vadinti "trusted" kiekviena korporacija kuri siulo nemokamus sertifikatus taip pat negali...

Tema tikrai idomi ir naudinga, paskutiniu metu net ir tor pasitiketi negali, kiek FBI uzdare deepwebe esanciu svetainiu...

P.S paranojos lygis pasiektas

G
  • 12 Grd '14

Aš manau, kad truputį čia painiojiesi, na kiek mano žinios neša

Kiek man žinoma, autoritetinga kompanija už tave pasirašo sertifikatus tada, kada prie tavo servisų jungiasi trečiosios šalys, t.y. https atveju svarbu, kad kažkas kitas didžiai gerbiamas patvirtintų, jog sertifikatas tikras.

Jei sertifikatas naudojamas asmeninėms reikmėms - pats jį pasirašai ir pats sau esi tas kažkas, nes sertifikato raktą pats sau sugeneruoji, kitu atveju tai padarytų kažkas už 1 dolerį

Kito rakto be tavo slaptažodžio ir tavo ca sertifikato sugeneruoti neįmanoma, taigi pats sau esi autoritetas

T
Techtronic
Mindaugas N.
  • 12 Grd '14

@Ghost rašė:
Kiek man žinoma, autoritetinga kompanija už tave pasirašo sertifikatus tada, kada prie tavo servisų jungiasi trečiosios šalys, t.y. https atveju svarbu, kad kažkas kitas didžiai gerbiamas patvirtintų, jog sertifikatas tikras.

Ir ne tik del to, bet kad ir patvirtinu, kad jungiasi ten kur reikia, bei suprantama sifruotu ta procesa, todel ir vadinamas patikimu.

@Ghost rašė:
Kito rakto be tavo slaptažodžio ir tavo ca sertifikato sugeneruoti neįmanoma, taigi pats sau esi autoritetas

Well, del to galima kiek suabejoti hehe.

Geras example yra onion urls, visai nesenai faceb00k nusprende gauti toki url facebookcorewwwi.onion. Tokius onion urls generuoja pagal serverio public key, o tai reiskia, kad facebook naudojo brute-force tam. Dar vienas example yra Heartbleed bugas.

Kaip jau ir rasiau, cia jau paranojos lygis

G
  • 12 Grd '14

@Techtronic rašė:
Well, del to galima kiek suabejoti hehe.

Geras example yra onion urls, visai nesenai faceb00k nusprende gauti toki url facebookcorewwwi.onion. Tokius onion urls generuoja pagal serverio public key, o tai reiskia, kad facebook naudojo brute-force tam. Dar vienas example yra Heartbleed bugas.

Kaip jau ir rasiau, cia jau paranojos lygis

Taip. Parašiau šią pamokėlę paprastam žmogui

Tavo pavyzdys - kaip kvantinė mechanika, pasiekus tam tikrus energinius lygius, žaidimo taisyklės keičiasi

T
Techtronic
Mindaugas N.
  • 13 Grd '14

Pamoka tikrai naudinga, reiktu tokiu ir daugiau. Saugumas/privatumas visada buvo ir bus svarbu.

E
  • 13 Grd '14

Grįžtant į temą apei OpenVPN - prisijungimų (unikaliais IP) skaičius neribojamas?

G
  • 13 Grd '14

@eko rašė:
Grįžtant į temą apei OpenVPN - prisijungimų (unikaliais IP) skaičius neribojamas?

Nesupratau klausimo, bet bandysiu pataikyt.

10.x.x.x - teoriškai galima prijungt 254 x 256 x 256 kompiuterių, taigi ~16646144.
172.16.x.x ir 192.168.x.x atveju - 254 x 256 ~65024.

Klausimas tik, ar tavo aparatūra pajėgi tiek atlaikyti

Pagal mano pasiūlytą konfiguraciją skaičiai truputį kitokie:
10.x.x.x --> 64 x 64 x 64 prijungtų kompiuterių, taigi ~262144.
172.16.x.x ir 192.168.x.x atveju --> 64 x 64 ~4096.

Namų naudojimui, kaip matai, adresų ruožas daugiau nei pakankamas.

O šiaip niekas tavęs neriboja, apart paties IP protokolo.

E
  • 13 Grd '14

Dėkui.
Atsinaujino windowsuose avast'as ir prisiminiau, kad ji siūlo savo "safezone" (kitos AV turi savo pavadinimus) ir garsiai šaukia - būk internete nematomas! Ar AV jungiasi prie savo VPN ar tą nematomumą siūlo kitokiu būdu? (taip, klausimas ne visai linksistams, bet apskritai IT žmonėms).

T
Techtronic
Mindaugas N.
  • 13 Grd '14

SafeZone yra toks sandbox'as, tik pavadinimas komercinis

Galima ant GNU Linux paleisti toki jeigu yra pakankamai noro. As pats naudoju tokiems tikslams systemd-nspawn (chroot ant steroidu), stai kaip galima ji paleisti:

Pirmas step tai systemd, bet paprasciau instaliuoti modernia distra kuri jau naudoja systemd nei paciam rankomis instaliuoti.

Antras step susikurti env, man patinka naudoti /var/container (bet kur bus nera skirtumo).

mkdir /var/container

Toliau kuriam containers, rekomenduociau fedora tam arba debian
Fedora:

mkdir /var/container/fedora
dd if=/dev/zero of=/var/container/fedora.ext4 bs=1M count=5120
mkfs.ext4 /var/container/fedora.ext4 -L 'Fedora'
mount /var/container/fedora.ext4 /var/container/fedora
yum --nogpg --installroot=/var/container/fedora install systemd passwd yum fedora-release
umount /var/container/fedora

Debian:

mkdir /var/container/debian
dd if=/dev/zero of=/var/container/debian.ext4 bs=1M count=5120
mkfs.ext4 /var/container/debian.ext4 -L 'Debian'
mount /var/container/debian.ext4 /var/container/debian
sudo debootstrap --arch=i386 wheezy /var/container/debian
umount /var/container/debian

Dabar galima boot siuos images ir suprantama login. Panasiai kaip VirtualBox, tik toks budas yra paprastesnis ir naudoja maziau CPU resursu.

mount /var/container/debian.ext4 /var/container/debian
systemd-nspawn -D /var/container/debian

-D Nurodo direktorija, galima naudoti -b kad boot, tarkim taip:

mount /var/container/fedora.ext4 /var/container/fedora
sudo systemd-nspawn -bD /var/container/fedora

NOTE: Galima boot ir is images sukurtos, bet tam turit naudoti GPT.



Kaip matom galima stebeti procesus, logus ir tt. Suprantama, kad viska ka ten darot tik ten ir liks...

Daugiau suzinoti galima cia https://www.youtube.com/watch?v=s7LlUs5D9p4 (LinuxCon EU 2013 - Lennart Poettering)

T
Techtronic
Mindaugas N.
  • 13 Grd '14

Dar vienas gana pravartus stuff kuri siulo antivirusines yra Public DNS, as praleidau ne viena valanda testuodamas juos, gal kam bus idomus rezultatai

Taigi, ka siulo Public DNS?

  • Apsauga nuo virusu. Tarkim malware.lt ip adresas bus 127.0.0.1 arba redirektins i kita serveri kuriame pranes apie klaida.
  • Advertising protection. Pastebejau daugelis naudojasi ADBlock ir panasiai browseriu extensionas, bet kur kas geriau/greiciau blokuoti juos is DNS.
  • Privacy. Blokavimas tinklapiu kurie renka informacija apie jus.

Skamba sauniai? Bet yra tam ir minusu, jie yra labai leti, ir dazniausiai sunkiai tvarkosi su savo tikslais. Parasiau tam paprasta skripta kuris tikrina kelis tokius DNS serverius (atsargiai, jame gal dar yra veikianciu dns kurie nera saugus!). http://ix.io/2Uy/sh

Po atliktu testu http://ix.io/fhw nusprendziau paleisti savo Public DNS serveri, klauskit jeigu ka sudominau!