Archives par mot-clé : redirection

Iptables : quelques trucs sympa

Bijour …

Suite à mes redirections de ports par iptables dans le tuto précédent, je me suis dit que ça pouvait être intéressant de voir un peu plus loin ce que propose iptables, et j’ai trouvé quelques truc sympa (que je cherchais pas ^^), dont on parle pas très souvent :

Je pars du principe que l’on bloque tout par défaut …

Limitation de certains flags sur un port précis :

Ici on autorise un syn par seconde, ça permet d’éviter les floods

[sourcecode language=bash]
/sbin/iptables -A allow-ssh-traffic-in -m limit –limit 1/second -p tcp –tcp-flags \
ALL SYN –dport ssh -j ACCEPT
[/sourcecode]

On peut aussi utiliser limit-burst pour augmenter le nombre de paquets qui équivaudront à un limit genre pour un limit-burst 5, il faudra 5 paquets pour faire un limit … cqfd^^

Détection de certaine méthodes de scan de nmap (et d’autre scanner)

Ici on va pouvoir logger et bloquer les scans de type XMAS, NULL et SYN*

[sourcecode language=bash]
$IPTABLES -N check-flags
$IPTABLES -F check-flags
$IPTABLES -A check-flags -p tcp –tcp-flags ALL FIN,URG,PSH -m limit \
–limit 5/minute -j LOG –log-level alert –log-prefix "NMAP-XMAS:"
$IPTABLES -A check-flags -p tcp –tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A check-flags -p tcp –tcp-flags ALL ALL -m limit –limit \
5/minute -j LOG –log-level 1 –log-prefix "XMAS:"
$IPTABLES -A check-flags -p tcp –tcp-flags ALL ALL -j DROP
$IPTABLES -A check-flags -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG \
-m limit –limit 5/minute -j LOG –log-level 1 –log-prefix "XMAS-PSH:"
$IPTABLES -A check-flags -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A check-flags -p tcp –tcp-flags ALL NONE -m limit \
–limit 5/minute -j LOG –log-level 1 –log-prefix "NULL_SCAN:"
$IPTABLES -A check-flags -p tcp –tcp-flags ALL NONE -j DROP
$IPTABLES -A check-flags -p tcp –tcp-flags SYN,RST SYN,RST -m limit \
–limit 5/minute -j LOG –log-level 5 –log-prefix "SYN/RST:"
$IPTABLES -A check-flags -p tcp –tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A check-flags -p tcp –tcp-flags SYN,FIN SYN,FIN -m limit \
–limit 5/minute -j LOG –log-level 5 –log-prefix "SYN/FIN:"
$IPTABLES -A check-flags -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP
[/sourcecode]

Au pire, on peut aussi s’amuser à logger les mauvaises combinaisons de flags tcp du genre :(certaine règles peuvent rentrer en collision avec les précédentes … par contre, je me souviens plus de où j’ai trouvé ça …)

[sourcecode language=bash]

/sbin/iptables -N BADFLAGS
/sbin/iptables -A BADFLAGS -j LOG –log-prefix "IPT BADFLAGS: "
/sbin/iptables -A BADFLAGS -j DROP

/sbin/iptables -N TCP_FLAGS
/sbin/iptables -A TCP_FLAGS -p tcp –tcp-flags ACK,FIN FIN             -j BADFLAGS
/sbin/iptables -A TCP_FLAGS -p tcp –tcp-flags ACK,PSH PSH             -j BADFLAGS
/sbin/iptables -A TCP_FLAGS -p tcp –tcp-flags ACK,URG URG             -j BADFLAGS
/sbin/iptables -A TCP_FLAGS -p tcp –tcp-flags FIN,RST FIN,RST         -j BADFLAGS
/sbin/iptables -A TCP_FLAGS -p tcp –tcp-flags SYN,FIN SYN,FIN         -j BADFLAGS
/sbin/iptables -A TCP_FLAGS -p tcp –tcp-flags SYN,RST SYN,RST         -j BADFLAGS
/sbin/iptables -A TCP_FLAGS -p tcp –tcp-flags ALL ALL                 -j BADFLAGS
/sbin/iptables -A TCP_FLAGS -p tcp –tcp-flags ALL NONE                -j BADFLAGS
/sbin/iptables -A TCP_FLAGS -p tcp –tcp-flags ALL FIN,PSH,URG         -j BADFLAGS
/sbin/iptables -A TCP_FLAGS -p tcp –tcp-flags ALL SYN,FIN,PSH,URG     -j BADFLAGS
/sbin/iptables -A TCP_FLAGS -p tcp –tcp-flags ALL SYN,RST,ACK,FIN,URG -j BADFLAGS

