Documentation - README.pt

Contents

Introducao

O NatACL, Apos a versao 200606XX, é constituido de 3 programas.

* NatACL_dhcp - versao extremamentel simples de um servidor DHCP * NatACL_web - Autenticador web para proxy-transparent ou NAT. * NatACL_netdetect - Coletor de dados para formacao de estatisticas.

A filnalidade desses programas é restringir o acesso a maquinas nao autorizadas.

NatACL_dhcp

O Servidor DHCP do natacl é uma versao extremamente simples de um servidor dhcp, servindo apenas a funcao basica de fornecer aos clients seus respectivos IPs.
A vantagem da utilizacao deste servidor. é a possiblidade de associar regras do iptables com grupos de usuarios do dhcp. Com isso é possivel forcar que todos as estacoes usem dhcp e bloquear aqueles que nao usem.
Com este dhcp server tambem é possivel criar regras de grupo, onde determinados grupos poderao acessar a internet via proxy transparente , diretamente via nat, ou entao forcar o cliente a se autenticar pelo browser( web ) com o NatACL_web.

NatACL_web

É um servidor http, que ira interceptar ( com a ajuda do iptables ), as requisicoes http para sites externos, e solicitar um login e senha, caso o login/senha estejam corretos, ele ira criar uma regra no iptables para permitir o acesso.
A nova regra permitindo o acesso ficara ativa ate que um dos metodos de expiracao seja ativo. Atualmente existem 3 tipos de metodos:
  • EXPIRE_PING - Envia um ping constantemente a estacao, quando o ping falhar. a autenticacao eh desfeita.
  • EXPIRE_TIME - Fica autenticado por um intervalo de tempo.
  • EXPIRE_POPUP - Abre um popup no browser, a autenticacao só sera desfeita caso o POPUP seja fechado.
Exitem tabem 3 tipos de modulos de autenticacao.
  • AUTH_POP3 - Verifica usuario e senha em um servidor POP3
  • AUTH_UNIX - Verifica usuario e senha nas contas locais do servidor.
Modulos externos, precisam ser baixados e compilados separadamente:
  • AUTH_MYSQL - Verifica usuario e senha em um servidor MYSQL.


NatACL_netdetect

É um daemon que escuta todos os pacotes de todas as interfaces, formado estatiscas para ser utilizados por CGI's ou pelo mrtg. Essas estatisticas sao separadas pelos grupos do dhcp.

Configuracao

NatACL_dhcp

Iptables

A primeira coisa a fazer é elimitar as regras de DNAT, SNAT E FORWARD das redes que serao controladas pelo NatACL. A Policy padrao de FORWARD deve ser DROP.


            'iptables -P FORWARD DROP'

Locks.[Recomendavel]
Como nao é possivel executar multiplos iptables simultaneamente, voce precisa criar um arquivo de lock, quando for executar o iptables por algum script.
No comeco do seu script de firewall
touch /var/NatACL/dhcp.lock
e no final do script
rm -f /var/natACL/dhcp.lock

Interfaces

