iptables completo oliver

30
Iptables Firewalls no Linux por oliver menezes

Upload: marcosserva

Post on 09-Jun-2015

8.157 views

Category:

Technology


1 download

DESCRIPTION

Iptables Linux

TRANSCRIPT

Page 1: Iptables   Completo   Oliver

IptablesFirewalls no Linux

por oliver menezes

Page 2: Iptables   Completo   Oliver

Firewall - Iptables

• O iptables é um código de firewall das versões 2.4 do kernel, que substituiu o ipchains (presente nas séries 2.2 do kernel). Ele foi incluído no kernel da série 2.4 em meados de Junho/Julho de 1999.

Page 3: Iptables   Completo   Oliver

Componentes

• Pacote: iptables • iptables - Sistema de controle principal para protocolos

ipv4 • ip6tables - Sistema de controle principal para protocolos

ipv6 • iptables-save - Salva as regras atuais em um arquivo

especificado como argumento. Este utilitário pode ser dispensado por um shell script contendo as regras executado na inicialização da máquina.

• iptables-restore - Restaura regras salvas pelo utilitário iptables-save.

Page 4: Iptables   Completo   Oliver

Hardware Necessário

• É necessário que o seu kernel tenha sido compilado com suporte ao iptables. O requerimento mínimo de memória necessária para a execução do iptables é o mesmo do kernel 2.4 (4MB). Dependendo do tráfego que será manipulado pela(s) interface(s) do firewall ele poderá ser executado com folga em uma máquina 386 SX com 4MB de RAM.

• Como as configurações residem no kernel não é necessário espaço extra em disco rígido para a execução deste utilitário.

Page 5: Iptables   Completo   Oliver

Registro

• Todo tráfego que for registrado pelo iptables é registrado por padrão no arquivo /var/log/kern.log.

Page 6: Iptables   Completo   Oliver

Instalação

#apt-get install iptables

• O pacote iptables contém o utilitário iptables (e ip6tables para redes ipv6) necessários para inserir suas regras no kernel. Se você não sabe o que é ipv6, não precisará se preocupar com o utilitário ip6tables por enquanto.

Page 7: Iptables   Completo   Oliver

Tipos de firewalls

Existem basicamente dois tipos de firewalls: • nível de aplicação - Este tipo de firewall analisam o

conteúdo do pacote para tomar suas decisões de filtragem. Permitem um controle relacionado com o conteúdo do tráfego. Servidores proxy, como o squid, são um exemplo deste tipo de firewall.

• nível de pacotes - Este tipo de firewall toma as decisões baseadas nos parâmetros do pacote, como porta/endereço de origem/destino, estado da conexão, e outros parâmetros do pacote. O firewall então pode negar o pacote (DROP) ou deixar o pacote passar (ACCEPT). O iptables é um excelente firewall que se encaixa nesta categoria.

Page 8: Iptables   Completo   Oliver

O que são regras?

• As regras são como comandos passados ao iptables para que ele realize uma determinada ação (como bloquear ou deixar passar um pacote) de acordo com o endereço/porta de origem/destino, interface de origem/destino, etc. As regras são armazenadas dentro dos chains e processadas na ordem que são inseridas.

• As regras são armazenadas no kernel, o que significa que quando o computador for reiniciado tudo o que fez será perdido. Por este motivo elas deverão ser gravadas em um arquivo para serem carregadas a cada inicialização.

• Um exemplo de regra:#iptables -A INPUT -s 123.123.123.1 -j DROP

Page 9: Iptables   Completo   Oliver

O que são chains?

