OpenVPN server na Raspberry PI

OpenVPN o que é?

O openVPN é um software livre e open-source para criação de redes privadas virtuais (Virtual private networks) do tipo ponto-a-ponto ou server-multiclient através de túneis criptografados (utilizando o OpenSSL) entre computadores. Com o OpenVPN conseguem-se ligações directas entre computadores mesmo que estes estejam atrás de nat firewalls sem necessidade de reconfiguração da rede.



Porquê o OpenVPN e não o PPTP (ver post do blog para instalação na RPI)?

1- Por ser livre, gratuíto e desenvolvido pela comunidade.
2 -Por ser multiplataforma (windows,os x, linux, android, etc)
3- Por garantir elevados níveis de segurança (encriptação 160 ou 256bits vs 128bit do PPTP).
4- Elevados níveis de segurança (autenticação baseada em certificados digitais)
5-Oferece um óptimo desempenho comparando o trade-off velocidade/segurança.

Ver comparação

Para que preciso do OpenVPN?

Três principais motivos: aceder remotamente (fora da rede) aos dispositivos da rede doméstica; ficar com o ip de casa fora de casa (ou fora do país); encriptar todo o tráfego web quando ligado a redes abertas e/ou públicas.
As redes abertas/públicas são vulneráveis a ataques do tipo ARP poisoning (man-in-the middle attacks), o que significa que qualquer computador ligado à rede pode, se não forem tomadas as devidas medidas de segurança, interceptar todo o tráfego que provenha do vosso computador roubando-vos todo o tipo de informações. Se nos ligarmos a um VPN, esse tráfego será encriptado no nosso computador e "descodificado" no servidor do VPN. A vantagem de o instalar na nossa casa reside principalmente neste facto. Em vez de confiar a "segurança" do nosso tráfego a uma qualquer empresa externa através de serviços pagos, garantimos que todo esse tráfego é encaminhado de forma segura para a nossa casa.
Se acham que estou a exagerar...vejam no vídeo abaixo como é fácil serem alvo de um ataque deste género:



Este tutorial será exaustivo e incluirá o port-forwarding ao vpn no router. No entanto, assume-se que já está instalado um serviço DDNS (dynamic DNS). Caso não esteja, vejam aqui como configurar o serviço no-ip na vossa casa.

Instalar e configurar o OpenVPN na RasPI:

Acedam à Raspberry PI por SSH e passem para root:

sudo su
Façam update dos pacotes do Raspbian:

sudo apt-get update
Instalem o OpenVPN e copiem as configurações automáticas correndo os seguintes 4 comandos:

sudo apt-get install openvpn -y
sudo mkdir /etc/openvpn/easy-rsa/
sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
sudo chown -R $USER /etc/openvpn/easy-rsa/

Entrem na pasta da configuração e gerem os certificados de segurança do vpn. Durante a fase de criação dos certificados serão-vos pedidos vários inputs como a localização, um nome para a vossa "empresa", etc etc. Escrevam valores como PT,LX,Lisboa,homeserver, etc etc. Apenas garantam que não deixam nenhum dado em branco. Digam que sim (Y) à assinatura do certificado e ao commit.


cd /etc/openvpn/easy-rsa/
source vars
./clean-all
./build-ca
./build-key-server server
./build-dh
./build-key clientpi
Copiem os certificados gerados (servidor e cliente) para as pastas correctas com os 10 comandos abaixo:
cd /etc/openvpn/easy-rsa/keys
sudo cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn
sudo mkdir $HOME/openvpn-client-files
sudo cp ca.crt clientpi.crt clientpi.key $HOME/openvpn-client-files
sudo mv $HOME/openvpn-client-files/ca.crt $HOME/openvpn-client-files/capi.crt
sudo chmod +r $HOME/openvpn-client-files/clientpi.key
sudo openvpn --genkey --secret /etc/openvpn/tapi.key
sudo cp /etc/openvpn/tapi.key $HOME/openvpn-client-files
sudo chmod +r $HOME/openvpn-client-files/tapi.key

Criemos então a configuração do cliente:


cd $HOME/openvpn-client-files/
sudo chown -R $USER $HOME/openvpn-client-files/
sudo nano $HOME/openvpn-client-files/raspberry.ovpn
O nano é um editor de texto do terminal. Dentro do ficheiro "aberto" (criado) no último comando coloquem o texto abaixo. Substituam o endereço a azul pelo endereço do serviço dDNS instalado no vosso router (exemplo: aminhacasadigital.no-ip.biz):

client
dev tun
proto tcp
remote ENDEREÇO-NOIP-DA-VOSSA-REDE 34567
resolv-retry infinite
nobind
persist-key
persist-tun
ca capi.crt
cert clientpi.crt
key clientpi.key
tls-auth tapi.key 1
ns-cert-type server
cipher AES-256-CBC
comp-lzo
verb 3

Salvem (control+O seguido de enter) e saiam (control + X).
Criaremos agora a configuração do servidor:

sudo nano /etc/openvpn/server.conf
Copiem o seguinte texto para o ficheiro, salvem e saiam. Não alterem nada.

port 34567
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key
tls-auth tapi.key 0
dh dh1024.pem
server 10.8.0.0 255.255.255.0
cipher AES-256-CBC
comp-lzo
persist-key
persist-tun
user nobody
group nogroup
status openvpn-status.log
verb 3
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
push "redirect-gateway def1"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 5 30

Editemos agora o ficheiro sysctl.conf para garantir o ip-forwarding:
sudo nano /etc/sysctl.conf
Neste ficheiro retirem o comentário à seguinte linha: #net.ipv4.ip_forward=1
Ou seja, em vez de #net.ipv4.ip_forward=1 deverá ficar net.ipv4.ip_forward=1

Falta apenas configurar a firewall:
sudo nano /usr/local/bin/firewall.sh
Neste ficheiro coloquem as seguintes definições, guardem e abandonem a edição:

#!/bin/bash
iptables -t filter -F
iptables -t nat -F
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s "10.8.0.0/24" -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s "10.8.0.0/24" -j MASQUERADE

Tornem o ficheiro executável:

sudo chmod +x /usr/local/bin/firewall.sh
E por fim garantam que as definições são iniciadas após reboot, editando o ficheiro:
sudo nano /etc/rc.local
colocando a seguinte linha antes de exit 0:

/usr/local/bin/firewall.sh
Por fim, façam reboot à Raspi:
sudo reboot
e verifiquem que, após reboot e nova ligação ssh, as regras da firewall ficaram definidas:
sudo iptables --list
Fica a faltar apenas, a abertura da porta 34567 da raspberry Pi no router.

Portforwarding no router:

Este passo depende do router utilizado, temos de adicionar um novo serviço no router: protocolo TCP e com mapeamento das portas 34567-342567. Por fim, deverão atribuir esse serviço ao ip de rede da vossa raspberry pi. No meu caso, router Thomson Meo ficam os screenshots abaixo:



O próximo post será a configuração do cliente...

Até breve

2 comentários: