Iptables protege contra SYN FLOOD?
Uma das técnicas de negação de serviço mais conhecidas é a técnica de Syn Flood. Mas se encontra em diversos lugares "receitas" e regrinhas iptables para se defender dela. Funciona? É eficaz? Se não é, qual é realmente a defesa necessária?
Parte 7: Tudo bem, me convenceu. Qual é a saída?
O problema está na origem: a alocação de recursos. Ela é realizada no primeiro SYN. Mas e se o servidor só alocasse recursos quando receber o terceiro e último pacote do handshake? Esta é a solução e o Linux tem isto há muito tempo. Chama-se SYN cookies:
Mas não é tão simples assim. Não basta simplesmente mudar a alocação de recursos para o recebimento do ACK final, pois se fosse só isto, rapidamente o ataque de SYN flood se transformaria em ACK flood!
O desafio é a pilha TCP/IP, ao receber o último ACK, alocar recursos mas SOMENTE se o SYN inicial aconteceu, ou seja, se realmente houve o handshake.
Mas como ele pode fazer isto? Será que poderia ser assim:
Isto é possível?
# ligando proteção para SYN flood. Deve ser feita em todos os servidores
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
Mas não é tão simples assim. Não basta simplesmente mudar a alocação de recursos para o recebimento do ACK final, pois se fosse só isto, rapidamente o ataque de SYN flood se transformaria em ACK flood!
O desafio é a pilha TCP/IP, ao receber o último ACK, alocar recursos mas SOMENTE se o SYN inicial aconteceu, ou seja, se realmente houve o handshake.
Mas como ele pode fazer isto? Será que poderia ser assim:
- ao receber o SYN, memoriza o IP e porta de origem de quem enviou;
- devolve o SYN/ACK;
- quando receber o ACK, verifica se o IP e porta é conhecido, se for, aloca os recursos do TCP.
Isto é possível?