Pular para o conteúdo principal

Descomplicando OpenVPN/Wireguard com Firewall UFW




 Descomplicando OpenVPN/Wireguard com Firewall UFW


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


Observações finais, caso montou sua vpn com wireguard ou openvpn internamente com ip interno, somente como mencionado liberar no seu modem adsl ou firewall corporativo, liberar a porta configurada para que realize o tunelamento das conexões com ip público e interligando redes distintas
Qualquer dúvida veja a configuração com o seguinte ip: 177.41.135.74.

Ass: Luiz Guilherme Nunes Fernandes
Email: narutospinal@gmail.com
Informativo: Entusiasta e colaborador em Software Livre.



Comentários