# Syn flood
Une attaque **SYN flood** (attaque semi-ouverte) est un type d’attaque par [déni de service (DDoS)](https://www.cloudflare.com/fr-fr/learning/ddos/what-is-a-ddos-attack) qui vise à rendre un serveur indisponible pour le trafic légitime en consommant toutes les ressources serveur disponibles.

---
# **Three-way handshake**
L’attaque **SYN Flood** exploite le principe du **three-way handshake** du protocole **TCP**.
Lors d’une connexion classique entre un **client** et un **serveur** il y a 3 étapes :
Le client envoie un paquet **SYN**.
Le serveur répond ensuite avec un paquet **SYN-ACK** accusant la réception.
Le client envoie un paquet **ACK** et la connexion **TCP** est donc établie.
---
## Déroulement de l’attaque
En envoyant à plusieurs reprises des paquets de demande de connexion initiale (**SYN**), l’attaquant est en mesure de submerger tous les ports disponibles sur une machine serveur ciblée, ce qui oblige l’appareil ciblé à répondre lentement au trafic légitime, ou l’empêche totalement de répondre.
Les **SYN Flood** sont fréquemment effectuées par des bots se connectant à partir d’**adresses IP usurpées** afin de rendre l’attaque plus difficile à identifier et à atténuer. Les **botnets** peuvent lancer des **SYN Flood** en tant qu’[attaques par déni de service distribué (DDoS)](https://www.f5.com/fr_fr/services/resources/glossary/distributed-denial-of-service-ddos-attack).
---
Voilà un exemple d’attaque **SYN Flood** & **DNS Flood**:
*Imperva mitigates a 38 day-long SYN flood and DNS flood* [multi-vector DDoS attack.](https://www.imperva.com/blog/funded-persistent-multi-vector-ddos-attack/)
---
## Protéger votre serveur contre le SYN Flood
Dans cet exemple, nous avons **deux machines** en local :
Une machine attaquante : **192.168.1.27**
Une machine victime : **192.168.1.23**
---
Avant de vouloir protéger notre machine, nous allons voir un filtre **wireshark** nous permettant de détecter une attaque **SYN Flood**.
Comme nous pouvons le voir, nous avons un très grand nombre de **paquets SYN** en destination de notre victime qui est **192.168.1.23** et en provenance d’**adresse IP usurpées**.
---
Nous pouvons aussi détecter une attaque **SYN Flood** à l’aide de la commande suivante qui va nous renvoyer le nombre de connexion dans l’état **SYN\_RECV** :
---
Il est temps d’ajouter des paramètres nous permettant de **limiter** ce type d’attaque.
Dans un premier temps, nous allons travailler avec le fichier **/etc/sysctl.conf** puis changer les variables suivantes :
1
2
3
4
`net.ipv4.tcp_syncookies = 1`
`net.ipv4.tcp_max_syn_backlog = 2048`
`net.ipv4.tcp_synack_retries = 3`
`net.ipv4.conf.all.rp_filter = 1`
Pour plus d’informations sur ces dernières je vous recommande cet [article](https://linoxide.com/firewall/snapshot-syn-flood-attack/#:~:text=If%20you%20suspect%20a%20SYN,are%20in%20%E2%80%9CSYN_RECEIVED%E2%80%9D%20state.).
---
Nous pouvons également mettre en place des règles **iptables** permettant de **limiter** ceci comme par exemple :
1
2
3
4
5
6
7
8
9
10
11
`# Création d'une nouvelle chaîne nommée syn_flood`
`iptables -N syn_flood`
`# Match les segments TCP pour cette dernière`
`iptables -A INPUT -p tcp --syn -j syn_flood`
`# Si la limite match alors on continue à lire les autres règles`
Après avoir mis en place ceci on constate que la chaîne **syn\_flood** commence à **DROP** des paquets.
