
# Installation d'un pare-feu

J'ai utilisé depuis toujours **iptables** *brut*. Ayant lu beaucoup de bien de **ufw**, je vais tenter une installation de ce dernier.

Après usage, il s'avère difficile de configurer **fail2ban** avec **ufw**.

Je vais quand même laisser la doc de configuration de **ufw**, tout en préférant utiliser **iptables**.

## Installation de iptables

**Iptables** est installé automatiquement. Nous allons rajouter le paquet **iptables-persistent** pour assurer le lancement automatique de nos règles à l'allumage de la machine.

    root@atom:/home/ericadmin# apt install iptables-persistent
    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances
    Lecture des informations d'état... Fait
    The following additional packages will be installed:
      netfilter-persistent
    Les NOUVEAUX paquets suivants seront installés :
      iptables-persistent netfilter-persistent
    0 mis à jour, 2 nouvellement installés, 0 à enlever et 0 non mis à jour.
    Il est nécessaire de prendre 19,5 ko dans les archives.
    Après cette opération, 79,9 ko d'espace disque supplémentaires seront utilisés.
    Souhaitez-vous continuer ? [O/n] o
    Réception de:1 http://deb.debian.org/debian stretch/main amd64 netfilter-persistent all 1.0.4+nmu2 [8 792 B]
    Réception de:2 http://deb.debian.org/debian stretch/main amd64 iptables-persistent all 1.0.4+nmu2 [10,7 kB]
    19,5 ko réceptionnés en 0s (198 ko/s)
    Préconfiguration des paquets...
    Sélection du paquet netfilter-persistent précédemment désélectionné.
    (Lecture de la base de données... 36713 fichiers et répertoires déjà installés.)
    Préparation du dépaquetage de .../netfilter-persistent_1.0.4+nmu2_all.deb ...
    Dépaquetage de netfilter-persistent (1.0.4+nmu2) ...
    Sélection du paquet iptables-persistent précédemment désélectionné.
    Préparation du dépaquetage de .../iptables-persistent_1.0.4+nmu2_all.deb ...
    Dépaquetage de iptables-persistent (1.0.4+nmu2) ...
    Paramétrage de netfilter-persistent (1.0.4+nmu2) ...
    Created symlink /etc/systemd/system/multi-user.target.wants/netfilter-persistent.service → /lib/systemd/system/netfilter-persistent.service.
    update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
    Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u1) ...
    Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
    Paramétrage de iptables-persistent (1.0.4+nmu2) ...
    root@atom:/home/ericadmin#

Nous obtenons donc 2 fichiers de configuration, /etc/iptables/rules.v4 et /etc/iptables/rules.v6.

En listant ces fichiers, aucune règle n'est encore enregistrée: tout passe, en entrée et en sortie.

Ces fichiers sont mis à jour grâce aux commandes suivantes.

    iptables-save > /etc/iptables/rules.v4
    ip6tables-save > /etc/iptables/rules.v6

Les commandes disponibles pour **netfilter-persistent** sont les suivantes:

* systemctl start netfilter-persistent
* systemctl stop netfilter-persistent
* systemctl restart netfilter-persistent
* systemctl stop netfilter-persistent
* systemctl status netfilter-persistent

