Add oldiers articles about firewalling (iptables, PF)

master
HUC Stéphane 2020-10-12 20:03:36 +02:00
parent d58c6ca2c0
commit 3400549d48
Signed by: hucste
GPG Key ID: C4ED64222D9B037F
38 changed files with 1361 additions and 9 deletions

View File

@ -312,13 +312,13 @@ title = "Stéphane HUC :: IT Log"
pre = "fas fa-lock"
url = "/sec"
weight = 4
#[[languages.fr.menu.main]]
# identifier = "firewall"
# name = "Parefeu"
# parent = "sec"
# pre = ""
# url = "/sec/firewall"
# weight = 41
[[languages.fr.menu.main]]
identifier = "firewall"
name = "Parefeu"
parent = "sec"
pre = ""
url = "/sec/firewall"
weight = 41
[[languages.fr.menu.main]]
identifier = "gpg"
name = "GPG"

View File

@ -0,0 +1,10 @@
---
title: "Section Sécurité : Parefeu"
date: 2017-07-23T18:41:14+01:00
description: "Articles à-propos de différents parefeux…"
draft: false
noindex: true
tags: ['Sécurité','firewall']
---
Différents articles autour de différents parefeux : Iptables, PF, etc…

View File

@ -0,0 +1,20 @@
---
date: 2017-07-29T12:38:55+02:00
description: "Exemple de règles pour gèrer les connexions en mode FTP actif avec Iptables"
draft: false
tags: ['firewall','iptables','accept','FTP','astuce']
title: "iptables accepte de gèrer le mode FTP actif"
---
## Description
Exemple de règles pour gèrer les connexions en mode FTP actif avec Iptables :
`iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 20,21 -m conntrack --ctstate ! INVALID -j ACCEPT` <br>
`iptables -A INPUT -i eth0 -p tcp -m multiport --dports 20,21 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT` <br>
---
*J'ai écrit ce mémo, pour la première fois, sur mon autre site : "[Mémoire Grise Libérée](http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/FAQ/ftp_actif/)".*
---

View File

@ -0,0 +1,32 @@
---
date: 2017-07-28T15:22:49+02:00
description: "Exemple de règles pour gèrer les connexions venant seulement des autres machines sur le LAN avec Iptables"
draft: false
tags: ['firewall','iptables','accept','LAN','astuce']
title: "iptables accept le trafic interne au LAN"
---
## Description
⇒ Demander à iptables d'accepter tout le trafic de votre ip vers votre lan,
en admettant que vos machines soient sur un réseau de classe C, dont le
segment est 192.168.0.0 :
`iptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0 / 24 -m conntrack --ctstate ! INVALID -j ACCEPT` <br>
`iptables -A INPUT -i eth0 -s 192.168.0.0 / 24 -d 192.168.0.1 -m conntrack --ctstate ! INVALID -j ACCEPT` <br>
⇒ Accepter le flux de type broadcast :
`iptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.255 -m conntrack --ctstate ! INVALID -j ACCEPT` <br>
`iptables -A INPUT -i eth0 -s 192.168.0.255 -d 192.168.0.1 -m conntrack --ctstate ! INVALID -j ACCEPT` <br>
⇒ Accepter le flux BootDHCP vers LAN :
`iptables -A INPUT -i eth0 -p udp --sport bootpc --dport bootps -m conntrack --ctstate NEW -j ACCEPT`
---
*J'ai écrit ce mémo, pour la première fois, sur mon autre site : "[Mémoire Grise Libérée](http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/FAQ/accept_ip2lan/)".*
---

View File

@ -0,0 +1,28 @@
---
date: 2017-07-29T12:19:32+02:00
description: "Exemple de règles pour autoriser le flux sur l'interface locale avec Iptables"
draft: false
tags: ['firewall','iptables','accept','lo','astuce']
title: "iptables accepte tout flux sur l'interface locale"
---
## Description
**Permettre à l'interface locale de discuter est important !**
⇒ Autorise la connexion sur l'interface locale :
`iptables -A INPUT -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT` <br>
`iptables -A OUTPUT -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT` <br>
⇒ règle simpliste :
`iptables -A INPUT -i lo -j ACCEPT` <br>
`iptables -A OUTPUT -o lo -j ACCEPT` <br>
---
*J'ai écrit ce mémo, pour la première fois, sur mon autre site : "[Mémoire Grise Libérée](http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/FAQ/accept_lo/)".*
---

View File

@ -0,0 +1,20 @@
---
date: 2017-07-29T13:07:00+02:00
description: "Exemple de règles pour gèrer les connexions en mode FTP passif avec Iptables"
draft: false
tags: ['firewall','iptables','accept','FTP','astuce']
title: "iptables accepte de gèrer le mode FTP passif"
---
## Description
{{< note warning >}}Les modules `ip_conntrack`, et `ip_conntrack_ftp` doivent être chargés !{{</note>}}
`iptables -A OUTPUT -o eth0 -p tcp --sport 1024: -m conntrack --ctstate ! INVALID -j ACCEPT` <br>
`iptables -A INPUT -i eth0 -p tcp --dport 1024: -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT` <br>
---
*J'ai écrit ce mémo, pour la première fois, sur mon autre site : "[Mémoire Grise Libérée](http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/FAQ/ftp_passif/)".*
---

View File

@ -0,0 +1,34 @@
---
date: 2017-07-29T11:56:01+02:00
description: "Exemple de règles pour gèrer le ping avec Iptables"
draft: false
tags: ['firewall','iptables','accept','ping','astuce']
title: "iptables accepte de gèrer le ping"
---
## Description
⇒ Règle simpliste :
`iptables -A OUTPUT -o eth0 -p icmp -m conntrack --ctstate ! INVALID -j ACCEPT` <br>
`iptables -A INPUT -i eth0 -p icmp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT` <br>
⇒ Règles plus fines :
{{< note warning >}}**ATTENTION :**
Remplacez la mention **adr_ip_gw** par l'adresse ip de votre routeur/passerelle… <br>
celle-ci est précisée comme source ou destination parce que ce type d'ICMP
ne doit être envoyé ou reçu que de votre passerelle.{{</note>}}
{{< code "sec-firewall-iptables-accept-ping-example" sh >}}
---
**Je vous invite très fortement à lire ATTENTIVEMENT sur le filtrage d'ICMP
sous Linux : {{< inside "sec:firewall:linux-firewall-icmp" >}}**
---
*J'ai écrit ce mémo, pour la première fois, sur mon autre site : "[Mémoire Grise Libérée](http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/FAQ/ping/)".*
---

View File

@ -0,0 +1,26 @@
---
date: 2017-07-29T14:03:15+02:00
description: "Exemple de règles pour autoriser les connexions sortantes vers WAN avec Iptables"
draft: false
tags: ['firewall','iptables','accept','WAN','astuce']
title: "iptables accepte de gèrer les connexions sortantes vers WAN"
---
## Description
⇒ Accepter les connexions vers Internet ({{< abbr WAN "World Area Network" >}}),
en admettant que votre adresse ip fasse partie de la classe C, segment
réseau de type 192.168.0.0 :
`iptables -A OUTPUT -o eth0 -s 192.168.0.1 -m conntrack --ctstate ! INVALID -j ACCEPT`
---
Il peut-être intéressant de la faire suivre de cette règle de {{< inside "sec:firewall:iptables-reject-wan" rejet >}}…
---
*J'ai écrit ce mémo, pour la première fois, sur mon autre site : "[Mémoire Grise Libérée](http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/FAQ/accept_wan/)".*
---

View File

