Buku "Linux beraksi"

gambar Hai, habrozhiteli! Dalam buku itu, David Clinton menjelaskan 12 proyek dunia nyata, termasuk mengotomatiskan sistem cadangan dan pemulihan, menyiapkan cloud file bergaya Dropbox pribadi, dan membuat server MediaWiki Anda sendiri. Dengan contoh-contoh menarik, Anda akan belajar tentang virtualisasi, pemulihan bencana, keamanan, cadangan, penerapan DevOps, dan pemecahan masalah sistem. Setiap bab diakhiri dengan ulasan rekomendasi praktis, daftar istilah baru, dan latihan.

Kutipan "10.1. Membuat OpenVPN Tunnel »


Dalam buku ini, saya sudah banyak berbicara tentang enkripsi. SSH dan SCP dapat melindungi data yang dikirimkan melalui koneksi jarak jauh (bab 3), enkripsi file memungkinkan Anda untuk melindungi data saat disimpan di server (bab 8), dan sertifikat TLS / SSL dapat melindungi data selama transmisi antara situs dan browser klien (bab 9). Tetapi terkadang data Anda membutuhkan perlindungan dalam jangkauan koneksi yang lebih luas. Misalnya, ada kemungkinan beberapa anggota tim Anda harus bekerja di jalan, menghubungkan ke jaringan melalui Wi-Fi melalui titik akses publik. Anda seharusnya tidak berasumsi bahwa semua titik akses tersebut aman, tetapi orang-orang Anda benar-benar membutuhkan cara untuk terhubung ke sumber daya perusahaan - dalam hal ini VPN akan membantu.

Terowongan VPN yang dirancang dengan baik menyediakan koneksi langsung antara klien jarak jauh dan server sedemikian rupa untuk menyembunyikan data saat ditransmisikan melalui jaringan yang tidak aman. Jadi apa Anda telah melihat banyak alat yang dapat melakukan ini dengan enkripsi. Nilai sebenarnya dari VPN adalah bahwa dengan membuka terowongan, Anda dapat menghubungkan jaringan jarak jauh, seolah-olah semuanya bersama-sama lokal. Dalam arti tertentu, Anda menggunakan solusi.

Dengan menggunakan jaringan luas seperti itu, administrator dapat melakukan tugasnya di server mereka dari mana saja. Tetapi, yang lebih penting, perusahaan dengan sumber daya yang didistribusikan di beberapa cabang dapat membuat semuanya terlihat dan dapat diakses oleh semua kelompok yang membutuhkannya, di mana pun mereka berada (Gbr. 10.1).

Terowongan itu sendiri tidak menjamin keamanan. Tetapi salah satu standar enkripsi dapat dimasukkan dalam struktur jaringan, yang secara signifikan meningkatkan tingkat keamanan. Terowongan yang dibuat menggunakan paket open source OpenVPN menggunakan enkripsi TLS / SSL yang sama yang sudah Anda baca. OpenVPN bukan satu-satunya pilihan yang tersedia untuk tunneling, tetapi salah satu yang paling terkenal. Ia diyakini sedikit lebih cepat dan lebih aman daripada protokol tunneling layer 2 alternatif yang menggunakan enkripsi IPsec.

Apakah Anda ingin semua orang di tim Anda berkomunikasi dengan aman satu sama lain saat berada di jalan atau bekerja di gedung yang berbeda? Untuk melakukan ini, Anda harus membuat server OpenVPN untuk memungkinkan berbagi aplikasi dan akses ke lingkungan jaringan lokal server. Agar ini berfungsi, cukup untuk memulai dua mesin virtual atau dua wadah: satu untuk bertindak sebagai server / host, dan yang lainnya untuk klien. Membuat VPN bukanlah proses yang mudah, jadi mungkin perlu beberapa menit untuk mendapatkan gambaran besarnya.

gambar

10.1.1. Mengkonfigurasi Server OpenVPN


