SquidGuard

1 – Instale o pacote squidguard

apt-get install squidguard

2 – Adicione a seguintes entradas no squid.conf

vi /etc/squid/squid.conf

url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
acl rede src 192.168.0.0/24
http_access allow rede

3 – Edite o arquivo de configuração do SquidGuard assim:

vi /etc/squid/squidGuard.conf

dbhome /var/lib/squidguard/db
logdir /var/log/squid

dest porn {
domainlist porn/domains
urllist porn/urls
}

acl {
  default {
  pass !porn all
  redirect http://localhost/block.html
  }
}

4 – Crie o Ambiente dos arquivos do squidGuard

mkdir /var/lib/squidguard/db/porn/

vi /var/lib/squidguard/db/porn/urls

playboy
sexy
virtua
wnet

touch /var/lib/squidguard/db/porn/domains

5 – Crie o arquivo de “acesso negado” que será visto pelos usuários

vi /var/www/block.html

Acesso Negado!

Contate o administrador de sua rede.

6 – Inicie o squid

/etc/init.d/squid start

TESTANDO…

Tente acessar os sites bloqueados no navegador

Advertisements

Squid

1 – Instale o pacote squid

apt-get install squid

2 – Edite o arquivo de configuração do squid “squid.conf”

vi /etc/squid/squid.conf

3 – Modificar a TAG: http_port

http_port 192.168.0.1:3128 transparent (ouve apenas na interface deste ip)
http_port 3128 transparent (roda em todas interfaces de rede)

Nesta TAG indicamos em qual “host” e em qual “porta” o squid irá trabalhar.

4 – Modifique a TAG: visible_hostname

visible_hostname server.domain

Nesta TAG indicamos qual o nome do servidor seguido do dominio que irá aparecer nas menssagens de erro do squid.

* Veja o nome e o dominio do servidor no aarquivo “/etc/hosts”

5 – Modifique a TAG: cache_mem

cache_mem 32 MB

Nesta TAG indicamos a quantidade de memória RAM que o squid irá usar para trabalhar o cache das últimas páginas acessadas.

6 – Modifique a TAG: cache_dir

cache_dir ufs /var/spool/squid 2048 16 256

Nesta TAG indicamos:

O tipo de sistemas de arquivos que o squid irá usar para fazer o cache por padrão “ufs” (unix file system);

Onde seram criados os diretórios de cache “/var/spool/squid”;

A quantidade de espaço em disco que será utilizada para fazer o cache das páginas visitadas em MB “2048”;

A quantidade de diretórios que irão ser criados em /var/spool/squid “16”;

A quantidade de sub diretórios que irão ser criados dentro de cada um dos 16 “256”.

7 – Modifique a TAG: acl

Insira suas acls ao fim de todas as acls.

acl rede src 192.168.0.0/24

Nesta TAG indicamos o nome da nossa acl “rede” com a opção “src” (endereço de IP de origem) sequido do endereço de nossa rede com a mascara “192.168.0.0/255.255.255.0”

7.2 – Bloquear SITES atráves de expressão regular (palavras)

acl sites url_regex -i "/etc/squid/acls/sites_proibidos.txt"

Nesta acl “sites” usamos a opção url_regex (comparação de URL baseada em expressão regular) com a opção -i (trata as palavras dentro do arquivo indiferente de maiúsculo ou minúsculo) sequido da localização entre aspas do arquvivo com palavras que serão bloqueadas por nossa acl

* Dentro deste aquivo coloque uma palavra por linha. Ex:

playboy
sexy

7.3 – Bloquear DOWNLOADS através de expressão regular (palavras)

acl downloads url_regex -i "/etc/squid/acls/downloads_proibidos.txt"

* Se a opção -i em url_regex não for utilizada o proxy irá bloquear todos arquivos com extenssão .exe e não bloqueará .EXE em maiúsculo

* Dentro deste aquivo coloque uma extenssão por linha por ex:

\.exe
\.zip
\.bat
\.mp3

8 – Modificar a TAG: http_access

