Esse tutorial tem intuito de utilizar VPN com a ferramenta Openvpn ou Wireguard no debian 12.
Primeira parte: Construir uma vpn com Openvpn, entre um servidor e cliente, utilizando chaves para autenticação:
Segunda parte: Montar uma vpn com uma sede e duas filiais.
Obs: Esse tutorial é somente para montar uma VPN simples e rápida, outra dica foi necessário liberar meu ip público no modem adsl ou firewall, para as portas 1194 e 51820, guarde somente essa informação, durante o decorrer essa informação será assimilada.
O Que é VPN?
VPN (Virtuap Private Network) é um meio no qual estalece uma conexão entre dispositivos por meio da internet, sendo o meio em uma rede privada e segura.
Tipos de vpn:
Gateway to Gateway --> Conectar 2 servidores diretamente. (Ex: Ligar 2 filiais)
Host to Host --> Conectar máquina para outra máquina (Ex: Hamachi)
Host to Gateway --> Utilizada para conectar máquina em um rede corporativa (Ex: Estação de trabalho ligada na empresa)
OpenVPN
Tutorial para criar uma vpn (Server to Client)
Criando primeiramente a estrutura do Openvpn Server, deve instalar o pacote openvpn e easy-rsa
root@vpnserver:~# hostnamectl set-hostname vpnserver
root@vpnserver:~# apt install openvpn easy-rsa -y
root@vpnserver:~# mkdir -p /var/log/openvpn/
root@vpnserver:~# chmod 755 /var/log/openvpn
Criando estrutura da pasta PKI e realizando ajuste nas váriaveis, Ca (Autoridade certificadora), Assinando certificado(Servidor e cliente), DH (Diffie-Hellman):
Obs: Em 'pass phrase' , recomenda-se utilizar um o máximo seguro possíve.
root@vpnserver:~# /usr/share/easy-rsa/easyrsa init-pki
root@vpnserver:~# cat << EOF >> /etc/openvpn/server/pki/vars
set_var EASYRSA_REQ_COUNTRY "BR"
set_var EASYRSA_REQ_PROVINCE "DISTRITO FEDERAL"
set_var EASYRSA_REQ_CITY "BRASILIA"
set_var EASYRSA_REQ_ORG "Spinal Corp"
set_var EASYRSA_REQ_EMAIL "spinal@spinal.com"
set_var EASYRSA_REQ_OU "Community"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
EOF
root@vpnserver:~# /usr/share/easy-rsa/easyrsa build-ca
root@vpnserver:~# /usr/share/easy-rsa/easyrsa gen-req server nopass
root@vpnserver:~# /usr/share/easy-rsa/easyrsa sign-req server server
root@vpnserver:~# /usr/share/easy-rsa/easyrsa gen-dh
root@vpnserver:~# /usr/share/easy-rsa/easyrsa gen-req client nopass
root@vpnserver:~# /usr/share/easy-rsa/easyrsa sign-req client client
root@vpnserver:~# openvpn --genkey secret /etc/openvpn/server/pki/static.key
Mode de arquivo Servidor (server.conf)
dev tun
ifconfig 10.100.0.1 10.100.0.2
port 1194
verb 4
keepalive 10 120
persist-key
persist-tun
float
proto udp
cipher AES-256-GCM
auth SHA256
ca /etc/openvpn/server/pki/ca.crt
cert /etc/openvpn/server/pki/issued/server.crt
key /etc/openvpn/server/pki/private/server.key
tls-server
tls-auth /etc/openvpn/server/pki/static.key 0
dh /etc/openvpn/server/pki/dh.pem
log-append /var/log/openvpn/openvpn.log
Inicializar o serviço e habilita-lo
root@vpnserver:/etc/openvpn# systemctl enable openvpn@server --now
No outro servidor cliente ou estação de trabalho, configurar o cliente:
Obs: Copie os arquivos do servidor para o cliente na seguinte pasta /etc/openvpn/client/:
Resultado do seguinte comando (gen-req client nopass e sign-req client client) no qual foi gerado no servidor, exemplo de cópia com o comando scp.
root@vpnclient:/etc/openvpn# hostnamectl set-hostname vpnclient
root@vpnclient:/etc/openvpn# apt install openvpn easy-rsa -y
root@vpnclient:/etc/openvpn/client# scp root@192.168.15.126:/etc/openvpn/* /etc/openvpn/client
root@vpnclient:/etc/openvpn/client# ls
ca.crt client.crt client.key static.key
root@vpnclient:/etc/openvpn# cat client.conf
dev tun
proto udp
ifconfig 10.100.0.2 10.100.0.1
remote 192.168.15.126
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
auth SHA256
ca /etc/openvpn/client/ca.crt
cert /etc/openvpn/client/client.crt
key /etc/openvpn/client/client.key
tls-client
tls-auth /etc/openvpn/client/static.key 1
verb 3
keepalive 10 120
remote-cert-tls server
root@vpnclient:/etc/openvpn# systemctl enable openvpn@client --now
Realizar o teste de conexão e fechar o tunel:
root@vpnclient:/etc/openvpn# ping 10.100.0.1 -c1
PING 10.100.0.1 (10.100.0.1) 56(84) bytes of data.
64 bytes from 10.100.0.1: icmp_seq=1 ttl=64 time=1.26 ms
Dicas: Criando um Arquivo ovpn:
Altere os campos ca, cert,key e tls-auth para o seguinte configuração:
<Tag></tag>
Adicione esse argumento key-direction 1
dev tun
proto udp
ifconfig 10.100.0.2 10.100.0.1
remote 177.41.135.74
;remote 192.168.15.126
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
auth SHA256
tls-client
verb 3
keepalive 10 120
remote-cert-tls server
key-direction 1
<ca>
-----BEGIN CERTIFICATE-----
Insira os valores do arquivo aqui
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
Insira os valores do arquivo aqui
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
Insira os valores do arquivo aqui
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
Insira os valores do arquivo aqui
-----END OpenVPN Static key V1-----
</tls-auth>
Testando a configuração ovpn
root@vpnclient:/etc/openvpn# systemctl stop openvpn@client
root@vpnclient:/etc/openvpn# /usr/sbin/openvpn client_full_mod.ovpn
Aplicar segurança no Servidor do Openvpn (Recomendação que seja feita tambem no cliente), mas para fins de documentação será implatada somente no servidor:
Neste tutorial estaremos utilizando o ufw para liberar a porta 22 tcp e 1194 udp e bloquear o ping.
root@vpnserver:/etc/openvpn# apt-get install ufw -y
root@vpnserver:/etc/openvpn# echo 'export PATH=$PATH:/usr/sbin' >> /root/.bashrc
root@vpnserver:/etc/openvpn# echo "y" | ufw enable
root@vpnserver:/etc/openvpn# ufw allow 22/tcp
root@vpnserver:/etc/openvpn# ufw allow 1194/udp
root@vpnserver:/etc/openvpn# ufw deny proto icmp
Wireguard:
Conforme a figura abaixo, será configurada uma vpn com a sede e duas filiais.
Deve-se instalar o wireguard e configurar a chave pública e privada no servidor, será habilitado o serviço e liberada a porta 51820 com protocolo udp.
root@vpnserver:/etc/openvpn# apt install wireguard -y
root@vpnserver:/etc/openvpn# wg genkey >> /etc/wireguard/sede-privatekey
root@vpnserver:/etc/openvpn# wg pubkey < /etc/wireguard/sede-privatekey > /etc/wireguard/sede-publickey
root@vpnserver:/etc/openvpn# chmod 600 /etc/wireguard/sede-privatekey
root@vpnserver:/etc/wireguard# cat sede-privatekey
4DzdIrHcAKybELErqTK93qys5twNPSmX5+lzZ1xD8Uk=
root@vpnserver:/etc/openvpn# cat << EOF > /etc/wireguard/sede-server.conf
[Interface]
Address = 10.10.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = 4DzdIrHcAKybELErqTK93qys5twNPSmX5+lzZ1xD8Uk=
root@vpnserver:/etc/openvpn# systemctl enable wg-quick@wg0 --now
root@vpnserver:/etc/wireguard# ufw allow 51820/udp
Criando configuração do cliente 1: (Mesmo procedimento para o cliente 2 - No futuro do tutorial, volte aqui)
root@vpnclient:~# echo 'export PATH=$PATH:/usr/sbin' >> /root/.bashrc
root@vpnclient:~# apt-get install resolvconf wireguard -y
root@vpnclient:~# cd /etc/wireguard/
root@vpnserver:/etc/openvpn# wg genkey >> /etc/wireguard/filial01-privatekey
root@vpnserver:/etc/openvpn# wg pubkey < /etc/wireguard/filial01-privatekey > /etc/wireguard/filial01-publickey
root@vpnserver:/etc/openvpn# chmod 600 /etc/wireguard/filial01-privatekey
root@vpnclient:/etc/wireguard# cat filial01-publickey
5pYcSEdAl2luanDXeQqftvRtwPjUtUL+zjnrmINPxwk=
root@vpnclient:/etc/wireguard# cat << EOF > /etc/wireguard/filial01.conf
[Interface]
Address = 10.10.0.2/24
PrivateKey = OJzd3XXqfVfTciBfi2HRUMVmCy7QJ0O9hAoN1XVJVlg=
DNS = 8.8.8.8
[Peer]
PublicKey = UM/0dh6kXqgyzdLKYNNe4hyhk/c5Rf0UZMuOmWm+/Ew=
AllowedIPs = 10.10.0.1/32, 10.10.0.2/32, 10.10.0.3/32
Endpoint = 192.168.15.126:51820
# Endpoint = 177.41.135.74:51820
EOF
root@vpnclient:/etc/wireguard# wg-quick up /etc/wireguard/wg0-client.conf
root@vpnclient:/etc/wireguard# wg-quick down /etc/wireguard/wg0-client.conf
Teste de conexão, pode ser utilizado o comando ping entre os mesmos.
Habilitar o cliente via systemd
root@vpnclient:/etc/wireguard# systemctl enable wg-quick@wg0-client --now
No lado do servidor libere a chave pública e seu respectivo ip para realizar a conexão:
root@vpnserver:/etc/wireguard# wg set sede-server peer 5pYcSEdAl2luanDXeQqftvRtwPjUtUL+zjnrmINPxwk= allowed-ips 10.10.0.2
Repetir os comandos anterior da filial 01 para filial 02, deve ser inserir as informações da nova chave pública e privada e inserir o ip desejado e liberar novamente a nova chave e o ip configurado conforme modelo abaixo:
Obs: A configuração é a mesma, somente lembre que a chave privada é a nova criada pela servidor e a chave pública é a mesma do servidor:
root@vpnserver:/etc/wireguard# wg set sede-server peer 1jka2gimya9dCs4fLbYFC8e5kMEE1OtMdRL0QJ/bH0U= allowed-ips 10.10.0.3
No servidor podemos verificar que há conexão com 2 filiais com ips 10.10.0.2 e 10.10.0.3
root@vpnserver:/etc/wireguard# wg show
interface: sede-server
public key: UM/0dh6kXqgyzdLKYNNe4hyhk/c5Rf0UZMuOmWm+/Ew=
private key: (hidden)
listening port: 51820
peer: 1jka2gimya9dCs4fLbYFC8e5kMEE1OtMdRL0QJ/bH0U=
endpoint: 192.168.15.129:46887
allowed ips: 10.10.0.3/32
latest handshake: 4 seconds ago
transfer: 532 B received, 476 B sent
peer: 5pYcSEdAl2luanDXeQqftvRtwPjUtUL+zjnrmINPxwk=
endpoint: 192.168.15.125:54432
allowed ips: 10.10.0.2/32
latest handshake: 13 minutes, 30 seconds ago
transfer: 308 B received, 220 B sent
Comentários
Postar um comentário