@ -0,0 +1,30 @@
---
date: 2017-07-29T11:49:33+02:00
description: "Exemple de règles pour refuser les réseaux Bogons avec Iptables"
draft: false
tags: ['firewall','iptables','drop','Bogons','astuce']
title: "iptables refuse les réseaux Bogons"
---
## Description
La **RFC 1918** nous fait comprendre que les adresses de type privé ne doivent
pas être publié sur Internet. De fait, puisque nul ne doit contacter l'interface
réseau internet, il est bon de dropper tout flux qui y correspond !
La **RFC 5735** définit l'ensemble des réseaux dits spécifiques, qu'il est
bon de ne pas retrouver sur Internet !
{{< code "sec-firewall-iptables-drop-bogons-example" sh >}}
{{< note warning >}}Pensez à supprimer la ligne correspondant à votre réseau !{{</note>}}
## Documentations
* {{< rfc 1918 >}}, {{< rfc 5735 >}}
---
*J'ai écrit ce mémo, pour la première fois, sur mon autre site : "[Mémoire Grise Libérée](http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/FAQ/drop_private2public/)".*
---

View File

@ -0,0 +1,22 @@
---
date: 2017-07-29T12:01:48+02:00
description: "Exemple de règles pour refuser les scans nommés NULL, XMAS avec Iptables"
draft: false
tags: ['firewall','iptables','drop','scan','astuce']
title: "iptables refuse les scans NULL et XMAS"
---
## Description
Il existe un type de scan de port, dit XMAS et NULL ; pour s'en protéger :
`iptables -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP` <br>
`iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP` <br>
`iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP` <br>
`iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP` <br>
---
*J'ai écrit ce mémo, pour la première fois, sur mon autre site : "[Mémoire Grise Libérée](http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/FAQ/drop_xmas_nullscan/)".*
---

View File

@ -0,0 +1,35 @@
---
date: 2017-07-29T12:30:33+02:00
description: "Exemple de règles pour gèrer les connexions établies ou relatives avec Iptables"
draft: false
tags: ['firewall','iptables','accept','established','related','astuce']
title: "iptables accept les connexions établies ou relatives"
---
## Description
⇒ Règle simple, juste pour le protocole tcp :
`iptables -A INPUT -i eth0 -d 192.168.0.1 -p tcp -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT` <br>
`iptables -A OUTPUT -o eth0 -S 192.168.0.1 -p tcp -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT` <br>
⇒ Règle plus évoluée, pour les protocoles icmp, tcp et udp :
`iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate ESTABLISHED -j ACCEPT` <br>
`iptables -A INPUT -p tcp -m conntrack --ctstate RELATED -j ACCEPT` <br>
`iptables -A INPUT -p udp -m conntrack --ctstate ESTABLISHED -j ACCEPT` <br>
`iptables -A INPUT -p icmp -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT` <br>
`iptables -A OUTPUT -p tcp ! --syn -m conntrack --ctstate ESTABLISHED -j ACCEPT` <br>
`iptables -A OUTPUT -p tcp -m conntrack --ctstate RELATED -j ACCEPT` <br>
`iptables -A OUTPUT -p udp -m conntrack --ctstate ESTABLISHED -j ACCEPT` <br>
`iptables -A OUTPUT -p icmp -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT` <br>
---
*J'ai écrit ce mémo, pour la première fois, sur mon autre site : "[Mémoire Grise Libérée](http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/FAQ/accept_established/)".*
---

View File

@ -0,0 +1,46 @@
---
date: 2017-07-28T16:09:39+02:00
description: "Exemple de règles pour partager une connexion vers Internet avec Iptables"
draft: false
tags: ['firewall','iptables','forward','astuce']
title: "iptables partage la connexion internet"
---
## Description
{{< note tip >}}À utiliser pour une machine faisant office de passerelle…{{</note>}}
Partager une connexion sous linux est assez simple…
⇒ Dans un premier temps, il faut autoriser la redirection d'IP, avec des
droits administrateur :
`# echo 1 > /proc/sys/net/ipv4/ip_forward`
⇒ Ensuite autoriser la redirection avec iptables
* Avec une adresse ip extérieur statique : <br>
`iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to 1.2.3.4` <br>
l'adresse IP `1.2.3.4` est à remplacer par votre réelle adresse IP extèrieure.
* Avec une adresse ip extérieur dynamique : <br>
`iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE` <br>
## Configuration
⇒ Ajouter à votre fichier `/etc/sysctl.conf` :
`net.ipv4.ip_forward=1`
## Exemples
`iptables -A FORWARD -i eth0 -o ppp0 -s 192.168.0.0/24 -m conntrack --ctstate ! INVALID -j ACCEPT` <br>
`iptables -A FORWARD -i ppp0 -o eth0 -d 192.168.0.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT` <br>
`iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE` <br>
---
*J'ai écrit ce mémo, pour la première fois, sur mon autre site : "[Mémoire Grise Libérée](http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/FAQ/partage_connexion/)".*
---

View File

@ -0,0 +1,39 @@
---
date: 2017-07-29T12:38:55+02:00
description: "Exemple de règles pour limiter le nombre de connexions avec Iptables"
draft: false
tags: ['firewall','iptables','limit','flood','astuce']
title: "iptables limite le flood"
---
## Description
Une des attaques possible est de saturer votre interface réseau par un nombre
conséquent de connexions ou tentatives de connexion dans un espace de temps
très restreint.
Pour éviter de saturer l'interface réseau, on utilise une technique limitant
le nombre de connexions au-delà desquelles toute autre tentative sera rejetée.
⇒ TCP Syn flood :
`iptables -A INPUT -i eth0 -p tcp --syn -m limit --limit 3/s -j ACCEPT`
⇒ UDP Syn flood :
`iptables -A INPUT -i eth0 -p udp -m limit --limit 10/s -j ACCEPT`
{{< note warning >}}**ATTENTION** : Certains sites mettent le flag `--syn`
après le protocole `udp`, sachez que ce flag n'existe pas pour le protocole udp.{{</note>}}
⇒ Ping flood :
`iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT` <br>
`iptables -A INPUT -i eth0 -p icmp --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT` <br>
---
*J'ai écrit ce mémo, pour la première fois, sur mon autre site : "[Mémoire Grise Libérée](http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/FAQ/limit_flood/)".*
---

View File

@ -0,0 +1,32 @@
---
date: 2017-07-29T13:23:41+02:00
description: "Exemple de règles pour gèrer le mode multiport avec Iptables"
draft: false
tags: ['firewall','iptables','multiport','astuce']
title: "iptables gère le mode multiport"
---
## Description
L'extension `multiport` d'iptables permet de spécifier une et une seule
règle pour cibler plusieurs services !
`iptables -A INPUT -i eth0 -p TCP -m multiport --dports 20-22,80,443 -m conntrack --ctstate NEW -j ACCEPT`
## Exemples
Au lieu d'écrire :
{{< code "sec-firewall-iptables-multiport-bad-example" sh >}}
Écrivez donc :
`iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -p TCP -m multiport --dports 22,53,631 -m conntrack --ctstate ! INVALID -j ACCEPT` <br>
`iptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -p TCP -m multiport --sports 22,53,631 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT` <br>
---
*J'ai écrit ce mémo, pour la première fois, sur mon autre site : "[Mémoire Grise Libérée](http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/FAQ/multiport/)".*
---

View File

@ -0,0 +1,22 @@
---
date: 2017-07-29T13:42:29+02:00
description: "Exemple de règles pour rejeter les connexions entrantes depuis WAN avec Iptables"
draft: false
tags: ['firewall','iptables','reject','WAN','astuce']
title: "iptables rejette les connexions entrantes WAN"
---
## Description
⇒ Si l'on est une station, refuser poliment les paquets demandant une connexion
et venant d'Internet se dit ainsi :
`iptables -A INPUT -i eth0 -s 0.0.0.0/0 -d 192.168.0.1 -m conntrack --ctstate NEW -j REJECT`
Il peut-être intéressant de la faire précéder de cette règle {{< inside "sec:firewall:iptables-accept-wan" >}}…
---
*J'ai écrit ce mémo, pour la première fois, sur mon autre site : "[Mémoire Grise Libérée](http://memoire-grise-liberee.fr.eu.org/Linux/IpTables/FAQ/reject_wan/)".*
---

View File

