Banyak OpenVPN di Windows Server dan Mikrotik dengan migrasi barang ini ke Linux

Bagus

Setiap perusahaan, cepat atau lambat, tiba-tiba, ia membutuhkan akses jarak jauh.
Praktis setiap spesialis IT dihadapkan dengan kebutuhan untuk mengatur akses jarak jauh ke jaringan mereka di perusahaan.
Saya, seperti banyak orang, kebutuhan ini ditutup dengan cap "kemarin." Setelah menganalisis semua pro dan kontra, serta menyekop berton-ton informasi dan menggali sedikit dalam teori, saya memutuskan untuk melanjutkan dengan instalasi.

Untuk alasan keamanan, saya memilih OpenVPN dalam implementasi berikut: mesin virtual diinstal pada server yang menjalankan Windows Server 2012, Windows Server 2012 juga diinstal di dalamnya, dan pada gilirannya, adalah server OpenVPN yang menerbitkan dan menandatangani sertifikat.

Untuk kenyamanan, kami akan menyebutnya "server sertifikasi". Selanjutnya, ia mengambil sertifikat server, mendorongnya ke Mikrotik, dan pada router Mikrotik mengangkat OpenVPN dengan akun, profil. Saya juga menggunakan server sertifikasi untuk mengeluarkan sertifikat klien.

Implementasinya, tentu saja, mengerikan, dan meskipun pada waktu itu pengalaman saya dalam hal-hal seperti itu, katakanlah, tidak cukup, dalam hal keamanan, itu bukan keputusan yang buruk.

Bundel ini berfungsi untuk sementara waktu dan saya diberi pengantar baru: mentransfer server sertifikasi ke Linux, sambil mempertahankan koneksi dengan Mikrotik - klien tidak boleh menderita.

Pengetahuan saya tentang Linux pada waktu itu berakhir pada Ubuntu 16.04LTS dengan antarmuka grafis yang digunakan sebagai terminal untuk terhubung melalui RDP ke server Windows. Yaitu, sudo apt-get -f install -y, dan tidak lebih dari satu sentimeter.

Setelah mempelajari pertanyaan OS mana dari keluarga Linux yang lebih stabil dan menjanjikan untuk organisasi saya, saya memilih CentOS 7 Minimal.

Untuk memulainya, saya memutuskan untuk mempelajari sedikit teori, untuk memahami cara kerjanya dan bekerja secara umum. Saya menonton tutorial video di saluran www.youtube.com/channel/UCKdRgZWgy42YxoFcTJ30LTA (Umumnya bukan iklan, mereka hanya membuat saya lebih dulu). Gadis dengan suara yang menyenangkan memperkenalkan saya pada dasar-dasar bekerja di OS yang dipilih.

Untuk memulai, saya meluncurkan Hyper-V di komputer saya, menginstal CentOS 7 Minimal di sana, selama instalasi saya membuat pengguna Admin dan benar-benar menutup ssh untuk root. Mengucapkan selamat tinggal pada layar multi-warna yang indah, terjun ke dunia terminal hitam dan putih.

Saya pikir tidak masuk akal untuk menggambarkan proses instalasi perangkat lunak, lebih baik untuk fokus pada masalah yang muncul selama proses dan untuk memecahkan yang saya harus menulis skrip kecil (itu di bawah kucing. Deskripsi masing-masing utilitas dapat ditemukan di Internet, tetapi pada saat itu ketika saya semua apakah itu, skrip ini belum ada di sana, semuanya dilakukan untuk pertama kalinya, dengan sentuhan dan secara acak).

Dalam skrip, saya mencoba mengotomatiskan instalasi utilitas minimum yang diperlukan untuk server, menonaktifkan Selinux, menghubungkan repositori Epel, menginstal OpenVPN, dll. Di bawah ini adalah skrip itu sendiri, itu sederhana, tetapi dapat digunakan. Saya tidak akan membongkarnya, tetapi jika seseorang membutuhkannya, tulis balasan.

Setelah menggunakan skrip, server OpenVPN yang sudah dikonfigurasi akan muncul, mengedipkan mata hijau.

UPD: Membuat beberapa penyesuaian pada skrip, menarik kesimpulan dari komentar. Dia tidak mulai menghapus kesalahannya, tetapi hanya berkomentar sehingga utas komentar tidak akan hilang. Garis yang ditambahkan didorong kembali untuk visibilitas.

