Bunch OpenVPN em Windows Server e Mikrotik com a migração disso tudo em Linux

Boa

Toda empresa, mais cedo ou mais tarde, precisa de acesso remoto.
Quase todos os especialistas em TI enfrentam a necessidade de organizar o acesso remoto às suas redes em uma empresa.

Para mim, como muitos outros, essa necessidade me atingiu como se fosse “ontem”. Depois de analisar todos os prós e contras, além de vasculhar toneladas de informações e fuçar um pouco na teoria, decidi prosseguir com a instalação.

Por razões de segurança, foi escolhido. OpenVPN Na próxima implementação: em um servidor com um sistema operacional. Windows Server Em 2012, uma máquina virtual foi instalada nele. Windows Server 2012, e nele, por sua vez, o servidor OpenVPN, que emitiu e assinou certificados.

Para simplificar, vamos chamá-lo de "servidor de certificados". Em seguida, peguei o certificado do servidor, inseri-o no Mikrotik e o ativei no próprio roteador Mikrotik. OpenVPN com contas e perfis. Um servidor de certificação também foi usado para emitir certificados de cliente.

A implementação, claro, foi terrível e, embora naquela altura a minha experiência neste tipo de coisas não fosse, digamos, suficiente, em questões de segurança não foi a pior decisão.

Essa conexão funcionou por algum tempo e recebi uma nova instrução: mover o servidor de certificação para Linux, mantendo a conexão com a Mikrotik - os clientes não devem ser prejudicados.

Meu conhecimento de Linux naquele momento terminou em Ubuntu 16.04 LTS com interface gráfica, que era usada como terminal para conexão via RDP ao servidor. WindowsOu seja, execute o comando `sudo apt-get -f install -y`, sem especificar um centímetro a mais.

Tendo estudado a questão de qual sistema operacional é Linux A família é mais estável e promissora para a minha organização, então optei por ela. CentOS 7 Mínimo.

Para começar, resolvi me aprofundar um pouco na teoria, para entender como ela geralmente funciona e funciona. Assisti vídeo aulas no canal www.youtube.com/channel/UCKdRgZWgy42YxoFcTJ30LTA (Não é um anúncio, foram apenas os primeiros que encontrei). Uma garota com uma voz agradável me apresentou os fundamentos do trabalho no sistema operacional escolhido.

Primeiro, iniciei o Hyper-V no meu computador e o instalei lá. CentOS 7. Minimalista. Durante a instalação, criei o usuário Admin e desativei completamente o SSH para o root. Tendo me despedido da bela tela multicolorida, mergulhei no mundo preto e branco do terminal.

Acho que não adianta descrever o processo de instalação do software, é melhor focar nos problemas que surgiram durante o processo e para resolvê-los tive que escrever um pequeno script (está embaixo do corte. Descrições de cada um dos os utilitários podem ser encontrados na internet, mas no momento em que fiz isso esse script ainda não existia, tudo foi feito pela primeira vez, por toque e ao acaso).

No script, tentei automatizar a instalação dos utilitários mínimos necessários para o servidor, desativar o SELinux, conectar o repositório EPEL e instalar o software. OpenVPN, etc. Abaixo está o próprio script; é simples, mas funcional. Não vou entrar em detalhes, mas se alguém precisar, me avise.

Após executar o script, um servidor pré-configurado será exibido. OpenVPN, piscando um olho verde.

#!/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
mkdir /var/log/openvpn
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
chmod 755 /etc/resolv.conf
echo  nameserver 8.8.8.8 >>/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 755 /etc/sysctl.conf
echo net.ipv4.ip_forward=1 >>/etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
sudo systemctl enable openvpn@server
sudo systemctl start openvpn@server
sudo systemctl status openvpn@server

Instalação OpenVPN Não correu inteiramente bem.

Desconhecer os detalhes da política de direitos Linux Ao configurar os sistemas, passei muito tempo estudando os registros e atribuindo as permissões necessárias a todos os arquivos.

Quando o botão OpenVPN Quando a luz ficou verde, fiquei muito feliz, mas, como se viu, isso era apenas o começo. Na minha ingenuidade, contei com a substituição dos certificados raiz e do arquivo crl.pem, esperando que tudo funcionasse. No fim, precisei transferir do servidor para Windows os seguintes arquivos:

Serv.crt — Certificado de servidor
Serv.key — Chave do servidor
Ca.crt - Certificado raiz
Ca.key — Chave raiz
Crl.pem — Arquivo de revogação de certificado
Dh.pem - chave Diffie-Hellman
Index.txt – Arquivo com informações sobre os certificados atuais
Serial – também é responsável pela relevância dos certificados

Você também precisa da pasta certs_by_serial, do arquivo vars e de todas as chaves e certificados do cliente.
No Mikrotik os certificados permaneceram no lugar, então tudo funcionou.

Surgiram problemas quando tentei revogar o certificado, não funcionou - o arquivo index.txt teve que ser convertido para o formato unix, mas não fiz isso imediatamente. Eu usei o utilitário dos2unix.

Agora os certificados foram revogados, mas continuaram funcionando sem problemas, pois o Mikrotik não sabia que eles foram revogados e precisava ser informado de alguma forma.

Depois de ler as instruções e também consultar Alexander ERI (muito obrigado!), instalei um servidor http Apache simples no servidor de certificação e publiquei nele um arquivo de certificados revogados. Bloqueou completamente o acesso a ele, exceto ao arquivo publicado de um IP.

No terminal Mikrotik, na aba /System/Certificates/CRL, indique o caminho para o crl.pem publicado. Aqui deve ser esclarecido que o Mikrotik aceita apenas http e um endereço absoluto para a aba CRL, ou seja, Deveria ser algo assim: 127.0.0.1/crl/1.crl
Tudo funcionou, pelo menos para as versões 6.4.2.x do RouterOS, mas as configurações do cliente tiveram que ser criadas manualmente, e isso foi lamentável para mim e causou muitos transtornos. Quando, uma semana depois, precisei criar configurações para cerca de 50 clientes, resolvi agilizar esse processo e para isso utilizei um trecho de script de outra pessoa encontrado na Internet.

O script funciona assim: após o lançamento, indicamos o “nome do cliente”, respondemos à pergunta “definir senha ou não”, em seguida pegamos o arquivo de configuração pronto “client.ovpn”, com certificados e configurações integrados afim disso. Para usá-lo, você precisa estar em /etc/openvpn. Assinarei com comentários as linhas em que o caminho precisa ser substituído pelo seu. Também é necessário criar um arquivo com as configurações do cliente para que o script possa substituí-las durante o processo de criação da configuração.

#!/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 "(e.g. 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

Após algum tempo, uma nova restrição de acesso remoto forçou a destruição tanto deste servidor quanto da conexão Mikrotik existente. Um novo servidor foi criado. OpenVPN, para os funcionários do departamento de TI, que agora trabalham inteiramente em CentOSMas essa é uma história completamente diferente.

Expresso minha profunda gratidão a Ivan e Pavel pela ajuda na edição do artigo.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção DDoS, servidores VPS VDS 🔥 Compre hospedagem de sites confiável com proteção contra DDoS, servidores VPS/VDS | ProHoster