@ -0,0 +1,182 @@
---
date: 2017-07-26T21:03:54+02:00
description: "Filtrer de manière sécurisé le protocole ICMP sous Linux : exemples avec le parefeu Iptables"
draft: false
tags: ['Linux','firewall','ICMP','Iptables']
title: "Linux : firewall ICMP"
---
## Description
Ou comment titrer : **Filtrer le protocole ICMP sous Linux**.
Certains déclament qu'il faut absolument tout bloquer, terminer les commandes
telles `traceroute`, `ping`<br> <q>basta, et qu'on me fiche la paix !</q>
D'autres disent, oui, mais c'est quand même bien pratique d'utiliser de
telles commandes, sauf que…
Le but évident d'ICMP est de rapporter les messages d'erreurs, d'informations
des états, de contrôle, liés à la communication IP d'un réseau, dont Internet,
donc, relatifs à la délivrance des paquets IP.
Ce but intéressant a ses défauts : puisque par ce biais-là, toute personne
qui utilise le protocole ICMP peut "cartographier" l'ensemble de votre réseau,
*un moindre mal en somme*, voire à chercher à attaquer celui-là, par certaines
attaques connues, telles que le déni de service **Smurf**, comme le fameux
"**Ping de la Mort**" ou tout autre {{< abbr DOS "Deni de Service" >}} existant.
Certaines attaques permettent aussi de s'attaquer au protocole TCP, tel
que le service HTTP (attaque **SlowLoris**), et d'autres…
<q>Froid dans le dos ? <br> Y'a de quoi…</q>
---
## Gérer ICMP
### Les codes ICMP à refuser
Les codes ci-dessous sont reconnus pour être dépréciés, dangereux, et
donc **à ne plus utiliser** :
* **3/6** - Destination Network Unknown
* **3/8** - Source Host Isolated
* **4/0** - Source Quench
* **15/0** - Information Request Message
* **16/0** - Information Reply Message
{{< note warning >}}**Attention**: l'IANA, autre organisme mondialement
reconnu, fait [référence](https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml)
à la {{< anchor "RFC 6633" "RFC 6633" >}}, à-propos de la **dépréciation
de Source Quench**, et **recommande de loguer de tels paquets et de les
supprimer, sans avertissements (DROP)**.
{{</note>}}
**N'hésitons même pas, les messages correspondant doivent ABSOLUMENT être
refusés !**
---
L'IANA, dans sa [référence][1] à la **{{< anchor "RFC 6918" "RFC 6918" >}}**
considère que les codes suivants sont dépréciés et donc à filtrer - *toute
discrétion est laissé libre à l'administrateur de choisir son mode de filtrage* - :
* **6/0** - Alternate Host Address
* **15** - Information Request
* **16** - Information Reply
* **17** - Address Mask Request
* **18** - Address Mask Reply
* **30** - Traceroute
* **31** - Datagram Conversion Error
* **32** - Mobile Host Redirect
* **33** - IPv6 Where-Are-You
* **34** - IPv6 I-Am-Here
* **35** - Mobile Registration Request
* **36** - Mobile Registration Reply
* **37** - Domain Name Request
* **38** - Domain Name Reply
* **39** - SKIP
À vous de choisir, si vous les détruisez… *alors, mode parano ?!*
Quoiqu'il en soit, si vous décidez de filtrer le code 30, n'oubliez pas
que l'utilitaire **traceroute** est capable de fonctionner sur les protocoles
UDP:53, TCP:80, voire d'imiter le code ICMP:8/0 !
### Les codes ICMP à limiter
Les recommandations sont de limiter, en entrée et en sortie de machine :
* le code **0/0** - Echo Reply Message - *(la fameuse réponse au Ping : le Pong, quoi :p)*
* tous les autres codes de **type 3** - Destination Unreachable -
* sauf un traitement légèrement particulier pour le **3/7** - Destination Host Unknown - à limiter en sortie et ignorer en entrée.
* tous les codes **5** - Redirect
* le code **8/0** - Echo Message - *(la fameuse commande Ping)*
* le code **9/0** - Router Advertisement Message
* le code **10/0** - Router Solicitation Message
* tous les codes **11** - Time Exceeded - *(Utile pour la commande `traceroute`, ainsi que le code **30/0** d'ailleurs)*
* tous les codes **12** - Parameter Problem
* le code **13/0** - Timestamp Message
* le code **14/0** - Timestamp Reply Message
* le code **17/0** - Address Mask Request
* le code **18/0** - Address Mask Reply
Pour limiter, dans le contexte d'une machine Linux, on utilisera l'option
`match limit` avec **iptables**, tout simplement…
## Exemples
### ICMP en mode parano
En mode parano, vous pouvez très bien ouvrir :
* en sortie le code 8/0,
* et en entrée le code 0/0 relatif à la sortie, pour que vous vous puissiez pinguer…
* et empêcher les autres d'en faire autant !
* Puis de supprimer tous les autres codes…
{{< code "sec-firewall-linux-icmp-parano-example" sh >}}
### ICMP filtré, limité
Voici, pour l'exemple, basé sur la compréhension des recommandations IETF,
des règles ICMP filtrées, limitées ; puis de rejeter tous les autres codes,
avec le message `icmp-host-prohibited`.
{{< code "sec-firewall-linux-icmp-limit-example" sh >}}
## Documentation
### IETF
L'IETF est un organisme connu, reconnu qui écrit beaucoup de documents techniques,
dont le propos est d'améliorer la technicité, la sécurité des usages liés à Internet.
Et, bien-sûr certains documents existent sur le fait de filtrer ICMP, voire
ICMPv6 - relatif à IPv6, tels que :
* la **{{< anchor "RFC 4890" "RFC 4890" >}}**
* la **{{< anchor "RFC 5927" "RFC 5927" >}}**
* le <span lang="en">[draft ICMP filtering][101]</span>
* le <span lang="en">[draft ICMPv6 filtering][102]</span>
Ces documents tous intéressants, certains sont vieux, d'autres récents,
ont pour propos de réfléchir sérieusement à la sécurité à mettre en place
autour du protocole ICMP.
Le document de travail relatif au filtrage d'ICMP aborde l'ensemble des
protocoles IPv4 et IPv6 et explique quelles sont les attaques possibles,
et donnent des recommandations utiles, qui vont du refus du paquet à la
limitation des autres.
Il y a clairement certains codes de messages qui sont absolument à bloquer,
refuser, tels que le code ICMP 4/0 alias "**Source Quench**" qui est explicitement
déprécié, à ne plus utiliser, mais ce n'est pas le seul !
---
{{< rfcdoc 4890 >}}
{{< rfcdoc 5927 >}}
{{< rfcdoc 6633 >}}
{{< rfcdoc 6918 >}}
### Wikipedia
* {{< wp "Attaque_par_déni_de_service#Smurfing" >}}
* {{< wp "Ping_de_la_mort" >}}
* {{< wp Slowloris >}}
---
[1]: https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml
[101]: https://tools.ietf.org/html/draft-ietf-opsec-icmp-filtering-04
[102]: https://tools.ietf.org/id/draft-ietf-v6ops-icmpv6-filtering-recs-02.txt

View File

@ -0,0 +1,159 @@
---
date: 2017-07-26T22:22:02+02:00
description: "Filtrer de manière sécurisé le protocole ICMPv6 sous Linux : exemples avec le parefeu Ip6tables"
draft: false
tags: ['Linux','firewall','ICMPv6','Ip6tables']
title: "Linux : firewall ICMPv6"
---
## Description
Ou cette fois-ci, comment titrer : **Filtrer le protocole ICMPv6 sous Linux** -
*l'équivalent du protocole ICMP mais pour IPv6*
Il y a quelques heures, j'ai écrit cet autre {{< inside "sec:firewall:linux-firewall-icmp" mémo >}}… <br>
maintenant, je retranscris à-propos des mesures de filtrage à mettre en place autour de ce protocole qu'est ICMPv6.
Je ne vais pas faire un rappel de ce pourquoi existe ce protocole, ni du fait
que mal utilisé, il peut-être dangereux ; et, bien sûr, malheureusement,
il y aura toujours des gens pour mal l'utiliser !
## Gérer ICMPv6
### Les codes ICMPv6 à refuser
Par prudence, il est recommandable de filtrer tous les codes expérimentaux,
tels que 100, 101, 200, et 201, ainsi que les codes réservés pour le futur,
à savoir les codes 127 et 255.
Il est recommandé de bloquer les codes suivants :
* **137** - Redirect Message
* **138** - Router Renumbering
* **139** - ICMP Node Information Query
* **140** - ICMP Node Information Response
* **144** - Home Agent Address Discovery Request Message
* **145** - Home Agent Address Discovery Reply Message
* **146** - Mobile Prefix Solicitation
* **147** - Mobile Prefix Advertisement
### Les codes ICMPv6 à limiter
Les recommandations sont de limiter, en entrée et en sortie de machine,
tous les codes de type :
* **1** - Destination Unreachable
* **4** - Parameter Problem Message
Les recommandations suivantes sont de limiter en entrée seulement, tous
les codes suivants :
* **2/0** - Packet Too Big Message
* **3** - Time Exceeded Message
* et tous les autres codes existants, dont particulièrement :
* le code **128/0** - Echo Request message *(le ping)* -
* et le code **129/0** - Echo reply message *(le pong)*.
### Précisions utiles
Concernant les codes suivants, il est précisé, dans leur RFC correspondante, leur format de message :
* tous les codes dits **{{< abbr MLD "Multicast Listener Discovery" >}}**
donc **130**, **131**, **132** et **143** - et **MLDv2** doivent être envoyés depuis
une adresse dont la source est un lien local IPv6, avec un `hop limit`
à `1` - *selon la {{< anchor "RFC 2710" "RFC 2710" >}}* ;
*le type 143 étant défini par la {{< anchor "RFC 3810" "RFC 3810" >}}*.
* tous les codes dits **{{< abbr ND "Neighbor Discovery" >}}** de **133**
à **137** doivent être envoyés avec un `hop-limit` à `255` - *définis par
la {{< anchor "RFC 4861" "RFC 4861" >}}*. <br>
Quelques précisions concernant ces codes :
* le code **133** - **Router Solicitation** - doit être envoyé par une
source ayant forcément une adresse IP assignée, ou depuis une adresse
non spécifiée si l'interface réseau n'a pas encore d'adresse IP
assignée, vers tout routeur.
* le code **134** - **Router Advertisement** - doit ABSOLUMENT être
envoyé par un routeur, émettant un avis de routeur périodique, ou
une réponse à une sollicitation de routeur, à destination de tout
nœud multicast ou à l'adresse source invoquant le routeur.
* le code **135** - **Neighbor Solicitation** - doit être envoyé par
une source ayant forcément une adresse IP assignée, ou depuis une
adresse non spécifiée si l'interface réseau n'a pas encore d'adresse
IP assignée, vers tout nœud multicast.
* le code **136** - **Neighbor Advertisement** - doit ABSOLUMENT être
envoyé par une adresse IP assignée, vers l'adresse source invoquant
le code 135, ou vers tout nœud multicast, s'il n'y a pas d'adresse
assignée.
* le code **137** - **Redirect Message** - doit ABSOLUMENT être envoyé
par une adresse IP assignée, lien local IPv6, d'un routeur vers
l'adresse source qui a demandé la redirection du message.
* les codes dits **{{< abbr NIQ "Node Information Queries" >}}** - donc
**139** - **ICMP Node Information Query** - et **140** - **ICMP Node Information Response** -
doivent refuser toutes requêtes venant d'adresses IPv6 dites globales
et devraient appliquer l'emploi de l'option `limit`. <br>
À savoir qu'il y a d'autres mesures de sécurité, plus complexes… *{{< anchor "RFC 4620" "RFC 4620" >}}*
* les codes dits **{{< abbr "ND ID" "Neighbor Discovery Inverse Discovery" >}}** -
donc **141** - **Inverse Neighbor Discovery Solicitation Message** -
et **142** - **Inverse Neighbor Discovery Advertisement Message** -,
tous deux doivent avoir pour source une adresse IP assignée - *codes
définis par la {{< anchor "RFC 3122" "RFC 3122" >}}* :
* le code **141** doit être envoyé à destination de tout noeud multicast,
dont le format est de type **FF02::1**
* le code **142** doit répondre seulement à une requête de type 141.
* les codes dits **{{< abbr SEND "SEcure Neighbor Discovery" >}}** - donc
**148** - **Certification Path Solicitation Message** - et **149** -
**Certification Path Advertisement Message** - doivent être envoyés
avec un `hop-limit` à `255` - *c'est la {{< anchor "RFC 3971" "RFC 3971" >}}
qui définit ces codes*.
* les codes dits **{{< abbr MRD "Multicast Router Discovery" >}}** - donc
**151** à **153**, *définis par la {{< anchor "RFC 4286" "RFC 4286" >}}*,
doivent être envoyés depuis une addresse assignée, lien local IPv6,
et avoir un `hop-limit` à `255`.
## Exemples
### ICMPv6 en mode parano
En mode paranoïaque, cela donne ce genre de règles :
{{< code "sec-firewall-linux-icmpv6-parano-example" sh >}}
### ICMP filtré, limité
Voici, pour l'exemple, basé sur la compréhension des recommandations IETF,
des règles ICMP filtrées, limitées ; puis de rejeter tous les autres codes,
avec le message `icmp6-adm-prohibited`.
{{< code "sec-firewall-linux-icmpv6-limit-example" sh >}}
## Documentations
Je ne vais pas reprendre le petit laïus sur IETF , ou IANA, mais simplement
rappeler de bonnes lectures à faire.
*Si jamais, vous avez d'autres "tuyaux" du même acabit, n'hésitez pas m'envoyer
un commentaire par mail.*
* les différents [paramètres ICMPv6][100]
* la **{{< anchor "RFC 4890" "RFC 4890" >}}**
* la **{{< anchor "RFC 5927" "RFC 5927" >}}**
* le <span lang="en">[draft ICMP filtering][101]</span>
* le <span lang="en">[draft ICMPv6 filtering][102]</span>
---
{{< rfcdoc 2710 >}}
{{< rfcdoc 3122 >}}
{{< rfcdoc 3810 >}}
{{< rfcdoc 3971 >}}
{{< rfcdoc 4286 >}}
{{< rfcdoc 4620 >}}
{{< rfcdoc 4861 >}}
{{< rfcdoc 4890 >}}
{{< rfcdoc 5927 >}}
---
[100]: https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml
[101]: https://tools.ietf.org/html/draft-ietf-opsec-icmp-filtering-04
[102]: https://tools.ietf.org/id/draft-ietf-v6ops-icmpv6-filtering-recs-02.txt

View File

@ -0,0 +1,26 @@
---
date: 2019-10-31T12:38:55+02:00
description: "Exemple de règles pour gèrer les connexions avahi avec le parefeu Packet-Filter (PF)"
draft: false
tags: ['firewall','PF','Packet-Filter','avahi','astuce']
title: "PF accepte de gèrer les connexions du service avahi"
---
## Description
Voici les règles pare-feu au besoin :
{{< code "sec-firewall-pf-avahi" sh >}}
### Précisions
Concernant le trafic SSDP :
* pour IPv6 :
* `ff02::c` est l'adresse multicast de lien local
* `ff05::c` est l'adresse multicast de site local
* `ff08::c` est l'adresse multicast d'organisation local
* il existe aussi `ff0e::c` pour l'adresse multicast global - que nous
n'utiliserons pas dans le contexte local !
---

View File

@ -0,0 +1,43 @@
---
date: 2019-10-31T12:38:55+02:00
description: "Exemple de règles pour gèrer le protocole ICMP avec le parefeu Packet-Filter (PF)"
draft: false
tags: ['firewall','PF','Packet-Filter','ICMP','astuce']
title: "PF accepte de gèrer le protocole ICMP"
---
## Description
{{< note tip >}}
Cet article peut très bien être utile pour le PF embarqué dans [Debian GNU/kFreeBSD](https://wiki.debian.org/fr/Debian_GNU/kFreeBSD) !
{{</note>}}
Suivant les recommandations que l'on retrouve sur mon autre {{< inside "sec:firewall:linux-firewall-icmp" article >}},
à-propos des règles à mettre en place pour autoriser ou bloquer le flux
ICMP, voici les règles PF adéquates, pour tout BSD qui utilise Packet Filter,
dont OpenBSD :
## Gestion
### Les codes ICMP à rejeter
{{< code "sec-firewall-pf-icmp-reject-example" sh >}}
{{< note warning >}}Il semble que PF ne comprend pas les options **37**,
**38** *(respectivement **Domain Name Request**, et **Domain Name Reply**)* ;
du moins, il ne les traduit pas, comme il le fait très bien avec les autres options !
{{</note>}}
### Les codes ICMP à autoriser
{{< note info >}}L'équivalent `limit` d'Iptables n'existe pas pour PF !<br>
Il semble que c'est géré finement par le noyau BSD d'OpenBSD.
{{</note>}}
{{< code "sec-firewall-pf-icmp-auth-example" sh >}}
Bien-sûr, vous pouvez autoriser tous les autres codes qui peuvent être autorisés
et dont les recommandations sont de limiter. Les trois codes mis en exergue sont un minima !
---

View File

@ -0,0 +1,103 @@
---
date: 2019-10-31T12:38:55+02:00
description: "Exemple de règles pour gèrer le protocole ICMPv6 avec le parefeu Packet-Filter (PF)"
draft: false
tags: ['firewall','PF','Packet-Filter','ICMPv6','astuce']
title: "PF accepte de gèrer le protocole ICMPv6"
---
## Description
{{< note tip >}}
Cet article peut très bien être utile pour le PF embarqué dans [Debian GNU/kFreeBSD](https://wiki.debian.org/fr/Debian_GNU/kFreeBSD) !
{{</note>}}
Reprenant le principe des informations renfermées dans mon autre {{< inside "sec:firewall:linux-firewall-icmpv6" article >}},
à-propos des recommandations faites pour autoriser ou bloquer le flux ICMPv6,
voici les règles PF adéquates pour tout BSD qui utilise Packet Filter, dont OpenBSD :
{{< note warning >}}
Ne JAMAIS oublier que toute la pile IPv6, à la différence d'IPv4, se repose
vraiment sur ICMPv6 ; ainsi, une mauvaise configuration d'ICMPv6 empêchera
assurément tout ou partie du flux IPv6 de fonctionner correctement, ou comme attendu !
{{</note>}}
## Gestion
### Les codes ICMP à rejeter
`icmp6_block = "{ 100 101 127 138 139 140 144 145 146 147 150 200 201 }"` <br>
`block drop quick log on egress inet6 proto icmp6 icmp6-type $icmp6_block` <br>
---
⇒ Cas d'un routeur :
Un routeur **ne doit jamais transmettre** un paquet ayant pour adresse source
ou de destination une adresse de type lien local :
`block drop quick on egress inet6 proto icmp6 from fe80::/64 to any` <br>
`block drop quick on egress inet6 proto icmp6 from any to fe80::/64` <br>
### Les codes ICMPv6 à autoriser
⇒ Gestion d'une station :
`icmp6_auth = "{ unreach toobig timex paramprob echoreq routeradv neighbrsol neighbradv }"` <br>
`#pass in quick on egress inet6 proto icmp6 from fe80::/64 to ff02::01/64` <br>
`pass quick on egress inet6 proto icmp6 icmp6-type $icmp6_auth allow-opts` <br>
`pass in quick on egress inet6 proto icmp6 icmp6-type redir allow-opts` <br>
**Explications**
* La première règle, mis en commentaire, autorise en entrée tout ce vient
de la pile IPv6 vers ICMPv6 à partir d'une adresse de lien local vers
l'adresse multicast de lien local - issue de secours au cas où !
* La deuxième règle autorise en entrée et sortie tout ce qui vient de la
pile IPv6 vers ou depuis ICMPv6 ciblant les types mentionnés dans la
macro `$icmp6_auth`.
* La troisième règle autorise en entrée tout ce qui vient de la pile IPv6
vers l'annonce ICMPv6 de redirection vers une route plus courte.
#### Autorisations plus restrictives
`icmp6_auth = "{ unreach, toobig, timex code 0, timex code 1, paramprob code 1, paramprob code 2, echoreq, routeradv, neighbrsol, neighbradv }"` <br>
`icmp6_in = "{ redir }"` <br>
`pass quick on egress inet6 proto icmp6 icmp6-type $icmp6_auth allow-opts` <br>
`pass in quick on egress inet6 proto icmp6 icmp6-type $icmp6_in allow-opts` <br>
**Explications**
* La règle `icmp6_auth` ne gère que ce qui est absolument nécessaire… **attention
à bien utiliser les virgules séparant les codes, autrement elle ne
serait pas fonctionnelle** !
* La règle `icmp6_in` gère le cas de l'annonce de redirection `redir` vers
une route sortante plus courte, et normalement ne doit être qu'entrante,
pour une station ou un serveur ; mieux, elle devrait cibler le fait
de ne venir absolument que d'un routeur !
---
⇒ Cas d'un routeur :
Si vous avez la belle idée de "construire", vous-même, votre propre routeur
*sous OpenBSD, par exemple*, il est nécessaire que celui-ci autorise tous
les codes **ND** dits de découvertes des voisins, c'est-à-dire les options
**133** à **137**, à destination de lui et depuis lui :
`icmp6_auth = "{ unreach toobig timex paramprob echorep echoreq }"` <br>
`icmp6_nd = "{ routersol routeradv neighbrsol neighbradv redir }"` <br>
`pass quick on egress inet6 proto icmp6 icmp6-type $icmp6_auth allow-opts` <br>
`pass inet6 proto ipv6-icmp from any to { ff02::/8, (self) } icmp6-type $icmp6_nd allow-opts` <br>
## Documentation
* http://livre.g6.asso.fr/index.php/Lien-local
## Remerciements
Merci à @22decembre pour ses explications ! :D
---

View File

@ -0,0 +1,30 @@
---
date: 2019-10-31T12:38:55+02:00
description: "Exemple de règles pour gèrer les ping avec le parefeu Packet-Filter (PF)"
draft: false
tags: ['firewall','PF','Packet-Filter','ping','ICMP','astuce']
title: "PF accepte de gèrer les ping"
---
## Description
Très simplement :
⇒ IPv4 :
`pass on egress inet proto icmp all icmp-type echoreq`
⇒ IPv6 :
`pass on egress inet6 proto icmp all icmp6-type echoreq`
## Documentation
### Manpage
N'hésitez pas à (re?)lire le manpage concernant la commande [`ping`](https://man.openbsd.org/ping.8),
et son équivalent `ping6` qui fonctionne de la même manière avec presque
toutes les mêmes options…
---

View File

@ -0,0 +1,28 @@
---
date: 2019-10-31T12:38:55+02:00
description: "Exemple de règles pour gèrer les connexions du service SMB avec le parefeu Packet-Filter (PF)"
draft: false
tags: ['firewall','PF','Packet-Filter','SMB','astuce']
title: "PF accepte de gèrer les connexions du service Samba"
---
## Description
Voici les règles PF nécessaires :
⇒ macros
`smb_ports_tcp = "{ 135 137 139 445 }"` <br>
`smb_ports_udp = "{ 135 137 138 445 }"` <br>
⇒ samba in
`pass in quick on egress proto tcp from egress:network to egress port $smb_ports_tcp flags S/SA modulate state` <br>
`pass in quick on egress proto udp from egress:network to egress port $smb_ports_udp allow-opts` <br>
⇒ samba out
`pass out on egress proto tcp from egress to egress:network port $smb_ports_tcp flags S/SA modulate state` <br>
`pass out on egress proto udp from egress to egress:network port $smb_ports_udp allow-opts` <br>
---

View File

@ -0,0 +1,39 @@
---
date: 2019-10-31T12:38:55+02:00
description: "Exemple de règles pour gèrer les connexions du logiciel de scanner saned avec le parefeu Packet-Filter (PF)"
draft: false
tags: ['firewall','PF','Packet-Filter','saned','astuce']
title: "PF accepte de gèrer les connexions du scanner logiciel saned"
---
## Description
Normalement le port donné pour le service `sane` est le `6566` sur le protocole `tcp`.
Il suffit donc d'écrire une règle équivalente :
`pass out on egress proto tcp from egress to egress:network port 6566 flag S/SA modulate state`
---
### Cas d'une imprimante MFP Epson
Si vous avez une MFP de marque Epson, le port `1865` sur `udp` est celui qu'il faut contacter…
par défaut. *(d'autres sont possibles, dépendant de votre modèle)*
Mais une analyse de l'activité sur l'interface `pflog0`, par le biais de
la fameuse commande `tcpdump -n -e -ttt -i pflog0` nous restitue qu'il
envoie des paquets sur `udp` à l'attention du réseau local, puis interroge
en envoyant des paquets broadcasts, avant d'obtenir une réponse de l'imprimante… <br>
bref, tout se passe en `udp`.
{{< code "sec-firewall-pf-saned-tcpdump-example" sh >}}
Le plus simple est d'autoriser le flux du protocole `udp` entrant et
venant du réseau local vers ou depuis l'interface locale :
`pass in quick on egress proto udp from egress to egress:network allow-opts` <br>
`pass in quick on egress proto udp from egress:network to egress allow-opts` <br>
---

View File

@ -0,0 +1,27 @@
---
date: 2019-10-31T12:38:55+02:00
description: "Exemple de règles pour gèrer les connexions du service Syncthing avec le parefeu Packet-Filter (PF)"
draft: false
tags: ['firewall','PF','Packet-Filter','syncthing','astuce']
title: "PF accepte de gèrer les connexions du service Syncthing"
---
## Description
Voici les règles PF nécessaires :
⇒ in :
`pass in quick on egress inet proto tcp from egress:network to egress port 22000 flags S/SA modulate state` <br>
`pass in quick on egress inet proto udp from egress:network to egress port 21027 allow-opts` <br>
⇒ out :
`pass out quick on egress inet proto tcp from egress to egress:network port 22000 flags S/SA modulate state` <br>
`pass out quick on egress inet proto udp from egress to egress:network port 21027 allow-opts` <br>
Bien-sûr, ces règles pour Syncthing sont à modifier, surtout si vous modifiez les ports dans la configuration de Syncthing !
Ce sont des règles de bases, pour exemple !
---

View File

@ -0,0 +1,28 @@
---
date: 2019-10-31T12:38:55+02:00
description: "Exemple de règles pour gèrer les connexions de l'outil traceroute avec le parefeu Packet-Filter (PF)"
draft: false
tags: ['firewall','PF','Packet-Filter','traceroute','astuce']
title: "PF accepte de gèrer les connexions de l'outil traceroute"
---
## Description
La commande `traceroute` a un comportement particulier, car il est possible
d'utiliser l'option `-I` afin de simuler le comportement d'ICMP, voire d'ICMPv6.
Voici la règle utile afin de sortir sur le protocol `udp` :
`pass out on egress inet proto udp to port 33433:33626`
La commande équivalente nommée `traceroute6` pour la pile IPv6 fonctionne
avec les mêmes options, donc de la même manière !
## Documentation
### Manpage
Allez lire un peu le manpage [traceroute(8)](https://man.openbsd.org/traceroute.8),
cela fait toujours du bien de se rafraîchir la mémoire !
---

View File

@ -1,5 +1,5 @@
---
date: 2017-07-27T13:10:37+02:00
date: 2017-07-20T13:10:37+02:00
description: "Installation et configuration de l'outil de détection des rootkits rkhunter"
draft: false
tags: ['rkhunter','detection']

View File

@ -0,0 +1,27 @@
iptables -A INPUT -p icmp -m icmp --icmp-type0 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "ICMP Echo reply"
iptables -A INPUT -p icmp -m icmp --icmp-type3/0 -m conntrack --ctstate RELATED -j ACCEPT -m comment --comment "ICMP Destination Net Unreachable"
iptables -A INPUT -p icmp -m icmp --icmp-type3/1 -m conntrack --ctstate RELATED -j ACCEPT -m comment --comment "ICMP Destination Host Unreachable"
iptables -A INPUT -p icmp -m icmp --icmp-type8 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "ICMP Echo mssg"
iptables -A INPUT -s adr_ip_gw -p icmp -m icmp --icmp-type9 -m conntrack --ctstate RELATED -j ACCEPT -m comment --comment "ICMP Router Advert"
iptables -A INPUT -s adr_ip_gw -p icmp -m icmp --icmp-type10 -m conntrack --ctstate NEW -j ACCEPT -m comment --comment "ICMP Router Select"
iptables -A INPUT -p icmp -m icmp --icmp-type11 -m conntrack --ctstate RELATED -j ACCEPT -m comment --comment "ICMP Time exceeded"
iptables -A INPUT -p icmp -m icmp --icmp-type12 -m conntrack --ctstate RELATED -j ACCEPT -m comment --comment "ICMP Param pb"
iptables -A INPUT -p icmp -m icmp --icmp-type13 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "ICMP Timestamp mssg"
iptables -A INPUT -p icmp -m icmp --icmp-type14 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "ICMP Timestamp reply"
iptables -A INPUT -p icmp -m icmp --icmp-type17 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "ICMP Addr Mask mssg"
iptables -A INPUT -s adr_ip_gw -p icmp -m icmp --icmp-type18 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "ICMP Addr Mask reply"
iptables -A INPUT -p icmp -m icmp --icmp-type30 -m conntrack --ctstate NEW,RELATED -j ACCEPT -m comment --comment "ICMP Traceroute"
iptables -A OUTPUT -p icmp -m icmp --icmp-type0 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type3/0 -m conntrack --ctstate RELATED -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type3/1 -m conntrack --ctstate RELATED -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type8 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d adr_ip_gw -p icmp -m icmp --icmp-type9 -m conntrack --ctstate RELATED -j ACCEPT
iptables -A OUTPUT -d adr_ip_gw -p icmp -m icmp --icmp-type10 -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type11 -m conntrack --ctstate RELATED -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type12 -m conntrack --ctstate RELATED -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type13 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type14 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type17 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d adr_ip_gw -p icmp -m icmp --icmp-type18 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type30 -m conntrack --ctstate NEW,RELATED -j ACCEPT

View File

@ -0,0 +1,33 @@
iptables -A INPUT -i eth0 -s 0.0.0.0/8 -j DROP
iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP # adr Class A privee
iptables -A INPUT -i eth0 -s 100.64.0.0/10 -j DROP # définit par la RFC 6598
iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP # adr de Loopback
iptables -A INPUT -i eth0 -s 169.254.0.0/16 -j DROP # adr Link Local Network
iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP # adr Class B privee
iptables -A INPUT -i eth0 -s 192.0.0.0/24 -j DROP
iptables -A INPUT -i eth0 -s 192.0.2.0/24 -j DROP # adr TEST-NET
iptables -A INPUT -i eth0 -s 192.88.99.0/24 -j DROP
iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP # adr Class C Privee
iptables -A INPUT -i eth0 -s 198.18.0.0/15 -j DROP
iptables -A INPUT -i eth0 -s 198.51.100.0/24 -j DROP
iptables -A INPUT -i eth0 -s 203.0.113.0/24 -j DROP
iptables -A INPUT -i eth0 -s 224.0.0.1/4 -j DROP # adr Class D MultiCast
iptables -A INPUT -i eth0 -s 240.0.0.0/4 -j DROP # adr Class E Reservee
iptables -A INPUT -i eth0 -s 255.255.255.255 -j DROP # aucun flux ne doit être de source avec l'adressage de loopbak...
iptables -A OUTPUT -o eth0 -d 0.0.0.0/8 -j DROP
iptables -A OUTPUT -o eth0 -d 10.0.0.0/8 -j DROP # adr Class A privee
iptables -A OUTPUT -o eth0 -d 100.64.0.0/10 -j DROP # définit par la RFC 6598
iptables -A OUTPUT -o eth0 -d 127.0.0.0/8 -j DROP # adr de Loopback
iptables -A OUTPUT -o eth0 -d 169.254.0.0/16 -j DROP # adr Link Local Network
iptables -A OUTPUT -o eth0 -d 172.16.0.0/12 -j DROP # adr Class B privee
iptables -A OUTPUT -o eth0 -d 192.0.0.0/24 -j DROP
iptables -A OUTPUT -o eth0 -d 192.0.2.0/24 -j DROP # adr TEST-NET
iptables -A OUTPUT -o eth0 -d 192.88.99.0/24 -j DROP
iptables -A OUTPUT -o eth0 -d 192.168.0.0/16 -j DROP # adr Class C Privee
iptables -A OUTPUT -o eth0 -d 198.18.0.0/15 -j DROP
iptables -A OUTPUT -o eth0 -d 198.51.100.0/24 -j DROP
iptables -A OUTPUT -o eth0 -d 203.0.113.0/24 -j DROP
iptables -A OUTPUT -o eth0 -d 224.0.0.1/4 -j DROP # adr Class D MultiCast
iptables -A OUTPUT -o eth0 -d 240.0.0.0/4 -j DROP # adr Class E Reservee
iptables -A OUTPUT -o eth0 -d 255.255.255.255 ! -p icmp -j DROP # aucun flux ne doit être à destination avec l'adressage de loopbak, sauf sur le protocole ICMP...

View File

@ -0,0 +1,11 @@
# autorise entree-sortie vers ssh, si est server ssh
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -m conntrack --ctstate ! INVALID -p TCP --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -m conntrack --ctstate RELATED,ESTABLISHED -p TCP --sport 22 -j ACCEPT
# autorise entree-sortie vers DNS &amp;lt;-&amp;gt; LAN, si est server DNS
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -m conntrack --ctstate ! INVALID -p TCP --dport 53 -j ACCEPT
iptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -m conntrack --ctstate RELATED,ESTABLISHED -p TCP --sport 53 -j ACCEPT
# autorise entree-sortie vers Cups &amp;lt;-&amp;gt; LAN, si est server Cups
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -d 192.168.0.1 -m conntrack --ctstate ! INVALID -p TCP --dport 631 -j ACCEPT
iptables -A OUTPUT -o eth0 -s 192.168.0.1 -d 192.168.0.0/24 -m conntrack --ctstate RELATED,ESTABLISHED -p TCP --sport 631 -j ACCEPT

View File

@ -0,0 +1,51 @@
/sbin/iptables -A INPUT -i ethX -p icmp -m limit --limit 3/s --limit-burst 7 -j icmp4in
/sbin/iptables -A icmp4in -p icmp -m conntrack --ctstate INVALID -j DROP
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 0 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Echo reply"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 3/0 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Destination Net Unreachable"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 3/1 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Destination Host Unreachable"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 3/3 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Destination Port Unreachable"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 3/6 -j DROP
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 3/8 -j DROP
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 4 -j DROP
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 5 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Redirect mssg"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 8/0 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Echo mssg"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 9/0 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Router Advertisement Message"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 10/0 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Router Solicitation Message"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 11 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Time exceeded"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 12 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Param pb"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 13/0 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Timestamp Message"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 14/0 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Timestamp Reply Message"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 15 -j DROP
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 16 -j DROP
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 17/0 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Address Mask Request"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 18/0 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Address Mask Reply"
/sbin/iptables -A icmp4in -p icmp -m icmp --icmp-type 30 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -m comment --comment "ICMP Traceroute"
# REJECT Others
/sbin/iptables -A icmp4in -p icmp -j REJECT --reject-with icmp-host-prohibited
/sbin/iptables -A OUTPUT -o ethX -p icmp -m limit --limit 3/s --limit-burst 7 -j icmp4out
/sbin/iptables -A icmp4out -p icmp -m conntrack --ctstate INVALID -j DROP
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 0 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 3/0 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 3/1 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 3/3 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 3/6 -j DROP
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 3/7 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 3/8 -j DROP
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 4/0 -j DROP
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 5 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 8/0 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 9/0 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 10/0 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 11 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 12 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 13/0 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 14/0 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 15 -j DROP
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 16 -j DROP
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 17/0 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 18/0 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -m icmp --icmp-type 30 -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
/sbin/iptables -A icmp4out -p icmp -j REJECT --reject-with icmp-host-prohibited

View File

@ -0,0 +1,4 @@
iptables -A INPUT -p icmp --icmp-type echo-reply -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -m limit --limit 3/s --limit-burst 7 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW,RELATED,ESTABLISHED,UNTRACKED -m limit --limit 3/s --limit-burst 7 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
iptables -A OUTPUT -p icmp -j DROP

View File

@ -0,0 +1,106 @@
# INPUT RULES
ip6tables -N INPUT_ICMPV6
ip6tables -A INPUT_ICMPV6 -p icmpv6 -m conntrack --ctstate INVALID -j DROP
ip6tables -A INPUT_ICMPV6 -p icmpv6 -m limit --limit 3/s --limit-burst 7 -j ACCEPT
ip6tables -A INPUT_ICMPV6 -p icmpv6 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 1 -m conntrack --ctstate NEW -j ACCEPT # destination-unreachable; Must Not Be Dropped
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 2/0 -m conntrack --ctstate NEW -j ACCEPT # packet too big; Must Not Be Dropped
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 3/0 -m conntrack --ctstate NEW -j ACCEPT # time exceeded; Must Not Be Dropped
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 3/1 -m conntrack --ctstate NEW -j ACCEPT # time exceeded; Should Not Be Dropped
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 4/0 -m conntrack --ctstate NEW -j ACCEPT # parameter pb: Erroneous header field encountered; Should Not Be Dropped
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 4/1 -m conntrack --ctstate NEW -j ACCEPT # parameter pb: Unrecognized Next Header Type encountered; Must Not Be Dropped
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 4/2 -m conntrack --ctstate NEW -j ACCEPT # parameter pb: Unrecognized IPv6 option encountered; Must Not Be Dropped
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 100 -j DROP # private experimentation
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 101 -j DROP # private experimentation
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 127 -j DROP # error messages ICMPv6
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 128/0 -m conntrack --ctstate NEW -j ACCEPT # ping tool: echo request message; Must Not Be Dropped
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 129/0 -m conntrack --ctstate NEW -j ACCEPT # ping tool: echo reply message; Must Not Be Dropped
# link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1)
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 130/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 131/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 132/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
# address configuration and routeur selection mssg (received with hop limit = 255)
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 133/0 -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped (only RELATED,ESTABLISHED,UNTRACKED)
ip6tables -A INPUT_ICMPV6 -s fe80::/64 -p icmpv6 --icmpv6-type 134/0 -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped (only RELATED,ESTABLISHED,UNTRACKED)
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 135/0 -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped (only RELATED,ESTABLISHED,UNTRACKED)
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 136/0 -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped (only RELATED,ESTABLISHED,UNTRACKED)
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 137/0 -j DROP # Will Be Dropped Anyway
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 138/0 -j DROP # Will Be Dropped Anyway
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 139/0 -j DROP # Should Be Dropped Unless a Good Case Can Be Made
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 140/0 -j DROP # Should Be Dropped Unless a Good Case Can Be Made
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 141/0 -d ff02::1 -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped (only RELATED,ESTABLISHED,UNTRACKED)
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 142/0 -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped (only RELATED,ESTABLISHED,UNTRACKED)
# link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1)
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 143 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
# needed for mobylity
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 144/0 -j DROP # Will Be Dropped Anyway
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 145/0 -j DROP # Will Be Dropped Anyway
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 146/0 -j DROP # Will Be Dropped Anyway
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 147 -j DROP # Will Be Dropped Anyway
# SEND certificate path notification mssg (received with hop limit = 255)
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped (only RELATED,ESTABLISHED,UNTRACKED)
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped (only RELATED,ESTABLISHED,UNTRACKED)
# multicast routeur discovery mssg (need link-local src address and hop limit = 1)
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 151 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 152 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 153 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
#
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 200 -j DROP # private experimentation
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 201 -j DROP # private experimentation
ip6tables -A INPUT_ICMPV6 -p icmpv6 --icmpv6-type 255 -j DROP # error messages ICMPv6
# all others are dropped
#ip6tables -A INPUT_ICMPV6 -p icmpv6 ! --icmpv6-type -j DROP or -j REJECT --reject-with icmp6-adm-prohibited <= this type seems not correctly supported!
ip6tables -A INPUT_ICMPV6 -p icmpv6 -j REJECT --reject-with no-route
# OUTPUT RULES
ip6tables -N OUTPUT_ICMPV6
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 -m conntrack --ctstate INVALID -j DROP
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 1 -m conntrack --ctstate NEW -m limit --limit 3/s --limit-burst 7 -j ACCEPT # destination-unreachable; Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 2/0 -m conntrack --ctstate NEW -j ACCEPT # packet too big; Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 3/0 -m conntrack --ctstate NEW -j ACCEPT # time exceeded; Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 3/1 -m conntrack --ctstate NEW -j ACCEPT # time exceeded; Should Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 4/0 -m conntrack --ctstate NEW -m limit --limit 3/s --limit-burst 7 -j ACCEPT # parameter pb: Erroneous header field encountered; Should Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 4/1 -m conntrack --ctstate NEW -m limit --limit 3/s --limit-burst 7 -j ACCEPT # parameter pb: Unrecognized Next Header Type encountered; Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 4/2 -m conntrack --ctstate NEW -m limit --limit 3/s --limit-burst 7 -j ACCEPT # parameter pb: Unrecognized IPv6 option encountered; Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 100 -j DROP # private experimentation
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 101 -j DROP # private experimentation
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 127 -j DROP # error messages ICMPv6
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 128/0 -m conntrack --ctstate NEW -j ACCEPT # ping tool: echo request message; Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 129/0 -m conntrack --ctstate NEW -j ACCEPT # ping tool: echo reply message; Must Not Be Dropped
# link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1)
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 130/0 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 131/0 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 132/0 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
# address configuration and routeur selection mssg (received with hop limit = 255)
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 133/0 -m conntrack --ctstate NEW -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 134/0 -d fe80::/64 -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 135/0 -m conntrack --ctstate NEW -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 136/0 -m conntrack --ctstate NEW -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 137/0 -j DROP # Will Be Dropped Anyway
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 138/0 -j DROP # Will Be Dropped Anyway
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 139/0 -j DROP # Should Be Dropped Unless a Good Case Can Be Made
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 140/0 -j DROP # Should Be Dropped Unless a Good Case Can Be Made
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 141/0 -d ff02::1 -m conntrack --ctstate NEW -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 142/0 -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped
# link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1)
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 143 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
# needed for mobylity
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 144/0 -j DROP # Will Be Dropped Anyway
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 145/0 -j DROP # Will Be Dropped Anyway
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 146/0 -j DROP # Will Be Dropped Anyway
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 147 -j DROP # Will Be Dropped Anyway
# SEND certificate path notification mssg (received with hop limit = 255)
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 148 -m conntrack --ctstate NEW -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 149 -m conntrack --ctstate NEW -m hl --hl-eq 255 -j ACCEPT # Must Not Be Dropped
# multicast routeur discovery mssg (need link-local src address and hop limit = 1)
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 151 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 152 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 153 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT # Must Not Be Dropped
#
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 200 -j DROP # private experimentation
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 201 -j DROP # private experimentation
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 --icmpv6-type 255 -j DROP # error messages ICMPv6
# all others are dropped
#ip6tables -A OUTPUT_ICMPV6 -p icmpv6 ! --icmpv6-type -j DROP or -j REJECT --reject-with icmp6-adm-prohibited # <= this type seems not correctly supported!
ip6tables -A OUTPUT_ICMPV6 -p icmpv6 -j REJECT --reject-with no-route

View File

@ -0,0 +1,18 @@
ip6tables -A INPUT -p icmpv6 -m conntrack --ctstate INVALID -j DROP
ip6tables -A INPUT -p icmpv6 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
ip6tables -A INPUT -p icmpv6 -m limit --limit 3/s --limit-burst 7 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -m conntrack --ctstate NEW -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -m conntrack --ctstate NEW -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT # Type: 134
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT # Type: 135
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT # Type: 136
ip6tables -A INPUT -p icmpv6 -j DROP
ip6tables -A OUTPUT -p icmpv6 -m conntrack --ctstate INVALID -j DROP
ip6tables -A OUTPUT -p icmpv6 -m conntrack --ctstate RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type echo-request -m conntrack --ctstate NEW -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type echo-reply -m conntrack --ctstate NEW -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT # Type: 133
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT # Type: 135
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT # Type: 136
ip6tables -A OUTPUT -p icmpv6 -j DROP

View File

@ -0,0 +1,6 @@
# avahi
pass on egress inet proto udp from any to 224.0.0.251 port mdns allow-opts
pass on egress inet6 proto udp from any to ff02::fb port mdns allow-opts
# ssdp
pass on egress inet proto udp from any to 239.255.255.250 port 1900 allow-opts
pass on egress inet6 proto udp from any to { ff02::c, ff05::c, ff08::c } port 1900 allow-opts

View File

@ -0,0 +1,16 @@
(…)
icmp_types="{ 8 11 12 }"
(…)
block log
pass out
(…)
pass in quick on egress inet proto icmp from any to egress icmp-type 3 code 3
pass in quick on egress inet proto icmp from any to egress icmp-type $icmp_types
pass out quick on egress inet proto icmp from egress to any icmp-type 3 code 3
pass out quick on egress inet proto icmp from egress to any icmp-type $icmp_types
(…)

View File

@ -0,0 +1,12 @@
(…)
icmp_block_types="{ 4 6 15 16 17 18 31 32 33 34 35 36 37 38 39 }"
(…)
block drop quick on egress inet proto icmp icmp-type 3 code 6
block drop in quick on egress inet proto icmp icmp-type 3 code 7
block drop quick on egress inet proto icmp icmp-type 3 code 8
block drop quick on egress inet proto icmp icmp-type $icmp_block_types
(…)

View File

@ -0,0 +1,7 @@
Oct 10 13:15:25.146815 rule 53/(match) block in on axe0: 192.168.1.2.8612 > 192.168.1.255.8612: udp 16
Oct 10 13:15:25.146890 rule 53/(match) block in on axe0: 192.168.1.2.8612 > 192.168.1.255.8610: udp 16
Oct 10 13:15:25.158437 rule 53/(match) block in on axe0: 192.168.1.2.8612 > 192.168.1.255.8612: udp 16
Oct 10 13:15:25.158493 rule 53/(match) block in on axe0: 192.168.1.2.8612 > 192.168.1.255.8610: udp 16
Oct 10 13:15:30.007313 rule 53/(match) block in on axe0: 192.168.1.2.4891 > 255.255.255.255.3289: udp 15 [ttl 1]
Oct 10 13:15:30.020862 rule 53/(match) block in on axe0: 192.168.1.3.3289 > 192.168.1.2.4891: udp 76
Oct 10 13:15:31.171140 rule 53/(match) block in on axe0: 192.168.1.2.17068 > 255.255.255.255.1124: udp 37 [ttl 1]

View File

@ -1,5 +1,5 @@
{{ $id := .Get 0 | safeHTML }}
<h3>RFC {{ $id }}</h3>
<h3 id="rfc-{{$id}}">RFC {{ $id }}</h3>
<dl class="rfc">
<dt>IETF Tools</dt>
<dd>