Sistema Operacional Linux > Firewall NetFilter (iptables) www.labcisco.com.br ::: shbbrito@labcisco.com.br Prof. Samuel Henrique Bucke Brito
Introdução O firewall é um programa que tem como objetivo proteger a máquina contra acessos indesejados, através da filtragem e controle de todo o tráfego de dados nas interfaces de rede. No Linux, as funções de firewall são agregadas à própria arquitetura do kernel. Isso significa que todo o tráfego que chega (input), sai (output) ou atravessa (forward) um host é processado diretamente no núcleo do SO. 2
Introdução 3
Firewall Basicamente, existem dois tipos de firewalls: Nível de Aplicação Ex.: Proxy Squid Esse tipo de firewall é bastante intrusivo porque analisa o conteúdo do pacote para tomar suas decisões de filtragem. Nível de Rede Ex.: NetFilter (iptables) Esse tipo de firewall toma as decisões baseadas nos parâmetros contidos nos cabeçalhos dos pacotes, em nível de rede. 4
Firewall Firewalls têm duas naturezas de operação: Stateless Consome menos recursos da máquina porque o firewall não armazena nenhum registro das conexões, sendo mais difícil de escrever - é baseado em regras explícitas. Stateful Consome mais recursos da máquina porque o firewall armazena registro das conexões, o que facilita a escrita de regras. 5
Netfilter O Netfilter (iptables) é um firewall de filtragem que opera na camada de rede, ou seja, funciona com base nos parâmetros dos cabeçalhos dos pacotes - endereço, porta, protocolos, etc... Ele funciona através da comparação de regras previamente escritas pelo administrador para saber se um pacote tem ou não permissão para passar. Outra característica interessante é que ele também pode ser usado para permitir o compartilhamento da conexão de Internet, através de técnicas de NAT (masquerading). 6
iptables: Tabelas Todas as regras escritas pelo administrador são armazenadas em tabelas disponíveis no iptables. Existem 3 tabelas disponíveis: filter nat mangle 7
iptables: Filter A tabela filter é a padrão do iptables e se refere às atividades normais de tráfego de dados (entrada, saída e encaminhamento) sem nenhuma ocorrência de NAT. Existem 3 chains disponíveis: INPUT OUTPUT FORWARD 8
iptables: NAT A tabela nat é utilizada para permitir que uma rede inteira possa compartilhar uma única conexão de Internet por meio de mascaramento (masquerading), para realizar o redirecionamento de portas (port forwarding), para fazer o balanceamento de carga (load balancing), etc... Existem 4 chains disponíveis: PREROUTING POSTROUTING INPUT OUTPUT 9
iptables: NAT Ação de NAT (-j) Chain Aplicação Típica DNAT PREROUTING Port-Forwarding Load-Balancing SNAT POSTROUTING Compartilhamento da Internet (IP Fixo) MASQUERADING POSTROUTING Compartilhamento da Internet (IP Dinâmico) 10
iptables: Esquema 11
iptables: Sintaxe A sintaxe dos comandos para inserção de novas regras no iptables é bastante lógica e intuitiva, conforme apresentado abaixo: iptables [tabela] [chain] [comando] [ação] Por exemplo, a seguinte regra: iptables t filter A INPUT p tcp -dport 22 j ACCEPT O argumento [-t filter] especifica o uso da tabela filter (padrão - poderia ser omitido) para fazer uma inserção na chain INPUT [-A INPUT], cujo comando busca pacotes tcp na camada de transporte endereçados para a porta 22 (SSH) [-p tcp --dport 22]. O último argumento indica uma ação [-j ACCEPT] que informa o que deve ser feito quando um pacote se enquadrar nessa regra. 12
Firewall NetFilter (iptables) > LABORATÓRIOS www.labcisco.com.br ::: shbbrito@labcisco.com.br Prof. Samuel Henrique Bucke Brito
Lab1: Introdução Esse laboratório é apenas para introdução da sintaxe e funcionamento dos comandos básicos do iptables. Vamos criar uma regra para bloquear acesso a nossa própria máquina (127.0.0.1). [Obs.: Na prática, isso nunca deve ser feito!!!] ping 127.0.0.1 (haverá resposta de localhost) iptables t filter A INPUT d 127.0.0.1 j DROP ping 127.0.0.1 (não haverá resposta de localhost) iptables t filter F iptables t filter P INPUT DROP iptables t filter P OUTPUT DROP iptables t filter P FORWARD DROP iptables t filter A INPUT i lo j ACCEPT iptables t filter A OUTPUT o lo j ACCEPT iptables t filter -L 14
Lab2: Liberação do Serviço SSH Nesse laboratório a política padrão de entrada e saída de dados é rejeitada e, então, é liberado o acesso remoto seguro (via SSH) ao servidor firewall da rede. É importante lembrar que o serviço SSH deve estar habilitado na máquina para funcionar. iptables P INPUT DROP iptables P OUTPUT DROP iptables P FORWARD DROP iptables A INPUT p tcp -dport 22 j ACCEPT iptables A OUTPUT p tcp -sport 22 j ACCEPT 15
Lab3: Compartilhamento da Internet Nesse laboratório vamos permitir que a rede 172.17.X.X/16 navegue na Internet através de uma única conexão. eth1: 203.0.113.2 eth0: 172.17.0.254 16
Lab3: Compartilhamento da Internet Nesse laboratório vamos permitir que a rede 172.17.X.X/16 navegue na Internet através de uma única conexão. Política Padrão = ACCEPT echo 1 > /proc/sys/net/ipv4/ip_forward iptables t nat A POSTROUTING s 172.17.0.0/16 o eth1 j MASQUERADE 17
Lab3: Compartilhamento da Internet Nesse laboratório vamos permitir que a rede 172.17.X.X/16 navegue na Internet através de uma única conexão. Política Padrão = DROP echo 1 > /proc/sys/net/ipv4/ip_forward iptables t nat A POSTROUTING s 172.17.0.0/16 o eth1 j MASQUERADE iptables A FORWARD i eth0 o eth1 p tcp -dport 80 j ACCEPT iptables A FORWARD i eth1 o eth0 p tcp -sport 80 j ACCEPT iptables A FORWARD i eth0 o eth1 p udp -dport 53 j ACCEPT iptables A FORWARD -i eth1 o eth0 p udp -sport 53 j ACCEPT 18
Lab4: Compartilhamento da Internet Nesse laboratório vamos permitir que somente algumas máquinas da rede 172.17.X.X/16 (172.17.1.1 e 172.17.1.3) naveguem na Internet através de uma única conexão. eth1: 203.0.113.2 eth0: 172.17.0.254 19
Lab4: Compartilhamento da Internet Nesse laboratório vamos permitir que somente algumas máquinas da rede 172.17.X.X/16 (172.17.1.1 e 172.17.1.3) naveguem na Internet através de uma única conexão. iptables P INPUT ACCEPT iptables P OUTPUT ACCEPT iptables P FORWARD ACCEPT echo 1 > /proc/sys/net/ipv4/ip_forward iptables t nat A POSTROUTING s 172.17.1.1 -o eth1 j MASQUERADE iptables t nat A POSTROUTING s 172.17.1.3 o eth1 j SNAT -to $ipwan Obs.: Observem que o MASQUERADE é uma forma de SNAT. A diferença básica entre os dois é que o SNAT deve ser utilizado quando o IP da WAN é estático/fixo e previamente conhecido pelo administrador, enquanto que o MASQUERADE deve ser utilizado em conexões com IP dinâmico. 20
Lab5: Redirecionamento de Porta Nesse laboratório vamos fazer um redirecionamento de portas para que seja possível o acesso remoto (através da Internet) para um servidor (SSH) localizado na rede interna (atrás do firewall). 203.0.113.2:10001 SSH :22 21
Lab5: Redirecionamento de Porta Nesse laboratório vamos fazer um redirecionamento de portas para que seja possível o acesso remoto (através da Internet) para um servidor (SSH) localizado na rede interna (atrás do firewall). Policy = DROP 1. echo 1 > /proc/sys/net/ipv4/ip_forward 2. iptables t nat A POSTROUTING s 172.17.1.1 o eth1 j MASQUERADE 3. iptables t nat A PREROUTING d $WAN p tcp -dport 10001 j DNAT - to 172.17.1.1:22 4. iptables -t filter -A FORWARD -s 172.17.1.1 -p tcp --sport 22 -o $ifwan -j ACCEPT 5. iptables -t filter -A FORWARD -i $ifwan -d 172.17.1.1 -p tcp --dport 22 -j ACCEPT Policy = ACCEPT 1. echo 1 > /proc/sys/net/ipv4/ip_forward 2. iptables t nat A POSTROUTING s 172.17.1.1 o eth1 j MASQUERADE 3. iptables t nat A PREROUTING d $WAN p tcp -dport 10001 j DNAT - to 172.17.1.1:22 22
Lab6: Exemplo de Firewall Stateful Nesse laboratório vamos bloquear todo o tráfego vindo da Internet, exceto os pacotes de resposta de alguma sessão de comunicação originada pelas máquinas da rede 172.17.0.0/16. eth1: 203.0.113.2 eth0: 172.17.0.254 23
Lab6: Exemplo de Firewall Stateful Nesse laboratório vamos bloquear todo o tráfego vindo da Internet, exceto os pacotes de resposta de alguma sessão de comunicação originada pelas máquinas da rede 172.17.0.0/16. (Nesse exemplo vamos permitir apenas o retorno de tráfego do ICMP e de navegação...) 1. echo 1 > /proc/sys/net/ipv4/ip_forward 2. iptables -t filter P INPUT DROP 3. iptables t filter P OUTPUT DROP 4. iptables t filter P FORWARD DROP Observem que o comportamento stateful facilita a escrita do firewall porque permite uma única regra de retorno (linha 9) relacionada às conexões estabelecidas. 5. iptables t nat A POSTROUTING s 172.17.0.0 o eth1 j SNAT to 203.0.113.2 6. iptables -A FORWARD i eth0 o eth1 p icmp j ACCEPT 7. iptables A FORWARD i eth0 o eth1 p udp -dport 53 j ACCEPT 8. iptables A FORWARD i eth0 o eth1 p tcp -dport 80 j ACCEPT 9. iptables A FORWARD i eth1 o eth0 m state - state ESTABLISHED,RELATED j ACCEPT 24
www.labcisco.com.br ::: shbbrito@labcisco.com.br