Sebelum Anda mulai, saya akan memberi Anda nasihat yang bermanfaat. Jika Anda akan melakukan semuanya sendiri (dan saya sangat merekomendasikannya kepada Anda), Anda mungkin akan menemukan bahwa Anda bekerja dengan beberapa jendela terminal yang terbuka di Desktop, yang masing-masing terhubung ke mesinnya. Ada risiko bahwa pada titik tertentu Anda akan memasukkan perintah yang salah di jendela. Untuk menghindari ini, Anda dapat menggunakan perintah hostname untuk mengubah nama mesin yang ditampilkan pada baris perintah menjadi sesuatu yang dengan jelas akan memberi tahu Anda di mana Anda berada. Segera setelah Anda melakukan ini, Anda harus keluar dari server dan masuk lagi agar pengaturan baru berlaku. Begini tampilannya:

gambar

Mengikuti pendekatan ini dan menetapkan nama yang sesuai untuk setiap mesin yang bekerja dengan Anda, Anda dapat dengan mudah melacak di mana Anda berada.

Setelah menggunakan nama host, Anda mungkin menjumpai pesan Server OpenVPN-Server yang menjengkelkan tidak dapat diselesaikan ketika Anda menjalankan perintah berikut. Memperbarui file / etc / hosts dengan nama host baru yang sesuai harus memperbaiki masalah.

Mempersiapkan Server Anda untuk OpenVPN


Menginstal OpenVPN di server Anda memerlukan dua paket: openvpn dan easy-rsa (untuk mengontrol proses menghasilkan kunci enkripsi). Jika perlu, pengguna CentOS terlebih dahulu harus menginstal repositori epel-release, seperti yang Anda lakukan di bab 2. Untuk dapat memeriksa akses ke aplikasi server, Anda juga dapat menginstal server web Apache (apache2 untuk Ubuntu dan httpd pada CentOS).

Saat Anda menyiapkan server, saya menyarankan Anda untuk mengaktifkan firewall yang memblokir semua port kecuali 22 (SSH) dan 1194 (port OpenVPN default). Contoh ini menggambarkan bagaimana ufw akan bekerja di Ubuntu, tapi saya yakin Anda masih ingat program firewall CentOS dari bab 9:

# ufw enable # ufw allow 22 # ufw allow 1194 

Untuk memungkinkan perutean internal antar antarmuka jaringan pada server, Anda perlu menghapus komentar satu baris (net.ipv4.ip_forward = 1) dalam file /etc/sysctl.conf. Ini akan memungkinkan Anda untuk mengarahkan klien jarak jauh sesuai kebutuhan setelah mereka terhubung. Untuk membuat parameter baru berfungsi, jalankan sysctl -p:

 # nano /etc/sysctl.conf # sysctl -p 

Sekarang lingkungan server sudah sepenuhnya dikonfigurasi, tetapi ada hal lain yang harus dilakukan sebelum Anda siap: Anda harus menyelesaikan langkah-langkah berikut (kami akan mempertimbangkannya secara lebih rinci di bawah).

  1. Buat set kunci pada server untuk mengenkripsi infrastruktur kunci publik (PKI) menggunakan skrip yang datang dengan paket easy-rsa. Pada dasarnya, server OpenVPN juga bertindak sebagai otoritas sertifikasi sendiri (CA).
  2. Siapkan kunci yang sesuai untuk klien
  3. Konfigurasikan file server.conf untuk server
  4. Konfigurasikan klien OpenVPN Anda
  5. Periksa VPN Anda

Pembuatan Kunci Enkripsi


Agar tidak menyulitkan hidup Anda, Anda dapat mengonfigurasi infrastruktur utama Anda pada mesin yang sama di mana server OpenVPN berjalan. Namun, rekomendasi keamanan biasanya menyarankan menggunakan server CA terpisah untuk penyebaran di lingkungan produksi. Proses menghasilkan dan mengalokasikan sumber daya kunci enkripsi untuk digunakan dalam OpenVPN diilustrasikan pada Gambar. 10.2.

gambar

Ketika Anda menginstal OpenVPN, direktori / etc / openvpn / secara otomatis dibuat, tetapi belum ada apa-apa di dalamnya. Paket openvpn dan easy-rsa datang dengan file contoh template yang dapat Anda gunakan sebagai dasar untuk konfigurasi Anda. Untuk memulai proses sertifikasi, salin direktori templat easy-rsa dari / usr / share / ke / etc / openvpn dan ubah ke direktori easy-rsa /:

 # cp -r /usr/share/easy-rsa/ /etc/openvpn $ cd /etc/openvpn/easy-rsa 

