phpIPAM - Gestão de IP's, Instalação em Raspberry PI

Introdução

O phpIPAM é um gestor de IP's open-source. Permite através de um browser fazer a gestão de endereços IPv4 e IPv6 de uma forma simples.

Permite: 
  • Fazer a separação de subnets 
  • Suporte para IPv4 e IPv6
  • Visualizar gama de IP's livres
  • Visualizar dados estatísticos
  • Gestão de utilizadores
  • Suporte para autenticação com AD/LDAP/OpenLDAP
  • Notificações por email
  • Importação de IP's de ficheiros XLS/CSV
  • Exportar IP's para XLS
  • Calculadora IPv4/IPv6
  • Pesquisas diversas
Na lista TODO 
  • Updates aos servidores DNS
  • Fazer scan's a subnets

Tutorial

Vamos começar por verificar se temos o apache instalado

netstat -na | grep :80| grep LISTEN

Se estiver à escuta, no próximo passo não há necessidade se instalar o apache, podem igualmente verificar se o Mysql está instalado, verificando o porto 3306

apt-get update


apt-get install apache2 mysql-server php5 php5-gmp php-pear php5-mysql php5-ldap

Configuração do Mysql


Se fizerem uma instalação nova, o instalador pede a password desejada para root, poderão usar este user para aceder à base de dados do phpIpam, no entanto se preferirem usar outro utilizador no Mysql para o phpIpam então tem que criar um user especifico na consola do Mysql

CREATE USER 'phpip_usr'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON phpipam . * TO 'phpip_usr'@'localhost';

FLUSH PRIVILEGES;

Configuração do Apache

É necessário activar o módulo mod_rewrite, executando :

sudo a2enmod rewrite
sudo service apache2 reload

Instalação e configuração do phpIpam

Vamos até o directório do phpIpam para fazer o download do software usando o comando wget.
Caso o endereço mude, podem consultar na página oficial a secção de downloads

cd /var/www
wget http://sourceforge.net/projects/phpipam/files/latest/download

Ao descompactar o ficheiro download,  será criado o directório phpipam 

tar -xvf download

Vamos configurar o acesso do phpIpam à base de dados editando do ficheiro config.php que está em /var/www/phpipam

Deverão ter em consideração o user e password escolhidos na instalação do Mysql

<?php

/*      database connection details
 ******************************/
$db['host'] = "localhost";
$db['user'] = "phpipam";
$db['pass'] = "phpipamadmin";
$db['name'] = "phpipam";

/**
 * php debugging on/off
 *
 * true  = SHOW all php errors
 * false = HIDE all php errors
 ******************************/
$debugging = false;

/**
 *      manual set session name for auth
 *      increases security
 *      optional
 */
$phpsessname = "phpipam";

/**
 *      BASE definition if phpipam
 *      is not in root directory (e.g. /phpipam/)
 *
 *  Also change
 *      RewriteBase / in .htaccess
 ******************************/
define('BASE', "/phpipam/");

?>

A restante configuração é feita acedendo ao phpIpam via browser, no meu caso em 

http://192.168.100.xxx/phpipam/

Adequam o endereço IP para o vosso cenário.
  • Começamos por escolher a opção 1 para que a base de dados no Mysql seja criada de forma automática
  • No segundo passo colocamos o user e password escolhidos previamente para o acesso ao Mysql
  • De seguida escolhemos a password de administrador para aceder à plataforma phpIpam 
  • A partir daqui podemo efetuar o login usando o user admin e password escolhida anteriormente.
A partir daqui estão prontos a usufruir esta fantástica ferramenta.





Wake-on-LAN, como usar ?


Wake-on-Lan permite ligar um computador que está electricamente desligado (power off) mas com cabo de rede ligado ao switch. 

De notar que Wake-on-Lan pode ser usado em computadores que estejam ligado fisicamente à rede e não por wireless. 

Como verificar se o computador tem esta funcionalidade ?


Para que o wake-on-Lan funcione, a motherboard do computador tem que suportar esta funcionalidade. Consultando o manual da motherboard, ou navegando nos menus da BIOS poderemos encontrar 'PCI Power up' ou “Allow PCI wake up event”. Praticamente todas as motherboards modernas suportam  esta funcionalidade.


Após activar o WOL na motherboard, para acordar o PC podem usar este software cliente em ambiente Windows, para enviar o pedido WOL. O único requisito necessário, é saber qual é o MAC address da placa de rede do computador que queremos acordar.



Como usamos o MAC address do computador de destino, o WOL só vai funcionar se estivermos no mesmo domínio de broadcast.

Caso estejam ligados à rede remota (onde está localizado o PC a acordar), através de uma VPN Layer3, então uma das soluções passa por criar um script no raspberry onde termina a VPN, colocando no script os comandos necessários para invocar o WOL.

Antes de criar o script, devemos instalar o cliente linux:

sudo apt-get update
sudo apt-get install etherwake

Após instalar o etherwake, podemos executar o comando com o MAC de destino associado:

sudo etherwake xx:yy:zz:11:22:33


Se não quiserem estar a decorar o MAC de destino, podem criar um script com o comando.

pico acorda_frodo.sh

editando o script com a seguinte informação:

#!/bin/bash
echo "Enviando WOL ao Frodo !"
sudo etherwake xx:yy:zz:11:22:33

Após gravar o script temos que dar permissões de execução

sudo chmod o+x acorda_frodo.sh

Para executar o script basta chamar o mesmo da seguinte forma:

./acorda_frodo.sh

Desta forma, o Raspberry é que envia o pedido para acordar o PC, e como estão ambos no mesmo domínio de broadcast, funciona.

