Iptables - Règle rejetée (DENY) alors qu'elle est paramétrée en ACCEPT

Tags: #<Tag:0x00007fb2833c9e88>

Bonjour,

Je suis bloqué depuis pas mal de temps sur un sujet qui ne me posait pas de problème jusqu’à maintenant.
Jusqu’à maintenant, j’utilisais Ubuntu pour mes serveurs. J’ai fais le choix de Debian. Peut-être y a-t-il une différence à ce niveau.

Ma règle doit autoriser le port tcp/8022 (pour du SSH) entre le serveur source et le serveur destination.
Les deux serveurs sont sur des sous-réseaux différents et passent donc par mon firewall.

La règle est la suivante :

$IPTABLES -N Cid5878X10596.0
$IPTABLES -A INPUT -p tcp -m tcp  -s 192.168.10.2   --dport 8022  -m state --state NEW  -j Cid5878X10596.0
$IPTABLES -A Cid5878X10596.0  -d 10.10.10.0/24   -j ACCEPT
$IPTABLES -A Cid5878X10596.0  -d 10.10.20.0/24   -j ACCEPT
$IPTABLES -A Cid5878X10596.0  -d 10.10.30.0/24   -j ACCEPT
$IPTABLES -A Cid5878X10596.0  -d 172.16.10.0/24   -j ACCEPT
$IPTABLES -A Cid5878X10596.0  -d 192.168.10.0/30   -j ACCEPT
$IPTABLES -N Cid5878X10596.1
$IPTABLES -A FORWARD -p tcp -m tcp  -s 192.168.10.2   --dport 8022  -m state --state NEW  -j Cid5878X10596.1
$IPTABLES -A Cid5878X10596.1  -d 10.10.10.0/24   -j ACCEPT
$IPTABLES -A Cid5878X10596.1  -d 10.10.20.0/24   -j ACCEPT
$IPTABLES -A Cid5878X10596.1  -d 10.10.30.0/24   -j ACCEPT
$IPTABLES -A Cid5878X10596.1  -d 172.16.10.0/24   -j ACCEPT
$IPTABLES -A Cid5878X10596.1  -d 192.168.10.0/30   -j ACCEPT


Feb 16 20:23:14 vm-inf-fw01 kernel: [35131.161249] RULE 17 -- DENY IN=ens19 OUT=ens20 MAC=XXXXX SRC=192.168.10.2 DST=10.10.10.11 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=3788 DF PROTO=TCP SPT=60832 DPT=8022 WINDOW=502 RES=0x00 ACK PSH URGP=0

J’ai bien pensé à un problème de flag TCP, mais je n’en ai jamais utilisé avant.

Où est-ce que j’ai loupé un truc ?

[MODIF] Pour générer mon fichier iptables, j’utilise fwbuilder. Je sais que c’est vieux, mais c’est bien commode.

Merci de votre aide.

Cordialement
François

Question bête, que te retourne la commande suivante ?

sysctl net.ipv4.ip_forward

Trois remarques préliminaires sur la forme, sans rapport direct avec le fond :

  • Le sujet est confus : écrire qu’une règle est rejetée n’a pas de sens, une règle rejette ou accepte et ce sont les paquets qui sont rejetés ou acceptés.

  • Pourquoi créer deux chaînes différentes contenant exactement les mêmes règles ?

  • Cela n’a guère de sens de traiter les mêmes destinations dans les chaînes INPUT et FORWARD puisque par définition ces deux chaînes traitent des paquets ayant des destination différentes. Si la destination est extérieure à la machine, les paquets
    passeront seulement par FORWARD et si elle est locale à la machine ils passeront seulement par la chaîne INPUT.

Sur le fond, ces règles ne traitent que les paquets classés dans l’état NEW créant une nouvelle connexion (qui ont normalement le drapeau SYN) alors que le paquet bloqué a des drapeaux différents ACK,PSH et devrait être classé dans l’état ESTABLISHED (s’il est reconnu comme appartenant à une connexion connue en cours) ou INVALID dans le cas contraire.