Direktori easy-rsa sekarang akan berisi beberapa skrip. Di atas meja. 10.1 daftar alat yang akan Anda gunakan untuk membuat kunci.

gambar

Operasi ini membutuhkan hak akses root, jadi melalui sudo su Anda harus menjadi root.

File pertama yang akan Anda gunakan disebut vars dan berisi variabel lingkungan yang mudah digunakan saat membuat kunci. Anda perlu mengedit file untuk menggunakan nilai Anda sendiri alih-alih nilai default yang sudah ada. Seperti inilah tampilan file saya (Listing 10.1).

Listing 10.1. Fragmen utama dari file / etc / openvpn / easy-rsa / vars

 export KEY_COUNTRY="CA" export KEY_PROVINCE="ON" export KEY_CITY="Toronto" export KEY_ORG="Bootstrap IT" export KEY_EMAIL="info@bootstrap-it.com" export KEY_OU="IT" 

Menjalankan file vars akan memungkinkan Anda untuk mentransfer nilainya ke lingkungan shell, dari mana mereka akan dimasukkan dalam konten kunci baru Anda. Mengapa perintah sudo saja tidak berfungsi? Karena pada tahap pertama, kami mengedit skrip yang disebut vars, dan kemudian menerapkannya. Aplikasi dan berarti bahwa file vars mentransfer nilainya ke lingkungan shell, dari mana mereka akan dimasukkan dalam konten kunci baru Anda.

Pastikan untuk menjalankan kembali file menggunakan shell baru untuk menyelesaikan proses yang belum selesai. Ketika ini selesai, skrip akan meminta Anda untuk menjalankan skrip lain, clean-all, untuk menghapus konten apa pun di direktori / etc / openvpn / easy-rsa / keys /:

gambar

Secara alami, langkah selanjutnya adalah menjalankan skrip clean-all, diikuti oleh build-ca, yang menggunakan skrip pkitool untuk membuat sertifikat root. Anda akan diminta untuk mengonfirmasi pengaturan otentikasi yang disediakan oleh vars:

 # ./clean-all # ./build-ca Generating a 2048 bit RSA private key 

Selanjutnya adalah skrip build-key-server. Karena ia menggunakan skrip pkitool yang sama bersama dengan sertifikat root baru, Anda akan melihat pertanyaan yang sama untuk mengonfirmasi pembuatan pasangan kunci. Kunci akan diberikan nama berdasarkan argumen yang Anda berikan, yang, kecuali jika Anda memulai beberapa VPN di komputer ini, biasanya akan menjadi server, seperti dalam contoh:

 # ./build-key-server server [...] Certificate is to be certified until Aug 15 23:52:34 2027 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated 

OpenVPN menggunakan parameter yang dihasilkan oleh algoritma Diffie-Hellman (menggunakan build-dh) untuk menegosiasikan otentikasi untuk koneksi baru. File yang dibuat di sini tidak boleh rahasia, tetapi harus dibuat menggunakan skrip build-dh untuk kunci RSA yang saat ini aktif. Jika Anda membuat kunci RSA baru di masa mendatang, Anda juga perlu memperbarui file berdasarkan algoritma Diffie-Hellman:

 # ./build-dh 

Kunci sisi server Anda sekarang akan berada di direktori / etc / openvpn / easy-rsa / keys /, tetapi OpenVPN tidak mengetahui hal ini. Secara default, OpenVPN akan mencari kunci di / etc / openvpn /, jadi salin:

 # cp /etc/openvpn/easy-rsa/keys/server* /etc/openvpn # cp /etc/openvpn/easy-rsa/keys/dh2048.pem /etc/openvpn # cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn 

Mempersiapkan kunci enkripsi klien


Seperti yang telah Anda lihat, enkripsi TLS menggunakan pasangan kunci yang sesuai: satu diinstal pada server, dan lainnya pada klien jarak jauh. Ini berarti bahwa Anda akan memerlukan kunci klien. Pkitool teman lama kami adalah persis apa yang Anda butuhkan untuk ini. Dalam contoh ini, menjalankan program di direktori / etc / openvpn / easy-rsa /, kami meneruskan argumen klien untuk menghasilkan file yang disebut client.crt dan client.key:

 # ./pkitool client 