• Os Chains são locais onde as regras do firewall definidas pelo usuário são armazenadas para operação do firewall. Existem dois tipos de chains: os embutidos (como os chains INPUT, OUTPUT e FORWARD) e os criados pelo usuário. Os nomes dos chains embutidos devem ser especificados sempre em maiúsculas (note que os nomes dos chains são case-sensitive, ou seja, o chain input é completamente diferente de INPUT

Page 10: Iptables   Completo   Oliver

O que são tabelas?

• Tabelas são os locais usados para armazenar os chains e conjunto de regras com uma determinada característica em comum. As tabelas podem ser referenciadas com a opção -t tabela e existem 3 tabelas disponíveis no iptables: – Filter;– NAT;– Mangle.

Page 11: Iptables   Completo   Oliver

O que são tabelas?

• filter - Esta é a tabela padrão, contém 3 chains padrões: – INPUT - Consultado para dados que chegam

a máquina – OUTPUT - Consultado para dados que saem

da máquina – FORWARD - Consultado para dados que são

redirecionados para outra interface de rede ou outra máquina.

Page 12: Iptables   Completo   Oliver

O que são tabelas?

• nat - Usada para dados que gera outra conexão (masquerading, source nat, destination nat, port forwarding, proxy transparente são alguns exemplos). Possui 3 chains padrões: – PREROUTING - Consultado quando os pacotes precisam ser

modificados logo que chegam. É o chain ideal para realização de DNAT e redirecionamento de portas.

– OUTPUT - Consultado quando os pacotes gerados localmente precisam ser modificados antes de serem roteados. Este chain somente é consultado para conexões que se originam de IPs de interfaces locais.

– POSTROUTING - Consultado quando os pacotes precisam ser modificados após o tratamento de roteamento. É o chain ideal para realização de SNAT e IP Masquerading.

Page 13: Iptables   Completo   Oliver

O que são tabelas?• mangle - Utilizada para alterações especiais de pacotes (como

modificar o tipo de serviço (TOS). Possui 2 chains padrões: – INPUT - Consultado quando os pacotes precisam ser modificados antes

de serem enviados para o chain INPUT da tabela filter. – FORWARD - Consultado quando os pacotes precisam ser modificados

antes de serem enviados para o chain FORWARD da tabela filter. – PREROUTING - Consultado quando os pacotes precisam ser

modificados antes de ser enviados para o chain PREROUTING da tabela nat.

– POSTROUTING - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain POSTROUTING da tabela nat.

– OUTPUT - Consultado quando os pacotes precisam ser modificados antes de serem enviados para o chain OUTPUT da tabela nat.

Page 14: Iptables   Completo   Oliver

Adicionando regras - A Agora vamos incluir uma regra no chain INPUT (-A INPUT) que

bloqueie (-j DROP) qualquer acesso indo ao endereço 127.0.0.1 (-d 127.0.0.1):

iptables -t filter -A INPUT -d 127.0.0.1 -j DROP • Agora verificamos um novo ping.• Desta vez a máquina 127.0.0.1 não respondeu, pois todos os

pacotes com o destino 127.0.0.1 (-d 127.0.0.1) são rejeitados (-j DROP). A opção -A é usada para adicionar novas regras no final do chain. Além de -j DROP que serve para rejeitar os pacotes, podemos também usar -j ACCEPT para aceitar pacotes. A opção -j é chamada de alvo da regra ou somente alvo pois define o destino do pacote que atravessa a regra.

• OBS: - A tabela filter será usada como padrão caso nenhuma tabela seja especificada através da opção -t.

Page 15: Iptables   Completo   Oliver

Listando regras - L

• A seguinte sintaxe é usada para listar as regras criadas: • iptables [-t tabela] -L [chain] [opções]

Onde: • tabela

– É uma das tabelas usadas pelo iptables. Se a tabela não for especificada, a tabela filter será usada como padrão..

• chain – Um dos chains disponíveis na tabela acima ou criado pelo usuário. Caso o chain não

seja especificado, todos os chains da tabela serão mostrados.

• opções -v - Exibe mais detalhes sobre as regras criadas nos chains. -n - Exibe endereços de máquinas/portas como números ao invés de tentar a resolução

DNS e consulta ao /etc/services. -x - Exibe números exatos ao invés de números redondos. Também mostra a faixa de

portas de uma regra de firewall. --line-numbers - Exibe o número da posição da regra na primeira coluna da listagem.

Page 16: Iptables   Completo   Oliver

Listando regras - L

• Para listar a regra criada anteriormente usamos o comando:

#iptables -t filter -L INPUT

Page 17: Iptables   Completo   Oliver

Limpando as regras de um chain - F

• Para limpar todas as regras de um chain, use a seguinte sintaxe:

• iptables [-t tabela] [-F chain] • Onde: • tabela

– Tabela que contém o chain que desejamos zerar. • chain

– Chain que desejamos limpar. Caso um chain não seja especificado, todos os chains da tabela serão limpos.

#iptables -t filter -F INPUT

Page 18: Iptables   Completo   Oliver

Especificando um endereço de origem/destino

• As opções -s (ou --src/--source)e -d (ou --dst/--destination) servem para especificar endereços de origem e destino respectivamente. É permitido usar um endereço IP completo (como 192.168.1.1), um hostname (debian), um endereço fqdn (www.debian.org) ou um par rede/máscara (como 200.200.200.0/255.255.255.0 ou 200.200.200.0/24).

• Caso um endereço/máscara não sejam especificados, é assumido 0/0 como padrão (todos as máquinas de todas as redes).

• Bloqueia o tráfego vindo da rede 200.200.200.*: #iptables -A INPUT -s 200.200.200.0/24 -j DROP

Page 19: Iptables   Completo   Oliver

Especificando a interface de origem/destino

• As opções -i (ou --in-interface) e -o (ou --out-interface) especificam as interfaces de origem/destino de pacotes.

• Por exemplo para bloquear o acesso do tráfego de qualquer máquina com o endereço 200.123.123.10 vinda da interface ppp0 (uma placa de fax-modem):

#iptables -A INPUT -s 200.123.123.10 -i ppp0 -j DROP A mesma regra pode ser especificada como :

#iptables -A INPUT -s 200.123.123.10 -i ppp+ -j DROP O sinal de "+" funciona como um coringa, assim a regra terá efeito em qualquer interface. Para bloquear qualquer tráfego local para a Internet:

#iptables -A OUTPUT -o ppp+ -j DROPPara bloquear a passagem de tráfego da interface ppp0 para a

interface eth1 (de uma de nossas redes internas): #iptables -A FORWARD -i ppp0 -o eth1 -j DROP

Page 20: Iptables   Completo   Oliver

Especificando um protocolo

• A opção -p (ou --protocol) é usada para especificar protocolos no iptables. Podem ser especificados os protocolos tcp, udp e icmp. Por exemplo, para rejeitar todos os pacotes UDP vindos de 200.200.200.200:

#iptables -A INPUT -s 200.200.200.200 -p udp -j DROP

Page 21: Iptables   Completo   Oliver

Especificando portas de origem/destino

• As portas de origem/destino devem ser especificadas após o protocolo e podem ser precedidas por uma das seguintes opções:

• --source-port ou --sport - Especifica uma porta ou faixa de portas de origem.

• --destination-port ou --dport - Especifica uma porta ou faixa de portas de destino.

• Uma faixa de portas pode ser especificada através de PortaOrigem:PortaDestino:

• Bloqueia qualquer pacote indo para 200.200.200.200 na faixa de # portas 0 a 1023:

#iptables -A OUTPUT -d 200.200.200.200 -p tcp --dport :1023 -j DROP

Page 22: Iptables   Completo   Oliver

Salvando e Restaurando regras

• As regras que você está trabalhosamente criando e testando manualmente enquanto manipula o iptables podem ser salvas de 2 formas; uma delas é escrevendo um shell script que tenha todos os comandos, um por linha. Isto é recomendado quando tem um firewall grande e que exige uma boa padronização de regras, bem como sua leitura, comentários.

• A outra forma é usando as ferramentas iptables-save e iptables-restore. O iptables-save deve ser usado sempre que modificar regras no firewall iptables da seguinte forma:

#iptables-save >/dir/iptables-regras. • Para restaurar as regras salvas, utilize o comando:

#iptables-restore </dir/iptables-regras

Page 23: Iptables   Completo   Oliver

Fazendo IP masquerading(Compartilhar Internet)

#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

#echo "1" >/proc/sys/net/ipv4/ip_forward A configuração do servidor Linux está completa,

agora os clientes da rede precisarão ser configurados para usar o endereço IP do servidor Linux como gateway. É recomendável instalar um servidor proxy e DNS na máquina Linux para acelerar o desempenho das requisições/resolução de nomes das máquinas em rede.

Page 24: Iptables   Completo   Oliver

Fazendo DNAT

• DNAT (Destination nat - nat no endereço de destino) consiste em modificar o endereço de destino das máquinas clientes. O destination nat é muito usado para fazer redirecionamento de pacotes, proxyes transparentes e balanceamento de carga.

• Modifica o endereço IP destino dos pacotes de 200.200.217.40 vindo da interface eth0 para 192.168.1.2.

#iptables -t nat -A PREROUTING -s 200.200.217.40 -i eth0 -j DNAT --to 192.168.1.2

OBS: Não se esqueça de conferir se o ip_forward está ajustado para 1:

#echo "1" >/proc/sys/net/ipv4/ip_forward.

Page 25: Iptables   Completo   Oliver

Um exemplo de firewall simples

– O exemplo a seguir toma com base a situação que o servidor linux está ligado à rede externa pela interface eth0, e a rede interna por eth1.

Page 26: Iptables   Completo   Oliver

Um exemplo de firewall simples

#!/bin/bash#Firewall e compartilhamento de internet

implementado por#[email protected]#Esse script assume que o módulo iptables já

esteja carregado por padrão

#Limpa as regras anteriores##Qdo o argumento -t é omitido regra é aplicada

na tabela filteriptables -F

Page 27: Iptables   Completo   Oliver

Um exemplo de firewall simples

#Limpa as regras da tabela nat

iptables -t nat -F

#Compartilhamento de internet

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

echo 1 > /proc/sys/net/ipv4/ip_forward

Page 28: Iptables   Completo   Oliver

Um exemplo de firewall simples#Abre algumas portasiptables -A INPUT -p tcp --destination-port 22 -j ACCEPTiptables -A INPUT -p tcp --destination-port 3128 -j ACCEPTiptables -A INPUT -p tcp --destination-port 80 -j ACCEPTiptables -A INPUT -p tcp --destination-port 1433 -j ACCEPTiptables -A INPUT -p tcp --destination-port 3389 -j ACCEPT

#Liberação de conexão para computadores da rede internaiptables -A INPUT -p tcp --syn -s 192.168.0.0/255.255.255.0 -j

ACCEPT

# Fecha o restoiptables -A INPUT -p tcp --syn -j DROP

Page 29: Iptables   Completo   Oliver

Um exemplo de firewall simples

#Redirecionamento do trafego da porta 80 para o Squidiptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT

--to-port 3128

#Redirecionamento do tráfego TCP e UDP que provém da internet para uma máquina

#na rede interna com ip 192.168.1.254

iptables -t nat -A PREROUTING -p tcp --dport 1433 -i eth0 -j DNAT --to 192.168.1.254

iptables -t nat -A PREROUTING -p udp --dport 1433 -i eth0 -j DNAT --to 192.168.1.254

Page 30: Iptables   Completo   Oliver

Referências

• http://www.guiadohardware.net/artigos/firewall-iptables/

• http://www.conectiva.com.br/cpub/pt/incConectiva/suporte/pr/servidores.firewall.iptables.html

• http://focalinux.cipsga.org.br/gol.html