Backup ao cartão SD do Raspberry

Hoje é dia de backups aos cartões SD de memória do Gandalf e Saruman, os dois Raspberrys, que tomam conta de diversos serviços de rede cá em casa.

Após 64 dias de uptime, temos pena, mas tem que ser. Nestes 64 dias instalei bastante software que está comprovadamente a funcionar bem e por esta razão, quero fazer um backup integral de cada cartão para um ficheiro ISO. Assim, caso seja necessário, posso repor rapidamente o sistema a funcionar já com as alterações dos últimos 64 dias.

Para fazer o backup integral uso a ferramenta Win32DiskImager que permite tanto fazer backup de cartão, como repor uma imagem ISO no cartão. Hoje vou usar para copiar o conteúdo de cada cartão para um ficheiro ISO no PC.

Antes de mais, devemos parar o Raspberry, fazendo um halt ao sistema com o comando:

sudo shutdown -h now



Após o comando podemos desligar o Raspberry, retirar o cartão e realizar o backup.



No campo "Image File" colocamos o nome do ficheiro (imagem) que vai receber o backup do cartão,
escolhendo depois a opção "Read" que vai ler o conteúdo do cartão para o ficheiro pretendido.


Tornamos a colocar o cartão no Raspberry e liga-lo à corrente e pronto, o Raspberry continua a funcionar, e o  backup está feito e pronto a ser usado caso seja necessário.

Boson Subnet Calculator

Dando continuidade à temática do subnetting IPv4 no tutorial anterior fiz uma abordagem em que o subnetting é realizado recorrendo a papel e caneta. A razão é puramente académica, é claro que um profissional da área não vai fazer subnetting recorrendo a papel e caneta, porque leva muito tempo, logo não é produtivo, e porque somos humanos e facilmente nos enganamos numa conta realizada "à mão".

Um profissional da área, vai recorrer a uma ferramenta específica para fazer operações de subnetting.
Existem no mercado muitas calculadoras subnetting, podem pesquisar e irão encontrar várias, inclusivamente algumas online. Neste tutorial vou utilizar o Boson Subnet Calculator que poderão fazer download gratuito aqui.

Vamos utilizar o seguinte caso prático. O departamento IT de uma seguradora, tem como ponto de partida a rede 10.10.0.0/16. A sua tarefa é partir esta rede base de forma a criar várias redes mais "pequenas" para atribuir a várias filiais.

Vamos partir do princípio que as filiais terão as seguintes necessidades ao nível de quantidade de IP's:
  • Lisboa - 200 hosts
  • Porto - 340 hosts
  • Coimbra - 100 hosts
  • Faro - 50 hosts
  • Vila Real - 30 hosts
  • Viana do Castelo - 60 hosts
Quando iniciamos um projecto de subnetting do "zero" um dos truques que se utiliza para rentabilizar os blocos de ip's, (evitando o desperdício ou blocos não atribuídos), é começar o subnetting pela rede que necessita de mais hosts até à que necessita de menos.
Sendo assim a ordem aconselhada seria :
  • Porto
  • Lisboa
  • Coimbra
  • Viana do Castelo
  • Faro
  • Vila Real

Então se o nosso ponto de partida é a rede 10.10.0.0/16, o subnet id da rede do Porto será o 10.10.0.0 mas com quantos bit's para a rede ?

No Boson colocamos no campo Host IP o endereço 10.10.0.0 e vamos aumentar os bits da máscara até 23, o campo Max Hosts, dá a indicação que com 23 bits cabem 510 hosts na rede, com 24 bits para a rede cabem 254 hosts. Então a rede do Porto terá um máscara de rede com 23 bits onde cabem os 340 hosts necessários e ainda sobram bastantes hosts para possíveis necessidade futuras.
O Boson dá igualmente (no campo Current Host Range) o intervalo de IP's que poderão ser utilizados pelos hosts, neste caso o intervalo vai de 10.10.0.1 até 10.10.1.254. Temos também a indicação do endereço IP de broadcast 10.10.1.255


Sub-rede do Porto

Tendo a rede do Porto terminado no IP 10.10.1.254 e de forma a maximizar o aproveitamento da rede base, a rede de Lisboa vai ter como subnet id o ip seguinte ao de broadcast do Porto. Neste caso Lisboa terá como subnet id o ip 10.10.2.0 falta calcular quantos bits terá a máscara em Lisboa. 


Sub-rede de Lisboa

Com 24 bits para a rede cabem 254 hosts com 25 bits para a rede caberiam apenas 126 hosts, então a escolha são os 24 bits. 
A rede de Lisboa terá as seguintes características:
  • Subnet id: 10.10.2.0/24
  • Máscara de rede: 255.255.255.0 
  • Primeiro ip utilizável para hosts: 10.10.2.1
  • Último ip utilizável para hosts: 10.10.2.254
  • Endereço ip de broadcast: 10.10.2.255
Coimbra necessita de uma rede com pelo menos 100 hosts. Sabendo que Lisboa termina no ip 10.10.2.255, Coimbra irá iniciar no ip seguinte, que será 10.10.3.0 mas com quantos bits para a rede?
neste caso são necessário apenas 25 bits, cabendo 126 hosts na rede.


Sub-rede de Coimbra
A rede de Coimbra terá as seguintes características:
  • Subnet id: 10.10.3.0/25
  • Máscara de rede: 255.255.255.128
  • Primeiro ip utilizável para hosts: 10.10.3.1
  • Último ip utilizável para hosts: 10.10.3.126
  • Endereço ip de broadcast: 10.10.3.127


