logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 24-03-2020 11:59:43

JackOs29
Membre
Distrib. : Debian 10 (BUSTER)
Noyau : Linux 4.19.0-8-amd64
(G)UI : Cinnamon
Inscription : 24-03-2020

[Résolu] IPTABLES - Problème configuration règles pour dnscrypt-proxy

Bonjour à tous,

Je fais appel à la communauté DF afin de m'aider à résoudre un problème.

Voilà, je viens de m'installer une machine Debian 10 sur laquelle j'ai installé/configuré les paquets dnscrypt-proxy et iptables.

Malheureusement, après avoir parcouru un certains nombre de site et essayé un certains nombre de solution, je n'arrive pas à trouver la solution. hmm

Mon problème est donc le suivant: Je n'arrive pas à faire fonctionner dnscrypt-proxy au travers du pare-feu. crash.gif

Pour précision:
La résolution DNS via dnscrypt-proxy fonctionne correctement sans le pare-feu.

Vous trouverez ci-dessous mon/mes fichiers de configuration iptables, ainsi que mon/mes fichiers de logs:


Requête nslookup sans IPTABLES

nslookup www.google.fr
Server:         127.0.2.1
Address:        127.0.2.1#53

Non-authoritative answer:
Name:   www.google.fr
Address: 216.58.213.131
Name:   www.google.fr
Address: 2a00:1450:4007:80c::2003



Requête nslookup avec IPTABLES

nslookup www.google.fr
;; connection timed out; no servers could be reached



Fichier de configuration IPTABLES:

#! /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:       Init the firewall rules
    ### END INIT INFO

    # programme iptables IPV4 et IPV6
    IPT=/sbin/iptables
    # Les IPs
    #IP_TRUSTED=xx.xx.xx.xx

    do_start() {
        # Efface toutes les regles en cours. -F toutes. -X règles personnelles
        $IPT -t filter -F
        $IPT -t filter -X
        $IPT -t nat -F
        $IPT -t nat -X
        $IPT -t mangle -F
        $IPT -t mangle -X

        # strategie (-P) par defaut : Interdire toute connexion entrante et sortante
        $IPT -t filter -P INPUT DROP
        $IPT -t filter -P FORWARD DROP
        $IPT -t filter -P OUTPUT DROP

        # Logs du firewall
        $IPT -A INPUT -j LOG --log-prefix "INPUT_DROP   ]"
        $IPT -A FORWARD -j LOG --log-prefix "FORWARD_DROP   ]"
        $IPT -A OUTPUT -j LOG --log-prefix "OUTPUT_DROP   ]"

        # Refuse les paquets invalides
        $IPT -A INPUT  -m state --state INVALID -j DROP
        $IPT -A OUTPUT -m state --state INVALID -j DROP
        $IPT -A FORWARD -m state --state INVALID -j DROP

        # Anti Scan
        $IPT -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
        $IPT -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
        $IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
        $IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
        $IPT -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j DROP

        #Make sure NEW incoming tcp connections are SYN packets
        $IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

        #Packets with incoming fragments
        $IPT -A INPUT -f -j DROP

        #incoming malformed XMAS packets
        $IPT -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
        #Incoming malformed NULL packets
        $IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

        # Autoriser Loopback
        $IPT -t filter -A INPUT -i lo -m comment --comment "lo:IN" -j ACCEPT
        $IPT -t filter -A OUTPUT -o lo -m comment --comment "lo:OUT" -j ACCEPT

        # Permettre a une connexion ouverte de recevoir du trafic en entree
        $IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        $IPT -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

        # ICMP (Ping)
        $IPT -t filter -A INPUT -p icmp -m comment --comment "ICMP:IN" -j ACCEPT
        $IPT -t filter -A OUTPUT -p icmp -m comment --comment "ICMP:OUT" -j ACCEPT

        #Autoriser sortie FTP
        $IPT -t filter -A OUTPUT -p tcp --dport 21 -m comment --comment "FTP:OUT:21" -j ACCEPT
        $IPT -t filter -A OUTPUT -p tcp --dport 20 -m comment --comment "FTP:OUT:20" -j ACCEPT

        # DNS :53
        $IPT -t filter -A OUTPUT -p tcp --dport 53 -m comment --comment "DNS:OUT:53:tcp" -j ACCEPT
        $IPT -t filter -A OUTPUT -p udp --dport 53 -m comment --comment "DNS:OUT:53:udp" -j ACCEPT
        $IPT -t filter -A INPUT -p tcp --dport 53 -m comment --comment "DNS:IN:53:tcp" -j ACCEPT
        $IPT -t filter -A INPUT -p udp --dport 53 -m comment --comment "DNS:IN:53:udp" -j ACCEPT

        # HTTP:80
        $IPT -t filter -A INPUT -p tcp --dport 80 -m comment --comment "HTTP:IN:80" -j ACCEPT

        # HTTPS:443
        $IPT -t filter -A INPUT -p tcp --dport 443 -m comment --comment "HTTPS:IN:443" -j ACCEPT

        # DNSCRYPT
  $IPT -t filter -A OUTPUT -p udp --dport 443 -j ACCEPT
   
        # NTP OUT
        $IPT -t filter -A OUTPUT -p udp --dport 123 -m comment --comment "NTP:OUT:123" -j ACCEPT

        echo "firewall started [OK]"
    }
    # fonction qui arrete le firewall
    do_stop() {
        # Efface toutes les regles
        $IPT -t filter -F
        $IPT -t filter -X
        $IPT -t nat -F
        $IPT -t nat -X
        $IPT -t mangle -F
        $IPT -t mangle -X
        # remet la strategie
        $IPT -t filter -P INPUT ACCEPT
        $IPT -t filter -P OUTPUT ACCEPT
        $IPT -t filter -P FORWARD ACCEPT
        #
        echo "firewall stopped [OK]"
    }
    # fonction status firewall
    do_status() {
        # affiche les regles en cours
        clear
        echo Status IPV4
        echo -----------------------------------------------
        $IPT -L -n -v
        echo
    }
    case "$1" in
        start)
            do_start
            exit 0
        ;;
        stop)
            do_stop
            exit 0
        ;;
        restart)
            do_stop
            do_start
            exit 0
        ;;
        status)
            do_status
            exit 0
        ;;
        *)
            echo "Usage: /etc/init.d/firewall {start|stop|restart|status}"
            exit 1
        ;;
    esac
 



