View
8.149
Download
1
Category
Preview:
DESCRIPTION
Iptables Linux
Citation preview
IptablesFirewalls no Linux
por oliver menezes
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.
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.
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.
Registro
• Todo tráfego que for registrado pelo iptables é registrado por padrão no arquivo /var/log/kern.log.
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.
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.
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
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
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.
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.
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.
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.
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.
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.
Listando regras - L
• Para listar a regra criada anteriormente usamos o comando:
#iptables -t filter -L INPUT
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
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
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
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
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
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
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.
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.
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.
Um exemplo de firewall simples
#!/bin/bash#Firewall e compartilhamento de internet
implementado por#oliver_menezes@yahoo.com.br#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
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
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
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
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
Recommended