Viana do Castelo necessita 60 hosts, sabendo que Coimbra terminou no IP 10.10.3.127, Viana do Castelo pode começar em 10.10..3.128 com 26 bits para a rede.

Sub-rede de Viana do Castelo
A rede de Viana do Castelo terá as seguintes características:
  • Subnet id: 10.10.3.128/26
  • Máscara de rede: 255.255.255.192
  • Primeiro ip utilizável para hosts: 10.10.3.129
  • Último ip utilizável para hosts: 10.10.3.190
  • Endereço ip de broadcast: 10.10.3.191

Faro necessita 50 hosts, sabendo que Viana do Castelo terminou no IP 10.10.3.191, Faro pode começar em 10.10..3.192 igualmente com 26 bits para a rede (cabem no máximo 62 hosts).

Sub-rede de Faro
A rede de Faro terá as seguintes características:
  • Subnet id: 10.10.3.192/26
  • Máscara de rede: 255.255.255.192
  • Primeiro ip utilizável para hosts: 10.10.3.193
  • Último ip utilizável para hosts: 10.10.3.254
  • Endereço ip de broadcast: 10.10.3.255
Vila Real necessita 30 hosts, sabendo que Faro terminou no IP 10.10.3.255, Vila Real pode começar em 10.10.4.0 com 27 bits para a rede. 
De notar que neste caso estamos a criar um bloco onde cabem apenas 30 hosts, sendo que se no futuro Vila Real necessitar de mais hosts, não caberão neste bloco. Uma solução seria criar um rede com 26 bits, de forma a sobrarem ip's para situações futuras.

Sub-rede de Vila Real
A rede de Vila Real terá as seguintes características:
  • Subnet id: 10.10.4.0/27
  • Máscara de rede: 255.255.255.224
  • Primeiro ip utilizável para hosts: 10.10.4.1
  • Último ip utilizável para hosts: 10.10.4.30
  • Endereço ip de broadcast: 10.10.4.31

Com isto terminamos a atribuição de blocos/sub-redes para cada uma das filiais.
Sabendo que as mesmas filiais estarão interligadas através de links dedicados de dados, teremos igualmente que preparar o endereçamento para cada troço de interligação de filial.

Quantos ip's necessita cada troço de interligação ? Apenas 2, um para cada router, sendo assim, temos que preparar 5 sub-redes com 30 bits cada uma.

Viana do Castelo <-> Porto
  • Subnet id: 10.10.4.32/30
  • Máscara de rede: 255.255.255.252
  • Ip em Viana do Castelo: 10.10.3.33
  • Ip no Porto: 10.10.3.34
  • Endereço ip de broadcast: 10.10.3.35
Vila Real <-> Porto
  • Subnet id: 10.10.4.36/30
  • Máscara de rede: 255.255.255.252
  • Ip em Vila Real: 10.10.3.37
  • Ip no Porto: 10.10.3.38
  • Endereço ip de broadcast: 10.10.3.39

Coimbra <-> Porto
  • Subnet id: 10.10.4.40/30
  • Máscara de rede: 255.255.255.252
  • Ip em Coimbra: 10.10.3.41
  • Ip no Porto: 10.10.3.42
  • Endereço ip de broadcast: 10.10.3.43

Coimbra <-> Lisboa
  • Subnet id: 10.10.4.44/30
  • Máscara de rede: 255.255.255.252
  • Ip em Coimbra: 10.10.3.45
  • Ip em Lisboa: 10.10.3.46
  • Endereço ip de broadcast: 10.10.3.47

Faro <-> Lisboa
  • Subnet id: 10.10.4.48/30
  • Máscara de rede: 255.255.255.252
  • Ip em Faro: 10.10.3.49
  • Ip em Lisboa: 10.10.3.50
  • Endereço ip de broadcast: 10.10.3.51

Network Design


Resumidamente, a ferramenta Boson permite-nos de forma rápida e eficiente fazer o subnetting para um protejo, evitando erros de cálculo, que são mais propícios quando as contas são realizadas "à mão".

Resumidamente:

  • No campo  Host id, colocamos o endereço IP de partida
  • Em Mask Bits aumentamos ou diminuímos os bits atribuídos à rede, ao mesmo tempo analisamos o campo max hosts que indica quantos hosts cabem na rede
  • No Current Host Range, podemos ver o intervalo de ip's passiveis de atribuição a hosts
  • O campo subnet informa o endereço de rede ou subnet id
  • No campo broadcast o endereço ip de broadcast



Subnetting IPv4

Conceitos gerais de Subnetting


O Subnetting IPv4 serve para a partir de um bloco de ip's (que poderão representar uma rede grande), cortar/dividir esse bloco em blocos de ip's mais pequenos (redes mais pequenas).

O endereçamento IP foi desenhado de forma que cada organização pudesse ter um bloco com ip's contíguos. Desta forma as organizações podem gerir esse bloco de ip's da forma que bem entenderem, dividindo por exemplo em blocos mais pequenos.

Ao fazer a divisão em redes mais pequenas, podemos identificar cada bloco  de forma inequívoca através do seu subnet ID ou network ID. de uma forma lógica que faça sentido para a organização, e de forma que esta possa implementar uma política de roteamento de tráfego IP entre blocos, usando os  subnet ID ou network ID. 

Um endereço IP é apenas um número que tem 32 bits, podemos equiparar um endereço IP a uma morada, é a morada do host.
Este endereço IP está dividido em 4 grupos ou 4 octetos. Cada octeto tem 8 bits, 4 grupos de 8 bits dão os 32 bits totais.