Fichier de LOG IPTABLES:

OUTPUT_DROP   ]IN= OUT=lo SRC=127.0.0.1 DST=127.0.0.1 LEN=29 TOS=0x18 PREC=0xA0 TTL=64 ID=53726 DF PROTO=UDP SPT=57845 DPT=57845 LEN=9
INPUT_DROP   ]IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=29 TOS=0x18 PREC=0xA0 TTL=64 ID=53726 DF PROTO=UDP SPT=57845 DPT=57845 LEN=9
OUTPUT_DROP   ]IN= OUT=lo SRC=127.0.0.1 DST=127.0.2.1 LEN=59 TOS=0x00 PREC=0x00 TTL=64 ID=43185 PROTO=UDP SPT=41465 DPT=53 LEN=39
INPUT_DROP   ]IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.2.1 LEN=59 TOS=0x00 PREC=0x00 TTL=64 ID=43185 PROTO=UDP SPT=41465 DPT=53 LEN=39
OUTPUT_DROP   ]IN= OUT=enp5s2 SRC=192.168.1.29 DST=1.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=32259 DF PROTO=TCP SPT=56056 DPT=443 WINDOW=64240 RES=0x00 SYN URGP=0
OUTPUT_DROP   ]IN= OUT=enp5s2 SRC=192.168.1.29 DST=1.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=32260 DF PROTO=TCP SPT=56056 DPT=443 WINDOW=64240 RES=0x00 SYN URGP=0



Je pense que la solution est toute bête, mais je n'arrive pas à la trouver...
Faut-il que je crée une règle de nattage ? PREROUTING/POSTROUTING ?

En vous remerçiant d'avance pour l'aide que vous pourriez m'apporter.

Dernière modification par JackOs29 (24-03-2020 18:25:08)

Hors ligne

#2 24-03-2020 13:42:18

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] IPTABLES - Problème configuration règles pour dnscrypt-proxy

1) Les 3 règles LOG sont soit mal placées, soit mal nommées : elles sont en début de chaîne donc voient passer tous les paquets, acceptés et bloqués, alors que le préfixe contient "DROP".
2) La règle DNSCRYPT s'applique au protocole UDP mais d'après les deux dernières lignes de log les paquets bloqués sont du protocole TCP.
3) Ton jeu de règles est globalement tout pourri, mais ce n'est pas le sujet.

Il vaut mieux montrer que raconter.

Hors ligne

#3 24-03-2020 18:22:46

JackOs29
Membre
Distrib. : Debian 10 (BUSTER)
Noyau : Linux 4.19.0-8-amd64
(G)UI : Cinnamon
Inscription : 24-03-2020

Re : [Résolu] IPTABLES - Problème configuration règles pour dnscrypt-proxy

Bonjour Raleur,

Merci pour ton retour.

La solution était bien là (Protocole TCP). Cela fonctionne maintenant.

J'ai également tenu compte de ta remarque et ré-analysé mes règles. Effectivement, il y avait de grosse absurdité.

Pour finir, j'ai finalement reconstruit mon jeux de règle en mode "killswitch" avec mon vpn.

Voici mon nouveau jeux de règles.

#! /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:       Init the firewall rules
### END INIT INFO

# programme iptables IPV4 et IPV6
IPT=/sbin/iptables
# Les IPs
#IP_TRUSTED=xx.xx.xx.xx

do_start() {
        # Efface toutes les regles en cours. -F toutes. -X règles personnelles
        $IPT -t filter -F
        $IPT -t filter -X
        $IPT -t filter -Z
        $IPT -t nat -F
        $IPT -t nat -X
        $IPT -t nat -Z
        $IPT -t mangle -F
        $IPT -t mangle -X
        $IPT -t mangle -Z

        # strategie (-P) par defaut : Interdire toute connexion entrante et sortante
        $IPT -t filter -P INPUT DROP
        $IPT -t filter -P FORWARD DROP
        $IPT -t filter -P OUTPUT DROP

        # Logs du firewall
        #$IPT -A INPUT -j LOG --log-prefix "INPUT_DROP   ]"
        #$IPT -A FORWARD -j LOG --log-prefix "FORWARD_DROP   ]"
        #$IPT -A OUTPUT -j LOG --log-prefix "OUTPUT_DROP   ]"

        # Refuse les paquets invalides
        $IPT -A INPUT  -m state --state INVALID -j DROP
        $IPT -A OUTPUT -m state --state INVALID -j DROP
        $IPT -A FORWARD -m state --state INVALID -j DROP

        # Permettre a une connexion ouverte de recevoir du trafic en entree
        $IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        $IPT -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

        # Autoriser Loopback
        $IPT -t filter -A INPUT -i lo -m comment --comment "lo:IN" -j ACCEPT
        $IPT -t filter -A OUTPUT -o lo -m comment --comment "lo:OUT" -j ACCEPT

        # ICMP (Ping)
        $IPT -t filter -A OUTPUT -o tun0 -p icmp -m comment --comment "ICMP:OUT:tun0" -j ACCEPT

        # NTP:123
        $IPT -t filter -A OUTPUT -o tun0 -p udp --dport 123 -m comment --comment "NTP:OUT:tun0" -j ACCEPT

        # DNS :53
        $IPT -t filter -A OUTPUT -o tun0 -p tcp --dport 53 -m comment --comment "DNS:OUT:53:tcp" -j ACCEPT
        $IPT -t filter -A OUTPUT -o tun0 -p udp --dport 53 -m comment --comment "DNS:OUT:53:udp" -j ACCEPT

        # HTTP:80
        $IPT -t filter -A OUTPUT -o tun0 -p tcp --dport 80 -m comment --comment "HTTP:OUT:80" -j ACCEPT

        # HTTPS:443
        $IPT -t filter -A OUTPUT -o tun0 -p tcp -m tcp --dport 443 -m comment --comment "HTTP:OUT:443" -j ACCEPT

        #Autoriser sortie FTP
        $IPT -t filter -A OUTPUT -o tun0 -p tcp --dport 21 -m comment --comment "FTP:OUT:21" -j ACCEPT
        $IPT -t filter -A OUTPUT -o tun0 -p tcp --dport 20 -m comment --comment "FTP:OUT:20" -j ACCEPT

        # VPN :1194
        $IPT -t filter -A OUTPUT -p udp -m udp --dport 1194 -m comment --comment "VPN:OUT:1194:udp" -j ACCEPT

        echo "firewall started [OK]"
}

# fonction qui arrete le firewall
do_stop() {
        # Efface toutes les regles
        $IPT -t filter -F
        $IPT -t filter -X
        $IPT -t filter -Z
        $IPT -t nat -F
        $IPT -t nat -X
        $IPT -t nat -Z
        $IPT -t mangle -F
        $IPT -t mangle -X
        $IPT -t mangle -Z
        # remet la strategie
        $IPT -t filter -P INPUT ACCEPT
        $IPT -t filter -P OUTPUT ACCEPT
        $IPT -t filter -P FORWARD ACCEPT
        #
        echo "firewall stopped [OK]"
}

# fonction status firewall
do_status() {
        # affiche les regles en cours
        clear
        echo Status IPV4
        echo -----------------------------------------------
        $IPT -L -n -v
        echo
}
        case "$1" in
        start)
                do_start
                exit 0
                ;;
        stop)
                do_stop
                exit 0
                ;;
        restart)
                do_stop
                do_start
                exit 0
                ;;
        status)
                do_status
                exit 0
                ;;
        *)
                echo "Usage: /etc/init.d/firewall {start|stop|restart|status}"
                exit 1
                ;;
esac



Si tu as d'autres remarques à me faire sur mon jeux de règles n'hésite pas. ;-)

merci.gif

Hors ligne

#4 24-03-2020 21:47:25

raleur
Membre
Inscription : 03-10-2014

Re : [Résolu] IPTABLES - Problème configuration règles pour dnscrypt-proxy

1) La règle ICMP/ping est toujours aussi incohérente. ICMP != ping.
2) Si tu veux que tout ton trafic DNS passe par dnscrypt en TCP/443, il ne faut pas autoriser le port 53.
J'oubliais :
3) La règle du port 20 pour FTP ne sert à rien.

Dernière modification par raleur (24-03-2020 21:57:31)


Il vaut mieux montrer que raconter.

Hors ligne

Pied de page des forums