Segurança na Web Capítulo 6: Firewall Prof. Roberto Franciscatto 4º Semestre - TSI - CAFW Page 1
Introdução Qual a função básica de um firewall? Page 2
Introdução Qual a função básica de um firewall? Bloquear acesso a portas que não estão em uso ou que não devem receber conexões por parte da internet Page 3
Quem precisa de um firewall? Se você planeja conectar-se a internet, precisa de um firewall... Page 4
Por que eu preciso de um firewall? Para proteger seu computador e sua rede, se for o caso... Existem atualmente inúmeras formas de ataque a um computador ou serviço específico Motivos para invadir seu computador ou sua rede não faltam... Page 5
Tenho qualquer coisa que valha a pena proteger? Existe sempre algo que seja necessário proteger em algum grau, exemplo: Responsabilidade vertical Dados perdidos Comprometer dados confidenciais Queda da rede Page 6
O que faz um firewall? Um firewall examina o tráfego enquanto ele entra em uma das suas interfaces e aplica regras ao tráfego... Essencialmente: permitindo ou impedindo o tráfego baseado nestas regras Page 7
Ex.: um firewall em operação... Tráfego restrito Tráfego permitido Bloqueado Permitido O tráfego é bloqueado porque ele não atingiu o critério especificado Para a internet Apenas o tráfego da internet que atinge um critério especificado tem permissão para passar Acesso a recursos especificos Bloqueado Permitido Tráfego desconhecido Tráfego especificado permitido Page 8
Visão geral operacional do firewall Regras comuns e características dos firewalls: Bloquear tráfego de rede recebido baseado na origem ou destino Bloquear tráfego de rede enviado baseado na origem ou destino Bloquear tráfego de rede baseado no conteúdo Tornar disponíveis os recursos internos Page 9
Visão geral operacional do firewall Regras comuns e características dos firewalls (cont.): Permitir conexões à rede interna Relatar tráfego de rede a atividades do firewall Page 10
Revisão sobre TCP/IP Por que TCP/IP? Para formular boas regras de firewall, é necessário ter uma boa noção de: endereços, portas e protocolos de rede Page 11
Revisão sobre TCP/IP Todos os dados transmitidos através da internet são agrupados em pacotes TCP que podem conter até 1460 bytes de dados Além dos dados, cada pacote inclui 40 bytes adicionais contendo: endereço IP de origem, endereço IP de destino, porta de origem, porta de destino, códigos de verificação, número do pacote, etc... Page 12
Revisão sobre TCP/IP No total tem-se: 20 bytes para os headers do protocolo TCP 20 bytes para os headers do protocolo IP totalizando assim, 40 bytes de headers por pacote. Dessa forma temos 1460 bytes de dados em um pacote de 1500 bytes, por exemplo. Page 13
Pacote TCP/IP Header IP Header TCP Conteúdo Headers IP e TCP (40 bytes) Dados (até 1460 bytes) Page 14
Pacote TCP/IP Pode-se dizer que o IP (header IP) se encarrega do endereçamento e da entrega dos pacotes enquanto o TCP (header TCP) se encarrega da verificação de erros, numeração de portas e outras funções. Page 15
Pacote TCP/IP Um arquivo de 15 KB, por exemplo, como seria transmitido na rede? Page 16
Pacote TCP/IP Um arquivo de 15 KB, por exemplo, como seria transmitido na rede? Seria dividido em 11 pacotes Os 10 primeiros contendo 1460 bytes cada um e o último contendo os 760 bytes finais. Page 17
Pacote TCP/IP É graças aos códigos de verificação e numeração de pacotes que arquivos grandes podem ser transmitidos de forma íntegra. Caso sejam corrompidos ou perdidos, basta retransmitir os pacotes extraviados ou danificados, quantas vezes for necessário. Page 18
Pacote TCP/IP Importante: O protocolo TCP/IP permite o uso de pacotes com até 64 KB Porém o tamanho mais usado é de 1500 bytes, padrão para frames Ethernet. Page 19
Portas TCP Existem 65.536 portas TCP, numeradas de 0 a 65.535 Cada porta porde ser usada por um programa ou serviço diferente, de forma que: em teoria poderiamos ter até 65536 serviços diferentes ativos, com um único endereço IP válido. Page 20
Portas TCP As portas TCP mais usadas vão de 0 à 1023, que são reservados a serviços mais conhecidos e utilizados A porta 0 é reservada, por isso não entra na lista. Page 21
Portas TCP e UDP Além das 65.536 portas TCP, temos o mesmo número de portas UDP. TCP = confiabilidade e confirmação UDP = velocidade e simplicidade Page 22
Exemplo de transmissão TCP Mensagem de texto de 300 bytes via TCP Estação: SYN (solicita a abertura da conexão) Servidor: SYN (confirma o recebim. e avisa que a porta está dispon.) Servidor: ACK (inicia conexão) Estação: ACK (confirma) Estação: DATA (é enviado o pacote com a mensagem de texto) Servidor: OK (a confirm., depois de verificar a integrid. do pacote) Estação: FYN (solicita o fechamento da conexão) Servidor: FYN (confirma) Estação: FYN (confirma que recebeu a confirmação) Page 23
Exemplo de transmissão UDP Streaming de vídeo e áudio via web situação onde o que vale é a velocidade e não a confiabilidade. Outra situação comum são os servidores de DNS ao acessar um site, a solicitação do endereço IP referente ao domínio do site e a resposta do servidor são enviadas via UDP, para ganhar tempo Page 24
TCP e UDP Ao configurar um firewall é necessário atenção quanto aos protocolos TCP e UDP DNS e SAMBA por exemplo, utilizam tanto os protocolos TCP como UDP. Page 25
Portas mais usadas para serviços de internet 22 = SSH 21 = FTP 25 = SMTP 53 TCP e 53 UDP = DNS 80 = HTTP 110 = POP3 143 = IMAP 443 = HTTPS 1194 UDP = OpenVPN 5901 = VNC Page 26
TCP, UDP e ICMP Além do TCP e UDP temos ICMP (Internet Control Message Protocol) um protocolo de controle. Uso do protocolo ICMP: ping (echo request) usado para verificar se determinada máquina está online e medir a latência da conexão. Page 27
TCP, UDP e ICMP Outra função importante do ICMP é o controle do TTL (time to live) de cada pacote TCP ou UDP. O que acontece com um pacote caso ele não chegue até o destino? Page 28
TCP, UDP e ICMP O que acontece com um pacote caso ele não chegue até o destino? Existem duas possibilidades. A primeira é um roteador próximo perceber que a máquina está fora do ar e destruir o pacote A segunda é utilizar a TTL com valores que variam de 64 a 128 hops Page 29
Entendendo as regras do firewall (Iptables) Escrever regras do firewall é como que aprender um novo dialeto... Imagine que ao escrever uma nova regra, você está explicando uma ideia, tente ser claro para que seja entendido... Page 30
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: -A INPUT: especifica que a regra se aplica a pacotes de entrada, ou seja, pacotes recebidos pelo servidor, em qualquer interface -A OUTPUT: a regra se aplica a pacotes de saída, transmitidos pelo próprio servidor. Page 31
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: -A FORWARD: este parâmetro é usado para compartilhar a conexão com a internet, permitindo que os micros da rede local acessem através do servidor. Os pacotes dos outros micros, encaminhados pelo servidor, são tratados como FORWARD, diferente dos pacotes transmitidos pelo próprio servidor, que são tratados como OUTPUT. Page 32
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: -p tcp: especifica que a regra se aplica a pacotes TCP -p udp: especifica que a regra se aplica a pacotes UDP Ex.: iptables A INPUT p udp --dport 53 j ACCEPT Importante: é necessário sempre especificar o protocolo, caso contrário, ERRO! Page 33
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: Caso seja preciso bloquear os três protocolos para um determinado endereço, pode-se usar: iptables A INPUT p ALL s 88.191.79.206 j DROP Page 34
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: É comum bloquear as portas 0 a 1023 UDP, autorizando apenas as portas que devem ficar abertas como: iptables A INPUT p udp --dport 53 j ACCEPT iptables A INPUT p udp --dport 0:1023 j DROP Page 35
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: -p icmp: bloquear o pedido de pings Ex.: iptables A INPUT p icmp --icmp-type echorequest j DROP Page 36
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: -i eth0: a opção -i permite definir a interface onde os pacotes devem ser recebidos ou enviados. Exemplos: iptables A INPUT p tcp j REJECT iptables A INPUT i eth2 p tcp j REJECT iptables A INPUT i eth0 p tcp --dport 22 j ACCEPT Page 37
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: -dport ou --destination-port: especifica uma porta. O uso mais comum para esta opção é para abrir portas de entrada e depois aplicar uma regra que feche as demais. Page 38
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: -d (destiny): destinado ao endereço IP ou domínio citado. Bastante utilizado para bloquear o acesso a determinados sites a partir dos micros da rede local. Ex.: iptables A FORWARD d dominio.com j REJECT Page 39
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: -m mac --mac-source 00:11:D8:76:59:2E: esta é a regra que permite especificar endereços MAC dentro das regras do Iptables. Ex.: iptables A INPUT --dport 22 m mac --macsource 00:11:D8:76:59:2E j ACCEPT Page 40
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: --syn: cria uma regra válida apenas para novas conexões, não impedindo que o outro micro responda a conexões iniciadas pelo servidor, como em: Ex.: iptables A INPUT p tcp --syn j DROP Page 41
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: -j: é usado no final de cada regra, especificando uma ação, que pode ser: -j ACCEPT: aceita o pacote. Ele é encaminhado ao destino sem passar pelas demais regras. -j REJECT: rejeita educadamente o pacote, enviando um pacote de resposta ao emissor. Ex.: connect to host 192.168.1.1 port 22: Connection refused Page 42
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: -j DROP: o DROP é mais enfático. O pacote é simplesmente descartado, sem aviso. O emissor fica um longo tempo esperando, até que eventualmente recebe um erro de time-out. -j LOG: permite logar conexões. É interessante usar estas regras principalmente em regras muito visadas, como a SSH. Page 43
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: (continuação) -j LOG: para ativar o log, é necessário duplicar a regra que abre a porta, usando a opção -j LOG na primeira e -j ACCEPT na segunda, como em: iptables A INPUT p tcp --dport 22 j LOG iptables A INPUT p tcp --dport 22 j ACCEPT Page 44
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: (continuação) -j LOG: as mensagens são gravados no arquivo /var/log/messages. é possível ver as mensagens com o comando dmesg Page 45
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: Importante: alterar a ordem das regras altera o resultado. Ex.: iptables A INPUT p tcp j REJECT iptables A INPUT p tcp --dport 22 j REJECT Qual o problema nas regras acima? Page 46
Entendendo as regras do firewall (Iptables) Parâmetros do Iptables: Exemplo 2: iptables A INPUT p tcp --dport 22 j ACCEPT iptables A INPUT p tcp --dport 22 j LOG Qual o problema nas regras acima? Page 47
Escrevendo um script de firewall (Iptables) Simplesmente acessar a internet como cliente, sem rodar nenhum servidor, nem compartilhar a conexão com outros micros Solução para proteção inicial: #!/bin/sh iptables A INPUT i lo j ACCEPT iptables A INPUT p tcp --syn j DROP Page 48
Escrevendo um script de firewall (Iptables) A ideia aqui é que o micro possa acessar a internet sem ficar vulnerável a acessos externos. Estes dois comandos fazem isso da forma mais simples possível. iptables A INPUT i lo j ACCEPT iptables A INPUT p tcp --syn j DROP Page 49
Escrevendo um script de firewall (Iptables) Para desativar o firewall e voltar a aceitar conexões, use o comando iptables F, que limpa as regras do Iptables: # iptables -F Page 50
Exemplo de script de firewall completo (Iptables) # Abre para a faixa de endereços da rede local: iptables A INPUT s 192.168.1.0/255.255.255.0 j ACCEPT # Faz a mesma coisa, só que especificando a interface: iptables A INPUT i eth0 j ACCEPT # Abre uma porta: iptables A INPUT p tcp --dport 22 -j ACCEPT # Ignora pings: iptables A INPUT p icmp-type echo-request -j DROP Page 51
Exemplo de script de firewall completo (Iptables) (Continuação) # Protege contra IP spoofing: echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter # Descarta pacotes mal formados, protegendo contra ataques #diversos: iptables A INPUT m state --state INVALID j DROP # Abre para a interface de loopback: iptables A INPUT i lo j ACCEPT # Impede a abertura de novas conexões, bloqueando acesso #externo ao servidor, com exceção das regras anteriores: iptables A INPUT p tcp --syn j DROP Page 52
Exemplo de script de firewall completo (Iptables) Após incluir todas as regras do firewall, é necessário salvar e dar permissão de execução. Ex.: # cd /etc/init.d/ # chmod +x firewall Page 53
Exemplo de script de firewall completo (Iptables) Comandos importantes iptables F: limpa a tabela principal do Iptables iptables t nat F: limpa a tabela nat, que é usada por regras que compartilham a conexão e fazem forwarding de portas iptables L: este comando lista a configuração atual sem alterar nada iptables t nat L: este comando lista a configuração de forwarding e compartilhamento Page 54
Forwarding de Portas Ao compartilhar uma conexão via NAT, apenas o servidor recebe conexões vindas da internet. Os micros da rede local acessam através do servidor e recebem apenas pacotes de resposta. Entretanto existem casos em que você realmente deseja que alguns dos hosts fique diretamente acessível a internet Page 55
Forwarding de Portas Exemplo: Um servidor web, escutando na porta 80 do micro 192.168.1.3 da rede local, fique disponível na internet. A única forma de fazer isso é o servidor passar a bola para este micro A limitação é que continua existindo uma única porta 80, uma única porta 22, etc... Page 56
Forwarding de Portas Exemplo de Forwarding: # Redireciona uma única porta para um micro da rede local echo 1 > /proc/sys/net/ipv4/ip_forward iptables t nat A PREROUTING p tcp i eth1 --dport 22 j DNAT --to 192.168.1.10 iptables t nat A POSTROUTING d 192.168.1.10 j SNAT --to 192.168.1.1 Page 57
Forwarding de Portas É possível ainda indicar uma lista de portas (usando a opção m multiport), como em: # Redireciona um conjunto de portas echo 1 > /proc/sys/net/ipv4/ip_forward iptables t nat A PREROUTING p tcp i eth1 m multiport --dport 21,22,80 j DNAT --to-dest 192.168.1.10 iptables t nat A POSTROUTING d 192.168.1.10 j SNAT --to 192.168.1.1 Page 58
Exercícios Construa um firewall básico para uso em um servidor web, contendo as seguintes regras: Abrir para a interface de loopback Bloqueie um determinado IP (hosts específicos) Abra as portas referentes aos seguintes serviços usados: SSH, DNS, HTTP, HTTPS Bloqueie as conexões nas demais portas Garanta que o firewall permitira pacotes de conexões já iniciadas Bloqueie as portas UDP de 0 a 1023 Crie este script na forma de um arquivo executável Adicione este arquivo na inicialização do Linux Page 59
Exercícios (2) Você deve detectar possíveis rootkits em seu servidor. Para isso faça os seguintes passos: Instale o software chkrootkit Execute o software Armazene os resultados em um arquivo teste Faça a análise dos resultados e explique o que o software encontrou. Page 60