[/sourcecode]

Marquer les paquets pour des traitements futures …

Bon, ici c’est vraiment pour faire geek, mais ça peut permettre de faire des limitations d’utilisation de bande passante ou … limiter l’accès à un service ^^ genre : seul les paquets marqués d’un « 2 » sont autorisés à ce connecter à mon serveur ssh (c’est une hypothèse bien sûr … ça peut être un autre chiffre ;)), mais ça donne ça :
Coté serveur :
[sourcecode language=bash]
/sbin/iptables -A INPUT -m mark –mark 2 -p tcp -dport 22 -j ACCEPT
#on drop le reste
/sbin/iptables -A INPUT -p tcp -dport 22 -j DROP
[/sourcecode]
Coté client :
On marque les paquets à destination du port 22 de l’ip 192.168.0.1
[sourcecode language=bash]
/sbin/iptables -t mangle -A PREROUTING -p tcp -d 192.168.0.1 -dport 22 -j MARK –set-mark 2
[/sourcecode]
Comme dit … suffit de ce faire sniffer les paquets et l’intrus remarquera rapidement le marquage des paquets, et bruteforcer le marquage n’est pas très dur, donc c’est pas très sécurisé comme technique mais ça peut ralentir une attaque 😉

Filtrer le contenu de certain paquets et faire une « chaine » de filtre :

Ici ça deviens intéressant … le firewall peut carrément lire le contenu de certain paquet tcp pour les drops!! (cf. lien SpamCleaner), ici, le but est de supprimer les sympatiques : GET /w00tw00t.at.ISC.SANS de nos logs apache

[sourcecode language=bash]
# création de notre chaîne w00t :
iptables -N w00t

# redirige les paquets TCP sur notre chaîne :
iptables -A INPUT -p tcp -j w00t

# recherche du premier SYN et création de la liste :
iptables -A w00t -m recent -p tcp –syn –dport 80 –set

# recherche du paquet SYN,ACK et mise à jour la liste :
iptables -A w00t -m recent -p tcp –tcp-flags PSH,SYN,ACK SYN,ACK –sport 80 –update

# recherche du paquet ACK et mise à jour la liste
iptables -A w00t -m recent -p tcp –tcp-flags PSH,SYN,ACK ACK –dport 80 –update

# recherche de la signature de DFind dans le prenier PSH+ACK.
# Si elle est présente, on DROP.
# On supprime la liste pour ne pas filtrer les paquets suivants
iptables -A w00t -m recent -p tcp –tcp-flags PSH,ACK PSH,ACK –dport 80 –remove \
-m string –to 70 –algo bm –string "GET /w00tw00t.at.ISC.SANS." -j DROP
[/sourcecode]

Là on se rend compte que ça peut être pas mal puissant.

Si en plus on couple ce genre de méthode avec modsecurity ou fail2ban on peut arriver à faire quelque choses de pas trop mal côté sécurité.

Bon bien sûr, j’allais pas faire un tour complet des possibilités d’iptables donc voici mes sources, si vous voulez continuer la lecture …

Mes différentes sources : (et ouai je ne suis qu’un kevin!! je repique tout!!, par contre, j’ai mis des liens avec des trucs dont je n’ai pas parlé plus haut … ou pas)

  • Gentoo security
  • RateLimit
  • SpamCleaner Le w00tw00t[1] le fail2ban[2]
  • Google ?!?
  • Marquage de paquet et limitation de bande passante [3] et la version fr [4] un autre en fr [6]
  • Marquage de paquet [5]

Sinon, quelques liens à lire sur iptables :

  • La doc d’ubuntu!! Pour les gros noob only!! (attention je fais du tracking toutes vos connexion seront marqués « GROS NOOB » :p)