Installation-Parre-Feu.md 22 KB



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

#! /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.