Dua file klien, bersama dengan file ca.crt asli, yang masih dalam direktori kunci /, sekarang harus ditransfer dengan aman ke klien Anda. Karena afiliasi dan hak akses mereka, ini mungkin tidak mudah. Pendekatan termudah adalah menyalin konten file sumber secara manual (dan tidak lain dari konten ini) ke terminal yang berjalan di desktop PC Anda (pilih teks, klik kanan padanya dan pilih Salin dari menu). Kemudian rekatkan ini ke file baru dengan nama yang sama yang Anda buat di terminal kedua yang terhubung ke klien Anda.

Tapi siapa pun bisa memotong dan menempel. Sebaliknya, pikirkan sebagai administrator, karena Anda tidak akan selalu memiliki akses ke GUI, di mana operasi cut / paste mungkin. Salin file ke direktori home pengguna Anda (sehingga operasi scp jarak jauh dapat mengaksesnya), dan kemudian gunakan chown untuk mengubah pemilik file dari root ke pengguna non-root biasa sehingga tindakan scp jauh dapat dilakukan. Pastikan semua file Anda saat ini diinstal dan dapat diakses. Anda akan memindahkannya ke klien sedikit kemudian:

 # cp /etc/openvpn/easy-rsa/keys/client.key /home/ubuntu/ # cp /etc/openvpn/easy-rsa/keys/ca.crt /home/ubuntu/ # cp /etc/openvpn/easy-rsa/keys/client.crt /home/ubuntu/ # chown ubuntu:ubuntu /home/ubuntu/client.key # chown ubuntu:ubuntu /home/ubuntu/client.crt # chown ubuntu:ubuntu /home/ubuntu/ca.crt 

Dengan satu set kunci enkripsi lengkap yang siap beraksi, Anda perlu memberi tahu server bagaimana Anda ingin membuat VPN. Ini dilakukan menggunakan file server.conf.

Kurangi jumlah penekanan tombol

Terlalu banyak untuk dicetak? Ekstensi dengan tanda kurung akan membantu mengurangi enam perintah ini menjadi dua. Saya yakin Anda dapat mempelajari dua contoh ini dan memahami apa yang terjadi. Lebih penting lagi, Anda dapat memahami bagaimana menerapkan prinsip-prinsip ini pada operasi yang melibatkan puluhan atau bahkan ratusan elemen:

 # cp /etc/openvpn/easy-rsa/keys/{ca.crt,client.{key,crt}} /home/ubuntu/ # chown ubuntu:ubuntu /home/ubuntu/{ca.crt,client.{key,crt}} 


Menyiapkan file server.conf


Bagaimana Anda bisa tahu seperti apa file server.conf? Ingat templat direktori rsa mudah yang Anda salin dari / usr / share /? Selama instalasi OpenVPN, file template konfigurasi terkompresi tetap, yang dapat Anda salin ke / etc / openvpn /. Saya akan membangun fakta bahwa templat telah diarsipkan dan memperkenalkan Anda ke alat yang berguna: zcat.

Anda sudah tahu tentang menampilkan isi teks dari suatu file menggunakan perintah cat, tetapi bagaimana jika file tersebut dikompres menggunakan gzip? Anda selalu dapat membuka zip file, dan kemudian cat akan dengan senang hati menampilkannya, tetapi ini satu atau dua langkah lebih dari yang diperlukan. Sebagai gantinya, karena Anda mungkin sudah menebak, Anda dapat memasukkan perintah zcat untuk memuat teks yang belum dibongkar ke dalam memori dalam satu langkah. Dalam contoh berikut, alih-alih mencetak teks di layar, Anda mengarahkannya ke file baru bernama server.conf:

 # zcat \ /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz \ > /etc/openvpn/server.conf $ cd /etc/openvpn 

Kami mengesampingkan dokumentasi yang luas dan berguna yang menyertai file dan melihat bagaimana kelihatannya ketika Anda selesai mengedit. Perhatikan bahwa titik koma (;) memberi tahu OpenVPN untuk tidak membaca atau mengeksekusi baris berikutnya (Listing 10.2).

gambar