Exemples d'utilisation suivant l'état de **netfilter-persistent**:

    root@atom:/home/ericadmin# systemctl stop netfilter-persistent
    root@atom:/home/ericadmin# systemctl status netfilter-persistent
    ● (**point en rouge**) netfilter-persistent.service - netfilter persistent configuration
       Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
       Active: failed (Result: exit-code) since Sun 2018-02-11 13:50:22 CET; 13s ago
      Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
      Process: 1525 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
     Main PID: 1525 (code=exited, status=0/SUCCESS)

    févr. 11 13:42:02 atom systemd[1]: Starting netfilter persistent configuration...
    févr. 11 13:42:02 atom netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
    févr. 11 13:42:02 atom netfilter-persistent[1525]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
    févr. 11 13:42:02 atom systemd[1]: Started netfilter persistent configuration.
    févr. 11 13:50:22 atom systemd[1]: Stopping netfilter persistent configuration...
    févr. 11 13:50:22 atom netfilter-persistent[1629]: Automatic flush disabled; use '/usr/sbin/netfilter-persistent flush'
    févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Control process exited, code=exited status=1
    févr. 11 13:50:22 atom systemd[1]: Stopped netfilter persistent configuration.
    févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Unit entered failed state.
    févr. 11 13:50:22 atom systemd[1]: netfilter-persistent.service: Failed with result 'exit-code'.
    root@atom:/home/ericadmin#

    root@atom:/home/ericadmin# systemctl start netfilter-persistent
    root@atom:/home/ericadmin# systemctl status netfilter-persistent
    ● (**point en vert**) netfilter-persistent.service - netfilter persistent configuration
       Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
       Active: active (exited) since Sun 2018-02-11 13:51:09 CET; 2s ago
      Process: 1629 ExecStop=/usr/sbin/netfilter-persistent stop (code=exited, status=1/FAILURE)
      Process: 1641 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
     Main PID: 1641 (code=exited, status=0/SUCCESS)

    févr. 11 13:51:09 atom systemd[1]: Starting netfilter persistent configuration...
    févr. 11 13:51:09 atom netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
    févr. 11 13:51:09 atom netfilter-persistent[1641]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
    févr. 11 13:51:09 atom systemd[1]: Started netfilter persistent configuration.
    root@atom:/home/ericadmin#