Debaixo desta linha libere ( allow ) ou negue ( deny ) o acesso para suas acls

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
http_access deny sites
http_access deny downloads
http_access allow rede

Nesta parte nós bloqueamos o acesso das acl(s) “sites” e “downloads” para todos e depois liberamos a acesso a nossa rede

* Tudo que deve ser negado deve vir primeiro do que vai ser liberado como em um firewall. Sendo assim configure sua acl de rede para ser sempre a última das “suas acls”

9 – Criar os arquivos “sites_proibidos.txt” e “downloads_proibidos.txt”

mkdir -p /etc/squid/acls
touch /etc/squid/acls/sites_proibidos.txt
touch /etc/squid/acls/downloads_proibidos.txt

* Dentro destes arquivos insira as palavras que serão bloqueadas.

10 – Crie os diretórios de cache do SQUID

squid -z

11 – Inicialize o servidor SQUID

squid -D start

A opção -D desabilita o teste a procura de um servidor de DNS. Usado se o seu servidor não tem acesso a internet.

12 – Configurando o Proxy em console

export http_proxy="http://192.168.0.1:3128"

Configuramos a variavel http_proxy para trabalhar no IP e na porta do nosso servidor Proxy

13 – Testando o servidor SQUID

Configure o proxy na console como acima, em seguida use o navegador lynx para fazer o teste

lynx www.playboy.com.br

* Irá aparecer uma mensagem de erro do squid

lynx www.uol.com.br

* Irá navegar normalmente

Em seguida entre com o comando abaixo em uma outra console para ver se o squid esta gerando o log dos sites visitados.

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

Para ver o log do cache que o squid está fazendo veja o arquivo “store.log”

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

14 – CONFIGURANDO PROXY TRANSPARENTE

14.1 – Configurações no Squid

Configure a TAG: http_port assim:

http_port 3128 transparent

14.2 – Configurações no Firewall Iptables

iptables -t nat -I PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

Esta regra do iptables força os usuários a pasarem por proxy em qualquer conexão feita para a porta 80 sendo assim não será preciso configurar o browser para utilizar o proxy

15 – Configurando o Squid para trabalhar com menssagens de erro em Português

Modificar a TAG: error_directory

error_directory /usr/share/squid/errors/Portuguese

16 – CONFIGURANDO SQUID AUTENTICADO

16.1 Adicione as entradas a TAG: auth_param

# Programa que irá autenticar os usuários seguido do aquivo de senhas
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/password

# Númerio de instâncias simultâneas que irão rodar do programa de autenticação
auth_param basic children 5

# Mensagem que irá aparecer na tela de login durante tentaviva de acesso
auth_param basic realm Informe seu login - nome e senha de usuario

# Armazena o login do usuário por 10 horas, não precisando logar a cada requisição(site). Se o usuário fehcar o browser terá de logar novamente
auth_param basic credentialsttl 10 hours

# Caso o usuário digite login em senha em maiúsculo as strings serão convertidas para minúsculo.
auth_param basic casesensitive off

16.2 – Adicione as seguintes entradas na TAG: acl

acl password proxy_auth REQUIRED

# Adicione a linha abaixo apenas para autenticação via username
acl users proxy_auth_regex -i "/etc/squid/acl/users.txt"

16.3 – Adicione uma das entradas a TAG: http_access

http_access allow rede password # Para autenticação via IP
http_access allow users password # Para autenticação via username

16.4 – Crie o arquivo password que terá o login dos usuários

touch /etc/squid/password

16.5 – Crie o arquivo users que terá o username dos usuarios

touch /etc/squid/acl/users.txt

* Dentro deste aquivo coloque um username por linha. Ex:

nickollas
luciano

16.6 – Adicionando usuário ao arquivo de senhas (não precisa reiniciar o squid)

OBS: O htpasswd está no pacote apache2-utils.

htpasswd -b /usr/local/etc/squid/password nickollas 123

16.7 – Alterando a senha de um usuario (não precisa reiniciar o squid)