Por exemplo o endereço IP 192.168.10.192 tem o equivalente em binário 11000000.10101000.00001010.11000000

Os métodos de subnetting foram feitos para tratarmos de 8 bits de cada vez (1 octeto) o que facilita a leitura no número pois só tem 8 bits, sendo que em notação decimal poderá variar entre 0 e 255.

Cada endereço IP está dividido em duas partes:

  1. A parte que representa a rede (primeira a ser lida da esquerda para a direita)
  2. A parte do host (o que sobra do lado direito)

Quando olhamos para um endereço IP em notação decimal, torna-se confuso entender onde acaba a parte da rede e começa a parte do host, mas quando olhamos para o endereço IP em notação binária, a fronteira entre a rede e o host está algures nesse número de 32 bits, podendo por exemplo a parte da rede terminar no bit 24 e do 25 ao 32 estar a parte do host (neste caso teríamos um endereço que faz parte de uma rede com 24 bits vulgarmente conhecida por ter uma máscara 255.255.255.0)

Portanto, a parte da rede pode ter X bits, sendo que para os hosts sobram 32-X 
Num IP com notação decimal não conseguimos ter uma visão clara de onde começa/acaba uma rede, por este motivo, em notação decimal usamos aquilo que se chama "máscara de rede" que aponta para a fronteira. 
Então uma máscara de rede 255.255.255.0 em binário é presentada por 1111111.1111111.1111111.00000000 vemos claramente que se trata de uma rede com 24 bits (os 24 "1s" à direita representam a quantidade de bits que representam a rede e os 8 bits a "0" que sobram à esquerda representam a parte dos hosts)

A estudar endereçamento IP, não nos podemos abstrair dos 4 parâmetros associados a um endereço IP:
  1. Subnet ID
  2. Início dos IP's utilizáveis
  3. Fim dos IP's utilizáveis
  4. Endereço IP de broadcast
Vejamos o exemplo da rede 192.168.1.0 com máscara 255.255.255.0
  1. Subnet ID: 192.168.1.0
  2. Primeiro IP utilizável: 192.168.1.1
  3. Último IP utilizável: 192.168.1.254
  4. Endereço IP de broadcast: 192.168.1.255
Com esta configuração de rede, poderia acomodar 254 hosts (computadores, impressoras, routers, servidores, etc), cada ativo de rede iria ter um IP que varia entre 192.168.1.1 e 192.168.1.254, a variação seria no quarto octeto.

Um ativo de rede, por exemplo com o endereço IP 192.168.1.200 e máscara 255.255.255.0 tem capacidade para determinar a resposta a estas simples perguntas:
  • Como enviar um broadcast na minha rede IP
  • O destino de um pacote IP faz parte da minha rede ? ou necessito de usar o default gateway ?
  • O meu endereço IP é válido ?

Como realizar o Subnetting ?

O processo de subnetting passa por 4 fases:
  1. Determinar o tamanho do bloco base (aquele que serve de ponto de partida e que vai ser dividido em blocos mais pequenos).
  2. Determinar os 4 parâmetros que representam o bloco base.
  3. Determinar o tamanho dos blocos que resultam da divisão do bloco base.
  4. Mapear a posição no bloco base onde vamos efectuar cada corte.
  5. Determinar os 4 parâmetros de cada bloco "filho".

Vamos supor que queremos dividir o bloco 192.168.1.0/24 em 8 blocos mais pequenos

  1. Determinar o tamanho do bloco base. Olhando para o endereço notamos que tem uma máscara com /24 bits (255.255.255.0). Portanto 24 bits dos 32 estão reservados para a parte da rede. Sobram 2^8 possíveis IP's para hosts o que dá 256. A estes 256 temos que retirar 2 (o da subnet id e de broadcast) sobrando 254 ip's para hosts.
  2. Determinar os 4 parâmetros que representam o bloco base 
    1. Subnet ID: 192.168.1.0
    2. Primeiro IP utilizável: 192.168.1.1
    3. Último IP utilizável: 192.168.1.254
    4. Endereço IP de broadcast: 192.168.1.255
  3. Determinar o tamanho dos novos blocos.  Como necessitamos cortar em 8 subnets, então dos 8 bits do último octeto, vamos necessitar de 3 bits para a parte da rede pois 2^3=8 subnets. sendo assim sobram 5 bits para hosts, então 2^5 =32 endereços ip em cada bloco para utilizar com os hosts. 
  4. Como os blocos terão 32 ip's cada um, já conseguimos determinar os 8 endereços ip para cada subnet id, 
    1. 192.168.1.0 
    2. 192.168.1.32
    3. 192.168.1.64
    4. 192.168.1.96
    5. 192.168.1.128
    6. 192.168.1.160
    7. 192.168.1.192
    8. 192.168.1.224
  5. Podemos então determinar para cada bloco, os 4 parâmetros, sendo que por exemplo para o bloco 3 teríamos a seguinte informação
    • Subnet id : 192.168.1.64
    • Primeiro IP utilizável: 192.168.1.65
    • Último IP utilizável: 192.168.1.94
    • Endereço IP de broadcast: 192.168.1.95

Meo GO fora de casa




Meo GO ou Meo GO Multi ?

Meo GO permite até mais 3 ecrãs em casa, sim, EM CASA, além da box, o Meo GO permite visionar até 60 canais num PC, Tablet ou SmartPhone. É gratuito mas APENAS se for utilizado em casa.

Meo GO Multi, permite o mesmo que o MEO GO, mas com a diferença que não é necessário estar em casa para utilizar o serviço, basta ter um acesso à Internet seja ele onde for, mas claro, é pago, e não é barato, são 5€ por mês.

