firewall_nat

Propaganda
Firewalls
NAT
Proxy
Gerencia de Redes
Redes de Computadores II
*Créditos: baseado no material do Prof. Dr. João Bosco M. Sobral – UFSC
e também do Prof João Paulo de Brito Gonçalves – IF/ES
Por que Firewall ?
• O mundo respira Internet.
• A Internet que o mundo respira não é segura.
– 60% : Internet é o principal ponto de invasão.
– 78% : ameaças, riscos e ataques tendem a aumentar nos
próximos anos.
– 32% : crackers são os principais invasores.
– 26% : não conseguem identificar os responsáveis.
Por que Firewall ?
• Internet
Uma imensa rede descentralizada e não
gerenciada, rodando sob uma suíte de
protocolos denominada IPv4, que não foi
projetada para assegurar a integridade das
informações e realizar controles de acesso.
Por que Firewall ?
• Existem diversas formas de se violar uma
rede, mas essas formas nada mais fazem do
que se aproveitar de falhas em serviços de
rede e protocolos.
Por que Firewall ?
• Um Firewall não possui a função de vasculhar
pacotes a procura de assinaturas de vírus.
• Um Firewall poderá evitar que a rede interna
seja monitorada por Trojans e que os mesmos
troquem informações com outros hosts na
Internet.
• Poderá evitar que a rede interna seja
vasculhada por um scanner de portas.
Por que Firewall ?
• Um Firewall poderá especificar que tipos de
protocolos e serviços de rede serão
disponibilizados, tanto externa quanto
internamente.
Por que Firewall ?
• Um Firewall pode controlar os pacotes de serviços não
confiáveis:
–
–
–
–
–
–
–
–
rlogin,
telnet,
FTP,
NFS,
DNS,
LDAP,
SMTP,
Etc...
Kernel e Firewall
• Tudo o que chega ou sai de um computador é
processado pelo kernel do sistema
operacional desse computador.
• Nos *nix, as funções de Firewall são agregadas
à própria arquitetura do kernel.
Firewall no *inux
• Nos sistemas *nix, não é preciso comprar um
Firewall corporativo caríssimo.
• Firewall é open source, gratuito.
Firewall no BSD, Solaris
• Ipfilter
– Firewall originalmente utilizado no OpenBSD,
FreeBSD e Solaris.
– Utilizado por muitos administradores por ser
seguro e confiável.
Firewall no Linux
• Os
firewalls existem no Linux desde o kernel 1.1, com o ipfw,
originário do BSD.
• Esse filtro era userspace, ou seja, rodava como um programa
comum no sistema, similarmente ao BIND (servidor de nomes).
• Com o kernel 2.0 veio o ipfwadm, que ainda era uma ferramenta
userspace e controlava as regras de filtragem do kernel.
•Na versão 2.2 do kernel, veio o ipchains (ainda presente em
algumas distribuições) e em 1999, veio o iptables 2, presente a partir
do kernel 2.3.15.
Firewall para Linux
• Netfilter e IPTables
– kernel 2.4.x
– filtragem de pacotes e NAT
– IPTables ferramenta de Front-End que permite
configurar o Netfilter.
Firewall no Linux
O iptables é um firewall nativo do Linux e que faz
parte do seu kernel e por isto tem um
desempenho melhor que firewalls instalados
como aplicações. Com isso, ele é bastante seguro
e rápido.
Cadeias e política padrão
• No iptables, existem tabelas de filtragem (chains), e três delas
são básicas e não podem ser apagadas: INPUT, OUTPUT e
FORWARD.
• A chain INPUT trata dos pacotes de entrada, aqueles que chegam
da rede.
• A chain OUTPUT trata dos pacotes de saída, aqueles que vão
para a rede.
• E finalmente a chain FORWARD trata do encaminhamento de
pacotes, ou seja, roteamento.
Funções Netfilter / IPTables
•
•
•
•
Filtro de pacotes.
Mascaramento.
QoS sob tráfego.
Suporte a SNAT e DNAT para
redirecionamento de endereços e portas.
Mascaramento
• Técnica para colocar toda uma rede interna atrás de um
Firewall, usando-se IP’s inválidos (classe A, 10.0.0.0), no
sentido de proteger servidores de invasões.
• Quando têm-se pouquíssimos IP’s e tem-se que disponibilizar
o acesso para muitos servidores.
• Habilita uma máquina Firewall a traduzir de um IP válido para
n IP’s inválidos internos.
IPTables e Netfilter
•
•
•
•
Detecção de fragmentos.
Monitoramento de tráfego.
Regular a prioridade com TOS (Type of Service).
Bloqueio a ataques Spoofing, Syn-Flood, DoS,
scanners ocultos, pings da morte, ...
• Opção de utilizar módulos externos para composição
de regras.
Síntese IPTables
Flag
Tabela
Comando
Ação
Alvo
19
Síntese do IPTables
•
...>iptables [flag] [tabela] [comando]
[parâmetro] [alvo]
– [flag] : -t
– [tabela] : Uma tabela é uma área na memória para
armazenar as regras juntamente com os chains
(parâmetros das tabelas).
• filter (tabela padrão, default se –t omitido)
• nat
(-t nat)
• mangle (- mangle)
Comandos no IPTables
– [comando] : manipula a tabela através das regras e
chains correspondentes.
• -A anexa a regra ao fim da lista já existente.
• -D apaga a regra especificada.
• -L lista as regras existentes na lista.
• -P altera a política padrão de uma cadeia de forma
que todo pacote desta cadeia ficará sujeito a esta
política, caso não exista nenhuma regra anterior
que se aplique a mesma..
• -F remove todas as regras, ou remove todas as regras
referentes a um determinado chain.
• -I insere uma nova regra, mas no início da lista de
regras.
• -R substitui uma regra já adicionada por outra.
• -N permite inserir uma nova chain na tabela
especificada.
• -E Renomeia uma nova chain criada.
• -X apaga uma chain criada pelo administrador do
Firewall.
Ações no IPTables
– [parâmetro] :
• especifica o protocolo,
• as interfaces de rede,
• endereço de origem do pacote (IP) e máscara
de sub-rede,
• endereço de destino do pacote (IP),
• exceção a uma determinada regra,
• para onde um pacote pode ser direcionado
(alvo),
• aplicar filtros com base na porta de origem,
• aplicar filtros com base na porta de destino.
Alvos IPTables
– [alvo] : quando um pacote se adequa a uma regra, ele
deve ser direcionado a um alvo e quem
especifica é a própria regra.
Os alvos aplicáveis são:
• ACCEPT
• DROP  simplesmente descarta, sem aviso
• REJECT  avisa emissor pacote de resposta
• LOG
• RETURN
• QUEUE
• SNAT
• DNAT
• REDIRECT
• TOS
Exemplos
24
Parâmetros para a filtragem de
pacotes
• -p – especifica o protocolo aplicado à regra. Se enquadra aos
protocolos da camada de transporte, como tcp, udp e icmp
• Ex: iptables - A INPUT –p tcp –j ACCEPT
Parâmetros para a filtragem de
pacotes
• -s – especifica a origem (source) do pacote ao qual a regra deve ser
aplicada. A origem pode ser um host ou uma rede. Nesta opção
geralmente utilizamos o IP seguido de sua sub-rede:
• Ex:
– iptables –A INPUT –s 172.16.53.1 –j DROP
– iptables –A INPUT –s 172.16.53.1 –j ACCEPT
• Este comando descarta todo pacote de entrada vindo da origem
172.16.53.1
• O segundo comando aceita todo pacote de entrada vindo da origem
172.16.53.1
Parâmetros para a filtragem de
pacotes
• -d – especifica o destino do pacote (destination) ao qual a regra
deve ser aplicada. Sua utilização se dá da mesma maneira que a
ação –s.
• Ex:
– iptables –A OUTPUT –d 172.16.53.1 –j DROP
– iptables –A OUTPUT –d 172.16.53.1 –j ACCEPT
•
Este comando descarta todo pacote de saída com destino à
máquina 172.16.53.1
• O segundo comando aceita todo pacote de saída com destino à
máquina 172.16.53.1
Parâmetros para a filtragem de
pacotes
• -i – especifica a interface de entrada a ser utilizada e como um
Firewall possui mais de uma interface esta regra acaba sendo muito
importante para distinguir a qual interface de rede o filtro deve ser
aplicado.
• Ex:
– iptables –A INPUT –i eth0 –j DROP
• O comando permite que todo pacote que entra pela interface eth0
seja selecionado para ser descartado pelas regras do firewall.
Parâmetros para a filtragem de
pacotes
• -o – especifica a interface de saída a ser utilizada e se aplica da
mesma forma que a regra –i, mas este parâmetro é menos usado,
pois normalmente nos preocupamos em impedir que o firewall
aceite conexões em determinadas portas, ao invés de tentar
interceptar as respostas.
• Ex:
– iptables –A FORWARD –o eth0 –j DROP
• O comando permite que todo pacote que sai pela interface eth0
seja selecionado para ser descartado pelas regras do firewall.
Parâmetros para a filtragem de
pacotes
• --sport – porta de origem (source port). Com esta regra é possível
aplicar filtros com base na porta de origem do pacote.
• Ex:
– iptables –A INPUT –p tcp –-sport 22 –j DROP
• O comando permite que todo pacote de entrada usando o protocolo
TCP e com origem na porta 22 seja descartado.
Parâmetros para a filtragem de
pacotes
• --dport – porta de destino (destination port) especifica a porta de
destino do pacote e funciona de forma similar à regra sport.
• Ex:
– iptables –A OUTPUT –p tcp –-dport 22 –j DROP
• O comando permite que todo pacote de saída usando o protocolo
TCP e com destino na porta 22 seja descartado.
Parâmetros para a filtragem de
pacotes
• -m mac --mac-source – é a regra que permite especificar endereços MAC dentro
de regras do iptables. Ele é uma forma de dificultar o uso de endereços IP
falseados para ganhar acesso ao servidor, pois permite relacionar o IP ao
endereço MAC da placa instalada. Não é 100% eficaz pois o endereço MAC pode
ser trocado via ifconfig e ele não é válido para a camada de rede, ou seja, quando
sai da rede local, ele é descartado.
• iptables -A INPUT –p tcp --dport 22 –m mac --mac-source 00:1B:24:46:29:88 –j
DROP
Parâmetros para a filtragem de
pacotes
• Comando faz com que qualquer pacote de entrada com destino na
porta 22 advindo da máquina que possua MAC 00:1B:24:46:29:88
seja descartado.
• Ex:
– iptables
-A INPUT
–p tcp --dport
00:1B:24:46:29:88 –j REJECT
22 –m mac
--mac-source
• Comando faz com que qualquer pacote de entrada com destino na
porta 22 advindo da máquina que possua MAC 00:1B:24:46:29:88
seja rejeitado.
Parâmetros para a filtragem de
pacotes
• multiport
- com o modulo multiport é possível que
especifiquemos múltiplas portas a serem afetadas pela regra, sob
o limite máximo de 15.
• EX:
– iptables –A INPUT –p tcp –i eth0 –m multiport –-dport 80,25,53,110 –j
DROP
• Este comando indica em uma só regra por via de multiport que o
firewall descartará (-J DROP) qualquer pacote que entre pela
interface eth0 (-i eth0) destinado às portas 80,25, 53, 110.
Bloqueando domínios
• É possível ainda permitir ou bloquear com base no domínio, tanto para entrada
como para saída. Isto permite bloquear sites e programas diretamente a partir do
firewall, sem precisar instalar um servidor Squid e configurá-lo.
• Ex:
– Iptables –A OUTPUT –d www.site.com –j DROP
• O comando impede que pacotes de saída destinados ao domínio sejam enviados,
ou seja, impede que o domínio seja acessado a partir da própria máquina local.
• Originalmente o iptables sabia trabalhar apenas com endereços IP. A
possibilidade de criar regras baseadas em domínios são um recurso um pouco
mais recente, onde o firewall faz um lookup no domínio, para saber qual o IP
atual.
Salvando as regras criadas no
Firewall
• Toda regra criada no Iptables fica gravada em memória RAM, sendo
posteriormente apagada quando o sistema é ligado ou reiniciado.
• Para que o administrador de redes não seja obrigado a ter que
refazer todas as regras de firewall sempre que o sistema é ligado,
existe um comando do iptables que possibilita que salvemos as regras
criadas em um arquivo, que depois pode ser usado para restaurar as
regras no firewall.
• Para então salvar as regras criadas em um arquivo, devemos usar o
comando:
iptables-save > nome_do_arquivo
Salvando as regras criadas no Firewall
• Após isto, o arquivo criado terá todas as regras do firewall
criadas.
• Em uma próxima ocasião quando o sistema for reiniciado,
as regras podem ser restauradas através do comando:
iptables-restore < nome_do_arquivo
• Este comando acessará o arquivo e colocará em memória
todas as regras que estavam gravadas no arquivo.
Detalhes de Mangle
Conceituando TOS
Tabela Mangle
• Utilizada para alterações especiais como,
modificar o tipo de serviço (ToS) de um
pacote IPv4.
Estrutura de um pacote IPv4
Versão (4 bits)
Tamanho do Cabeçalho (4bits)
Tipo de Serviço (1 byte)
Tamanho Total (4 bytes)
Identificação (4 bytes)
Flags (3 bits)
Deslocamento do Fragmento (13 bits)
Tempo de Vida (1 byte)
Protocolo TCP / UDP / ICMP (1 byte)
Checksum do Cabeçalho (4 bytes)
Endereço IP de Origem (4 bytes)
Endereço IP de Destino (4 bytes)
Opções + Padding (4 bytes – opcional)
Dados TCP / UDP / ICMP
(até 65.511 ou 65.515 bytes)
 Segmentos: TCP ou UDP ou ICMP