htpasswd -b /usr/local/etc/squid/password nickollas 456

16.8 – Deletando um usuário (não precisa reiniciar o squid)

htpasswd -D /usr/local/etc/squid/password nickollas

Apache2 com Perl

1 – Instale os pacotes necessarios

apt-get install apache2 libapache2-mod-perl2
apt-get install libfcgi-perl libapache2-mod-speedycgi

2 – Edite o arquivo /etc/apache2/apache2.conf e adicione a linha:

vi /etc/apache2/apache2.conf

AddHandler cgi-script .cgi .pl

3 – Edite o arquivo /etc/apache2/sites-available/default e as linha:

vi /etc/apache2/sites-available/default

Options +ExecCGI

4 – Reinicie o apache2

/etc/init.d/apache2 restart

5 – Crie um arquivo de teste, em seguida tente executá-lo no servidor.

vi /var/www/site/cgi-bin/teste.pl
#!/usr/bin/perl -w
print "Content-type: text/html\n\n";
print "Hello, World.";

+ SOBRE APACHE E CGI: http://httpd.apache.org/docs/2.0/howto/cgi.html

OpenVPN

Diagrama da rede

Rede usada pelo túnel: 10.8.0.0/24
Rede do lado servidor: 192.168.30.0/24
Rede do lado cliente: 172.16.90.0/24

Para montar uma VPN nós utilizaremos 3 programas:

OpenSSL – Criptografa os dados antes de serem transmitidos.
LZO – Comprimi os dados transmitidos antes de serem transmitidos.
OpenVPN – Cria um túnel entre duas ou mais redes.

CONFIGURAÇÃO NO LADO SERVIDOR

1 – Baixe o cÓdigo fonte do OpenSSL

cd /usr/local/src
wget http://www.openssl.org/source/openssl-0.9.8e.tar.gz

2 – Compile o OpenSSL

tar -xzvf openssl-0.9.8e.tar.gz
cd openssl-0.9.8e
./config
make
make test
make install

3 – Baixe o cÓdigo fonte do LZO

cd /usr/local/src
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.02.tar.gz

4 – Compile o LZO

tar -xzvf lzo-2.02.tar.gz
cd lzo-2.02
./configure
make
make test
make install

5 – Baixe o codigo fonte do OpenVPN

cd /usr/local/src
wget http://openvpn.net/release/openvpn-2.0.9.tar.gz

6 – Compile o OpenVPN

tar -xzvf openvpn-2.0.9.tar.gz
cd openvpn-2.0.9
./configure
make
make install

7 – Testando a cirptografia

./openvpn --genkey --secret key
./openvpn --test-crypto --secret key

8 – Testando a negociação SSL (rode por 2 minutos)

– Execute o comando abaixo em uma janela…

./openvpn --config sample-config-files/loopback-client

– Execute o comando silmultaneamente com o primeiro em outra janela…

./openvpn --config sample-config-files/loopback-server

* Na segunda janela no inicio do teste deverá aparecer…

Wed 10:24:34 2007 [Test-Client] Peer Connection Initiated with 127.0.0.1:16001
Wed 10:24:35 2007 Initialization Sequence Completed

* Depois de dois minutos aparecerá a mensagem…

Wed 10:26:33 2007 Inactivity timeout (–inactive), exiting
Wed 10:26:33 2007 TCP/UDP: Closing socket
Wed 10:26:33 2007 Closing TUN/TAP interface
Wed 10:26:33 2007 SIGTERM[soft,inactive] received, process exiting

9 – Crie um ambiente para os arquivos de configuração do OpenVPN

mkdir /etc/openvpn

10 – Copie alguns arquivos para o diretório /etc/openvpn

cp -rf easy-rsa/ sample-config-files/server.conf /etc/openvpn

11 – Entre no diretório /etc/openvpn/easy-rsa

cd /etc/openvpn/easy-rsa

12 – Edite o arquivo vars e em seguida exporte suas variáveis

vi vars

