Pokrećemo OpenVPN u Dockeru za 2 sekunde

Pozdrav, Habrani! Jeste li ikada doživjeli situaciju kada biste željeli virtualno preseliti u drugi grad, zemlju ili čak na drugi kontinent? Ta mi se potreba često javlja, pa mi je mogućnost da imam svoj VPN server, koji mogu pokrenuti bilo gdje u nekoliko sekundi, bila od velike važnosti. U ovom članku želim pričati o svom projektu koji sam osmislio dok sam tražio rješenje, u ovom slučaju Docker sliku, koja bi brzo podigla OpenVPN server s minimalnim postavkama i prihvatljivim razinama sigurnosti.

Pokrećemo OpenVPN u Dockeru za 2 sekunde

Povijest

Mogućnost pokretanja usluge na bilo kojoj mašini: bilo da je to fizički server, virtualni privatni server ili čak kontejnerski prostor unutar drugog sustava za upravljanje kontejnerima — bila je od kritične važnosti. Moj je pogled odmah pao na Docker. Prvo, ova usluga stječe popularnost, a stoga sve više i više pružatelja nudi gotova rješenja s njegovom predinstalacijom; drugo — postoji centralizirano skladište slika s kojeg možete preuzeti i pokrenuti uslugu pomoću jedne naredbe u terminalu. Mislio sam da bi takav projekt već trebao postojati i neprestano sam tražio. No, većina projekata koje sam našao bila su ili previše zamorna (trebalo je stvoriti kontejner za trajno pohranjivanje podataka i nekoliko puta pokrenuti kontejner s aplikacijom s različitim parametrima), ili bez razumnog dokumenata, ili jednostavno napuštena. Ne pronalazeći ništa prikladno, započeo sam rad na svom projektu. Pred sobom sam imao besane noći proučavanja dokumentacije, pisanja koda i ispravljanja grešaka, ali na kraju je moja usluga ugledala svjetlo dana i zasjala svim bojama monokromatske LED ploče rutera. Dakle, molim vas, dobrodošli — Docker-OpenVPN. Smislio sam logo (gore, prije odjeljka), ali nemojte ga previše kritizirati, jer nisam dizajner (više). Kada sam realizirao ovaj projekt, brzina implementacije, minimalna podešavanja i prihvatljiva razina sigurnosti bili su mi na prvom mjestu. Metodom pokušaja i pogrešaka pronašao sam optimalnu ravnotežu ovih kriterija, iako sam nekad morao žrtvovati brzinu implementacije zbog sigurnosti, a za minimalna podešavanja platiti prenosivosti: u trenutnoj konfiguraciji, jednom stvoreni kontejner na jednom poslužitelju ne može se prenijeti i pokrenuti na drugom. Na primjer, svi klijentski i serverski certifikati generiraju se prilikom pokretanja usluge, i to traje oko 2 sekunde. Međutim, generaciju Defi-Hellman datoteke morao sam prebaciti u vrijeme gradnje: ona se stvara tijekom izgradnje Docker slike i može trajati do 10 minuta. Bio bih vrlo zahvalan za sigurnosni audit takvog rješenja od ugledne zajednice.

Pokretanje

Da pokrenemo uslugu, potrebne su nam sljedeće stvari:

  1. Poslužitelj: fizički ili virtualni. Teoretski je moguće pokretati u načinu Docker-u-u-Dockeru, ali nisam provodio opsežno testiranje te opcije;
  2. Zapravo Docker. Mnogi pružatelji hosting usluga nude gotova rješenja s Docker-om 'na brodu';
  3. Javni IP adresa.

Ako su svi podaci na mjestu, sljedeće nam je samo pokrenuti sljedeću naredbu u konzoli vašeg poslužitelja:

docker run --cap-add=NET_ADMIN 
-it -p 1194:1194/udp -p 80:8080/tcp 
-e HOST_ADDR=$(curl -s https://api.ipify.org) 
alekslitvinenk/openvpn

Pažljivi čitatelj mogao je primijetiti da se IP adresa poslužitelja automatski određuje putem ipify.org. Ako iz nekog razloga to ne funkcionira, adresa se može navesti ručno. Ako su svi prethodni koraci ispravno izvršeni, trebali bismo vidjeti nešto slično u konzoli:

Sun Jun  9 08:56:11 2019 Inicijalizacija završena
Sun Jun  9 08:56:12 2019 Datoteka Client.ovpn je generirana
Sun Jun  9 08:56:12 2019 Config server pokrenut, preuzmite svoju client.ovpn konfiguraciju na http://example.com/
Sun Jun  9 08:56:12 2019 NAPOMENA: Nakon preuzimanja vaše klijentske konfiguracije, HTTP poslužitelj će se isključiti!

Blizu smo cilju: sada trebamo kopirati example.com (u vašem slučaju će to biti adresa vašeg poslužitelja) i umetnite je u adresnu traku preglednika. Nakon što pritisnete Enter, client.ovpn datoteka će se preuzeti, a sam HTTP poslužitelj će nestati. Ako ovo rješenje izaziva sumnju, možete isprobati sljedeći trik: pokrenuti prethodnu naredbu i dodati oznake zp i lozinku. Sada, ako umetnete generiranu vezu u prozor preglednika — dobit ćete zip arhivu s lozinkom. Kada imate datoteku s klijentskom konfiguracijom, možete koristiti bilo kojeg pogodnog klijenta. Ja koristim Tunnelblick za Mac.

Video tutorial

Ovaj video tutorial sadrži detaljne upute za postavljanje usluge na DigitalOcean.

Pogledajte video
P.S. Ako smatrate da je ovaj projekt koristan, molimo vas da mu date zvjezdicu na GitHubu, napravite fork i ispričajte prijateljima. Donatori i revizori sigurnosti su također vrlo dobrodošli.P.S. Ako ovaj članak dospije na Habr, planiram napisati sljedeći o tome kako sam pokrenuo docker-u-docker i docker-u-docker-u-docker, zašto sam to radio i što je iz toga proizašlo.
EDIT1:
  1. Ispravio sam greške u objavi,
  2. Odgovarajući na komentare, odlučio sam iznijeti te informacije ovdje: oznaka —privileged je potrebna za rad s iptables

EDIT2:

  1. Poboljšao sam naredbu za pokretanje slike: sada ne zahtijeva oznaku —privileged
  2. Dodao sam vezu na video vodič na ruskom jeziku: youtu.be/A8zvrHsT9A0

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster