Pare-feu IPv4/IPv6, versions bureau et serveur

Bonjour à tous,

Sur suggestion de Ricardo, j’ouvre un nouveau fil pour proposer une mise à jour de pare-feu basique présenté ici. Le principe reste le même, l’idée était simplement d’unifier un peu toutes les nouveautés liées à l’IPv6 et de proposer une version bureau et serveur.
Ce fil est destiné aux débutants, et j’accepterai bien volontiers toutes les modifications proposées par des personnes plus compétentes que moi (elles sont nombreuses :slight_smile:).

#Le principe
##iptables
Sur Debian, iptables et ip6tables (tous deux empaquetés dans le paquet iptables) vous permettront de mettre assez facilement en place un pare-feu basique pour IPv4 et IPv6.
Après installation, le pare-feu ne pare rien du tout, il est ouvert à tous les vents, il va donc falloir le configurer. Et il faudra également prendre soin de lancer le pare-feu, avec sa configuration, dès le démarrage de la machine.

##Bureau/serveur
La configuration d’un pare-feu diffère évidemment beaucoup selon les besoins de la machine concernée. Sur votre machine de bureau, par exemple, vous pouvez faire simple et choisir de bloquer toute communication entrante venant de l’extérieur. En revanche, un serveur doit pouvoir répondre à des sollicitations sur certains ports, au moins 80 et 443 si vous hébergez un serveur HTTP/HTTPS. On sera donc obligés d’être plus fins dans le cas d’un serveur. Deux versions du script seront donc proposées dans ce fil.

##IPv4/IPv6
Une adresse IP sert à identifier une machine dans un réseau. Pendant longtemps les adresses IPv4 ont été suffisantes pour ça, elles sont de type 104.28.12.4 (au hasard). Seulement, il semblerait qu’avec l’augmentation du nombre de machines et de babioles d’objets connectés, on arrive à saturation de ce système d’adressage. Une nouvelle norme a donc été mise en place : IPv6. À ce jour, les deux normes coexistent et il convient donc de se protéger sur les deux fronts, en tenant compte en plus certaines spécificités d’IPv6.

#La mise en place
##Installation d’iptables
Ce n’est pas le plus compliqué, et vous pouvez utiliser votre gestionnaire de paquets favori. Par exemple : # aptitude install iptables.

##Création d’un script d’init
Comme introduit plus haut, il faut s’assurer que le pare-feu soit lancé lors de la phase de boot du système. Pour ça, on crée un fichier nommé par exemple init_firewall dans /etc/init.d/.

#!/bin/sh

### BEGIN INIT INFO
# Provides: init_firewall
# Required-Start: $local_fs
# Should-Start:
# Required-Stop: $local_fs
# Should-Stop:
# X-Start-Before: $network
# X-Stop-After: $network
# Default-Start: S
# Default-Stop: 0 6
# Short-description: iptables-based firewall
### END INIT INFO

case "$1" in

'start')
iptables-restore < /etc/config_parefeu_IPv4
ip6tables-restore < /etc/config_parefeu_IPv6
echo "Starting firewall"
RETVAL=$?
;;

'stop')
iptables-save > /etc/config_parefeu_IPv4
ip6tables-save > /etc/config_parefeu_IPv6
RETVAL=$?
;;

'clean')
# clean le parefeu pendant que la machine tourne
# ça peut être une faille de sécurite si on l'exécute lors de l'extinction avant l'arrêt des interfaces
# pensez à refaire un start après sinon la sauvegarde se fera automatiquement à l'extinction

#### IPv4 ####

iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P INPUT ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t raw -P OUTPUT ACCEPT
iptables -t raw -P PREROUTING ACCEPT

#### IPv6 ####
# Attention : la table nat IPv6 n'existe pas sous Wheezy (noyau 3.2)

ip6tables -t filter -F
ip6tables -t nat -F
ip6tables -t mangle -F
ip6tables -t raw -F
ip6tables -t filter -P INPUT ACCEPT
ip6tables -t filter -P OUTPUT ACCEPT
ip6tables -t filter -P FORWARD ACCEPT
ip6tables -t nat -P PREROUTING ACCEPT
ip6tables -t nat -P POSTROUTING ACCEPT
ip6tables -t nat -P INPUT ACCEPT
ip6tables -t nat -P OUTPUT ACCEPT
ip6tables -t mangle -P PREROUTING ACCEPT
ip6tables -t mangle -P OUTPUT ACCEPT
ip6tables -t mangle -P POSTROUTING ACCEPT
ip6tables -t mangle -P FORWARD ACCEPT
ip6tables -t mangle -P INPUT ACCEPT
ip6tables -t raw -P OUTPUT ACCEPT
ip6tables -t raw -P PREROUTING ACCEPT

RETVAL=$?
;;

'restart')
$0 stop && $0 start
RETVAL=$?
;;

*)
echo "Usage: $0 { start | stop | restart | clean}"
RETVAL=1
;;

esac
exit $RETVAL

Ne pas oublier de rendre le script exécutable : chmod +x /etc/init.d/init_firewall. Puis, pour permettre au gestionnaire de boot de prendre en charge ce nouveau script, on lance update-rc.d init_firewall defaults.

##Configuration
À ce stade, votre pare-feu accepte toutes les connexions. Il reste donc à le configurer. Pour cela, il “suffit” de faire appel à iptables et ip6tables pour définir les règles du pare-feu une à une. En pratique, je me suis fait un script /usr/local/sbin/config_firewall qui regroupe toutes mes règles “de base”. Cette organisation est flexible et me permet toujours d’entrer une règle iptable à la main le jour où j’en ai besoin. Et inversement, de revenir à mon jeu de règles de base en lançant config_firewall. Pensez à restreindre les droits sur ce script, chown root:root et chmod 740 feront l’affaire.

###Pour une machine de bureau

#!/bin/sh

/etc/init.d/init_firewall clean

##################
#      IPv4      #
##################

# droper l'input et le forward par défaut, accepter l'output
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# laisser l'interface lo (loop) tranquille
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# accepter en entrée le ping (icmp) et les
# connexions sur les ports nécessaires
iptables -A INPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p tcp --dport xxxx -j ACCEPT
iptables -A INPUT -p udp --dport xxxx -j ACCEPT


###################
#      IPv6       #
###################

# droper l'input et le forward par défaut, accepter l'output
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT

# laisser l'interface lo (loop) tranquille
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT

# maintenir les connexions établies
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# NDP pour toute interface de type broadcast
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT

# accepter en entrée le ping (icmpv6), les
# connexions sur les ports nécessaires.
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
ip6tables -A INPUT -p tcp --dport xxxx -j ACCEPT
ip6tables -A INPUT -p udp --dport xxxx -j ACCEPT

/etc/init.d/init_firewall restart

###Pour un serveur

#!/bin/sh

/etc/init.d/init_firewall clean

###################
#      IPv4       #
###################

# tout droper par défaut
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# laisser l'interface lo (loop) tranquille
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# accepter en entrée le ping (icmp), et les
# connexions sur les ports nécessaires.
iptables -A INPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport xxxx -j ACCEPT
iptables -A INPUT -p udp --dport xxxx -j ACCEPT

# accepter en sortie le ping, les requêtes HTTP(S), DNS,
# et les connexions sur les ports nécessaires.
iptables -A OUTPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport xxxx -j ACCEPT
iptables -A OUTPUT -p udp --dport xxxx -j ACCEPT


###################
#      IPv6       #
###################

# tout droper par défaut
ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P FORWARD DROP
ip6tables -t filter -P OUTPUT DROP

# laisser l'interface lo (loop) tranquille
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT

# maintenir les connexions établies
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# NDP pour toute interface de type broadcast
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT

ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT

# accepter en entrée le ping (icmpv6), les
# connexions entrantes déjà établies et les connexions sur les ports nécessaires.
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
ip6tables -A INPUT -p tcp --dport xxxx -j ACCEPT
ip6tables -A INPUT -p udp --dport xxxx -j ACCEPT

# accepter en sortie le ping, les requêtes HTTP(S), DNS,
# et les connexions sur les ports nécessaires.
ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport 443 -j ACCEPT
ip6tables -A OUTPUT -p udp --dport 53 -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport 53 -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport xxxx -j ACCEPT
ip6tables -A OUTPUT -p udp --dport xxxx -j ACCEPT

/etc/init.d/init_firewall restart

##Démarrage
Une fois votre script de configuration lancé, votre pare-feu devrait être en place ! Grâce au restart à la fin du script config_firewall, les règles IPv4 et IPv6 ont été sauvegardées et seront remises en place à chaque démarrage.

##Vérification
Et voilà ! Maintenant, vérification importante : le pare-feu a-t-il bien été configuré ? Vous pouvez pour ça utiliser deux commandes différentes qui donnent les mêmes informations, simplement formatées différemment :

  • iptables -vL --line-numbers et ip6tables -vL --line-numbers, ou bien
  • iptables-save et ip6tables-save, dont la sortie est plus facilement comparable avec le script config_firewall.
    Dans les deux cas, vous devriez voir les règles globales (policy) et ciblées en place.

#À l’usage

  • Pour ajouter une règle, c’est soit à la main dans un terminal, soit ajout dans le script config_firewall. Si vous le faites à la main, veillez à bien lancer un restart du script d’init (voir ci-dessus) si vous voulez que la règle soit enregistrée pour les prochains boots.
  • En cas de doute ou après chaque modification, ne pas hésiter à vérifier l’état du pare-feu (voir §Vérification ci-dessus).

#Fils à consulter

  • Le fil original de ricardo : ici.
  • La discussion IPv4/IPv6 : .
  • Pour discuter de ce T&A : là-bas.

#Merci à

  • Ricardo, pour son post initial.
  • PascalHambourg, PengouinPdt et Ricardo pour leurs conseils avisés.
5 J'aime

Post réservé.

#Les débats et questions à propos de ce T&A ont leur place ici : https://www.debian-fr.org/t/digression-installation-parefeu-iptables-ip6tables-pour-les-nuls.

Pour information, aujourd’hui dans les branches testing et unstable est arrivée une version de systemd (231-4) qui casse la rétro-compatibilité avec les “vieux” scripts d’init SysV tel que celui proposé ici. Si vous êtes en testing ou unstable, votre pare-feu NE DÉMARRE PLUS automatiquement au boot. Je modifie le tutoriel au plus vite :slight_smile:.

Bon, étant dans l’incapacité d’éditer le premier message de ce fil, vous trouverez ci-dessous le paragraphe “Création d’un script d’init” modifié pour systemd.

##Création d’un script d’init systemd

Comme introduit plus haut, il faut s’assurer que le pare-feu soit lancé lors de la phase de boot du système. Puisque systemd est maintenant le système d’init par défaut de Debian, on va suivre la procédure adaptée.

On crée d’abord un fichier service, par exemple /etc/systemd/system/init_firewall.service qui contient :

[Unit]
Description=Iptables firewall
DefaultDependencies=no
Wants=network-pre.target
Before=network-pre.target shutdown.target
Conflicts=shutdown.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/init_firewall start
ExecStop=/usr/local/bin/init_firewall stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Ce fichier correspond peu ou prou aux en-têtes LSB de l’ancien système d’init, et permet d’interfacer systemd avec votre script d’init.

Le script d’init à proprement parler peut être stocké où on veut. Je vous propose un pragmatique /usr/local/bin/init_firewall qui contiendra :

#! /bin/sh

start(){
    iptables-restore < /etc/config_parefeu_IPv4
    ip6tables-restore < /etc/config_parefeu_IPv6
    echo "Starting firewall"
    RETVAL=$?
}

stop(){
    iptables-save > /etc/config_parefeu_IPv4
    ip6tables-save > /etc/config_parefeu_IPv6
    RETVAL=$?
}

clean(){
    # clean le parefeu pendant que la machine tourne
    # ça peut être une faille de sécurite si on l'exécute lors de l'extinction avant l'arrêt des interfaces
    # pensez à refaire un start après sinon la sauvegarde se fera automatiquement à l'extinction

    #### IPv4 ####

    iptables -t filter -F
    iptables -t nat -F
    iptables -t mangle -F
    iptables -t raw -F
    iptables -t filter -P INPUT ACCEPT
    iptables -t filter -P OUTPUT ACCEPT
    iptables -t filter -P FORWARD ACCEPT
    iptables -t nat -P PREROUTING ACCEPT
    iptables -t nat -P POSTROUTING ACCEPT
    iptables -t nat -P INPUT ACCEPT
    iptables -t nat -P OUTPUT ACCEPT
    iptables -t mangle -P PREROUTING ACCEPT
    iptables -t mangle -P OUTPUT ACCEPT
    iptables -t mangle -P POSTROUTING ACCEPT
    iptables -t mangle -P FORWARD ACCEPT
    iptables -t mangle -P INPUT ACCEPT
    iptables -t raw -P OUTPUT ACCEPT
    iptables -t raw -P PREROUTING ACCEPT

    #### IPv6 ####
    # Attention : la table nat IPv6 n'existe pas sous Wheezy (noyau 3.2)

    ip6tables -t filter -F
    ip6tables -t nat -F
    ip6tables -t mangle -F
    ip6tables -t raw -F
    ip6tables -t filter -P INPUT ACCEPT
    ip6tables -t filter -P OUTPUT ACCEPT
    ip6tables -t filter -P FORWARD ACCEPT
    ip6tables -t nat -P PREROUTING ACCEPT
    ip6tables -t nat -P POSTROUTING ACCEPT
    ip6tables -t nat -P INPUT ACCEPT
    ip6tables -t nat -P OUTPUT ACCEPT
    ip6tables -t mangle -P PREROUTING ACCEPT
    ip6tables -t mangle -P OUTPUT ACCEPT
    ip6tables -t mangle -P POSTROUTING ACCEPT
    ip6tables -t mangle -P FORWARD ACCEPT
    ip6tables -t mangle -P INPUT ACCEPT
    ip6tables -t raw -P OUTPUT ACCEPT
    ip6tables -t raw -P PREROUTING ACCEPT

    RETVAL=$?
}

case $1 in
    start|stop) "$1" ;;
esac

N’oubliez pas de rendre le script exécutable : chmod +x /usr/local/bin/init_firewall.
Enfin, pour indiquer à systemd la présence de votre nouveau service : systemctl enable init_firewall.service. Vous pouvez dès maintenant, sans rebooter, lancer votre pare-feu en exécutant systemctl start init_firewall.service, et vérifier que tout s’est bien passé avec systemctl status init_firewall.service.

Sinon, tu as le paquet iptables-persistent de la suite netfilter-persistent qui fait très bien le boulot. Après, tu configures les règles dans /etc/iptables/rules.v4 pour les règles IPv4 et /etc/iptables/rules.v6 pour les règles IPv6.
Le post-install te demande même s’il doit importer les règles que tu as déjà installées.

2 J'aime

Super, grand merci ! Je ne connaissais pas ce paquet et je viens d’utiliser sur un nouveau serveur pour un petit projet, c’est effectivement impeccable. On met les règles en place, on installe le paquet, et paf !

De rien, c’est toujours un plaisir de faire découvrir mes petites astuces…

Salut
Sur un desktop ou laptop je me contente d’ufw et de son interface graphique gufw

apt-cache show gufw
Package: gufw
Source: gui-ufw
Version: 16.10.0-1
Installed-Size: 3271
Maintainer: Python Applications Packaging Team <python-apps-team@lists.alioth.debian.org>
Architecture: all
Depends: python3:any (>= 3.3.2-2~), ufw (>= 0.34~rc), gir1.2-gtk-3.0, policykit-1, gir1.2-webkit2-4.0, python3-gi
Description-fr: interface utilisateur graphique pour ufw
 Gufw est un moyen facile et intuitif pour gérer un pare-feu Linux. Il
 prend en charge, entre autres, les tâches courantes telles que l'autorisation
 ou le blocage de ports individuels ou pair à pair courants préconfigurés.
Description-md5: 6ba71ac631b02c0d683f78355db5e633
Homepage: http://gufw.org/
Tag: admin::configuring, implemented-in::python, interface::graphical,
 interface::x11, network::firewall, role::program, scope::utility,
 security::firewall, uitoolkit::gtk, use::configuring, x11::application
Section: admin
Priority: optional
Filename: pool/main/g/gui-ufw/gufw_16.10.0-1_all.deb
Size: 832574
MD5sum: 88b4fc22a2fdfa5c042c12600d2aabf3
SHA1: bad903ee7d2e474655199767f4959303529e11d4
SHA256: 33b74050c3d673974abe938fed763f87e60fce48e372f4cef7e34afadeb556f0

1 J'aime

pour la persistance des règles iptables ipv4 et ipv6 j’utilise iptables-persistent a installer avec apt-get install iptables-persistent

on a plus qu’a créer un scripte iptables dont la dernière ligne ce termine par
service netfilter-persistent save

exemple:

   ### SUPPRESSION de TOUTES LES ANCIENNES TABLES (OUVRE TOUT!!) ###
   ## ipv6
   /usr/sbin/ip6tables -F
   /usr/sbin/ip6tables -X
   /usr/sbin/ip6tables -t nat -F  
   /usr/sbin/ip6tables -t nat -X  
 
    /usr/sbin/ip6tables -P INPUT ACCEPT
    /usr/sbin/ip6tables -P OUTPUT ACCEPT
    /usr/sbin/ip6tables -P FORWARD ACCEPT 
   
   ##ipv4
    /usr/sbin/iptables -F
    /usr/sbin/iptables -X
   /usr/sbin/iptables -t nat -F  
   /usr/sbin/iptables -t nat -X  
   
   /usr/sbin/iptables -P INPUT ACCEPT
   /usr/sbin/iptables -P OUTPUT ACCEPT
   /usr/sbin/iptables -P FORWARD ACCEPT 

service netfilter-persistent save
1 J'aime

Oui, c’est déjà ce qui m’avait été proposé au-dessus ;). Un jour je prendrai le temps de modifier ce T&A pour prendre ça en compte !

Bonjour,

Est que le restart est prévu à travers ce nouveau script ?

Bonsoir,

J’espère ne pas me méprendre en disant que lorsque l’on utilise le paquet iptables-persistant, on ne doit pas créer le fichier init-firewall dans le dossier /etc/init.d mais seulement recopier , dans un terminal, les règles de ledit fichier avant d’inscrire les règles de configuration, c’est bien ça?

Exemple:

iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P INPUT ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t raw -P OUTPUT ACCEPT
iptables -t raw -P PREROUTING ACCEPT

ip6tables -t filter -F
ip6tables -t nat -F
ip6tables -t mangle -F
ip6tables -t raw -F
ip6tables -t filter -P INPUT ACCEPT
ip6tables -t filter -P OUTPUT ACCEPT
ip6tables -t filter -P FORWARD ACCEPT
ip6tables -t nat -P PREROUTING ACCEPT
ip6tables -t nat -P POSTROUTING ACCEPT
ip6tables -t nat -P INPUT ACCEPT
ip6tables -t nat -P OUTPUT ACCEPT
ip6tables -t mangle -P PREROUTING ACCEPT
ip6tables -t mangle -P OUTPUT ACCEPT
ip6tables -t mangle -P POSTROUTING ACCEPT
ip6tables -t mangle -P FORWARD ACCEPT
ip6tables -t mangle -P INPUT ACCEPT
ip6tables -t raw -P OUTPUT ACCEPT
ip6tables -t raw -P PREROUTING ACCEPT


iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p tcp --dport xxxx -j ACCEPT
iptables -A INPUT -p udp --dport xxxx -j ACCEPT

ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
ip6tables -A INPUT -p tcp --dport xxxx -j ACCEPT
ip6tables -A INPUT -p udp --dport xxxx -j ACCEPT

sudo -s iptables-save -c

Merci de m’éclairer

Salut
j’ai migré de iptables à nftables

ça drop :sunglasses:

nft list ruleset; date; who -b
table inet filter {
	chain input {
		type filter hook input priority 0; policy accept;
		iif "lo" accept
		ct state established,related accept
		tcp dport { ssh, http, https, 8200 } ct state new accept
		counter packets 10980 bytes 4821930 drop
	}
}
samedi 23 février 2019, 10:19:41 (UTC+0100)
         démarrage système 2019-02-23 07:05
1 J'aime

J’attends voir les versions du script seront donc proposées afin de me décider. Merci

Le release plombier annemasse

https://www.debian.org/releases/buster/amd64/release-notes/ch-whats-new.fr.html#nftables

perso je passe par shorewall(6) et shorewall-init. Aucun script à faire.

J’ai fait une propreté , plus adapté à un Pc familial.

cat /etc/nftables.conf

#!/usr/sbin/nft -f
# 
flush ruleset

table inet ma_table {
	chain trafic_entrant {
		type filter hook input priority 0; policy drop;
# par defaut le trafic entrant est rejeté		
		iif lo accept comment "Accepter le trafic local"
#	
#		
		ct state invalid drop comment "Rejeter les connexions invalides"
#	
		ct state established,related accept comment "Accepter le trafic dont nous sommes à l'origine"
#
		counter drop comment "Compter et rejeter tout le reste"
	}

	chain trafic_transfert {
		type filter hook forward priority 0; policy drop; 
		# Pas de transfert, on est pas un routeur 
	}

	chain trafic_sortant {
		type filter hook output priority 0; policy accept; 
		# Accepter tout ce qui sort
	}

}

Ce qui donne:

root@debian:~# nft list ruleset
table inet ma_table {
	chain trafic_entrant {
		type filter hook input priority filter; policy drop;
		iif "lo" accept comment "Accepter le trafic local"
		ct state invalid drop comment "Rejeter les connexions invalides"
		ct state established,related accept comment "Accepter le trafic dont nous sommes à l'origine"
		counter packets 97 bytes 2986 drop comment "Compter et rejeter tout le reste"
	}

	chain trafic_transfert {
		type filter hook forward priority filter; policy drop;
	}

	chain trafic_sortant {
		type filter hook output priority filter; policy accept;
	}
}
root@debian:~# 

Pensez systématiquement à LOG les drop. C’est important car le parefeu, ce n’est pas uniquement de filtrer mais aussi de savoir ce que l’on filtre (pour éventuellement voir ce qui se passe).
Il y a deux modes de logs. Soit par l’habituel classique via rsyslog qui finit dans /var/log/syslog ou dans un fichier dédié avec un filtre dans la configuration rsyslog.conf ou rsyslog.d. Soit d’utiliser ulogd (par le package ulog2)