export KEY_COUNTRY=BR
export KEY_PROVINCE=RJ
export KEY_CITY=RIO
export KEY_ORG="Wnet-Teleredes"
export KEY_EMAIL="nickollas@gmail.com"

. ./vars

13 – Crie o ambiente para a criação do certificado e chaves com o comando

./clean-all

14 – Gere o certificados de autoridade e a chave que vai interagir com o OpenSSL

./build-ca

IMPORTANTE: No campo “Common Name” coloque o nome da sua VPN

Country Name (2 letter code) [BR]:
State or Province Name (full name) [RJ]:
Locality Name (eg, city) [RIO]:
Organization Name (eg, company) [Wnet-Teleredes]:
Organizational Unit Name (eg, section) []:cpd
Common Name (eg, your name or your server's hostname) []:Wnet-Teleredes
Email Address [nickollas@gmail.com]:

15 – Gere o certificados de autoridade e a chave para o servidor

ATENÇÃO: Deixe o campo de senha em branco (sem senha), aperte . Responda “y” para as duas perguntas feitas no final.

./build-key-server server

ATENÇÃO: Ao preencher a diretiva “Common Name ” informe o mesmo nome da chave que está sendo gerada.

Country Name (2 letter code) [BR]:
State or Province Name (full name) [RJ]:
Locality Name (eg, city) [RIO]:
Organization Name (eg, company) [Wnet-Teleredes]:
Organizational Unit Name (eg, section) []:cpd
Common Name (eg, your name or your server's hostname) []:server
Email Address [nickollas@gmail.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Certificate is to be certified until Jun 17 14:22:29 2017 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

16 – Gere o certificados de autoridade e a chave para o cliente

./build-key client1

Responda as perguntas conforme acima
ATENÇÃO: Ao preencher a diretiva “Common Name ” informe o mesmo nome da chave que está sendo gerada

Organizational Unit Name (eg, section) []:cpd
Common Name (eg, your name or your server's hostname) []:client1

ATENÇÃO: Para incluir novos clientes repita esta etapa modificando apenas o nome da chave. ex: client2

17 – Gere o certificado de parametros Diffie Hellman

./build-dh

– Tabela de chaves e certificados gerados:

ARQUIVO        USADO POR           PROPÓSITO             SECRETO

ca.crt         servidor,cliente    root ca*              no
ca.key         servidor            root ca key           yes
dh1024.pem     servidor            diffie hellman        no
server.crt     servidor            server certificate    no
server.key     servidor            server key            yes
client1.crt    cliente             client1 certificate   no
client1.key    cliente             client1 key           yes

*ca - Certificado de Autoridade

18 – Edite o arquivo de configuração do OpenVPN no servidor

vi /etc/openvpn/server.conf

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
server 10.8.0.0 255.255.255.0  # Bloco de rede usado pelo túnel
ifconfig-pool-persist ipp.txt
push "route 192.168.30.0 255.255.255.0"  # End de rede do lado servidor
client-config-dir ccd
route 172.16.90.0 255.255.255.0  # End de rede do lado cliente
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append  /var/log/openvpn.log
verb 3

ATENÇÃO: Para cada cliente adicione uma nova linha:

route 172.16.90.0 255.255.255.0	# Rede do lado cliente

19 – Crie o diretório /etc/openvpn/ccd

mkdir /etc/openvpn/ccd

20 – Crie um arquivo com mesmo nome da chave cliente contendo o endereço de ip e a mascara de rede

vi /etc/openvpn/ccd/client1

iroute 172.16.30.0 255.255.255.0

ATENÇÃO: Crie um arquivo como este para cada cliente modificando o nome do arquivo de acordo com o nome da chave e endereço IP.

21 – Inicie o OpenVPN no servidor

openvpn /etc/openvpn/server.conf

DICA: Você pode ver o log do OpenVPN em /var/log/openvpn.log

– CONFIGURAÇÃO NO LADO CLIENTE

22 – Compilação e instalação do OpenSSL

cd /usr/local/src
wget http://www.openssl.org/source/openssl-0.9.8e.tar.gz
tar -xzvf openssl-0.9.8e.tar.gz
cd openssl-0.9
./config
make
make install

23 – Compilação e instalação do LZO

cd /usr/local/src
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.02.tar.gz
tar -xzvf lzo-2.02.tar.gz
cd lzo-2.02
./configure
make
make install

24 – Compilação e instalação do OpenVPN

cd /usr/local/src
wget http://openvpn.net/release/openvpn-2.0.9.tar.gz
tar -xzvf openvpn-2.0.9.tar.gz
cd openvpn-2.0.9
./configure
make
make install
mkdir -p /etc/openvpn/easy-rsa/keys
cp sample-config-files/client.conf /etc/openvpn

25 – Transfira do servidor para a a maquina cliente os aquivos abaixo colocando-os no diretório /etc/openvpn/easy-rsa/keys/

* ca.crt
* client1.crt
* client1.key

26 – Edite o arquivo de configuração do OpenVPN

vi /etc/openvpn/client.conf

client
dev tun
proto udp
remote 200.76.150.8 1194  # IP roteável do servidor
resolv-retry infinite
user nobody
group nogroup
persist-key
persist-tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/client1.crt
key /etc/openvpn/easy-rsa/keys/client1.key
ns-cert-type server
comp-lzo
verb 3

27 – Inicie o OpenVPN no cliente

openvpn /etc/openvpn/client.conf

– TESTANDO A VPN

28 – Dê um ifconfig em ambas as pontas para ver se foi levantada a interface tun0

ifconfig 

29 – Do servidor tente pingar o cliente

ping 10.8.0.6
ping 172.16.90.1

30 – Do cliente tente pingar o servidor

ping 10.8.0.1
ping 192.168.30.1

DICA: Para incluir novos clientes na VPN repita as etapas 16,18,20 e 24

31 – Crie os scripts de inicialização para o OpenVPN

vi /etc/init.d/openvpn-start

#!/bin/bash
openvpn --config /etc/openvpn/server.conf --daemon # Somente no servidor
openvpn --config /etc/openvpn/client.conf --daemon # Somente no cliente

vi /etc/init.d/openvpn-stop

#!/bin/sh
killall -9 openvpn &> /dev/null
chmod u+x /etc/init.d/openvpn-st*

Para executar…

/etc/init.d/openvpn-start
/etc/init.d/openvpn-stop

– PROBLEMAS CONHECIDOS

PROBLEMA: O cliente consegue pingar a rede atrás do servidor mas o servidor não consegue pingar a rede atrás do cliente

R: Quando a chave do cliente foi gerada o campo “Common Name” foi preenchido com um nome diferente do nome da chave. Você deve gerar a chave do cliente e preencher o campo “Common Name” com o mesmo nome da chave que está sendo gerada

O Mesmo problema vai ocorrer se dentro do diretório “ccd” não tiver um arquivo com o nome da chave contendo IP e Mascara de rede

CBQ – Controle de Banda

1 – Instale o pacote shaper

apt-get install shaper

2 – Crie um arquivo de configuração individual para cada maquina dentro do diretório “/etc/shaper” seguindo o formato: cbq-kbps.ip

vi /etc/shaper/cbq-500-192.168.0.30

DEVICE=eth1,100Mbit,10Mbit
RATE=50Kbit
WEIGHT=5Kbit
PRIO=5
RULE=192.168.0.30

Sobre as opções:

DEVICE – Indica em qual interface o cbq irá controlar o trafego, aqui deve ser colocada a placa que está liagada diretamente a rede, em seguida defina a velocidade de transmissão da placa

RATE – Quantidade de banda que será utilizada pela estação

WEIGHT – Quantidade de banda utilizada pela estação dividida por 10

PRIO – Prioridade que o cbq irá dar a esta configuração, pode variar de 1 a 8 os desenvolvedores do cbq aconselham deixar 5

RULE – Endereço IP do computador, pode ser espeficada a mascara de rede

3 – Reinicie o shaper

/etc/init.d/shaper restart