Apos configurar o iptables voce precisa criar uma interface ( ou alias de interface para cada grupo que voce pretende criar.
Ex:


            # ifconfig eth0:1 192.168.1.1 netmask 255.255.255.0 

            # ifconfig eth0:2 192.168.2.1 netmask 255.255.255.0 

            # ifconfig eth0:3 192.168.3.1 netmask 255.255.255.0

No exemplo acima, criei 3 alias de interface, um para o grupo unknown, diretoria, rh respectivamente.

Grupos

Para associar as interfaces criadas com os grupos, é necessario criar os grupos no NatACL.
Use o comando 'NatACL_config group add' para isto.


            # /usr/bin/NatACL_config group add <group_name> <interface> <dns_address> <wins_address> <domain>

Ex.


            # NatACL_config group add unknown eth0:1 192.168.1.5 192.168.1.5 hostname.org 

            # NatACL_config group add diretoria eth0:2 192.168.1.5 192.168.1.5   hostname.org 

            # NatACL_config group add rh eth0:3 192.168.1.5 192.168.1.5 hostname.org

Obs: 192.168.1.5 é o endereco DNS e WINS server.
 !!! *** OBS: a criacao de um grupo chamado 'unknown' é obrigatoria. *** !!!


Caso voce nao possua um WINS server, utilize o endereco como 0.0.0.0
Apos isto, voce ja tem um dhcp funcional. Todos os novos computadores que requisitarem um IP, ira ser adicionado ao grupo 'unknown'.

Clientes ( Estacoes ).

Apos o computador ter requisitado um IP, ele por padrao sera adicionado ao grupo unknown.
Isto pode ser confirmado utilizando o comando:
# NatACL_config client list
Para modificar o grupo de uma estacao, utilize o comando
# NatACL_config client group <mac address> <group name>
Ex:


          NatACL_config client group 00:c0:f1:d3:d4:e3 diretoria
NatACL_config client group 00:50:b1:d4:aa:c3 rh

Apos a modificacao do grupo, a estacao podera demorar ate 5 minutos ate adquirir o novo IP.

Group Policies ( Regras de grupo )

Ate agora voce tem um dhcp funcional, porem as estacoes ainda nao tem acesso a internet. Para configurar as regras de grupo utilize o seguinte comando:
NatACL_config group policy_add <group_name> [<type> <type_options>]
Exitem 4 tipos de regras:
  • SNAT - faz source nat, é utilizado para dar a estacao acesso direto a internet via NAT.
  • DNAT - faz destination nat, é utilizado para fazer proxy transparente.
  • NATACL - Utiliza autenticacao web para dar acesso. ( explicado mais detelhadamente no capitulo NATACL );
  • EXEC - Executa um comando.

SNAT

Para configurar um SNAT a um grupo. execute:
NatACL_config group policy_add <grupo> snat <snat_address>
Exemplo


          # NatACL_config group policy_add diretoria snat 201.13.2.1

No exemplo acima, quando uma estacao do grupo diretoria requisitar um IP no dhcp, o dhcp server ira adicionar uma regra no IPTABLES possibilitando o IP a acessar a internet via NAT.

DNAT

Para configurar um DNAT ao um grupo. execute:
# NatACL_config group policy_add <grupo> dnat <dnat_address> <dnat_port>
Exemplo
# NatACL_config group policy_add diretoria dnat 201.13.2.1 3128
No exemplo acima, quando uma estacao do grupo diretoria requisitar um IP no dhcp, o dhcp server ira adicionar uma regra no IPTABLES que redirecionara todos os pacotes com destino a porta 80, para a porta 3128 do ip 201.13.2.1 ( squid proxy server

EXEC

Executa um comando ( shell ).
O primeiro parametro define se o comando deve ser executado uma unica vez, ou a cada 5 minutos.
Exemplo


                # NatACL_config group policy_add diretoria exec 0 '/usr/bin/rules.sh'

Para o script, o primeiro parametro a ser informado, 'e o endereco ip da maquina, o segundo argumento 'e o endereco mac da maquina em forma hexdecimal simples.
Por questoes de performance, e limpeza no inicializacao do NatACL aconselho o uso das seguintes chains:
NatACL_snat_${2}
NatACL_dnat_${2}
NatACL_fwd_${2}
no lugar de PREROUTING, POSTROUTING e FORWARD.
o parametro ${2} sera substituido pelo mac address.
Exemplo.
Se eu quiser que um determinado grupo, nao tenha acesso a um determinado IP usarei algo como:


	#!/bin/sh 
iptables -t nat -I NatACL_fwd_${2} -p ALL -s $1 -d 200.200.200.200 -j DROP


E para adicionar a group policy:


NatACL_config group policy_add diretoria exec 1 '/usr/bin/NatACL_negar_acesso.sh'

onde /usr/bin/NatACL_negar_acesso.sh 'e o script acima.

GROUP

Por padrao, todos os grupos criados no NatACL nao terao comunicacao entre si, voce deve definir o grupo que podera acessar outro grupo.
Por exemplo, caso voce queira que o grupo diretoria veja os grupos rh e desenvolvimento ( e por consequencia eles irao ver o grupo diretoria )


NatACL_config group policy_add diretoria group rh NatACL_config group policy_add diretoria group desenvolvimento

Recomendo nao dar acesso ao grupo unknown, ja que este grupo devera ter apenas maquinas novas temporarias ( ate ser realocada para o grupo definitivo )

Client Policies ( Regras de client )

O uso de regras individuais 'e muito parecido com as regras de grupo, no lugar do grupo se usa o endereco MAC.

NATACL

Se voce configurou os items acima, voce ja tem um dhcp funcional onde suas maquinas ja tem acesso a internet. Mas Se voce quiser utilizar o NATACL para autenticacao WEB voce precisa ADICIONAR a policy_group ( ou client_policy ) o item NatACL.
ex:
NatACL_config group policy_add <grupo> natacl <multiple_sessions 1/0> <expire_options> <authentication_options>
o item <multiple_sessions> é um valor booleano (0/1), para permitir ou nao o uso do mesmo login/senha em varias estacoes.
o item expire_options define o tipo de metodo utilizado para expirar a autenticacao. Existem 3 tipos de validacao:
EXPIRE_PING=[ping_interval]
EXPIRE_POPUP
EXPIRE_TIME=[time_interval]
ping_interval e time_intaval sao valores em segundos.


o item authentication_options define o metodo de autenticacao, esses valores variam de plugin para plugin.
Para utilizar os plugins que vem por padrao no NatACL use:
auth_unix.so
auth_pop3.so|SERVER=<server>
onde <server> é o endereco do servidor POP3.


Finalmente os exemplos:
- NatACL para grupo rh, com logins simultaneos utilizando EXPIRE_POPUP e Autenticacao local unix.
NatACL_config group policy_add rh natacl 1 EXPIRE_POPUP auth_unix.so
- NatACL para grupo rh, com logins simultaneos que expira em 1hora e Autenticacao local unix.
NatACL_config group policy_add rh natacl 1 EXPIRE_TIME=3600 auth_unix.so
- NatACL para grupo rh, com logins simultaneos utilizando EXPIRE_POPUP e Autenticacao pop3 no servidor 10.10.0.9
NatACL_config group policy_add rh natacl 1 EXPIRE_POPUP 'auth_pop3.so|SERVER=10.10.0.9'


OBS: Nao esqueca de utilizar aspas quando o argumento contiver 'PIPE' ( | ) , para nao ser interpretado pelo shell.


Quando a autenticacao ocorrer, o NATACL ira procurar nas regras de grupo os tipos SNAT ou DNAT, e executa-las. Ou seja, voce precisa ter um SNAT ou DNAT ( ou ambos ) nas regras de grupo.

Execucao

Para iniciar o dhcp server digite:
NatACL_dhcp
Para inciar o autenticador web digite:
NatACL_web