Eu prefiro minha receita, qual é ? Meo GO, onde me apetecer e sem dar cavaco aos senhores da MEO dispensando a versão Multi que é paga.

Funciona tanto usando um PC, um smartphone ou tablet (testei a solução apenas com android).

Quando acedemos ao Meo GO, a plataforma verifica de onde vem o pedido de streaming de video.
Porquê esta verificação? Para cruzar dados, isto é, para a plataforma Meo GO verificar se o cliente está realmente a aceder da sua rede em casa cruzando os dados de login com a origem IP do pedido.

Como dar a volta a esta questão? Usando uma VPN para casa. Porquê? Porque desta forma os pedidos à plataforma Meo GO tem origem na rede de casa, em vez de ter origem na rede onde estamos ligados (um café, na escola, etc etc).


  • Para colocar a VPN a funcionar, é conveniente mudar o endereçamento da rede em casa para isso podem consultar este tutorial
  • Após modificar o endereçamento podemos instalar e configurar o servidor OpenVPN no raspberry seguindo este tutorial, que ensina igualmente a configurar o cliente OpenVPN para windows.
  • Convém também configurar um Proxy em casa, consultando este tutorial que ensina a instalar o Squid. Quando ligamos a VPN através do PC, o túnel é criado, mas não é instalada uma rota por defeito através do túnel, é instalada apenas uma rota para a rede em casa (eu prefiro assim). Por este motivo, temos que redireccionar o tráfego HTTP pelo túnel até ao Proxy HTTP que está em casa. O Meo GO em PC é acedido usando o browser acedendo a este endereço, então o que fazemos é reencaminhar este tráfego pelo Proxy HTTP, desta forma enganamos a plataforma Meo GO pois o Proxy é o agente que está no meio, e ele é que pede os canais, e como está em casa, a plataforma Meo GO acede ao pedido sem problemas pois está a ser enganada ;-)

Para quem quer usar Meo GO através de Tablet ou Smartphone, terá que:
  • Instalar e configurar o cliente OpenVPN para android, podem consultar este tutorial

  • Instalar a APP para android é esta, e usá-la com a VPN ligada. Como neste caso TODO o tráfego é encaminhado pelo túnel, então não há necessidade de configurar o Proxy HTTP de casa para servir de agente entre o Meo GO e o dispositivo cliente na VPN.

Experimentem e em caso de dúvidas, apitem aqui em baixo nos comentários.

Servidor Proxy Squid. Como Instalar e Configurar ?



O que é um servidor proxy ? que serviço presta numa rede ?

Um servidor proxy funciona como um intermediário entre o browser cliente e o servidor onde está alojada a página que o cliente quer consultar. Portanto, resumidamente um proxy é um agente que tem autoridade para se passar por outro.

Um proxy, pode ajudar a melhorar o desempenho da Internet, porque poderá ser configurado para criar uma cópia das páginas Web mais visitadas pela rede local.

Em algumas situações, um proxy pode ser usado para filtrar o acesso a determinados conteúdos, ou poderá ser usado apenas para registar o acesso à Internet sem realizar qualquer tipo de filtragem.

O servidor proxy Squid é o mais conhecido e usado mundialmente. Podem consultar a sua página oficial aqui.

O servidor proxy Squid, suporta os seguintes protocolos vindos de clientes através de pedidos no formato HTTP:
  • HyperText Transfer Protocol (HTTP)
  • File Transfer Protocol (FTP)
  • Gopher
  • Wide Area Information Services (WAIS)
  • Secure Socket Layer
A sua instalação passa obviamente pelo comando apt-get

apt-get update && apt-get install squid

Os ficheiros de configuração do squid estão localizados em /etc/squid
Devemos editar o ficheiro squid.conf para realizar alterações à configuração base.
Recomendo que realizem um backup do ficheiro, dá sempre jeito para voltar atrás em caso de asneira.

cd /etc/squid/
cp squid.conf squid.conf.bak
pico /etc/squid/squid.conf