Pour sauver des règles “entrées à la main”, tapez:

    root@atom:/home/ericadmin# service netfilter-persistent save
    [....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
    run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
    done.
    root@atom:/home/ericadmin#

ou

    root@atom:/home/ericadmin# iptables-save > /etc/iptables/rules.v4
    root@atom:/home/ericadmin# ip6tables-save > /etc/iptables/rules.v6

## Configuration des règles iptables

Nous allons les configurer avec un script donné par Nicolargo: [Site de NicoLargo](https://blog.nicolargo.com/2013/06/ma-methode-pour-gerer-les-regles-iptables.html)

    #! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          PersonalFirewall
    # Required-Start:    $remote_fs $syslog
    # Required-Stop:     $remote_fs $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Personal Firewall
    # Description:
    ### END INIT INFO

    # programme iptables IPV4 et IPV6
    IPT=/sbin/iptables
    IP6T=/sbin/ip6tables

    # Les IPs
    IPMAISON=192.168.111.150
    IP6MAISON=fe80::1e6f:65ff:fe92:dd1f

    # fonction qui démarre le firewall
    do_start() {

        # Efface toutes les règles en cours. -F toutes. -X utilisateurs
        $IPT -t filter -F
        $IPT -t filter -X
        $IPT -t nat -F
        $IPT -t nat -X
        $IPT -t mangle -F
        $IPT -t mangle -X
        #
        $IP6T -t filter -F
        $IP6T -t filter -X
        # Il n'y a pas de NAT en IPV6
        #$IP6T -t nat -F
        #$IP6T -t nat -X
        $IP6T -t mangle -F
        $IP6T -t mangle -X

        # stratégie (-P) par défaut : bloc tout l'entrant le forward et autorise le sortant
        $IPT -t filter -P INPUT DROP
        $IPT -t filter -P FORWARD DROP
        $IPT -t filter -P OUTPUT ACCEPT
        #
        $IP6T -F INPUT
        $IP6T -F FORWARD
        $IP6T -X

        # Loopback
        $IPT -t filter -A INPUT -i lo -j ACCEPT
        $IPT -t filter -A OUTPUT -o lo -j ACCEPT
        #
        $IP6T -t filter -A INPUT -i lo -j ACCEPT
        $IP6T -t filter -A OUTPUT -o lo -j ACCEPT

        # ICMP
        $IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
        $IPT -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

        # Permettre à une connexion ouverte de recevoir du trafic en entrée
        $IPT -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
        #
        $IP6T -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
        $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
        $IP6T -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
        $IP6T -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
        $IP6T -A INPUT -j ACCEPT
        $IP6T -A INPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
        $IP6T -P INPUT DROP
        $IP6T -A FORWARD -m state --state ESTABLISHED -j ACCEPT
        $IP6T -A FORWARD -p icmpv6 --icmpv6-type echo-request -j ACCEPT
        $IP6T -A FORWARD -i br0 -j ACCEPT
        $IP6T -A FORWARD -i br1 -o sit_sixxs -j ACCEPT
        $IP6T -P FORWARD DROP

        # DNS:53
        # /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
        $IPT -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
        $IPT -t filter -A INPUT -p udp --dport 53 -j ACCEPT

        # DNS:53
        $IP6T -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
        $IP6T -t filter -A INPUT -p udp --dport 53 -j ACCEPT

       # DNS:953
        # /!\ Il faut autoriser le DNS AVANT de déclarer des hosts sinon pas de résolution de nom possible
        $IPT -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
        $IPT -t filter -A INPUT -p udp --dport 953 -j ACCEPT
        #
        $IP6T -t filter -A INPUT -p tcp --dport 953 -j ACCEPT
        $IP6T -t filter -A INPUT -p udp --dport 953 -j ACCEPT


        # accepte tout d'une ip en TCP (de la maison)
        $IPT -t filter -A INPUT -p tcp -s $IPMAISON -j ACCEPT
        $IP6T -t filter -A INPUT -p tcp -s $IP6MAISON -j ACCEPT

        # ssh
        $IPT -t filter -A INPUT -p tcp --dport 22  -j ACCEPT
        $IPT -t filter -A OUTPUT -p tcp --dport 22  -j ACCEPT
        #
        $IP6T -t filter -A INPUT -p tcp --dport 22  -j ACCEPT
        $IP6T -t filter -A OUTPUT -p tcp --dport 22  -j ACCEPT


       #NTP out
        $IPT -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
        $IP6T -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT


    #    # HTTP + HTTPS Out
    #     $IPT -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
    #     $IPT -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

    #     $IP6T -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
    #     $IP6T -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

    #     # HTTP + HTTPS In
    #     $IPT -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
    #     $IPT -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

    #     $IP6T -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
    #     $IP6T -t filter -A INPUT -p tcp --dport 443 -j ACCEPT


    #    # Mail SMTP:25
    #    $IPT -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
    #    $IPT -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

    #    $IP6T -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
    #    $IP6T -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT


    #    # Mail SMTP:587
    #    $IPT -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
    #    $IPT -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

    #    $IP6T -t filter -A INPUT -p tcp --dport 597 -j ACCEPT
    #    $IP6T -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

    #    # Mail IMAP:143
    #    $IPT -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
    #    $IPT -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

    #    $IP6T -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
    #    $IP6T -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

    #    # Mail IMAPS:993
    #    $IPT -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
    #    $IPT -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT
    #    $IP6T -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
    #    $IP6T -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT

    #    # Mail 465
    #    $IPT -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
    #    $IPT -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT

    #    $IP6T -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
    #    $IP6T -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT


        #
        echo "firewall started [OK]"
    }

    # fonction qui arrête le firewall
    do_stop() {

        # Efface toutes les règles
        $IPT -t filter -F
        $IPT -t filter -X
        $IPT -t nat -F
        $IPT -t nat -X
        $IPT -t mangle -F
        $IPT -t mangle -X
        #
        $IP6T -t filter -F
        $IP6T -t filter -X
        #$IP6T -t nat -F
        #$IP6T -t nat -X
        $IP6T -t mangle -F
        $IP6T -t mangle -X

        # remet la stratégie
        $IPT -t filter -P INPUT ACCEPT
        $IPT -t filter -P OUTPUT ACCEPT
        $IPT -t filter -P FORWARD ACCEPT
        #
        $IP6T -t filter -P INPUT ACCEPT
        $IP6T -t filter -P OUTPUT ACCEPT
        $IP6T -t filter -P FORWARD ACCEPT

        #
        echo "firewall stopped [OK]"
    }

    # fonction status firewall
    do_status() {

        # affiche les règles en cours
        clear
        echo Status IPV4
        echo --
        $IPT -L -n -v
        echo
        echo --
        echo
        echo status IPV6
        echo --
        $IP6T -L -n -v
        echo
    }

    case "$1" in
        start)
            do_start
            # quitte sans erreur
            exit 0
        ;;

        stop)
            do_stop
            # quitte sans erreur
            exit 0
        ;;

        restart)
            do_stop
            do_start
            # quitte sans erreur
            exit 0
        ;;

        status)
            do_status
            # quitte sans erreurs
            exit 0
        ;;

        *)
            # Si on ne tape ni "start" ni "stop"... on affiche une erreur
            echo "Usage: /etc/init.d/firewall {start|stop|restart|status}"
            # quitte le script avec un etat "en erreur"
            exit 1
        ;;

    esac

Explications:

Création de 4 chaînes pour faciliter les opérations:

    # iptables -N TCP
    # iptables -N UDP

    # ip6tables -N TCP
    # ip6tables -N UDP

On est sur un serveur, pas un routeur, donc, on interdit la règle FORWARD:

    # iptables -P FORWARD DROP

    # ip6tables -P FORWARD DROP

On autorise tout en sortie:

    # iptables -P OUTPUT ACCEPT

    # ip6tables -P OUTPUT ACCEPT

Nous allons accepter les connexions déjà établies:

    # iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

    # ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

En entrée, on commence par interdire tout; on ouvrira les ports suivantles besoins:

    # iptables -P INPUT DROP

    # ip6tables -P INPUT DROP

Autorisation des connexions **loopback** (internes):

    # iptables -A INPUT -i lo -j ACCEPT

    # ip6tables -A INPUT -i lo -j ACCEPT

Nous allons interdire les paquets marqués **INVALID**; il faudra auparavant accepter les paquets **ICMPv6 Neighbor Discovery** qui apparaissent invalides:

    #iptables -A INPUT -p 41 -j ACCEPT

    #ip6tables -A INPUT -p 41 -j ACCEPT

    # iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

    # ip6tables -A INPUT -m conntrack --ctstate INVALID -j DROP

Pour IPV6, il faut rajouter la règle suivante qui permet de faire passer le protocol de découverte des ordinateurs sur le même réseau:

    # ip6tables -A INPUT -s fe80::/10 -p ipv6-icmp -j ACCEPT

L'adresse fe80:: est l'adresse ipv6 valable uniquement sur le réseau local.

On accepte les paquets **ping**:

    # iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT

    # ip6tables -A INPUT -p icmpv6 -m conntrack --ctstate NEW -j ACCEPT

On peut maintenant accepter les nouveaux paquets entrants. Les connexions entrantes doivent commencer avec un paquet **SYNC**. Elles seront rejetées si ce n'est pas le cas:

    # iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
    # iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP

    # ip6tables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
    # ip6tables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP

On rejette les paquets du protocole **icmp unreachable**

    # iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable

    # iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset

    # ip6tables -A INPUT -p ipv6-icmp --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT

    # ip6tables -A INPUT -p tcp -j REJECT --reject-with tcp-reset

Pour IPV6, nous pouvons rajouter un filtrage pour le "kernel reverse path filter":

    # ip6tables -t raw -A PREROUTING -m rpfilter -j ACCEPT
    # ip6tables -t raw -A PREROUTING -j DROP

On accepte les paquets **ssh** sur le port 22 (changez ce port si vous avez configuré vos ports différemment)

    # iptables -A TCP -p tcp --dport 22 -j ACCEPT

    # ip6tables -A TCP -p tcp --dport 22 -j ACCEPT

Règles pour le DNS et NTP (ports 53 et 41)

    # iptables -A INPUT  -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
    # iptables -A OUTPUT  -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
    # iptables -A INPUT  -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
    # iptables -A OUTPUT  -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT


    # iptables -A INPUT  -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
    # iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT

La même chose pour IPV6:

    # ip6tables -A INPUT  -p udp -m state --state ESTABLISHED --sport 53 -j ACCEPT
    # ip6tables -A OUTPUT  -p udp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT
    # ip6tables -A INPUT  -p tcp -m state --state ESTABLISHED --sport 53 -j ACCEPT
    # ip6tables -A OUTPUT  -p tcp -m state --state NEW,ESTABLISHED --dport 53 -j ACCEPT


    # ip6tables -A INPUT  -p udp -m state --state ESTABLISHED --sport 123 -j ACCEPT
    # ip6tables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED --dport 123 -j ACCEPT

Nous pouvons maintenant lister nos règles. Nous allons commencer par IPV4:

Listons les règles actuelles, ensuite ajoutons 2 règles et sauvons celles-ci, puis listons le résultat. Vous pouvez faire de même pour toutes les règles.

    root@atom:/etc/iptables# cat rules.v4
    # Generated by iptables-save v1.6.0 on Sun Feb 11 14:27:32 2018
    *filter
    :INPUT ACCEPT [491:50774]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [267:23983]
    COMMIT
    # Completed on Sun Feb 11 14:27:32 2018

    root@atom:/etc/iptables# iptables -N TCP
    root@atom:/etc/iptables# iptables -N UDP

    root@atom:/etc/iptables# service netfilter-persistent save
    [....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
    run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
    done.

    root@atom:/etc/iptables# cat rules.v4
    # Generated by iptables-save v1.6.0 on Sun Feb 11 14:28:24 2018
    *filter
    :INPUT ACCEPT [13:888]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [8:944]
    :TCP - [0:0]
    :UDP - [0:0]
    COMMIT
    # Completed on Sun Feb 11 14:28:24 2018

Ne pas oublier de valider la règle d'acceptation des connexions existantes AVANT d'entrer la règle INPUT DROP sinon, vous perdez toute connexion avec votre serveur :).

Il suffit de répéter pour les autres règles puis pour IPV6.

Nous obtenons donc les règles suivantes:

Pour IPV4:

    root@atom:/etc/iptables# cat rules.v4
    # Generated by iptables-save v1.6.0 on Sun Feb 11 15:33:41 2018
    *filter
    :INPUT DROP [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [105:27592]
    :TCP - [0:0]
    :UDP - [0:0]
    -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m conntrack --ctstate INVALID -j DROP
    -A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
    -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
    -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
    -A INPUT -j REJECT --reject-with icmp-proto-unreachable
    -A INPUT -p tcp -j REJECT --reject-with tcp-reset
    -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
    COMMIT
    # Completed on Sun Feb 11 15:33:41 2018
    root@atom:/etc/iptables#

Pour IPV6:

    root@atom:/etc/iptables# cat rules.v6
    # Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
    *raw
    :PREROUTING ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A PREROUTING -m rpfilter -j ACCEPT
    -A PREROUTING -j DROP
    COMMIT
    # Completed on Sun Feb 11 15:33:41 2018
    # Generated by ip6tables-save v1.6.0 on Sun Feb 11 15:33:41 2018
    *filter
    :INPUT DROP [1:144]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [0:0]
    :TCP - [0:0]
    :UDP - [0:0]
    -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -p ipv6 -j ACCEPT
    -A INPUT -m conntrack --ctstate INVALID -j DROP
    -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
    -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
    -A INPUT -p tcp -j REJECT --reject-with tcp-reset
    -A INPUT -p ipv6-icmp -m icmp6 --icmpv6-type 128 -m conntrack --ctstate NEW -j ACCEPT
    -A OUTPUT -p ipv6-icmp -j ACCEPT
    -A TCP -p tcp -m tcp --dport 22 -j ACCEPT
    COMMIT
    # Completed on Sun Feb 11 15:33:41 2018
    root@atom:/etc/iptables#

## Test DNS et du serveur de temps (avec iptables actif)

    root@atom:/home/ericadmin# nslookup www.gnome.org
    Server:		192.168.111.254
    Address:	192.168.111.254#53

    Non-authoritative answer:
    www.gnome.org	canonical name = proxy.gnome.org.
    Name:	proxy.gnome.org
    Address: 209.132.180.168
    Name:	proxy.gnome.org
    Address: 209.132.180.180

    root@atom:/home/ericadmin# timedatectl status
          Local time: dim. 2018-04-01 12:26:57 CEST
      Universal time: dim. 2018-04-01 10:26:57 UTC
            RTC time: dim. 2018-04-01 10:26:58
           Time zone: Europe/Paris (CEST, +0200)
     Network time on: yes
    NTP synchronized: yes
     RTC in local TZ: no

Ça fonctionne.

Il faut re-tester la connectivité en IPV4 et IPV6

1. Serveur -> extérieur
2. Extérieur -> serveur

On peut utiliser l'adresse **ipv6.google.com** pour vérifier la connexion IPV6 en dehors du réseau local.