Mari kita pergi melalui beberapa pengaturan ini.

  • Secara default, OpenVPN berfungsi melalui port 1194. Anda dapat mengubah ini, misalnya, untuk menyembunyikan tindakan Anda lebih banyak atau untuk menghindari konflik dengan terowongan aktif lainnya. Karena 1194 membutuhkan koordinasi minimal dengan pelanggan, ini paling baik dilakukan.
  • OpenVPN menggunakan baik Transmission Control Protocol (TCP) atau User Datagram Protocol (UDP) untuk transfer data. TCP mungkin sedikit lebih lambat, tetapi lebih dapat diandalkan dan lebih mungkin dipahami oleh aplikasi yang berjalan di kedua ujung terowongan.
  • Anda dapat memberitahu dev tun ketika Anda ingin membuat terowongan IP yang lebih sederhana dan lebih efisien yang mentransmisikan isi data dan tidak lebih. Jika, di sisi lain, Anda perlu menghubungkan beberapa antarmuka jaringan (dan jaringan yang mereka wakili) dengan membuat jembatan Ethernet, Anda harus memilih dev tap. Jika Anda tidak mengerti apa artinya semua ini, gunakan argumen tun.
  • Empat baris berikutnya meneruskan nama OpenVPN dari tiga file otentikasi pada server dan file pengaturan dh2048 yang Anda buat sebelumnya.
  • Baris server menetapkan rentang dan subnet mask yang akan digunakan untuk menetapkan alamat IP kepada klien saat login.
  • Parameter push opsional "route 10.0.3.0 255.255.255.0" memungkinkan klien jarak jauh untuk mengakses subnet pribadi di belakang server. Untuk melakukan pekerjaan ini, Anda juga perlu mengkonfigurasi jaringan di server itu sendiri, sehingga subnet pribadi tahu tentang subnet OpenVPN (10.8.0.0).
  • Port-share localhost 80 line memungkinkan Anda untuk mengarahkan lalu lintas klien yang datang melalui port 1194 ke server web lokal mendengarkan pada port 80. (Ini akan berguna jika Anda bermaksud menggunakan server web untuk menguji VPN Anda.) Ini hanya berfungsi jika ketika protokol tcp dipilih.
  • Pengguna yang tidak ada dan garis grup nogroup pengguna harus aktif - untuk melakukan ini, hapus tanda titik koma (;). Memaksa klien jarak jauh untuk bekerja di bawah tidak ada orang dan nogroup memastikan bahwa sesi di server tidak terjangkau.
  • log menunjukkan bahwa entri log saat ini akan menimpa entri lama setiap kali OpenVPN dimulai, sementara log-tambahkan menambahkan entri baru ke file log yang ada. File openvpn.log sendiri ditulis ke direktori / etc / openvpn /.

Selain itu, nilai klien-ke-klien juga sering ditambahkan ke file konfigurasi sehingga beberapa klien dapat saling melihat di samping server OpenVPN. Jika Anda puas dengan konfigurasi Anda, maka Anda dapat memulai server OpenVPN:

 # systemctl start openvpn 

Karena sifat hubungan yang berubah antara OpenVPN dan systemd, sintaks berikut kadang-kadang diperlukan untuk memulai layanan: systemctl mulai openvpn @ server.

Menjalankan ip addr untuk menampilkan daftar antarmuka jaringan server Anda sekarang seharusnya menampilkan tautan ke antarmuka baru bernama tun0. OpenVPN akan membuatnya untuk melayani klien yang masuk:

 $ ip addr [...] 4: tun0: mtu 1500 qdisc [...] link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever 

Anda mungkin perlu me-restart server sebelum semuanya mulai berfungsi sepenuhnya. Perhentian berikutnya adalah komputer klien.

10.1.2. Konfigurasi Klien OpenVPN


Secara tradisional, terowongan dibangun dengan setidaknya dua jalan keluar (jika tidak kita akan menyebutnya gua). OpenVPN yang dikonfigurasi dengan benar di server mengarahkan lalu lintas ke dan dari terowongan di satu sisi. Tetapi Anda juga memerlukan beberapa jenis perangkat lunak sisi klien, yaitu di ujung lain dari terowongan.