Conceito de TOS
• Controle de tráfego destinado a uma máquina ou
rede, através do Tipo de Serviço.
• Permite então dizer a um Firewall que qualquer
pacote cujo “tipo de serviço” seja, por exemplo, SSH,
deve possuir uma prioridade de tráfego “x”, e que
outros pacotes cujo “tipo de serviço” seja, por
exemplo, “HTTP”, deve possuir prioridade “y”.
Conceito de TOS
• É uma forma de dar controle sobre o tráfego
de entrada e saída da rede interna.
• Ao invés de criar regras de bloqueio de
tráfego via filtragem de pacotes ou controle
de palavras chaves via Proxy, o TOS propicia o
controle do tráfego, simplesmente, definindo
prioridades para os serviços.
Níveis de Prioridade TOS
Exemplo de regra de TOS
• >iptables –t mangle –A OUTPUT –o eth0
–p tcp –dport 22 –j TOS –set-tos 16
-t mangle : indica uso da tabela “mangle”.
-A : inserir esta nova regra ao final da lista
Módulos Externos
• Uma forma de ampliar a funcionalidade da
ferramenta IPTables.
• Foge do convencional, aplicando regras que
trabalhem sob análise do corpo de um pacote.
• Um módulo é chamado, quando é anunciado
pela opção –m <módulo>.
Módulos IPTables
Detalhes de NAT
SNAT
DNAT
Proxy Transparente
NAT
• É uma forma de mascaramento.
• Muito utilizado em roteadores.
• Só que desempenha função de encaminhamento de
pacotes (forwarding).
• Técnica útil quando se deseja colocar um servidor
Web ou servidor de email, atrás de um Firewall,
usando-se IP’s falsos, com intuito de escondê-los
contra invasões.
IPTables - Tabela NAT
• Funções de um Firewall NAT
– SNAT (Source Nat)
(tradução de endereço IP de origem)
– DNAT (Destination NAT)
(tradução de endereço IP de destino)
– Transparent Proxy
Lógica NetFilter (iptables)
Input/Output chain
Forward chain
SNAT
• O Firewall altera o endereço IP ou porta de origem,
antes dos pacotes serem enviados.
• O Firewall pode enviar um pacote do host “A” ao
host “B” e informar ao host “B” que tal pacote foi
enviado pelo host “C”.
SNAT
• Qualquer regra aplicada a SNAT utiliza-se somente
da chain POSTROUTING.
• Antes de iniciarmos a manipulação de qualquer regra
da Tabela NAT, tem-se que habilitar a função de redirecionamento (forward) no kernel Linux:
Forward no kernel Linux
• O roteamento em um sistema Linux é nativo do kernel, ou seja, ao
iniciar o serviço de rede, o kernel já ativou o roteamento de
pacotes. O serviço roda inicialmente de uma forma local, roteando
apenas os pacotes da própria máquina. Para que o kernel possa
rotear pacotes de outras máquinas é preciso dizer que ele deve
fazer isso, que é feito inserindo o valor 1 no arquivo
/proc/sys/net/ipv4/ip_forward.
Forward no kernel Linux
• Verificando o valor de ip_forward
# cat /proc/sys/net/ipv4/ip_forward
• Mudando o valor de ip_forward
# echo 1 > /proc/sys/net/ipv4/ip_forward
• Verificando o novo valor de ip_forward
# cat /proc/sys/net/ipv4/ip_forward
• Também é possível fazer isso, e de uma forma mais adequada,
editando-se o arquivo /etc/sysctl.conf.
Exemplo 1: SNAT
• >iptables –t nat –A POSTROUTING –s
10.0.3.1 –o eth1 –j SNAT –to 192.111.22.33
• Com IPTables informamos ao Netfilter que atribua à tabela
NAT (-t nat) sob o chain (POSTROUTING) (os pacotes
devem ser modificados após o tratamento de roteamento).
• Uma nova regra (-A) ao fim da lista.
• Qualquer pacote que tenha como origem o host 10.0.3.1 (-s
10.0.3.1) e que deve sair pela interface eth1 (-o eth1)
deve ter seu endereço de origem alterado (-j SNAT) para
192.111.22.33 (–to 192.111.22.33).
Exemplo 2: SNAT
• >iptables –t nat –A POSTROUTING –s 10.0.3.0/8 –o
eth0 –j SNAT –to 192.111.22.33
• Com IPTables informamos ao Netfilter que atribua à tabela NAT (-t nat)
sob o chain (POSTROUTING) (os pacotes devem ser modificados após o
tratamento de roteamento).
• Uma nova regra (-A) ao fim da lista.
• Qualquer pacote que tenha como origem o host 10.0.3.0/8 (-s
10.0.3.1/8) e que deve sair pela interface eth0 (-o eth0) deve ter
seu endereço de origem alterado (-j SNAT) para 192.111.22.33 (–to
192.111.22.33).
Exemplo 3: SNAT
•
>iptables –t nat –A POSTROUTING –s 10.0.3.1 –o eth0 –j
SNAT –to 192.111.22.33-192.111.22.66
• Com IPTables informamos ao Netfilter que atribua à tabela NAT (-t nat)
sob o chain (POSTROUTING) (os pacotes devem ser modificados após o
tratamento de roteamento).
• Uma nova regra (-A) ao fim da lista.
• Qualquer pacote que tenha como origem o host 10.0.3.1 (-s
10.0.3.1) e que deve sair pela interface eth0 (-o eth0) deve ter seu
endereço de origem alterado (-j SNAT) para qualquer IP na faixa
192.111.22.33 à 192.111.22.66 (–to 192.111.22.33192.111.22.66).
DNAT
• Altera o endereço IP ou porta de destino, dos pacotes
que atravessam o Firewall, antes do pacote ser enviado
ao seu destino final.
• Receber um pacote destinado à porta 80 do host “A” e
encaminhá-lo à porta 3128 do host “B”.
• Possibilita o desenvolvimento de:
– Proxies transparentes,
– Balanceamento de carga.
DNAT
• Usar somente o chain PREROUTING.
• Antes de iniciarmos a manipulação de qualquer regra
da Tabela NAT, tem-se que habilitar a função de redirecionamento (forward) no kernel Linux:
>echo “1” > /proc/sys/net/ipv4/ip_forward
Exemplo 1: DNAT
• >iptables –t nat –A PREROUTING –s 10.0.3.1
–i eth1 –j DNAT –to 192.111.22.33
• Com IPTables informamos ao Netfilter que atribua à tabela
NAT (-t nat) sob o chain (PREROUTING) (os pacotes
devem ser redirecionados logo que chegam).
• Uma nova regra (-A) ao fim da lista.
• Qualquer pacote que tenha como origem o host 10.0.3.1 (-s
10.0.3.1) e que entre pela interface eth1 (-i eth1) deve
ter seu endereço de destino alterado (-j DNAT) para
192.111.22.33 (–to 192.111.22.33)
Exemplo 2: DNAT
• >iptables –t nat –A PREROUTING –i eth0 –j
DNAT –to 192.11.22.10-192.11.22.13
• Com IPTables informamos ao Netfilter que atribua à tabela
NAT (-t nat) sob o chain PREROUTING (os pacotes devem ser
redirecionados logo que chegam).
• Uma nova regra (-A) ao fim da lista.
• E que qualquer pacote que entre na interface eth0 (-i eth0),
independente de quem o enviou deve ser automaticamente
redirecionado aos hosts 192.11.22.10, 192.11.22.11,
192.11.22.12, 192.11.22.13 (–to 192.11.22.10192.11.22.13).
Exemplo 3: DNAT
• >iptables –t nat –A PREROUTING –i eth2 –j
DNAT –to 192.11.22.58:22
• Com IPTables informamos ao Netfilter que atribua à tabela
NAT (-t nat) sob o chain PREROUTING (os pacotes devem ser
redirecionados logo que chegam).
• Uma nova regra (-A) ao fim da lista.
• E qualquer pacote que entre na interface eth2 (–i eth2),
independente de quem o enviou, deve ser automaticamente
redirecionado ao host 192.11.22.58 (–to
192.11.22.58:22), e, independente da porta solicitada,
deverá ser enviado à porta 22 (serviço SSH).
Download