Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Operacionais Open Source V Prof. Ricardo Mercês ricardo.merces@prof.infnet.edu.br Aula 2 - 3 Controle de Acesso a Rede Objetivo • Conhecer o processo de roteamento no Linux • Compreender a arquitetura Netfilter • IPTABLES • Compreender a tradução de endereços de rede (NAT) no Linux Visão geral da arquitetura Netfilter • Filtragem via kernel: não há um daemon • Aplica regras nas camadas OSI 2, 3 e 4 • Só inspeciona os cabeçalhos dos pacotes • Consiste dos módulos Netfilter no kernel, mais o programa iptables Netfilter: tabelas e chains Fluxo de pacotes Netfilter Fluxo de pacotes Netfilter Podemos perceber no diagrama anterior que os círculos são as chains. Quando um pacote atinge a máquina em questão, o KERNEL define o tipo do roteamento interno escolhendo uma CHAIN. Ela é examinada para verificar o destino do pacote, a CHAIN pode simplesmente rejeitar (DROP) ou aceitar o pacote (ACCEPT), se isso acontecer ele continua passeando no diagrama. Para entender melhor este diagrama devemos saber que as chains são listas de regras que analisam o cabeçalho do pacote e dizem o que deve ser feito com ele. Se uma regra desta CHAIN não tem relação com o pacote em questão, então uma próxima regra é analisada. Se não houver mais regras a consultar, o KERNEL analisa a política da CHAIN para decidir o que fazer. Fluxo de pacotes Netfilter 1. Quando o pacote chega, o KERNEL analisa o destino do pacote: isso é chamado roteamento (routing). 2. Se ele é destinado a própria máquina, o pacote desce no diagrama, indo para a CHAIN INPUT. Se ele passar pela CHAIN INPUT, então a máquina recebe o pacote. 3. Se o KERNEL não tem suporte a forwarding, ou não sabe como repassar (forward) o pacote, este é descartado. Se há suporte a forwarding e o pacote é destinado a outra interface de rede (se você possui outra), o pacote vai para a CHAIN FORWARD. Se ele for aceito (ACCEPT), ele será enviado. 4. Finalmente, um programa rodando na máquina firewall pode enviar pacotes. Esses pacotes passam pela CHAIN OUTPUT imediatamente: se ela aceitar o pacote, ele continua seu caminho, caso contrários ele é descartado. Tabela filter - Considerada a tabela padrão, contém 3 chains básicas: l INPUT - Consultada para pacotes que chegam na própria máquina; l OUTPUT - Consultada para pacotes que saem da própria máquina; l FORWARD - Consultado para pacotes que são redirecionados para outra interface de rede ou outra estação. Tabela Filter Tabela nat - Usada para passagem de pacotes que pode gerar outra conexão. Um exemplo clássico é o mascaramento (masquerading), nat, port forwarding e proxy transparente são alguns. Possui 3 chains básicas: PREROUTING - Consultado quando os pacotes precisam ser redirecionados logo que chegam.(chain ideal para realização do chamado Destination NAT (DNAT)); OUTPUT - Consultado quando os pacotes gerados localmente precisam ser redirecionados antes de serem roteados. Este chain somente é utilizada para conexões que se originam de IPs de interfaces de rede locais; POSTROUTING - Consultado quando os pacotes precisam ser modificados após o tratamento de roteamento. Tabela NAT Tabela mangle - Utilizada para alterações especiais de pacotes como por exemplo modificar o tipo de serviço (TOS) de um pacote. Ideal para produzir informações falsas para scanners Possui 2 chains padrões: PREROUTING - Consultado quando os pacotes precisam ser redirecionados logo que chegam; OUTPUT - Consultado quando os pacotes gerados localmente precisam ser redirecionados antes de serem roteados. Tabela mangle Checagem de regras (1) • Guardadas em uma lista ordenada • Pacotes testados regra a regra • Na primeira regra coincidente, o alvo é avaliado Checagem de regras (2) • Uma regra pode especificar múltiplos critérios • Todos os critérios de uma especificação devem ser atendidos para que sua regra coincida (AND lógico) • A política da chain é aplicada se não houver coincidência Os “alvos” de nossas regras • Built-in: DROP, ACCEPT • Extensões: LOG, REJECT, chain personalizada • REJECT envia um aviso de bloqueio • LOG envia uma mensagem via syslog (facility kernel) • Uma regra com alvo LOG NÃO finaliza a avaliação da chain • Não é possível especificar mais que um alvo por regra • São opcionais, ou seja, se você não especificou um, a política da chain é aplicada Um exemplo simples Operações básicas com chains • Listar regras de chain ou tabela (-L ou -vL) • Acrescentar uma regra no fim de uma chain (- A) • Inserir uma regra em uma chain (-I) -I <CHAIN> (insere como primeira regra) -I <CHAIN> 3 (insere como a regra de número 3) • Deletar uma regra -D <CHAIN> 3 (deleta a regra 3) -D <CHAIN> <regra> (deleta a regra específica) Critérios de checagem comuns (1) Endereço IP ou rede -s 172.31.8.0/24 -d 172.31.8.100 Interface de rede -i lo -o eth1 Critérios podem ser invertidos com ‘!’ -i eth0 –s ‘!’ 172.31.8.0/24 Critérios de checagem comuns (2) Protocolo de transporte e porta -p tcp --dport 80 -p udp --sport 53 Faixas de portas podem ser especificadas com <início>:<fim> Tipo ICMP -p icmp --icmp-type host-unreachable Operações adicionais com chains Política default da chain (-P <CHAIN> <alvo>) ACCEPT (default, alvo built-in) DROP (também um alvo built-in) REJECT (NÃO PERMITIDO, é uma extensão) • Apagar todas as regras de uma chain (-F <CHAIN>) Não muda a política default Operações adicionais com chains Zerar contadores de bytes e pacotes (-Z <CHAIN>) Útil para monitorar estatísticas de rede Gerenciar chains personalizadas (-N, -X) • -N <nome_chain> (para criar uma chain) • -X <nome_chain> (para deletar sua chain) Regras: considerações gerais Quanto mais “restrito” melhor: iptables -P INPUT DROP ou iptables -A INPUT -j DROP iptables -A INPUT -j REJECT Critérios também se aplicam ao loopback Os exemplos acima bloqueariam acessos via loopback! Regras, assim como as rotas, são armazenadas na memória e precisam ser SALVAS Connection tracking (1) • Ou “rastreamento de conexões” • Permite a análise do “estado” de um pacote • Simplifica a escrita de regras (Evita que tenhamos que escrever uma regra de “entrada” e outra de “saída”) • Depende da extensão match Connection tracking (2) • Reconhece os estados NEW, ESTABLISHED, RELATED e INVALID • Requer mais memória (insignificante) • Módulos de rastreamento • ip_conntrack_ftp • ip_conntrack_tftp • ip_nat_ftp (e outros) Exemplo de connection tracking Regra para permitir conexões estabelecidas iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT Suas regras (uma para cada serviço) iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT Para bloquear todas as outras conexões “entrantes” iptables -A INPUT -m state --state NEW -j DROP Tradução de endereços (NAT) • Network Address Translation • Traduz um endereço IP em outro • Permite “esconder” endereços privados atrás de um único IP público (mascaramento) • Conjunto de regras na tabela nat Tradução de endereços (NAT) Tipos de NAT • NAT de destino (DNAT) – Definido na chain PREROUTING, onde a filtragem usa o endereço traduzido • NAT de origem (SNAT ou MASQUERADE) – Definido na chain POSTROUTING, onde a filtragem NUNCA usa o endereço traduzido SNAT x MASQUERADE O IP Masquerading é um tipo especial de SNAT usado para conectar a sua rede interna a internet quando você recebe um IP dinâmico de seu provedor . Todas as operações de IP Masquerading são realizadas no chain POSTROUTING. Se você tem um IP fixo, deve utilizar o SNAT IP dinâmico → MASQUERADE IP fixo → SNAT Exemplos de DNAT Entrada iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-dest 192.168.0.20 Saída (redirecionando porta, aindapor cima!) iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-dest 192.168.0.200:3128 Exemplos de SNAT • Mascaramento iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE • SNAT iptables -t nat -A POSTROUTING -j SNAT --to-source 1.2.3.45 Persistência de regras • O iptables não é um daemon, apenas manipula regras que estão na memória! • Regras não são persistentes entre reboots • Para salvar as regras (no arquivo /etc/sysconfig/ iptables), usamos o comando service iptables save • Necessariamente o arquivo contendo as regras deve ser: /etc/sysconfig/iptables • Um script de gerenciamento System V está disponível na inicialização e começa a operar antes da própria rede Exemplos Compartilhar a internet com MASQUERADE • Habilitar o redirecionamento de pacotes echo "1" >/proc/sys/net/ipv4/ip_forward • Para fazer o IP Masquerading de todas as máquinas da rede 192.168.1.* iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE Exemplos Compartilhar a internet com SNAT • Habilitar o redirecionamento de pacotes echo "1" >/proc/sys/net/ipv4/ip_forward • Para fazer SNAT de todas as máquinas da rede 192.168.1.* iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT -–to-source 200.255.108.6 Exemplos Firewall pessoal (com msn liberado) # Generated by iptables-save v1.4.0 on Tue Mar 24 10:53:12 2009 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -s 0/0 --dport 1863 -j ACCEPT -A INPUT -p udp -s 0/0 --dport 1863 -j ACCEPT -A INPUT -j DROP COMMIT # Completed on Tue Mar 24 10:53:12 2009 LABS
Compartilhar