Pada bagian ini, saya akan fokus pada pengaturan secara manual komputer Linux dari satu jenis atau lainnya untuk bekerja sebagai klien OpenVPN. Tapi ini bukan satu-satunya cara kesempatan ini tersedia. OpenVPN mendukung aplikasi klien yang dapat diinstal dan digunakan pada komputer desktop dan laptop dengan Windows atau macOS, serta pada ponsel cerdas dan tablet berbasis Android dan iOS. Lihat openvpn.net untuk detailnya.

Paket OpenVPN perlu diinstal pada komputer klien, seperti yang diinstal pada server, meskipun tidak perlu untuk rsa mudah, karena kunci yang Anda gunakan sudah ada. Anda perlu menyalin file templat client.conf ke direktori / etc / openvpn / yang baru saja Anda buat. Kali ini file tidak akan diarsipkan, jadi perintah cp biasa akan melakukan tugas ini dengan sempurna:

 # apt install openvpn # cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf \ /etc/openvpn/ 

Sebagian besar pengaturan dalam file client.conf Anda akan sangat mudah: mereka harus cocok dengan nilai-nilai di server. Seperti yang Anda lihat dari contoh file berikut, parameter uniknya adalah remote 192.168.1.23 1194, yang memberi tahu klien alamat IP server. Sekali lagi, pastikan ini adalah alamat server Anda. Anda juga harus memaksa komputer klien untuk mengotentikasi sertifikat server untuk mencegah kemungkinan serangan man-in-the-middle. Salah satu cara untuk melakukan ini adalah menambahkan server remote-cert-tls baris (Listing 10.3).

gambar

Sekarang Anda dapat pergi ke direktori / etc / openvpn / dan mengekstrak kunci sertifikasi dari server. Ganti alamat IP server atau nama domain dalam contoh dengan nilai-nilai Anda:

gambar

Tidak ada yang menarik yang mungkin terjadi sampai Anda menjalankan OpenVPN pada klien. Karena Anda harus melewati beberapa argumen, Anda akan melakukan ini dari baris perintah. Argumen --tls-client memberi tahu OpenVPN bahwa Anda akan bertindak sebagai klien dan terhubung menggunakan enkripsi TLS, dan --config menunjuk ke file konfigurasi Anda:

 # openvpn --tls-client --config /etc/openvpn/client.conf 

Baca output dari perintah dengan hati-hati untuk memastikan Anda terhubung dengan benar. Jika untuk pertama kalinya terjadi kesalahan, ini mungkin disebabkan oleh ketidakcocokan antara pengaturan antara server dan file konfigurasi klien atau masalah koneksi jaringan / firewall. Berikut ini beberapa kiat pemecahan masalah.

  • Baca dengan cermat keluaran operasi OpenVPN pada klien. Seringkali berisi nasihat berharga tentang apa yang sebenarnya tidak dapat dilakukan dan mengapa.
  • Periksa pesan kesalahan di file openvpn.log dan openvpn-status.log di direktori / etc / openvpn / di server.
  • Periksa pesan yang terkait dengan OpenVPN dan waktu yang sesuai dalam log sistem di server dan klien. (jurnalct -ce akan menampilkan entri terbaru.)
  • Pastikan Anda memiliki koneksi jaringan aktif antara server dan klien (untuk detail lebih lanjut, lihat bab 14).

Tentang penulis


David Clinton adalah administrator sistem, guru, dan penulis. Dia mengelola, menulis tentang hal itu dan menciptakan materi pelatihan untuk banyak disiplin ilmu teknis yang penting, termasuk sistem Linux, komputasi awan (khususnya AWS) dan teknologi wadah seperti Docker. Dia menulis buku Learn Amazon Web Services dalam Sebulan Makan Siang (Manning, 2017). Banyak tutorial videonya dapat ditemukan di Pluralsight.com, dan tautan ke buku-bukunya yang lain (tentang administrasi Linux dan virtualisasi server) tersedia di bootstrap-it.com .

»Informasi lebih lanjut tentang buku ini dapat ditemukan di situs web penerbit
» Isi
» Kutipan

Kupon diskon 25% untuk penjaja - Linux
Setelah pembayaran versi kertas buku, sebuah buku elektronik dikirim melalui email.

Source: https://habr.com/ru/post/id461879/


All Articles