1
Je fais bien du forwarding.

J’ai fait d’autres tests avec d’autres flux.
J’ai le même problème en me connectant à un serveur Nextcloud qui est sur la même infra.
En creusant ligne à ligne mes logs, je constate que :

  • mon premier appel de mon PC arrive bien à mon reverse proxy (ACCEPT)
  • le flux suivant est bien redirigé vers mon serveur Nextcloud par le RP et le flux est ACCEPT
  • les flux suivants du RP vers le serveur Nextcloud sont DENY

La seule différence entre les deux c’est le flag TCP : les flags ACK sont rejetés. Les flux tagués SYN sont acceptés.

C’est sans doute cela le problème.
Mais je ne vois pas la cause.

Merci de votre aide

Merci,
Oui, je me suis mal exprimé.

Ce sont effectivement les paquets ACK qui sont bloqués.
J’ai du mal à comprendre pourquoi le premier paquet de A vers B est flagué SYN et que les suivants sont flagués ACK.
A quoi est-ce que cela est du ?
C’est la première fois que j’ai ce problème

C’est le protocole TCP qui fonctionne ainsi. D’autre part seul le premier paquet d’une connexion est classé dans l’état NEW, les suivants ont le drapeau ACK sont classés dans l’état ESTABLISHED. Tu as bien des règles pour accepter les paquets autres que dans l’état NEW ? Un paquet avec PSH contient des données, il arrive donc forcément après les trois premiers paquets établissant la connexion ( « 3-way handshake ») dont deux ont le drapeau ACK.

Je viens de modifier mon premier post pour indiquer que j’utilisais Firewall Builder pour générer mon fichier de log.
C’est vieux et plus suivi, mais bien commode. Est-ce que cela peut venir de là ?

Pour répondre à ta question je n’ai jamais géré l’état des paquets dans mes firewalls.

Merci de ton aide

Aucune idée, jamais utilisé ce logiciel. Il faudrait examiner le jeu de règles complet affiché par iptables-save.

Voici les règles :

