Desvendando iptables
-
Upload
claudio-oliveira -
Category
Documents
-
view
87 -
download
4
Transcript of Desvendando iptables
Desvendando as regras de Firewall Linux Iptables
Autor: Armando Martins de Souza <armandomartins.souza at gmail.com>Data: 12/04/2010
Iptables / firewall / tabelas básicas
IptablesO funcionamento do firewall é basicamente o seguinte:
1. Os pacotes que chegam ao firewall são filtrados através das regras que foram definidas.
2. Roteamento interno (dentro do kernel). Com base no destino do pacote, ele é encaminhadopara o "filtro" (chain) apropriado ao roteamento. Explicaremos mais adiante cada um dosfiltros "básicos" do iptables.
FirewallAntes de iniciarmos o detalhamento das chains, iremos mostrar a relação entre firewall ekernel Linux.
Ifwadm --> kernel 2.01.Ipchains --> Kernel 2.22.Iptables --> A partir do kernel 2.43.
É importante deixar claro que neste tutorial trabalharemos apenas com o firewall iptables.
As tabelas básicasFilter
É composta de 3 chains: INPUT, OUTPUT e FORWARD. É a tabela default, isto significa quequando não referenciamos nenhuma chain no comando iptables, a chain filter é chamada. É
Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...
1 de 12 19-06-2012 17:42
importante deixar claro que essa chain trata do tráfego normal de dados, isto significa quenão há nenhum tipo de mascaramento (NAT) nela.
Nat
É quando temos que mascarar algum endereço IP ou rede. O Nat acontece tanto da redeexterna (Internet), para a rede interna (Lan), quanto da Lan para Internet. A tabela "Nat" écomposta pelas chains: PREROUTING, OUTPUT e POSTROUTING.
Mangle
Basicamente utilizada para fazer QoS. Não trataremos desse assunto neste tutorial.
A seguir ilustramos as tabelas com suas respectivas chains.
Temos abaixo uma representação visual do posicionamento das chains em relação apassagem dos pacotes de dados da tabela "FILTER".
Agora vamos explicar o funcionamento de cada uma das chains descritas acima:
INPUT (Pacotes de Entrada) --> Os pacotes são encaminhados para esta chain quando aorigem não é o firewall, mas o destino é o firewall.FORWARD (Pacotes de Passagem) --> No caso da FORWARD os encaminhamentos sãofeitos quando a origem não é o firewall e o destino também não é o firewall. Isto é, opacote de dados esta apenas passando pelo firewall.OUTPUT (Pacotes de Saída) --> Chain responsável pelos pacotes que tem origem nofirewall e destino não firewall.
Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...
2 de 12 19-06-2012 17:42
A tabela filter só pode tratar do que passa ou não passa.
Políticas de acesso / DROP e REJECT
Políticas de acessoNo que se refere a políticas de acesso temos ACCEPT e DROP.
ACCEPT --> passa tudo, para que o pacote seja bloqueado temos que ter inserido umcomando dizendo que pacotes com aquelas características devem ser bloqueados.DROP --> É exatamente o inverso do ACCEPT. Bloqueia tudo, deixando passar somenteos pacotes que batem exatamente com as características passadas pelo comando deliberação.
Normalmente usamos o critério de bloquear tudo, liberando apenas o que tem que passar,isso tem inúmeras vantagens. Podemos citar por exemplo: evitar o trafego na rededesnecessário, deixar portas abertas sem necessidade, impedindo com isso a possibilidadeque uma falha de segurança seja utilizada por um indivíduo mau intencionado.
Exemplos de mudança de política:
Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...
3 de 12 19-06-2012 17:42
iptables -t <tabela> -P <chain> -j ACCEPT/DROP
Vamos mudar todas as chains da tabela "filter" para DROP:
# iptables -t filter -P INPUT DROP# iptables -P FORWARD DROP# iptables -t filter -P OUTPUT DROP
Reparem que em um dos exemplos não especifiquei qual tabela estou usando (iptables -PFORWARD DROP), isso porque a tabela filter não precisa ser referenciada, pois ela é a tabelapadrão do iptables.
Para colocarmos as políticas das chains novamente para ACCEPT, basta substituirmos o"DROP" por "ACCEPT".
# iptables -t filter -P INPUT ACCEPT# iptables -P FORWARD ACCEPT# iptables -t filter -P OUTPUT ACCEPT
DROP e REJECTMuitas pessoas acham que o "DROP" tem a mesma funcionalidade do "REJECT", contudo háuma sutil diferença. No DROP o pacote é sumariamente bloqueado não dando a mínimaimportância para o pacote enviado, ele apenas o ignora. Já no caso do REJECT é enviado umpacote de retorno informando que o pacote foi rejeitado.
Só para ficar bem claro segue abaixo uma suposta comunicação entre uma maquina quedenominamos como host A enviando pacotes para uma outra maquina chamada host B.
Quando o host A envia um pacote para o host B e a política de iptables dele esta em DROP, ohost A não recebe nenhum pacote de retorno. Isso faz com que o host A não consiga ver ohost B, tornando com isso o host B inacessível.
No REJECT, a máquina envia uma mensagem de retorno do pacote. Nesse caso existe acomunicação entre os hosts e o host A saberá que o host B recebeu seu pacote e o rejeitou.
Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...
4 de 12 19-06-2012 17:42
Exemplos:
Para deixar o host B inacessível para o mundo, basta mudar a política da tabela de ACCEPTpara DROP.
# iptables -P INPUT DROP
Sintaxe iptables e suas opções
A seguir mostraremos a sintaxe iptables e suas opções, tratando somente pacotes de dadosda tabela filter, criando regras para liberar, bloquear ou rejeitar os pacotes de dados detrafego normal, sem a utilização de mascaramento (tabela NAT).
Sintaxe: iptables -t [tabela] <ordem> <chain> [condições] -j <ação>
Tabela: Nesse caso estamos tratando da tabela filter, como já falamos anteriormente, estatabela é a padrão e não é necessário explicitá-la.
Ordem:
a. -I --> Insere a regra no início da chain.b. -A --> Insere a regra no final da chain.
PS: O chain é analisada da primeira regra para a última, isso quer dizer que a analise daregra é feita do inicio da chain para o final, essa análise se segue até encontrar uma regra seenquadre ao pacote. Ao localizar essa regra ele entra e é processado, deixando as regrassubsequentes sem serem analisadas. Por isso é importante tratar as regras da mais restritivapara a menos restritiva.
Abaixo colocamos 3 regras, a primeira regra coloca a política da chain INPUT como DROP,isso quer dizer que só passa um pacote se ele estiver explicito em uma regra. A segundaregra libera acesso a porta 22 para a rede 10.0.0.0/24 e a terceira libera acesso do host10.0.0.49 a porta 22 do host.
Exemplo:
# iptables -P INPUT DROP# iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 22 -j ACCEPT# iptables -A INPUT -p tcp -s 10.0.0.49 --dport 22 -j ACCEPT
No exemplo acima a terceira regra nunca fará match (nenhum pacote irá utilizá-la), pois asegunda regra fará match (regra mais genérica) caso o host de IP 10.0.0.49 tente acessar ohost na porta 22.
Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...
5 de 12 19-06-2012 17:42
Chain:
Iremos dizer a que chain a regra se refere (INPUT, OUTPUT, FORWARD).
Condição (match):
-p = protocolo (all, tcp, udp, icmp etc)--sport = porta origem--dport = porta destino-s = IP origem-d = IP destino-i = interface de entrada-o = interface de saída-m = match
Ação: É onde informamos o que devemos fazer com o pacote, ignorar (DROP), aceitar(ACCEPT) ou rejeitar (REJECT).
Abaixo colocamos alguns exemplos de regras:
Bloquear o protocolo icmp (ping):
# iptables -A INPUT -p icmp --icmp-type ping -j DROP
Só vai liberar o acesso via ssh para o host 10.3.4.11, avisando que o pacote foi rejeitado paraos outros hosts:
# iptables -A INPUT -p tcp --dport 22 -s ! 10.3.4.11 -j REJECT
PS: O símbolo de "!" significa uma exceção a regra. Em nosso exemplo ele esta tratando ohost de IP 10.3.4.11 como exceção a regra. Isso quer dizer que o único host que pode acessaro "firewall" é o 10.3.4.11. A regra irá rejeitas qualquer outro host.
Só vai liberar o protocolo icmp (ping) para o host 10.3.1.10. Ignorando o ping para qualquer
Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...
6 de 12 19-06-2012 17:42
outro host:
# iptables -A INPUT -p icmp --icmp-type ping -s ! 10.3.1.10 -j DROP
Exemplo de liberação do smtp (tcp 25) e-mail, impedir que um servidor de e-mail internoenvie e-mail para fora da empresa. Normalmente isso evita que spammers, que por algummotivo tenham conseguido "acesso" a um de seus servidores, instale um servidor de e-mail eo utilize para enviar spam.
# iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 25 -j REJECT
Essa regra se traduz em: os pacotes tcp que tiverem vierem através da interface eth1 edestino de saída a eth0 porta 25 deverão ser rejeitados.
No caso de duas redes:
Basta incluir as interfaces referentes a segunda rede:
# iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 25 -j REJECT# iptables -A FORWARD -i eth2 -o eth0 -p tcp --dport 25 -j REJECT
Bloquear acesso através do endereço físico da placa de rede (MAC):
# iptables -A FORWARD -m mac --mac-source 00:00:AA:BB:11:12 -p tcp --dport 80 -j DROP
Se você tem alguma dúvida para saber o endereço MAC do host basta seguir o seguinteprocedimento: dar um ping IP que você precisa saber o MAC e depois o dar comando o "arp".
Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...
7 de 12 19-06-2012 17:42
Match (condição) OUTPUT:
Não deixa o host acessar a porta 80:
# iptables -A OUTPUT -p tcp --dport 80 -j REJECT
Libera somente o superuser (root) para fazer testes via icmp (ping):
# iptables -A OUTPUT -p icmp --icmp-type ping -m owner ! --uid-owner root -j REJECT
Esses foram alguns exemplos do que podemos fazer com o iptables, no que se refere aospacotes de dados de tráfego normal (sem utilização de mascaramento - NAT). Ainda existeminúmeras formas de filtrarmos os pacotes, contudo são formas mais pontuais, normalmentenão utilizaremos nada a mais que essas para esse tipo de filtro.
NAT - Network Address Translation
SNAT - Source NAT (mascaramento de IP)O SNAT é utilizado para que os hosts internos a rede, isto é, endereços IP não válidos nainternet, consigam sair para a Internet como se tivessem um endereço válido em suainterface de rede.
No nosso exemplo vamos imaginar que o host de IP 10.3.1.5 queira acessar o site Viva oLinux - 174.123.53.162. Quando o pacote chega no host (firewall) é feito o SNAT, isso aconteceda seguinte maneira:
É criada uma tabela chamada "Connection tracking", onde são gravadas as informações deorigem e destino do pacote. Isto possibilita o servidor saber quem enviou e para quem foienviado o pacote que teve seu endereço IP de origem mascarado. Abaixo temos a
Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...
8 de 12 19-06-2012 17:42
representação de uma comunicação entre dois hosts, onde o IP de origem esta sendomascarado.
A seguir mostraremos como é feito o SNAT, para o exemplo acima.
# iptables -t nat -A POSTROUTING -s 10.3.0.0/16 -d !10.3.0.0/16 -j SNAT --to-source200.1.1.1
Onde:
-s 10.3.0.0/16 - é a origem.-d !10.3.0.0/16 - "não" 10.3.0.0/16 é o destino.
Essa regra de NAT, na realidade SNAT, significa que sempre que a origem for a rede10.3.0.0/16 e o destino não for ela mesma, o pacote ira sair para a Internet com o endereço200.1.1.1, isto quer dizer que o host que estiver sendo acessado "pensará" que quem estáenviando os pacotes é o IP 200.1.1.1 e não o IP 10.3.x.x.
Se estivermos trabalhando com IP dinâmico na Internet, por exemplo Velox ou Virtua,poderemos utilizar o comando abaixo:
# iptables -t nat -A POSTROUTING -s 10.3.0.0/16 -d !10.3.0.0/16 -j MASQUERADE
PS: O MASQUERADE significa que ele irá mascarar todas as solicitações a rede externa. O IPde saída será aquele que estiver ligado diretamente ao gateway default do host (firewall).
Via modem, normalmente utilizamos a interface ppp0:
# iptables -t nat -A POSTROUTING -i eth0 -o ppp0 -j MASQUERADE
Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...
9 de 12 19-06-2012 17:42
DNAT (Destination NAT)No caso do DNAT o mascaramento é feito de forma inversa ao SNAT. Ele propicia acessos quetem como origem a Internet e destino um IP interno da sua rede.
Imaginemos que um host que tem o IP 80.8.8.8 e quer acessar o servidor web de suaempresa através do IP 201.1.1.1. Esse endereço IP é na realidade um dos IPs válidos de seufirewall, só que fazermos um DNAT dizendo que quando um pacote tiver destino o IP201.1.1.1, ele deverá ser encaminhado o IP 10.3.1.2.
O comando abaixo mostra como ficaria na prática o DNAT acima:
# iptables -t nat -A PREROUTING -d 200.1.1.1 -p tcp --dport 80 -j DNAT --to-destination10.3.1.2
Script básico de firewall
Agora mostraremos como criar um script de firewall básico.
Antes de tudo vamos ativar o roteamento via kernel da seguinte maneira:
# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf# sysctl -p /etc/sysctl.conf
Pronto, com os comandos acima acabamos de habilitar o roteamento via kernel o quepossibilita o encaminhamento dos pacotes de dados de uma rede para outra. Muitosadministradores habilitam o roteamento diretamente através do script de firewall, contudoeu prefiro fazer isso apenas uma vez.
Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...
10 de 12 19-06-2012 17:42
Script para firewall:
# mkdir /etc/firewall# vi /etc/firewall/firewall.sh
#!/bin/sh
# Mudando as políticas para ACCEPTiptables -P INPUT ACCEPTiptables -P OUTPUT ACCEPTiptables -P FORWARD ACCEPT
# Limpando as regras em memóriaiptables -F -t filteriptables -F -t mangleiptables -F -t natiptables -X -t filteriptables -X -t mangleiptables -X -t natiptables -Z -t filteriptables -Z -t mangleiptables -Z -t nat
# Libera conexões já estabilizadas.iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Entre com as regras de PREROUTING (DNAT)...
# Entre com as regras de POSTROUTING (SNAT)...
# Entre com as regras de INPUT...# Entre com as regras de FORWARD...# Entre com as regras de OUTPUT
Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...
11 de 12 19-06-2012 17:42
.
.
.
Agora iremos cuidar para que toda vez que o servidor bootar as regras subam de formaautomática.
1. Criar um link simbólico do arquivo que acabamos de criar para dentro de /etc/init.d/:
# ln -s /etc/init.d/firewall /etc/firewall/firewall.sh
2. Vamos ligar o bit de execução do script:
# chmod +x /etc/firewall/firewall.sh
3. Incluindo o script para inicialização no boot. Quando a máquina for rebootada o scriptserá carregado:
No Debian GNU/Linux:
# update-rc.d firewall defaults
No SUSE / Red Hat Linux:
# chkconfig --add firewall# chkconfig --set firewall on
Uma outra forma é salvar as regras que estão na memória para um arquivo. Em nossoexemplo utilizaremos o arquivo firewall.txt:
# iptables-save > firewall.txt
Restaura as configurações da iptables que se encontram no arquivo firewall.txt:
# iptables-restore < firewall.txt
Com isso terminamos esse artigo que me deu muito prazer em escrever. Espero que seja útilpara a comunidade. Podem mandar perguntas se houver alguma dúvida.
http://www.vivaolinux.com.br/artigo/Desvendando-as-regras-de-Firewall-Linux-Iptables
Voltar para o site
Desvendando as regras de Firewall Linux Iptables [Artigo] http://www.vivaolinux.com.br/artigos/impressora.php?codig...
12 de 12 19-06-2012 17:42