Laboratório de Interconexão de Redes e Serviços - 4º Período fileFirewall com Iptables...
Transcript of Laboratório de Interconexão de Redes e Serviços - 4º Período fileFirewall com Iptables...
Firewall com Iptables
Introdução
Firewall é um quesito de segurança com cada vez mais importância no
mundo da computação.
À medida que o uso de informações e sistemas é cada vez maior, a proteção
desses requer a aplicação de ferramentas e conceitos de segurança
eficientes. O firewall é uma opção praticamente imprescindível.
Firewall com Iptables
O que é Firewall?
Firewall pode ser definido como uma barreira de proteção, que controla o
tráfego de dados entre seu computador e a Internet (ou entre a rede onde
seu computador está instalado e a Internet). Seu objetivo é permitir somente
a transmissão e a recepção de dados autorizados.
Existem firewalls baseados na combinação de hardware e software e
firewalls baseados somente em software. Esse último é o tipo recomendado
ao uso doméstico e também é o mais comum.
O firewall é um mecanismo que atua como "defesa" de um computador ou de
uma rede, controlando o acesso ao sistema por meio de regras e a filtragem
de dados. A vantagem do uso de firewalls em redes, é que somente um
computador pode atuar como firewall, não sendo necessário instalá-lo em
cada máquina conectada.
Firewall com Iptables
Como o Firewall funciona?
Há mais de uma forma de funcionamento de um firewall, que varia de acordo
com o sistema, aplicação ou do desenvolvedor do programa.
No entanto, existem dois tipos básicos de conceitos de firewalls: o que é
baseado em filtragem de pacotes e o que é baseado em controle de
aplicações.
Ambos não devem ser comparados para se saber qual o melhor, uma vez
que cada um trabalha para um determinado fim, fazendo que a comparação
não seja aplicável.
Firewall com Iptables
Filtragem de Pacotes
O firewall que trabalha na filtragem de pacotes é muito utilizado em redes
pequenas ou de porte médio. Por meio de um conjunto de regras
estabelecidas, esse tipo de firewall determina que endereços IPs e dados
podem estabelecer comunicação e/ou transmitir/receber dados.
Alguns sistemas ou serviços podem ser liberados completamente (por
exemplo, o serviço de e-mail da rede), enquanto outros são bloqueados por
padrão, por terem riscos elevados (como softwares de mensagens
instantâneas).
O grande problema desse tipo de firewall, é que as regras aplicadas podem
ser muito complexas e causar perda de desempenho da rede ou não serem
eficazes o suficiente.
Firewall com Iptables
Firewall de Aplicação
Firewalls de controle de aplicação (exemplos de aplicação: SMTP, FTP,
HTTP, etc) são instalados geralmente em computadores servidores e são
conhecidos como proxy. Esse tipo não permite comunicação direto entre a
rede e a Internet.
Tudo deve passar pelo firewall, que atua como um intermediador. O proxy
efetua a comunicação entre ambos os lados por meio da avaliação do
número da sessão TCP dos pacotes. Esse tipo de firewall é mais complexo,
porém muito seguro, pois todas as aplicações precisam de um proxy. Caso
não haja, a aplicação simplesmente não funciona.
O firewall de aplicação permite um acompanhamento mais preciso do tráfego
entre a rede e a Internet (ou entre a rede e outra rede). É possível, inclusive,
contar com recursos de log e ferramentas de auditoria.
Firewall com Iptables
Razões para utilizar um Firewall
A seguir são citadas as três principais razões para se usar um firewall:
O firewall pode ser usado para ajudar a impedir que sua rede ou seu
computador seja acessado sem autorização. Assim, é possível evitar que
informações sejam capturadas ou que sistemas tenham seu
funcionamento prejudicado pela ação de hackers;
O firewall é um grande aliado no combate a vírus e cavalos de tróia, uma
vez que é capaz de bloquear portas que eventualmente sejam usadas
pelas "pragas digitais" ou então bloquear acesso a programas não
autorizados;
Em redes corporativas, é possível evitar que os usuários acessem
serviços ou sistemas indevidos, além de ter o controle sobre as ações
realizadas na rede, sendo possível até mesmo descobrir quais usuários
as efetuaram.
Firewall com Iptables
Configurando o Iptables
Principais características do iptables:
Suporte aos protocolos TCP, UDP, ICMP;
Pode especificar portas de origem e de destino;
Suporta módulos externos como FTP;
Suporta um número ilimitado de regras por CHAINS;
Pode criar regras de proteção contra ataques diversos;
Suporte para roteamento de pacotes e redirecionamento de portas;
Suporta vários tipos de NAT, como o SNAT e DNAT e mascaramento;
Pode priorizar tráfego para determinados tipos de pacotes;
Tem suporte a IPV6, através do programa ip6tables.
Firewall com Iptables
Funcionamento
Através de regras poderemos fazer com que os pacotes possam ser ou não
recebidos a rede toda, a determinada máquina, interface ou mesmo porta de
conexão. O iptables trabalha através de Tabelas, Chains e Regras.
Tabelas
Existem 3 tabelas possíveis de serem utilizadas no iptables, sendo que uma
delas, a mangle raramente é usada, restando a filter, que é a padrão,
utilizada nos tráfegos de dados comuns, sem ocorrência de NAT.
Quando não especificamos qual tabela a ser utilizada é ela que será ativada.
A outra geralmente utilizada é a nat, que como o próprio nome diz, é usada
quando há ocorrência de NAT.
Firewall com Iptables
Chains
As Chains são os locais onde as regras do firewall definidas pelo usuário são
armazenadas para operação do firewall. Essa lista de regras que analisa o
cabeçalho do pacote e diz o que deve ser feito com ele.
Através delas podemos especificar a situação do tratamento dos pacotes,
seja qual tabela for utilizada.
Regras
As regras de firewall geralmente são compostas de uma Tabela, Opção,
Chain, Dados e Ação. Através destes elementos podemos especificar o que
fazer com os pacotes.
Firewall com Iptables
Tabela Filter
Esta é a tabela padrão, responsável pela filtragem de todos os pacotes que
passam pelo host, não importando origem e destino. Contém três chains:
INPUT: Pacotes cujo destino final é a própria máquina firewall;
OUTPUT: Pacotes que saem da máquina firewall;
FORWARD: Pacote que atravessa a máquina firewall, cujo destino é uma
outra máquina. Este pacote não sai da máquina firewall e sim de outra
máquina da rede ou fonte. Neste caso a máquina firewall está repassando
o pacote.
Firewall com Iptables
Tabela NAT
Responsável pelo controle dos pacotes que passam pelo host, mas cuja
origem ou destino não é o mesmo. Esta tabela é utilizada quando desejamos
utilizar o iptables para construir “gateways” de borda. Contém três chains:
PREROUTING: Quando os pacotes entram para sofrerem NAT;
POSTROUTING: Quando os pacotes estão saindo após sofrerem NAT;
OUTPUT: Pacotes que são gerados na própria máquina e que sofrerão
NAT.
Firewall com Iptables
Tabela Mangle
Permite alterar características específicas do pacote, como por exemplo: o
ToS (Tipo de Serviço) o que permite implementar um sistema simples de
QoS ( qualidade de serviço).
De outra forma, serve para especificar ações especiais para o tratamento do
tráfego que atravessa as chains.
Nesta tabela existem cinco chains: PREROUTING, POSTROUTING, INPUT,
OUTPUT e FORWARD.
Opções com o Tipo de Serviço (ToS) são especificadas nesta tabela para
classificar e aumentar consideravelmente a velocidade de tráfego
considerados em tempo real.
Firewall com Iptables
Política Padrão
Política default do firewall consiste na regra que será utilizada caso algum
pacote não se encaixe em nenhuma das regras estabelecidas.
É altamente recomendado que a política default seja DROP, ou seja, tudo o
que não for expressamente permitido será descartado (proibido).
Firewall com Iptables
Comandos do Iptables
Para a manipulação das ACLs armazenadas nas suas tabelas, o iptables
fornece os seguintes comandos:
-P: define uma regra padrão;
-A: adiciona uma nova regra no final da lista de regras de uma dada
tabela. Tem prioridade sobre a -P;
-D: apaga uma regra;
-L: lista todas as regras de uma determinada tabela;
-S: lista as regras existentes, da forma como foi salvo pelo iptables;
-F: remove todas as regras de uma tabela sem alterar sua política padrão;
-N: cria nova nova “chain” na tabela especificada;
Firewall com Iptables
Comandos do Iptables
-I: insere uma regra;
-H: mostra a ajuda;
-R: substitui uma regra;
-C: faz uma checagem das regras existentes;
-X: exclui uma regra específica pelo seu nome;
-Z: Zera uma regra específica.
Opções do Iptables
As opções permitem categorizar melhor as ACLs, fornecendo um tratamento
mais detalhado sobre quais pacotes deverão ser manipulados. As principais
opções fornecidas pelo iptables são listadas a seguir:
Firewall com Iptables
Opções do Iptables
-s: Especifica a origem do pacote. Essa pode ser tanto uma rede ou host.
Possíveis combinações podem ser:
-s 192.168.0.0/255.255.255.0 ou -s 192.168.0.0/24
OBS.: No segundo caso, estamos especificando a máscara de rede
conforme o número de bits 1, por exemplo.
No exemplo acima estamos especificando toda uma rede de máscara C, no
exemplo abaixo especificamos um host:
-s 192.168.30.51/255.255.255.255 ou -s 192.168.30.51 ou -s
192.168.30.51/32. OBS.: A máscara em números de bits 1 para host é 32.
Firewall com Iptables
Opções do Iptables
Podemos especificar assim também: -s www.cisco.com
Podemos especificar qualquer origem também:
-s 0.0.0.0/0.0.0.0 ou -s 0/0
-d: Especifica o destino do pacote. A sintaxe é a mesma do -s.
-p: Protocolo usado na regra. Pode ser tcp, udp e icmp:
-p tcp
-p udp
-p icmp
Firewall com Iptables
Opções do Iptables
-i: Interface de entrada, ou seja, placa de rede, modem ou interface de
conexão que estará recebendo o pacote a ser tratado.
-i eth0
-i eth1
-i ppp0
-o: Interface de saída. As sintaxes são as mesmas que -i, sendo que nesse
caso estará sendo enviado o pacote a ser tratado.
!: Exclui determinado argumento:
-i ! eth0 - Refere-se a qualquer interface de entrada exceto a eth0;
-s ! 192.168.0.45 - Refere-se a qualquer endereço de entrada, exceto o ip
192.168.0.45.
Firewall com Iptables
Opções do Iptables
--sport: Refere-se a porta de origem. Este deve vir acompanhado das
funções -p tcp e/ou -p udp:
-p tcp --sport 80 - Refere-se a porta de origem 80 sob o protocolo tcp.
--dport: Refere-se a porta de destino. Assim como a função --sport, ela
trabalha somente com as funções -p tcp e -p udp. A sintaxe é similar a –
sport.
--syn: Especifica que a regra deve encontrar somente datagramas com o bit
SYN ligado e os bits ACK e FIN desligados. Datagramas com essas opções
são usados para requisitar início de conexão TCP.
Através das funções --sport e --dport podemos especificar não só uma porta
específica como também um range de portas: --sport 33435:33525
Firewall com Iptables
Alvos (ou “ações”) das Regras do Iptables
Quando um fluxo se enquadra em todos os quesitos especificados por uma
regra, ele poderá entrar na máquina, ser rejeitado ou outras ações poderão
ser realizadas, a estas ações damos o nome de alvo da regra ou fluxo. Os
principais alvos implementados pelo iptables são:
ACCEPT: aceita e permite a passagem do pacote;
DROP: não permite a passagem do pacote e abandona-o não dando
sinais de recebimento;
REJECT: assim como o DROP, não permite a passagem do pacote, mas
envia um aviso (icmp unreachable);
LOG: cria um log referente a regra em /var/log/messages;
SNAT: altera o endereço de origem do pacote que atendeu as
características especificadas;
Firewall com Iptables
Alvos das Regras do Iptables
DNAT: altera o endereço de destino do pacote;
MASQUERADE: é um tipo especial de SNAT usado para conectar a rede
interna a Internet quando um IP dinâmico é entregue pelo provedor;
REDIRECT: redireciona o pacote para uma porta diferente.
Com esses fatores podemos criar as nossas regras com a seguinte
composição:
# iptables -A FORWARD -s 192.168.0.45 -p icmp -j DROP
Sendo: -A (opção) / FORWARD (chain) / -s 192.168.0.45 -p icmp (dados) –j
DROP (ação)
No caso do exemplo, a cima a regra determina que todos os pacotes icmp
originários do endereço 192.168.0.45 devem ser barrados.
Firewall com Iptables
Salvando as Regras
Depois das regras prontas, podemos salvá-las com este comando:
# iptables-save > <dê um nome para o arquivo>
Para recuperá-las, use este comando:
# iptables-restore > <nome do arquivo>
Salve o arquivo criado com um nome sugestivo. Depois, dê permissão de
execução para o arquivo:
chmod +x “exemplo”
Firewall com Iptables
Executando as Regras
Toda vez que quiser que o firewall seja habilitado é só executá-lo (sempre
como root):
# exemplo
Para não ter que ficar chamando o script toda vez que inicializar o sistema,
podemos fazer com que ele seja ativado na inicialização. Para isso é preciso
editar o arquivo:
/etc/rc.d/rc.local
e incluir o comando no final do arquivo.
Firewall com Iptables
Algumas Opções e Observações
Vale fazer algumas observações a respeito da ordem das regras. Uma delas
é que a primeira regra tem prioridade sobre a segunda, caso ambas estejam
em conflito:
iptables -A FORWARD -p tcp --syn -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -p tcp --syn -s 192.168.1.0/24 -j DROP
Com os comandos abaixo, limpamos todas as tabelas e regras:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
Firewall com Iptables
Algumas Opções e Observações
É importante ressaltar que as regras devem seguir uma ordem definida, ou
seja, a regra posterior deve estar de acordo com a regra anterior para que
tudo corra sem problemas:
iptables -P FORWARD -j DROP
iptables -A FORMARD -s 192.168.0.0/24 -d 10.0.0.0/8 -j ACCEPT
Através dessa regra, determinamos que todo o repasse de pacotes seja
bloqueado, depois permitimos que possa repassar pacotes da rede
192.168.0.0 para a rede 10.0.0.0 mas esta não poderá retornar os pacotes.
Então o correto seria inserir mais uma regra:
iptables -A FORWARD -d 192.168.0.0/24 -s 10.0.0.0/8 -j ACCEPT
Firewall com Iptables
Algumas Opções e Observações
Dessa forma, a rede 10.0.0.0 poderá repassar os pacotes, fazendo com que
as redes possam conversar sem problemas.
Ao fazer as regras, lembre-se de primeiro bloquear, para depois abrir o
acesso desejado:
iptables -P FORMARD -j DROP
iptables -A FORWARD -s 192.168.0.45 -p tcp --sport 80 -j ACCEPT
Firewall com Iptables
Exemplos de Scripts de Firewall
Firewall para bloquear todo o fluxo de dados só liberando o fluxo na interface
lo (loopback):
# definindo as regras padrão
#
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#
# liberando a interface lo
#
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Firewall com Iptables
Exemplos de Scripts de Firewall
Firewall para liberar o acesso externo ao serviço http (eth1) e o acesso pela
intranet (eth0) na porta 8080.
# definindo as regras padrão
#
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#
# definindo as regras de filtragem ao HTTP e HTTPS
#
iptables -A INPUT -p tcp -dport 80 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 443 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 8080 -i eth0 -j ACCEPT
Firewall com Iptables
Exemplos de Scripts de Firewall
Firewall para um servidor que hospeda os serviços: http (80), https (443),
imap (143), pop3 (110), smtp (25), ftp (21), ssh (22). De tal modo que, todos
os serviços possam ser acessados pela intranet (eth1) e os únicos serviços
que podem ser acessados pela internet (eth0) são o http e o https.
# definindo as regras padrão
#
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#
# liberando acesso pela internet (eth0)
#
Firewall com Iptables
Exemplos de Scripts de Firewall
iptables -A INPUT -p tcp -dport 80 -i eth0 -j ACCEPT
iptables -A INPUT -p tcp -dport 443 -i eth0 -j ACCEPT
#
# liberando acesso pela intranet (eth1)
#
iptables -A INPUT -p tcp -dport 80 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 443 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 143 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 110 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 25 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 21 -i eth1 -j ACCEPT
iptables -A INPUT -p tcp -dport 22 -i eth1 -j ACCEPT