# Generated by iptables-save v1.8.4 on Fri Feb 17 19:01:45 2023
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:Cid3200X6928.0 - [0:0]
:Cid3200X6928.1 - [0:0]
:Cid3200X6928.2 - [0:0]
:Cid3804X22804.0 - [0:0]
:Cid3848X20268.0 - [0:0]
:Cid4331X8040.0 - [0:0]
:Cid4475X22464.0 - [0:0]
:Cid4475X22464.1 - [0:0]
:Cid4475X22464.2 - [0:0]
:Cid4475X22464.3 - [0:0]
:Cid4475X22464.4 - [0:0]
:Cid5878X10596.0 - [0:0]
:Cid5878X10596.1 - [0:0]
:In_RULE_0 - [0:0]
:In_RULE_1 - [0:0]
:Out_RULE_1 - [0:0]
:RULE_12 - [0:0]
:RULE_13 - [0:0]
:RULE_14 - [0:0]
:RULE_15 - [0:0]
:RULE_16 - [0:0]
:RULE_17 - [0:0]
:RULE_2 - [0:0]
:RULE_3 - [0:0]
:RULE_5 - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 90.127.94.34/32 -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -s 10.10.10.1/32 -i ens18 -j In_RULE_0
-A INPUT -s 10.10.20.1/32 -i ens18 -j In_RULE_0
-A INPUT -s 10.10.30.1/32 -i ens18 -j In_RULE_0
-A INPUT -s 172.16.10.1/32 -i ens18 -j In_RULE_0
-A INPUT -s aaa.bbb.ccc.ddd/32 -i ens18 -j In_RULE_0
-A INPUT -s 192.168.10.1/32 -i ens18 -j In_RULE_0
-A INPUT -s 192.168.10.0/30 -i ens18 -j In_RULE_0
-A INPUT -i lo -m state --state NEW -j In_RULE_1
-A INPUT -d aaa.bbb.ccc.ddd/32 -p icmp -m icmp --icmp-type any -j RULE_2
-A INPUT -s 90.127.94.34/32 -d aaa.bbb.ccc.ddd/32 -p tcp -m tcp -m multiport --dports 22,8022 -m state --state NEW -j RULE_3
-A INPUT -p tcp -m tcp --dport 53 -m state --state NEW -j Cid3804X22804.0
-A INPUT -p udp -m udp --dport 53 -m state --state NEW -j Cid3804X22804.0
-A INPUT -p tcp -m tcp -m multiport --dports 80,443 -m state --state NEW -j Cid3848X20268.0
-A INPUT -d aaa.bbb.ccc.ddd/32 -p tcp -m tcp -m multiport --dports 53,43 -m state --state NEW -j Cid4475X22464.0
-A INPUT -d aaa.bbb.ccc.ddd/32 -p udp -m udp --dport 53 -m state --state NEW -j Cid4475X22464.0
-A INPUT -s 10.10.10.10/32 -d 10.10.20.0/24 -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -s 10.10.20.0/24 -d 10.10.30.0/24 -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp -m multiport --dports 80,443 -m state --state NEW -j Cid3200X6928.0
-A INPUT -s 192.168.10.2/32 -p tcp -m tcp --dport 8022 -m state --state NEW -j Cid5878X10596.0
-A INPUT -s 192.168.10.2/32 -d 192.168.10.1/32 -p tcp -m tcp --dport 10000 -m state --state NEW -j RULE_14
-A INPUT -p tcp -m tcp -j RULE_16
-A INPUT -j RULE_16
-A INPUT -j RULE_17
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.10.10.1/32 -i ens18 -j In_RULE_0
-A FORWARD -s 10.10.20.1/32 -i ens18 -j In_RULE_0
-A FORWARD -s 10.10.30.1/32 -i ens18 -j In_RULE_0
-A FORWARD -s 172.16.10.1/32 -i ens18 -j In_RULE_0
-A FORWARD -s aaa.bbb.ccc.ddd/32 -i ens18 -j In_RULE_0
-A FORWARD -s 192.168.10.1/32 -i ens18 -j In_RULE_0
-A FORWARD -s 192.168.10.0/30 -i ens18 -j In_RULE_0
-A FORWARD -p tcp -m tcp -m multiport --dports 53,43 -m state --state NEW -j Cid4475X22464.3
-A FORWARD -p udp -m udp --dport 53 -m state --state NEW -j Cid4475X22464.3
-A FORWARD -s 10.10.10.10/32 -d 10.10.20.0/24 -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
-A FORWARD -s 10.10.20.0/24 -d 10.10.30.0/24 -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT
-A FORWARD -p tcp -m tcp -m multiport --dports 80,443 -m state --state NEW -j Cid3200X6928.2
-A FORWARD -s 192.168.10.2/32 -p tcp -m tcp --dport 8022 -m state --state NEW -j Cid5878X10596.1
-A FORWARD -s 10.10.10.10/32 -d 10.10.20.10/32 -p tcp -m tcp --dport 8080 -m state --state NEW -j RULE_12
-A FORWARD -d 10.10.10.10/32 -p tcp -m tcp -m multiport --dports 80,443 -m state --state NEW -j RULE_13
-A FORWARD -d 192.168.10.2/32 -m state --state NEW -j RULE_15
-A FORWARD -j RULE_17
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -d 90.127.94.34/32 -p tcp -m tcp --sport 22 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -m state --state NEW -j Out_RULE_1
-A OUTPUT -d aaa.bbb.ccc.ddd/32 -p icmp -m icmp --icmp-type any -j RULE_2
-A OUTPUT -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp -m multiport --dports 80,443 -m state --state NEW -j RULE_5
-A OUTPUT -p tcp -m tcp -m multiport --dports 53,43 -m state --state NEW -j Cid4475X22464.1
-A OUTPUT -p udp -m udp --dport 53 -m state --state NEW -j Cid4475X22464.1
-A OUTPUT -s 10.10.20.0/24 -d 10.10.30.0/24 -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT
-A OUTPUT -p tcp -m tcp -m multiport --dports 80,443 -m state --state NEW -j Cid3200X6928.1
-A OUTPUT -d 10.10.10.10/32 -p tcp -m tcp -m multiport --dports 80,443 -m state --state NEW -j RULE_13
-A OUTPUT -d 192.168.10.2/32 -m state --state NEW -j RULE_15
-A OUTPUT -p tcp -m tcp -j Cid4331X8040.0
-A OUTPUT -d 10.10.10.1/32 -j RULE_16
-A OUTPUT -d 10.10.20.1/32 -j RULE_16
-A OUTPUT -d 10.10.30.1/32 -j RULE_16
-A OUTPUT -d 172.16.10.1/32 -j RULE_16
-A OUTPUT -d aaa.bbb.ccc.ddd/32 -j RULE_16
-A OUTPUT -d 192.168.10.1/32 -j RULE_16
-A OUTPUT -j RULE_17
-A Cid3200X6928.0 -s 10.10.10.0/24 -j ACCEPT
-A Cid3200X6928.0 -s 10.10.20.0/24 -j ACCEPT
-A Cid3200X6928.0 -s 10.10.30.0/24 -j ACCEPT
-A Cid3200X6928.0 -s 172.16.10.0/24 -j ACCEPT
-A Cid3200X6928.0 -s 192.168.10.0/30 -j ACCEPT
-A Cid3200X6928.1 -s 10.10.10.0/24 -j ACCEPT
-A Cid3200X6928.1 -s 10.10.20.0/24 -j ACCEPT
-A Cid3200X6928.1 -s 10.10.30.0/24 -j ACCEPT
-A Cid3200X6928.1 -s 172.16.10.0/24 -j ACCEPT
-A Cid3200X6928.1 -s 192.168.10.0/30 -j ACCEPT
-A Cid3200X6928.2 -s 10.10.10.0/24 -j ACCEPT
-A Cid3200X6928.2 -s 10.10.20.0/24 -j ACCEPT
-A Cid3200X6928.2 -s 10.10.30.0/24 -j ACCEPT
-A Cid3200X6928.2 -s 172.16.10.0/24 -j ACCEPT
-A Cid3200X6928.2 -s 192.168.10.0/30 -j ACCEPT
-A Cid3804X22804.0 -s 10.10.10.1/32 -j ACCEPT
-A Cid3804X22804.0 -s 10.10.20.1/32 -j ACCEPT
-A Cid3804X22804.0 -s 10.10.30.1/32 -j ACCEPT
-A Cid3804X22804.0 -s 172.16.10.1/32 -j ACCEPT
-A Cid3804X22804.0 -s aaa.bbb.ccc.ddd/32 -j ACCEPT
-A Cid3804X22804.0 -s 192.168.10.1/32 -j ACCEPT
-A Cid3848X20268.0 -s 10.10.10.1/32 -j RULE_5
-A Cid3848X20268.0 -s 10.10.20.1/32 -j RULE_5
-A Cid3848X20268.0 -s 10.10.30.1/32 -j RULE_5
-A Cid3848X20268.0 -s 172.16.10.1/32 -j RULE_5
-A Cid3848X20268.0 -s aaa.bbb.ccc.ddd/32 -j RULE_5
-A Cid3848X20268.0 -s 192.168.10.1/32 -j RULE_5
-A Cid4331X8040.0 -d 10.10.10.1/32 -j RULE_16
-A Cid4331X8040.0 -d 10.10.20.1/32 -j RULE_16
-A Cid4331X8040.0 -d 10.10.30.1/32 -j RULE_16
-A Cid4331X8040.0 -d 172.16.10.1/32 -j RULE_16
-A Cid4331X8040.0 -d aaa.bbb.ccc.ddd/32 -j RULE_16
-A Cid4331X8040.0 -d 192.168.10.1/32 -j RULE_16
-A Cid4475X22464.0 -s 10.10.10.0/24 -j ACCEPT
-A Cid4475X22464.0 -s 10.10.20.0/24 -j ACCEPT
-A Cid4475X22464.0 -s 10.10.30.0/24 -j ACCEPT
-A Cid4475X22464.0 -s 172.16.10.0/24 -j ACCEPT
-A Cid4475X22464.0 -s 192.168.10.0/30 -j ACCEPT
-A Cid4475X22464.1 -d 8.8.4.4/32 -j Cid4475X22464.2
-A Cid4475X22464.1 -d 8.8.8.8/32 -j Cid4475X22464.2
-A Cid4475X22464.1 -d 10.10.10.11/32 -j Cid4475X22464.2
-A Cid4475X22464.2 -s 10.10.10.0/24 -j ACCEPT
-A Cid4475X22464.2 -s 10.10.20.0/24 -j ACCEPT
-A Cid4475X22464.2 -s 10.10.30.0/24 -j ACCEPT
-A Cid4475X22464.2 -s 172.16.10.0/24 -j ACCEPT
-A Cid4475X22464.2 -s 192.168.10.0/30 -j ACCEPT
-A Cid4475X22464.3 -d 8.8.4.4/32 -j Cid4475X22464.4
-A Cid4475X22464.3 -d 8.8.8.8/32 -j Cid4475X22464.4
-A Cid4475X22464.3 -d 10.10.10.11/32 -j Cid4475X22464.4
-A Cid4475X22464.4 -s 10.10.10.0/24 -j ACCEPT
-A Cid4475X22464.4 -s 10.10.20.0/24 -j ACCEPT
-A Cid4475X22464.4 -s 10.10.30.0/24 -j ACCEPT
-A Cid4475X22464.4 -s 172.16.10.0/24 -j ACCEPT
-A Cid4475X22464.4 -s 192.168.10.0/30 -j ACCEPT
-A Cid5878X10596.0 -d 10.10.10.0/24 -j ACCEPT
-A Cid5878X10596.0 -d 10.10.20.0/24 -j ACCEPT
-A Cid5878X10596.0 -d 10.10.30.0/24 -j ACCEPT
-A Cid5878X10596.0 -d 172.16.10.0/24 -j ACCEPT
-A Cid5878X10596.0 -d 192.168.10.0/30 -j ACCEPT
-A Cid5878X10596.1 -d 10.10.10.0/24 -j ACCEPT
-A Cid5878X10596.1 -d 10.10.20.0/24 -j ACCEPT
-A Cid5878X10596.1 -d 10.10.30.0/24 -j ACCEPT
-A Cid5878X10596.1 -d 172.16.10.0/24 -j ACCEPT
-A Cid5878X10596.1 -d 192.168.10.0/30 -j ACCEPT
-A In_RULE_0 -j LOG --log-prefix "RULE 0 -- DENY " --log-level 6
-A In_RULE_0 -j DROP
-A In_RULE_1 -j LOG --log-prefix "RULE 1 -- ACCEPT " --log-level 6
-A In_RULE_1 -j ACCEPT
-A Out_RULE_1 -j LOG --log-prefix "RULE 1 -- ACCEPT " --log-level 6
-A Out_RULE_1 -j ACCEPT
-A RULE_12 -j LOG --log-prefix "RULE 12 -- ACCEPT " --log-level 6
-A RULE_12 -j ACCEPT
-A RULE_13 -j LOG --log-prefix "RULE 13 -- ACCEPT " --log-level 6
-A RULE_13 -j ACCEPT
-A RULE_14 -j LOG --log-prefix "RULE 14 -- ACCEPT " --log-level 6
-A RULE_14 -j ACCEPT
-A RULE_15 -j LOG --log-prefix "RULE 15 -- ACCEPT " --log-level 6
-A RULE_15 -j ACCEPT
-A RULE_16 -j LOG --log-prefix "RULE 16 -- REJECT " --log-level 6
-A RULE_16 -p tcp -m tcp -j REJECT --reject-with tcp-reset
-A RULE_16 -j REJECT --reject-with icmp-port-unreachable
-A RULE_17 -j LOG --log-prefix "RULE 17 -- DENY " --log-level 6
-A RULE_17 -j DROP
-A RULE_2 -j LOG --log-prefix "RULE 2 -- DENY " --log-level 6
-A RULE_2 -j DROP
-A RULE_3 -j LOG --log-prefix "RULE 3 -- ACCEPT " --log-level 6
-A RULE_3 -j ACCEPT
-A RULE_5 -j LOG --log-prefix "RULE 5 -- ACCEPT " --log-level 6
-A RULE_5 -j ACCEPT
COMMIT
# Completed on Fri Feb 17 19:01:45 2023
# Generated by iptables-save v1.8.4 on Fri Feb 17 19:01:45 2023
*nat
:PREROUTING ACCEPT [28986:2024999]
:INPUT ACCEPT [3:1280]
:OUTPUT ACCEPT [244:17641]
:POSTROUTING ACCEPT [4352:186193]
-A PREROUTING -d aaa.bbb.ccc.ddd/32 -p tcp -m tcp --dport 15062 -j DNAT --to-destination 192.168.10.2:15062
-A PREROUTING -d aaa.bbb.ccc.ddd/32 -p tcp -m tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.10.10.10
-A POSTROUTING -s 192.168.10.0/30 -o ens18 -j SNAT --to-source aaa.bbb.ccc.ddd
-A POSTROUTING -s 10.10.10.0/24 -o ens18 -j SNAT --to-source aaa.bbb.ccc.ddd
-A POSTROUTING -s 10.10.20.0/24 -o ens18 -j SNAT --to-source aaa.bbb.ccc.ddd
-A POSTROUTING -s 10.10.30.0/24 -o ens18 -j SNAT --to-source aaa.bbb.ccc.ddd
-A POSTROUTING -s 172.16.10.0/24 -o ens18 -j SNAT --to-source aaa.bbb.ccc.ddd
COMMIT
# Completed on Fri Feb 17 19:01:45 2023

J’ai juste masqué l’IP publique avec aa.bb.cc.dd
Je continue à chercher.
Merci encore de ton aide.

La première règle de chaînes accepte les paquets dans l’état ESTABLISHED que devrait avoir tout paquet TCP valide ayant le drapeau ACK, donc a priori les paquets bloqués sont invalides.
Le blocage de ces paquets a-t-il un impact opérationnel ?

Oui, puisqu’il bloque l’accès à la machine cible.

D’accord, je vais donc supposer que le retour de la commande est le suivant :

net.ipv4.ip_forward = 1

C’est exact

Après avoir vu certains posts d’autres forums sur un problème similaire, je viens de passer les règles qui posent problème en statefull et il semble que cela règle le problème.
Ce serait donc un problème de gestion d’état que le stateless ne prenait pas en compte.
Je vais reprendre mes règles et passer en statefull celles qui me posent problème.

Accessoirement, je pensais que le statefull était par défaut dans Iptables …

Je vous tiens au courant de la suite lundi
Bon week-end et merci encore de votre aide !
François

Bonjour,

Il semble que passer les règles en statefull règle le problème.
Depuis nos derniers échanges, je n’ai plus de soucis.

Merci de votre aide
Cordialement