Tendo em conta que necessito utilizar o proxy, apenas quando estou fora da casa e usando a minha VPN, as particularidades mais relevantes desta configuração tem a ver com o facto de:

  • ter uma access-list para permitir acessos ao proxy vindos apenas da minha LAN 192.168.100.0/23 (pois a ponta do túnel da VPN fica com um IP na gama de IP's da minha LAN)
  • ter desabilitado a cache, pois não necessito dessa funcionalidade e não tendo cache, sempre poupo o cartão SD do Raspberry a mais uns acessos de leitura/escrita desnecessários.


Deixo aqui uma cópia do meu ficheiro de configuração do Squid. Limpei o ficheiro original retirando comentários e configurações não relevantes para o meu cenário de rede.


acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 192.168.100.0/23
acl SSL_ports port 443          # https
acl SSL_ports port 563          # snews
acl SSL_ports port 873          # rsync
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl Safe_ports port 631         # cups
acl Safe_ports port 873         # rsync
acl Safe_ports port 901         # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access allow localhost
http_access allow localnet
http_access deny all
icp_access allow localnet
icp_access deny all

http_port 3128

hierarchy_stoplist cgi-bin ?

access_log /var/log/squid/access.log squid

refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern (Release|Packages(.gz)*)$       0       20%     2880
refresh_pattern .               0       20%     4320

acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast

acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
extension_methods REPORT MERGE MKACTIVITY CHECKOUT
hosts_file /etc/hosts
coredump_dir /var/spool/squid
cache deny all


Após gravar o ficheiro de configuração, é necessário reiniciar o serviço:

service squid restart

Podem também visualizar os acessos em tempo real ao proxy usando o seguinte comando:

tail -f /var/log/squid/access.log

Se quiserem alterar ou acrescentar alguma configuração, podem consultar este link oficial com explicação de todas as directivas de configuração do squid.


Controlador UniFi da Ubiquiti em Raspberry

Chegou um brinquedo novo cá a casa, um Access Point da Ubiquiti Networks.

Esta marca de equipamentos de rede tem se revelado uma bela surpresa, é a segunda aquisição que faço, num futuro post falarei sobre as antenas da Ubiquiti que utilizo para expandir a minha rede local para o outro lado da rua.


 


Esta marca tem uma relação preço/qualidade muito interessante. Podem visitar o site  para conhecer a sua gama de produtos.

 
Uma das grandes vantagens do AP, é ser alimentado por PoE o que evita a necessidade se uma tomada eléctrica junto do Access Point.

Hoje vou exemplificar como instalar o controlador UniFi. Este controlador permite fazer a gestão de múltiplas redes wireless (multiplos Access Points) utilizando uma página web.


O software  está disponível para Mac, Windows e Linux. O tutorial aborda a instalação em Linux, mais propriamente no Raspberry.

Instalação do Software controlador e suas dependências

O software tem duas dependências, Java e MongoDB. O Java está instalado por defeito nas novas versões de Raspbian, mas caso não esteja :

sudo apt-get update 

sudo apt-get install oracle-java7-jdk

No caso do MongoDB vamos instalar uma versão pré-compilada para poupar tempo (Obrigado aos colaboradores da plataforma GitHub).

sudo mkdir /opt/mongodb 

cd /opt/mongodb 

sudo wget https://github.com/brice-morin/ArduPi/blob/master/mongodb-rpi/mongo/bin/bsondump?raw=true -O bsondump 

sudo wget https://github.com/brice-morin/ArduPi/blob/master/mongodb-rpi/mongo/bin/mongo?raw=true -O mongo 

sudo wget https://github.com/brice-morin/ArduPi/blob/master/mongodb-rpi/mongo/bin/mongod?raw=true -O mongod 

sudo wget https://github.com/brice-morin/ArduPi/blob/master/mongodb-rpi/mongo/bin/mongodump?raw=true -O mongodump 

sudo chmod +x *


Após a instalação do MongoDB, passamos à instalação do controlador propriamente dito.
Primeiro fazemos o download da ultima versão do UniFi, usando o comando wget, : (Hoje é a versão 3.2.1, podem consultar a versão mais actual aqui adaptando o link do wget para reflectir a ultima versão)

cd /opt

wget http://www.ubnt.com/downloads/unifi/3.2.1/UniFi.unix.zip

unzip UniFi.unix.zip


cd /opt/UniFi/bin 

sudo ln -fs /opt/mongodb/mongod mongod

sudo java -jar /opt/UniFi/lib/ace.jar start &

A partir daqui a configuração é feita através do browser.
No meu caso acedendo a https://192.168.100.246:8443 o controlador fica à escuta no porto 8443 do dispositivo onde tiver sido instalado.

No primeiro passo configuram-se as definições regionais


O controlador vai tentar descobrir o Access Point na rede procurando na camada L2, havendo mais de um Access Point, irá aparecer na lista abaixo. No meu caso aparece apenas um, que obteve endereço IP através de DHCP,


de seguida configura-se o SSID e Password's desejadas, de notar que caso a rede tenha mais do que um access point, o controlador configura o mesmo SSID em todos, e esta é uma das grandes vantagens de usar o controlador, uma solução ideal para um hotel por exemplo.


No ultimo passo configura-se o username e password de acesso ao controlador.



Resta preparar o script de arranque do serviço.
Podem fazer download do script usando este link coloquem o ficheiro na pasta /etc/init.d

O script usa jsvc (uma livraria que permite correr Java em Linux de uma forma mais facilitada)
Devem instalar o jsvc e dar permissões de execução ao script.
A linha 36 do script tem um pequeno ajuste para que o controlador use apenas 383Mg de memória RAM, poderão alterar este valor se acharem necessário,

sudo apt-get update 

sudo apt-get install jsvc

sudo chmod +x /etc/init.d/unifi

sudo update-rc.d unifi defaults

sudo /etc/init.d/unifi start



A partir daqui, o controlador está pronto a ser utilizado. bastando aceder com o browser para realizar as tarefas de administração do(s) Access Point(s) da rede.

Este é o aspecto inicial do portal do controlador.


Página com dados estatísticos.


Histórico de clientes.


Clientes ligados actualmente.



Este tutorial pretende  abordar a instalação do controlador UniFi em Rasbperry, todas as restantes questões saem fora do âmbito.
No entanto em caso de dúvidas não relacionadas com a instalação, estão à vontade para colocar questões.

Cliente OpenVPN para Android


Recebi alguma perguntas relacionadas com a configuração de um cliente OpenVPN em Android.

O processo é bastante simples, para tal basta instalar este software cliente android do OpenVPN.

Após instalar, o cliente para Android, devem gerar no servidor os certificados de cliente para o Smartphone ou Tablet. Para tal podem consultar este tutorial.

Podem ligar o Smartphone ou Tablet por USB ao PC e transferir os três ficheiros para uma pasta à escolha:

ca.crt
cliente2.crt 
cliente2.key


A partir daqui o processo é bastante simples, basta clicar no "+" em baixo à esquerda



Escolher um nome para o Perfil


Em Server Address colocar o nome do host que aponta para o IP Público configurado no Dynamic DNS

Em Type escolher a opção Certificates e seleccionar os ficheiros transferidos com os dois certificados e a chave



Configurar as opções de Routing adequadas para cada caso, no meu optei por redireccionar todo o tráfego pela VPN



Após estes passos o dispositivo Android está pronto a usar a VPN.
Uma boa forma de testar é após ligar a VPN aceder a este site e verificar se o IP público coincide com o IP público da ligação à Internet de casa.
Se os IP's coincidirem então todo o tráfego com origem/destino do Android está a ser correctamente redireccionado pelo Túnel da VPN.







OpenVPN Server em Raspberry PI e Cliente em Windows

Porquê instalar uma VPN até à nossa rede em casa ? ou até à empresa onde trabalhamos ?
No meu caso para:
  • - Imprimir documentos remotamente
  • - Aceder ao meu NAS e transferir ficheiros
  • - Aceder a um proxy HTTP para navegar pela Internet com o IP público da minha ligação em casa
  • - Aceder a câmaras IP
  • - Usar um ponto de acesso wireless público e navegar encriptadamente enviando tráfego HTTP pelo túnel VPN para o proxy em casa e a partir daí para a Internet.
  • - Ver televisão com MEO GO
Porquê o OpenVPN ? é gratuíto e distruibuido ao abrigo da licença GPL

Vpn Layer 2 ou Layer 3 ? Quais são as diferenças ?

Numa VPN Layer 2 (ou camada 2) as frames transportadas entre os dois locais, usam todas a propriedades básicas da camada Ethernet, logo, tem que aprender MAC's, replicar frames Broadcasts e Multicast, etc. Portanto temos que "imaginar" que o host que usa a VPN vai se ligar pelo túnel L2  ao servidor OpenVPN como se estivesse ligado a um switch. Sendo assim, vai receber um IP na mesma gama de endereçamento da rede onde termina o túnel.

Numa VPN de Layer 3 (ou camada 3) cada lado do túnel fica em sub-redes diferentes. Os pacotes IP são roteados entre as duas sub-redes.

Instalação do OpenVPN Layer 3


sudo su

apt-get update

apt-get install openvpn


Criação do par de chaves, uma para o cliente outra para o servidor


cd /etc/openvpn/easy-rsa
pico vars

Dentro do ficheiro vars, devemos mudar linha que contem :

export EASY_RSA="`pwd`"


Para:
export EASY_RSA="/etc/openvpn/easy-rsa"

No final deste mesmo ficheiro, podemos colocar valores a serem usado por omissão na geração dos certificados, qualquer valor poderá ser alterado aquando da geração do certificado.

export KEY_COUNTRY="PT"
export KEY_PROVINCE="Viana do Castelo"
export KEY_CITY="Viana do Castelo"
export KEY_ORG="Gondor"
export KEY_EMAIL="xxxxx@gmail.com"
export KEY_EMAIL=xxxxx@gmail.com
export KEY_CN=gondor
export KEY_NAME=gondor
export KEY_OU=gondor
export PKCS11_MODULE_PATH=gondor

Toda a informação inserida anteriormente pode ser fictícia.

Inicialização da infraestrutura de chaves públicas (PKI)


cd /etc/openvpn/easy-rsa/
sudo su
source ./vars
./clean-all
ln -s openssl-1.0.0.cnf openssl.cnf
./build-ca



Geração do certificado e chave do Servidor e cliente

No meu caso o servidor é o gandalf e o cliente o sauron

./build-key-server servername
./build-key client1


Na pasta /etc/openvpn/easy-rsa/keys deverão estar os seguintes ficheiros :

ca.crt
ca.key
gandalf.crt 

gandalf.csr 
gandalf.key
sauron.crt 

sauron.csr 
sauron.key


Caso mais tarde seja necessário configurar mais um cliente para a VPN, basta executar:

cd /etc/openvpn/easy-rsa/
sudo su
source ./vars
./build-key client2

Tendo como resultado os ficheiros:
cliente2.crt 
cliente2.csr 
cliente2.key

Destes serão transferidos para o host novo cliente os ficheiros :

ca.crt 
cliente2.crt 
cliente2.key

Geração do Diffie-Hellman

O propósito do Diffie-Helman é possibilitar a troca de chaves entre o servidor e o cliente através de uma rede insegura.

 ./build-dh

Criação do ficheiro de configuração do servidor

A partir deste momento não convém estar logado como root, devemos fazer exit para voltar ao utilizador com privilégios normais.
Vamos copiar um ficheiro de exemplo, para servir de base na nossa configuração

cd /etc/openvpn

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn

sudo gunzip server.conf.gz


dentro do ficheiro server.conf vamos mudar as seguintes configurações para que as chaves geradas anteriormente sejam tidas em conta:

# colocar o ip estático do raspberry
local 192.168.100.253 
# por defeito o serviço OpenVPN escuta no porto 1194
port 1194
# Escolher o protocolo UDP, é mais "leve"
proto udp
# escolher dev tun para que seja estabelecido 
# um túnel ou vpn Layer 3 
dev tun
   
# no meu caso quero usar a rede 
# 192.168.101.0/24 para fazer os túneis ponto-a-ponto
# o IP 192.168.101.1 será atribuído ao servidor
# podendo os clientes chegar ao servidor 
# usando este IP 

server 192.168.101.0 255.255.255.0

# para que seja sempre atribuido
# sempre o mesmo IP aos clientes
# poderá ser útil caso por exemplo
# caso a ligação se perca, ao ser
# retomada é atribuído o mesmo 
# IP ao cliente
ifconfig-pool-persist ipp.txt


# o push serve para que seja instalada uma rota
# na tabela de routing do cliente
# a indicar a rede da LAN de casa
# assim o cliente sabe que para chegar
# à LAN de casa tem que rotear o 
# tráfego pelo túnel
# a minha rede em casa tem endereço 192.168.100.0/24
push "route 192.168.100.0 255.255.255.0"

# Por razões de segurança
# é uma boa ideia reduzir os privilégios do utilizador
# que corre o deamon do OpenVPN
user nobody
group nogroup




ca.crt mudar para ca /etc/openvpn/easy-rsa/keys/ca.crt

cert server.crt mudar para cert /etc/openvpn/easy-rsa/keys/servername.crt



key server.key mudar para key /etc/openvpn/easy-rsa/keys/servername.key



dh dh1024.pem mudar para dh /etc/openvpn/easy-rsa/keys/dh1024.pem


Roteamento e Firewall no Raspberry

De forma a permitir que o Raspberry consiga rotear tráfego entre o túnel e a LAN
Dentro do ficheiro /etc/sysctl.conf procurar a linha:
net.ipv4.ip_forward=1 
e retirar o comentário
Gravar o ficheiro e executar o comando
sudo sysctl -p

Criar o ficheiro /etc/regras-firewall-openvpn.sh e colocar a seguinte configuração de NAT no Iptables.

#!/bin/sh

iptables -t nat -A POSTROUTING -s 192.168.101.0/24 -o eth0 -j SNAT --to-source 192.168.100.253

Gravar e modificar as permissões do ficheiro

sudo chmod 700 /etc/regras-firewall-openvpn.sh
sudo chown root /etc/regras-firewall-openvpn.sh

Editar o ficheiro /etc/network/interfaces e colocar a configuração pre-up na linha logo após o iface eth0 inet static


iface eth0 inet static
        pre-up /etc/regras-firewall-openvpn.sh

De forma a ver se até aqui está tudo bem configurado, recomenda-se um reboot ao raspberry 

Após o reboot ao Raspberry se tudo correr como esperado, a interface tun0 deve ter sido criada (no meu caso com o ip 192.168.101.1)
Para verificar, basta executar o comando ifconfig e analisar o output.


Criação de Dynamic DNS para resolver o IP Público num nome


Existem muitas plataformas na Internet a oferecer o serviço gratuito de Dynamic DNS, Pessoalmente tenho usado o serviço do noip.com e tem funcionado bem. 
Mas para que serve o DNS dinâmico ?
Todos nós usamos em casa um ligação à Internet tipo MEO, NOS, Vodafone, etc ... este tipo de ligações à internet  não garante de obtenhamos sempre o mesmo IP público. O IP público está constantemente a mudar, e nós necessitamos de saber qual é para efectuarmos a ligação VPN com o nosso cliente, para tal, o Dynamic DNS vai permitir associar um nome ao IP público que está atribuído na porta WAN do nosso router em casa. Sempre que o IP público muda, o router atravês de uma configuração específica, vai informar o novo IP ao servidor do Dynamic DNS. Também é possível configurar um serviço em linux que informe o noip.com ou outro, que o IP público mudou. 

No caso dos routers da MEO, podem fazer esta configuração :


Redireccionamento do Porto UDP 1194 para o Raspberry PI

Após termos o Dynamic DNS a funcionar, o router está pronto a receber pedidos de ligação à VPN através do seu IP Público. Mas há que ter em consideração que o serviço de VPN não é responsabilidade do router mas sim do Raspberry PI. Então o que o router tem que fazer, é redireccionar os pedidos UDP ao porto 1194 para o Raspberry PI. Isso faz-se recorrendo às configurações de redireccionamento de portos. Este tipo de configuração é banal e qualquer tipo de router o faz. No caso do router MEO aqui fica a configuração :


Dar um Nome ao Serviço, Escolher entrada Manual


Clicar em Avançar

Escolher protocolo UDP, intervalo de portas de 1194 a 1194 converter em 1194

Escolher Atribuir Jogo ou Aplicação a um dispositivo da rede local, e aqui provavelmente terão que procurar o Raspberry PI pelo seu MAC Address

Após este ponto o router vai passar a redirecionar para o RPI os pedidos à VPN

Configurações do lado do cliente


A parte do servidor, Dynamic DNS e redirecionamento de portas estão arrumadas. Falta agora configura-mos um cliente para testar a solução de ponta a ponta.

Para o meu portátil com windows 7 efectuei o download do software aqui.
Ao executar o cliente Windoes pela primeira vez, deverá abrir a aplicação com privilégios de administrador (botão direito do rato e executar como administrador).
Além do software cliente, deverão retirar do Raspberry os seguintes ficheiros criados no servidor:

ca.crt
cliente.crt (no meu caso sauron.crt)
cliente.key (no meu caso sauron.key)

Aconselho usarem o winscp para transferirem os ficheiros para o portátil.
No windows podem escolher uma directoria para guardar os 3 ficheiros transferidos anteriormente.
Nesta mesma directoria devem criar o ficheiro de configuração do cliente

Deverão criar um ficheiro xxxxxx.ovpn
Fica aqui um exemplo para o meu portatil do ficheiro sauron.ovpn:

client
dev tun
proto udp
# na configuração de remote devem
# colocar o nome que escolherem no Dyn DNS
# para a vossa ligação à NET
remote xxxxxxxx.zapto.org 1194 
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert sauron.crt
key sauron.key
comp-lzo
verb 3


Coloquem este ficheiro e os certificados no mesmo directório, depois no Cliente OpenVPN  basta clicar no Connection Profiles + e importar o ficheiro.ovpn  



A partir daqui podem testar a VPN.