#!/bin/bash cd /etc/sysconfig/ sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' selinux sudo setenforce 0 cd /home/Admin sudo yum update -y sudo yum install epel-release -y sudo yum install mc -y sudo yum install nano -y sudo cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax sudo yum install chrony -y sudo systemctl start chronyd sudo systemctl enable chronyd sudo yum install net-tools -y sudo yum install iftop -y sudo yum install htop -y sudo yum install lsof -y sudo yum install dos2unix -y sudo yum install wget -y sudo yum install tcpdump -y sudo yum install openvpn -y wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.3/EasyRSA-3.0.3.tgz sudo tar -xvzf EasyRSA-3.0.3.tgz #sudo chown -R Admin:Admin /var/log #sudo chmod 755 /var/log sudo mkdir /var/log/openvpn sudo mkdir /etc/openvpn/ccd sudo chown -R Admin:Admin /etc/openvpn/ccd sudo chown -R Admin:Admin /var/log/openvpn chmod 755 /etc/openvpn/ccd chmod 755 /var/log/openvpn echo >/var/log/openvpn/openvpn-status.log echo >/var/log/openvpn/openvpn.log #sudo chown -R Admin:Admin /etc/resolv.conf sudo chmod 777 /etc/resolv.conf echo nameserver 8.8.8.8 >>/etc/resolv.conf chmod 755 /etc/resolv.conf cd /etc/openvpn/ sudo /home/Admin/EasyRSA-3.0.3/easyrsa init-pki sudo chown -R Admin:Admin /etc/openvpn chmod 755 /etc/openvpn echo set_var EASYRSA_DN "org" >/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_COUNTRY "RU" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_KEY_SIZE 4096 >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_PROVINCE "LIP" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_CITY "Lipetsk" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_ORG "Cool-Admin" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_EMAIL "xxx.ru" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_OU "Our_ORG" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_REQ_CN "changeme" >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_CERT_EXPIRE 3650 >>/home/Admin/EasyRSA-3.0.3/test echo set_var EASYRSA_DH_KEY_SIZE=2048 >>/home/Admin/EasyRSA-3.0.3/test sudo /home/Admin/EasyRSA-3.0.3/easyrsa build-ca nopass sudo /home/Admin/EasyRSA-3.0.3/easyrsa build-server-full Serv nopass sudo /home/Admin/EasyRSA-3.0.3/easyrsa build-client-full Client1 nopass sudo /home/Admin/EasyRSA-3.0.3/easyrsa --vars=vars gen-dh sudo /home/Admin/EasyRSA-3.0.3/easyrsa --vars=vars gen-crl mkdir keys sudo chown -R Admin:Admin /etc/openvpn/keys chmod 755 /etc/openvpn/keys sudo cp /etc/openvpn/pki/ca.crt /etc/openvpn/keys sudo cp /etc/openvpn/pki/dh.pem /etc/openvpn/keys sudo cp /etc/openvpn/pki/crl.pem /etc/openvpn/keys sudo cp /etc/openvpn/pki/issued/Serv.crt /etc/openvpn/keys sudo cp /etc/openvpn/pki/private/Serv.key /etc/openvpn/keys echo port 443 >/etc/openvpn/server.conf echo proto udp >>/etc/openvpn/server.conf echo dev tun >>/etc/openvpn/server.conf echo ca /etc/openvpn/keys/ca.crt >>/etc/openvpn/server.conf echo cert /etc/openvpn/keys/Serv.crt >>/etc/openvpn/server.conf echo key /etc/openvpn/keys/Serv.key >>/etc/openvpn/server.conf echo dh /etc/openvpn/keys/dh.pem >>/etc/openvpn/server.conf echo crl-verify /etc/openvpn/keys/crl.pem >>/etc/openvpn/server.conf echo client-config-dir /etc/openvpn/ccd >>/etc/openvpn/server.conf echo topology subnet >>/etc/openvpn/server.conf echo server 172.21.0.0 255.255.255.0 >>/etc/openvpn/server.conf echo route 172.21.0.0 255.255.255.0 >>/etc/openvpn/server.conf echo push \"dhcp-option DNS 8.8.8.8\" >>/etc/openvpn/server.conf echo push \"dhcp-option DNS 8.8.4.4\" >>/etc/openvpn/server.conf echo keepalive 10 120 >>/etc/openvpn/server.conf echo persist-key >>/etc/openvpn/server.conf echo persist-tun >>/etc/openvpn/server.conf echo status /var/log/openvpn/openvpn-status.log >>/etc/openvpn/server.conf echo log-append /var/log/openvpn/openvpn.log >>/etc/openvpn/server.conf echo verb 2 >>/etc/openvpn/server.conf echo mute 20 >>/etc/openvpn/server.conf echo daemon >>/etc/openvpn/server.conf echo mode server >>/etc/openvpn/server.conf echo user nobody >>/etc/openvpn/server.conf echo group nobody >>/etc/openvpn/server.conf #sudo chown -R Admin:Admin /etc/sysctl.conf chmod 777 /etc/sysctl.conf echo net.ipv4.ip_forward=1 >>/etc/sysctl.conf chmod 755 /etc/sysctl.conf sudo sysctl -p /etc/sysctl.conf sudo systemctl enable openvpn@server sudo systemctl start openvpn@server sudo systemctl status openvpn@server 

Menginstal OpenVPN tidak sepenuhnya berhasil.

Tidak tahu tentang fitur-fitur kebijakan hak pada sistem Linux, saya menghabiskan banyak waktu mempelajari log dan memberikan semua file hak yang diperlukan.

Ketika tombol OpenVPN berubah menjadi hijau, saya sangat senang, tetapi ternyata, ini hanya permulaan. Demi kesederhanaan, saya berharap untuk mengganti sertifikat root dan file crl.pem, berharap semuanya bekerja. Akibatnya, saya perlu mentransfer file berikut dari server ke Windows:

Serv.crt - Sertifikat Server
Serv.key - Server Key
Ca.crt - Root Certificate
Ca.key - Root Key
Crl.pem - File Pencabutan Sertifikat
Dh.pem - Kunci Diffie-Hellman
Index.txt - File dengan informasi tentang sertifikat saat ini
Serial - itu juga bertanggung jawab untuk relevansi sertifikat

Itu juga memerlukan folder certs_by_serial, file vars, dan semua kunci dan sertifikat klien.
Di Mikrotik, sertifikat tetap di tempatnya, jadi berhasil.

Masalah muncul ketika saya mencoba untuk mencabut sertifikat, itu sama sekali tidak bekerja dari kata - file index.txt perlu dikonversi ke format unix, tetapi saya tidak segera melakukannya. Menggunakan utilitas dos2unix.

Sekarang sertifikat dicabut, tetapi terus bekerja tanpa masalah, karena Mikrotik tidak tahu bahwa itu dicabut dan dia perlu entah bagaimana menginformasikannya.

Setelah membaca instruksi, serta berkonsultasi dengan Alexander ERI (terima kasih banyak!), Saya mengambil server http Apache sederhana di server sertifikasi dan menerbitkan file sertifikat yang dicabut di atasnya. Akses tertutup sepenuhnya untuk itu, kecuali untuk file yang diterbitkan dari satu ip.

Di terminal Mikrotik, di tab / System / Certificates / CRL, ditunjukkan jalur ke crl.pem yang diterbitkan. Di sini harus diklarifikasi bahwa Mikrotik hanya menerima http dan alamat absolut untuk tab CRL, mis. Seharusnya terlihat seperti ini: 127.0.0.1/crl/1.crl
Semuanya berfungsi, setidaknya untuk versi 6.4.2.x dari RouterOS, tetapi saya harus membuat konfigurasi klien dengan tangan saya, dan ini sangat disayangkan bagi saya dan menyebabkan banyak ketidaknyamanan. Ketika dalam seminggu saya perlu membuat konfigurasi untuk sekitar 50 klien, saya memutuskan untuk mempercepat proses ini dan untuk ini saya menggunakan sepotong skrip orang lain yang ditemukan di Internet.

Scriptnya bekerja seperti ini: setelah diluncurkan, tentukan "nama klien", jawab pertanyaan "setel kata sandi atau tidak", setelah itu kita ambil file konfigurasi "client.ovpn" yang sudah jadi, dengan sertifikat dan pengaturan yang diintegrasikan ke dalamnya. Untuk menggunakannya, Anda harus memiliki / etc / openvpn. Saya akan menandatangani garis komenty di mana jalan harus diganti dengan Anda sendiri. Anda juga perlu membuat file dengan pengaturan klien sehingga skrip menggantikannya dalam proses membuat konfigurasi.

 #!/bin/bash function newClient () { echo "" echo "Tell me a name for the client." echo "Use one word only, no special characters." until [[ "$CLIENT" =~ ^[a-zA-Z0-9_]+$ ]]; do read -rp "Client name: " -e CLIENT done echo "" echo "Do you want to protect the configuration file with a password?" echo "(eg encrypt the private key with a password)" echo " 1) Add a passwordless client" echo " 2) Use a password for the client" until [[ "$PASS" =~ ^[1-2]$ ]]; do read -rp "Select an option [1-2]: " -e -i 1 PASS done #cd /etc/openvpn/easy-rsa/ || return case $PASS in 1) sudo /home/admin/EasyRSA-3.0.3/easyrsa build-client-full "$CLIENT" nopass ;; 2) echo "You will be asked for the client password below" ./easyrsa build-client-full "$CLIENT" ;; esac # Generates the custom client.ovpn cp /etc/openvpn/client-template.txt "$home/home/admin/IT/Temp/$CLIENT.ovpn" #       . #,      { echo "<ca>" cat "/etc/openvpn/pki/ca.crt" #    echo "</ca>" echo "<cert>" awk '/BEGIN/,/END/' "/etc/openvpn/pki/issued/$CLIENT.crt" #   #  echo "</cert>" echo "<key>" cat "/etc/openvpn/pki/private/$CLIENT.key" #     echo "</key>" } >> "$home/home/admin/IT/Temp/$CLIENT.ovpn" #,     # echo "" echo "Client $CLIENT added, the configuration file is available at $home/admin/IT/OVPN/Temp/$CLIENT.ovpn." echo "Download the .ovpn file and import it in your OpenVPN client." exit 0; } newClient 

Setelah beberapa saat, larangan pengantar baru pada akses jarak jauh terpaksa membunuh server ini dan bundel yang berfungsi dengan Mikrotik. Server OpenVPN baru dibuat untuk departemen TI, yang sekarang berfungsi sepenuhnya di CentOS. Tetapi ini adalah kisah yang sangat berbeda.

Saya mengucapkan terima kasih kepada Ivan dan Pavel atas bantuan mereka dalam mengedit artikel.

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


All Articles