Redirection de port, phénomène bizarre [contourné, inexpliqué]

Demande d'aide : c'est ici.
Répondre
Avatar de l’utilisateur
franb
Membre
Membre
Messages : 106
Inscription : 04 nov. 2017, 09:41
Status : Hors-ligne

Le problème, je veux rediriger le port 40000 arrivant sur 192.168.160.1 vers 192.168.160.7
Interface réseau:

Code : Tout sélectionner

br0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        inet 192.168.160.1  netmask 255.255.255.0  broadcast 192.168.160.255
        inet6 2a01.....6d62  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::201:c0ff:fe07:6d62  prefixlen 64  scopeid 0x20<link>
        ether 00:01:c0:07:6d:62  txqueuelen 1000  (Ethernet)
        RX packets 109676766  bytes 15444620616 (14.3 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 79676789  bytes 23951614669 (22.3 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:efff:febb:62c4  prefixlen 64  scopeid 0x20<link>
        ether 02:42:ef:bb:62:c4  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 15  bytes 1346 (1.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:01:c0:07:6d:63  txqueuelen 1000  (Ethernet)
        RX packets 22909166  bytes 6668343053 (6.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 15581737  bytes 5059051478 (4.7 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:01:c0:07:6d:62  txqueuelen 1000  (Ethernet)
        RX packets 88745091  bytes 10763627673 (10.0 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 64459605  bytes 19228198320 (17.9 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Boucle locale)
        RX packets 3553728  bytes 723400916 (689.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3553728  bytes 723400916 (689.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

brctl show br0
bridge name	bridge id		STP enabled	interfaces
br0		8000.0001c0076d62	no		eth0
							eth1
Règles iptables:

Code : Tout sélectionner

# Generated by xtables-save v1.8.2 on Fri Oct  7 17:04:11 2022
*filter
:INPUT ACCEPT [146935:11643751]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [110835:10020589]
:f2b-sshd - [0:0]
:f2b-postfix-sasl - [0:0]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-USER - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:f2b-dovecot - [0:0]
-A INPUT -s 195.178.120.188/32 -j DROP
-A INPUT -p tcp -m multiport --dports 110,995,143,993,587,465,4190 -j f2b-dovecot
-A INPUT -p tcp -m multiport --dports 25,465,587,143,993,110,995 -j f2b-postfix-sasl
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 40000 -j ACCEPT
-A f2b-sshd -s 212.87.251.118/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 117.102.113.50/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 20.70.152.170/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 61.7.142.185/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -j RETURN
-A f2b-postfix-sasl -s 5.34.207.246/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -s 5.34.207.23/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -s 212.70.149.68/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -s 212.70.149.22/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -j RETURN
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-USER -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A f2b-dovecot -j RETURN
COMMIT
# Completed on Fri Oct  7 17:04:12 2022
# Generated by xtables-save v1.8.2 on Fri Oct  7 17:04:12 2022
*nat
:PREROUTING ACCEPT [73162:5518454]
:INPUT ACCEPT [69303:5262980]
:POSTROUTING ACCEPT [1775:126976]
:OUTPUT ACCEPT [1775:126976]
:DOCKER - [0:0]
-A PREROUTING -i br0 -p tcp -m tcp --dport 40000 -j DNAT --to-destination 192.168.160.7:40000
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 40000 -j MASQUERADE
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Fri Oct  7 17:04:12 2022

echo "1" > /proc/sys/net/ipv4/ip_forward
Le lecteur attentif remarquera que le bridge est en mode promiscuous par

Code : Tout sélectionner

ip link set br0 promisc on
Dans ces conditions, tout marche bien, la redirection fonctionne. En revanche, si je met

Code : Tout sélectionner

ip link set br0 promisc off
la redirection ne marche plus. Bon là je ne comprends pas. (Pascal une explication?)

Pour compléter, si je rajoute une redirection pour le port 40001 avec les règles de la table nat comme suit:

Code : Tout sélectionner

# Completed on Fri Oct  7 17:34:01 2022
# Generated by xtables-save v1.8.2 on Fri Oct  7 17:34:01 2022
*nat
:PREROUTING ACCEPT [129024:9755434]
:INPUT ACCEPT [121474:9236437]
:POSTROUTING ACCEPT [2388:174873]
:OUTPUT ACCEPT [2390:174993]
:DOCKER - [0:0]
-A PREROUTING -i br0 -p tcp -m tcp --dport 40001 -j DNAT --to-destination 192.168.160.7:40001
-A PREROUTING -i br0 -p tcp -m tcp --dport 40000 -j DNAT --to-destination 192.168.160.7:40000
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 40001 -j MASQUERADE
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 40000 -j MASQUERADE
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Fri Oct  7 17:34:01 2022
Alors la redirection vers 40000 fonctionne mais pas celle vers le port 40001.

Mes pensées émues à celui qui a une explication (j'espère bcp sur Pascal!)
PascalHambourg
Contributeur
Contributeur
Messages : 876
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

franb a écrit : 07 oct. 2022, 17:09 la redirection ne marche plus.
Je ne ferai pas d'exception pour toi, donc voici ma critique fétiche : cette phrase ne contient aucune information utile.
Et non je n'ai pas d'idée, il va falloir tracer dans tous les sens (iptables LOG, tcpdump sur toutes les interfaces impliquées... attention au mode promiscuous des programmes de capture de trafic).
Questions :
D'où viennent les connexions à rediriger ?
Le module br_netfilter est chargé avec /proc/sys/net/bridge/bridge-nf-call-iptables=1 ? Si oui, le NAT peut être capricieux sur du trafic ponté.
Avatar de l’utilisateur
franb
Membre
Membre
Messages : 106
Inscription : 04 nov. 2017, 09:41
Status : Hors-ligne

[message long, mais j'ai réfléchi et avancé en répondant aux questions, il substite la question du promiscuous, voir à la fin]

Ce n'est pas forcément une réponse précise que j'attendais mais des questions à me poser et une direction... (vu que je patauge et m'embrouille). Les questions permettent d'avoir une vision plus claire (je dis à mes élèves: Poser la bonne question c'est y répondre, mais là je patauge qd même, même si je vois plus précisement où est le pbm, voir plus bas en gras mon erreur stupide, et le pbm réel à la fin)
Sur la structure du réseau, l'interface eth1 du bridge est UP mais non branchée finalement (j'avais mis en place ce bridge pour connecter directement la machine à la box et avoir une ligne à 1 Gb/s et mettre eth1 sur un switch à 100Mb/s pour la suite du réseau, où je mettais les autres machines et l'imprimante, le DHCP ne passait pas donc j'ai laissé tomber sans chercher, mais c'est (peut être) un autre problème).
Bref: machine visée -> une interface filaire, machine routeur ---> un bridge br0 associant eth0 up et branchée et eth1 up et non branchéee, WAN ---> freebox en mode réseau assurant le DHCP sur le réseau.

Code : Tout sélectionner

      [WAN] <---> | eth0, pontée avec eth1 .   
    v-----------> | machine en DMZ
machine           |
visée

root@hermes:/home/francois# ip route show
default via 192.168.160.254 dev br0 
169.254.0.0/16 dev br0 scope link metric 1000 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
192.168.160.0/24 dev br0 proto kernel scope link src 192.168.160.1 
root@hermes:/home/francois# 

Machine visée 192.168.160.7
Routeur: 192.168.160.1
(règles iptables complètes à la fin)
Trafic routé où tout se passe bien:

Code : Tout sélectionner

machine routeur:
listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes
09:05:10.825869 IP 129.199.129.80.48390 > 192.168.160.7.40000: Flags [S], seq 1176844576, win 64240, options [mss 1460,sackOK,TS val 1618973149 ecr 0,nop,wscale 7], length 0
09:05:10.826029 IP 192.168.160.1.48390 > 192.168.160.7.40000: Flags [S], seq 1176844576, win 64240, options [mss 1460,sackOK,TS val 1618973149 ecr 0,nop,wscale 7], length 0
09:05:10.826975 IP 192.168.160.7.40000 > 129.199.129.80.48390: Flags [S.], seq 2202264238, ack 1176844577, win 65160, options [mss 1460,sackOK,TS val 1169284080 ecr 1618973149,nop,wscale 7], length 0
09:05:10.827062 IP 192.168.160.1.40000 > 129.199.129.80.48390: Flags [S.], seq 2202264238, ack 1176844577, win 65160, options [mss 1460,sackOK,TS val 1169284080 ecr 1618973149,nop,wscale 7], length 0
09:05:10.829805 IP 129.199.129.80.48390 > 192.168.160.7.40000: Flags [.], ack 1, win 502, options [nop,nop,TS val 1618973153 ecr 1169284080], length 0
09:05:10.829891 IP 192.168.160.1.48390 > 192.168.160.7.40000: Flags [.], ack 2202264239, win 502, options [nop,nop,TS val 1618973153 ecr 1169284080], length 0
09:05:10.833371 IP 192.168.160.7.40000 > 129.199.129.80.48390: Flags [P.], seq 1:8, ack 1, win 510, options [nop,nop,TS val 1169284086 ecr 1618973153], length 7
09:05:10.833445 IP 192.168.160.1.40000 > 129.199.129.80.48390: Flags [P.], seq 1:8, ack 1, win 510, options [nop,nop,TS val 1169284086 ecr 1618973153], length 7
09:05:10.833947 IP 192.168.160.7.40000 > 129.199.129.80.48390: Flags [FP.], seq 8:32, ack 1, win 510, options [nop,nop,TS val 1169284087 ecr 1618973153], length 24
09:05:10.834016 IP 192.168.160.1.40000 > 129.199.129.80.48390: Flags [FP.], seq 8:32, ack 1, win 510, options [nop,nop,TS val 1169284087 ecr 1618973153], length 24
09:05:10.836230 IP 129.199.129.80.48390 > 192.168.160.7.40000: Flags [.], ack 8, win 502, options [nop,nop,TS val 1618973160 ecr 1169284086], length 0
09:05:10.836306 IP 192.168.160.1.48390 > 192.168.160.7.40000: Flags [.], ack 8, win 502, options [nop,nop,TS val 1618973160 ecr 1169284086], length 0
09:05:10.877186 IP 129.199.129.80.48390 > 192.168.160.7.40000: Flags [.], ack 33, win 502, options [nop,nop,TS val 1618973201 ecr 1169284087], length 0
09:05:10.877293 IP 192.168.160.1.48390 > 192.168.160.7.40000: Flags [.], ack 33, win 502, options [nop,nop,TS val 1618973201 ecr 1169284087], length 0
09:05:26.595760 IP 129.199.129.80.48390 > 192.168.160.7.40000: Flags [F.], seq 1, ack 33, win 502, options [nop,nop,TS val 1618988919 ecr 1169284087], length 0
09:05:26.595895 IP 192.168.160.1.48390 > 192.168.160.7.40000: Flags [F.], seq 0, ack 33, win 502, options [nop,nop,TS val 1618988919 ecr 1169284087], length 0
09:05:26.596754 IP 192.168.160.7.40000 > 129.199.129.80.48390: Flags [.], ack 2, win 510, options [nop,nop,TS val 1169299849 ecr 1618988919], length 0
09:05:26.596882 IP 192.168.160.1.40000 > 129.199.129.80.48390: Flags [.], ack 2, win 510, options [nop,nop,TS val 1169299849 ecr 1618988919], length 0

machine visée:
9:05:10.823267 IP 192.168.160.1.48390 > 192.168.160.7.40000: Flags [S], seq 1176844576, win 64240, options [mss 1460,sackOK,TS val 1618973149 ecr 0,nop,wscale 7], length 0
09:05:10.823332 IP 192.168.160.7.40000 > 192.168.160.1.48390: Flags [S.], seq 2202264238, ack 1176844577, win 65160, options [mss 1460,sackOK,TS val 1169284080 ecr 1618973149,nop,wscale 7], length 0
09:05:10.826900 IP 192.168.160.1.48390 > 192.168.160.7.40000: Flags [.], ack 1, win 502, options [nop,nop,TS val 1618973153 ecr 1169284080], length 0
09:05:10.829737 IP 192.168.160.7.40000 > 192.168.160.1.48390: Flags [P.], seq 1:8, ack 1, win 510, options [nop,nop,TS val 1169284086 ecr 1618973153], length 7
09:05:10.830298 IP 192.168.160.7.40000 > 192.168.160.1.48390: Flags [FP.], seq 8:32, ack 1, win 510, options [nop,nop,TS val 1169284087 ecr 1618973153], length 24
09:05:10.833159 IP 192.168.160.1.48390 > 192.168.160.7.40000: Flags [.], ack 8, win 502, options [nop,nop,TS val 1618973160 ecr 1169284086], length 0
09:05:10.874326 IP 192.168.160.1.48390 > 192.168.160.7.40000: Flags [.], ack 33, win 502, options [nop,nop,TS val 1618973201 ecr 1169284087], length 0
09:05:26.592852 IP 192.168.160.1.48390 > 192.168.160.7.40000: Flags [F.], seq 1, ack 33, win 502, options [nop,nop,TS val 1618988919 ecr 1169284087], length 0
09:05:26.592907 IP 192.168.160.7.40000 > 192.168.160.1.48390: Flags [.], ack 2, win 510, options [nop,nop,TS val 1169299849 ecr 1618988919], length 0
Module:

Code : Tout sélectionner

root@hermes:/home/francois# lsmod | grep filter
br_netfilter           24576  0
bridge                126976  1 br_netfilter
root@hermes:/home/francois# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1
root@hermes:/home/francois# 
Un nouvel essai en enlevant le mode promiscuous ne change rien (!?!)
Essai en rajoutant le port 40003

Code : Tout sélectionner

root@hermes:/home/francois# iptables-save 
# Generated by xtables-save v1.8.2 on Sat Oct  8 09:26:01 2022
*filter
*nat
:PREROUTING ACCEPT [1912499:144008717]
:INPUT ACCEPT [1787241:135839485]
:POSTROUTING ACCEPT [24663:1872429]
:OUTPUT ACCEPT [24665:1872549]
:DOCKER - [0:0]
-A PREROUTING -i br0 -p tcp -m tcp --dport 40003 -j DNAT --to-destination 192.168.160.7:40003
-A PREROUTING -i br0 -p tcp -m tcp --dport 40000 -j DNAT --to-destination 192.168.160.7:40000
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 40003 -j MASQUERADE
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 40000 -j MASQUERADE
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Sat Oct  8 09:26:01 2022
Le trafic obtenu sur la machine routeur:

Code : Tout sélectionner

09:25:41.013075 IP 129.199.129.80.56844 > 192.168.160.7.40003: Flags [S], seq 256311811, win 64240, options [mss 1460,sackOK,TS val 1620203336 ecr 0,nop,wscale 7], length 0
09:25:41.013010 IP 129.199.129.80.56844 > 192.168.160.7.40003: Flags [S], seq 256311811, win 64240, options [mss 1460,sackOK,TS val 1620203336 ecr 0,nop,wscale 7], length 0
09:25:42.037385 IP 129.199.129.80.56844 > 192.168.160.7.40003: Flags [S], seq 256311811, win 64240, options [mss 1460,sackOK,TS val 1620204361 ecr 0,nop,wscale 7], length 0
09:25:42.037315 IP 129.199.129.80.56844 > 192.168.160.7.40003: Flags [S], seq 256311811, win 64240, options [mss 1460,sackOK,TS val 1620204361 ecr 0,nop,wscale 7], length 0
09:25:44.053437 IP 129.199.129.80.56844 > 192.168.160.7.40003: Flags [S], seq 256311811, win 64240, options [mss 1460,sackOK,TS val 1620206377 ecr 0,nop,wscale 7], length 0
09:25:44.053374 IP 129.199.129.80.56844 > 192.168.160.7.40003: Flags [S], seq 256311811, win 64240, options [mss 1460,sackOK,TS val 1620206377 ecr 0,nop,wscale 7], length 0
09:25:48.309290 IP 129.199.129.80.56844 > 192.168.160.7.40003: Flags [S], seq 256311811, win 64240, options [mss 1460,sackOK,TS val 1620210633 ecr 0,nop,wscale 7], length 0
^C
tcpdump sur la machine visée ne donne aucun trafic

Essai en jouant sur /bridge-nf-call-iptables (ne change rien)

Code : Tout sélectionner

root@hermes:/home/francois# echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
root@hermes:/home/francois# tcpdump -n -i br0 port 40003
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes
09:32:44.117860 IP 129.199.129.80.53422 > 192.168.160.1.40003: Flags [S], seq 534824854, win 64240, options [mss 1460,sackOK,TS val 1620626441 ecr 0,nop,wscale 7], length 0
09:32:45.141202 IP 129.199.129.80.53422 > 192.168.160.1.40003: Flags [S], seq 534824854, win 64240, options [mss 1460,sackOK,TS val 1620627465 ecr 0,nop,wscale 7], length 0
09:32:47.157224 IP 129.199.129.80.53422 > 192.168.160.1.40003: Flags [S], seq 534824854, win 64240, options [mss 1460,sackOK,TS val 1620629481 ecr 0,nop,wscale 7], length 0
09:32:51.225203 IP 129.199.129.80.53422 > 192.168.160.1.40003: Flags [S], seq 534824854, win 64240, options [mss 1460,sackOK,TS val 1620633549 ecr 0,nop,wscale 7], length 0
^C
4 packets captured
5 packets received by filter
0 packets dropped by kernel
root@hermes:/home/francois# echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
root@hermes:/home/francois# tcpdump -n -i br0 port 40003
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes
09:33:08.038640 IP 129.199.129.80.40444 > 192.168.160.7.40003: Flags [S], seq 3461557266, win 64240, options [mss 1460,sackOK,TS val 1620650362 ecr 0,nop,wscale 7], length 0
09:33:08.038552 IP 129.199.129.80.40444 > 192.168.160.7.40003: Flags [S], seq 3461557266, win 64240, options [mss 1460,sackOK,TS val 1620650362 ecr 0,nop,wscale 7], length 0
09:33:09.045222 IP 129.199.129.80.40444 > 192.168.160.7.40003: Flags [S], seq 3461557266, win 64240, options [mss 1460,sackOK,TS val 1620651369 ecr 0,nop,wscale 7], length 0
09:33:09.045146 IP 129.199.129.80.40444 > 192.168.160.7.40003: Flags [S], seq 3461557266, win 64240, options [mss 1460,sackOK,TS val 1620651369 ecr 0,nop,wscale 7], length 0
Log des règles:

Code : Tout sélectionner

root@hermes:/home/francois# iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 2026K packets, 152M bytes)
 pkts bytes target     prot opt in     out     source               destination         
   29  1740 DNAT       tcp  --  br0    any     anywhere             anywhere             tcp dpt:40003 to:192.168.160.7:40003
   10   600 DNAT       tcp  --  br0    any     anywhere             anywhere             tcp dpt:40002 to:192.168.160.7:22
   50  2992 DNAT       tcp  --  br0    any     anywhere             anywhere             tcp dpt:40000 to:192.168.160.7:40000
2022K  152M DOCKER     all  --  any    any     anywhere             anywhere             ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT 1893K packets, 144M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 26195 packets, 1988K bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  tcp  --  any    any     anywhere             challenge            tcp dpt:40003
    0     0 MASQUERADE  tcp  --  any    any     anywhere             challenge            tcp dpt:ssh
   34  2032 MASQUERADE  tcp  --  any    any     anywhere             challenge            tcp dpt:40000
    0     0 MASQUERADE  all  --  any    !docker0  172.17.0.0/16        anywhere            

Chain OUTPUT (policy ACCEPT 26197 packets, 1988K bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DOCKER     all  --  any    any     anywhere            !127.0.0.0/8          ADDRTYPE match dst-type LOCAL

Chain DOCKER (2 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 RETURN     all  --  docker0 any     anywhere             anywhere            
root@hermes:/home/francois# 
L'intéressant est
0 0 MASQUERADE tcp -- any any anywhere challenge tcp dpt:40003
34 2032 MASQUERADE tcp -- any any anywhere challenge tcp dpt:40000
qui montre que c'est la règle POSTROUTING induisant le masquerade qui ne s'applique pas (mais on verrait les paquets sur la machine visée) ou qui n'est pas atteinte (ce qui me parait plus conforme à ce que je vois).
Etat exact des règles iptables à ce moment là:

Code : Tout sélectionner

root@hermes:/home/francois# iptables-save 
# Generated by xtables-save v1.8.2 on Sat Oct  8 09:34:21 2022
*filter
:INPUT ACCEPT [4438230:440577898]
:FORWARD DROP [57:3420]
:OUTPUT ACCEPT [2868635:1765158018]
:f2b-sshd - [0:0]
:f2b-postfix-sasl - [0:0]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-USER - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:f2b-dovecot - [0:0]
-A INPUT -s 195.178.120.188/32 -j DROP
-A INPUT -p tcp -m multiport --dports 110,995,143,993,587,465,4190 -j f2b-dovecot
-A INPUT -p tcp -m multiport --dports 25,465,587,143,993,110,995 -j f2b-postfix-sasl
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 40000 -j ACCEPT
-A f2b-sshd -s 157.230.98.148/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 117.102.113.50/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 20.70.152.170/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 61.7.142.185/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -j RETURN
-A f2b-postfix-sasl -s 5.34.207.246/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -s 5.34.207.23/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -s 212.70.149.22/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -j RETURN
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-USER -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A f2b-dovecot -j RETURN
COMMIT
# Completed on Sat Oct  8 09:34:21 2022
# Generated by xtables-save v1.8.2 on Sat Oct  8 09:34:21 2022
*nat
:PREROUTING ACCEPT [1927319:145113612]
:INPUT ACCEPT [1801030:136878875]
:POSTROUTING ACCEPT [24784:1881501]
:OUTPUT ACCEPT [24786:1881621]
:DOCKER - [0:0]
-A PREROUTING -i br0 -p tcp -m tcp --dport 40003 -j DNAT --to-destination 192.168.160.7:40003
-A PREROUTING -i br0 -p tcp -m tcp --dport 40002 -j DNAT --to-destination 192.168.160.7:22
-A PREROUTING -i br0 -p tcp -m tcp --dport 40000 -j DNAT --to-destination 192.168.160.7:40000
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 40003 -j MASQUERADE
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 22 -j MASQUERADE
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 40000 -j MASQUERADE
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Sat Oct  8 09:34:21 2022
Modules chargés me paraissant en rapport:

Code : Tout sélectionner

Module                  Size  Used by
xt_REDIRECT            16384  0
xt_state               16384  0
nfnetlink_queue        20480  0
nfnetlink_log          20480  0
bluetooth             425984  0
drbg                   28672  1
ansi_cprng             16384  0
ecdh_generic           32768  1 bluetooth
xt_nat                 16384  1
xt_tcpudp              16384  1
veth                   24576  0
ipt_MASQUERADE         16384  1
nf_conntrack_netlink    36864  0
xfrm_user              36864  1
xfrm_algo              16384  1 xfrm_user
nft_chain_nat_ipv4     16384  4
nf_nat_ipv4            16384  2 nft_chain_nat_ipv4,ipt_MASQUERADE
xt_addrtype            16384  1
xt_conntrack           16384  1
nf_nat                 28672  3 xt_nat,nf_nat_ipv4,xt_REDIRECT
nf_conntrack          106496  8 xt_state,xt_nat,ipt_MASQUERADE,nf_conntrack_netlink,xt_conntrack,nf_nat_ipv4,xt_REDIRECT,nf_nat
nf_defrag_ipv6         16384  1 nf_conntrack
nf_defrag_ipv4         16384  1 nf_conntrack
libcrc32c              16384  2 nf_conntrack,nf_nat
br_netfilter           24576  0
overlay                86016  0
ipt_REJECT             16384  1
nf_reject_ipv4         16384  1 ipt_REJECT
xt_multiport           16384  1
nft_compat             20480  29
nft_counter            16384  38
nf_tables              98304  116 nft_chain_nat_ipv4,nft_compat,nft_counter
nfnetlink              16384  6 nfnetlink_log,nft_compat,nfnetlink_queue,nf_conntrack_netlink,nf_tables
tun                    36864  0
bridge                126976  1 br_netfilter
stp                    16384  1 bridge
llc                    16384  2 bridge,stp
[...]
[...]
ip_tables              20480  0
x_tables               24576  11 xt_state,xt_multiport,ipt_REJECT,xt_nat,ip_tables,nft_compat,xt_tcpudp,ipt_MASQUERADE,xt_addrtype,xt_conntrack,xt_REDIRECT
[...]
Constatation: Le mode promiscuous ne change plus rien. Or c'est en le mettant à on que j'ai réussi à faire router le port 40000 une première fois. On dirait que la règle PREROUTING est appliqué et que netfilter paume le paquet qui n'atteint pas le POSTROUTING.

Hum, ce serait un problème de FORWARDING (de mémoire PREROUTING -> FORWARD -> POSTROUTING...

Exact je suis un crétin, je rajoute le ACCEPT pour le port 40003

Code : Tout sélectionner

-A FORWARD -p tcp -m tcp --dport 40003 -j ACCEPT
Je teste. et là c'est l'apothéose:
La redirection marche, mais que si je met le mode promiscuous à on, où si je trace le trafic avec tcpdump (qui met l'interface en mode promiscuous). Donc la partie stupide du pbm (règle FORWARD manquante est correcte), mais le coeur du pbm est toujours là.
PascalHambourg
Contributeur
Contributeur
Messages : 876
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

Je t'avais dit de ne pas mettre l'interface en promiscuous en lançant tcpdump (-p).
Il faudrait aussi faire une capture sur l'interface ethernet, et afficher l'en-tête ethernet (-e) pour voir les adresses MAC.
Des règles LOG dans chaque chaîne iptables seraient aussi un plus. Et supprimer tout filtrage dans la chaîne filter.
Est-ce que tu peux tester en supprimant le pont et en utilisant directement l'interface ethernet ? Ou au moins sans le module br_netfilter ?
Avatar de l’utilisateur
franb
Membre
Membre
Messages : 106
Inscription : 04 nov. 2017, 09:41
Status : Hors-ligne

[message avant ta réponse, si je fais tcpdump sur l'interface, tout se passe bien parce que je pense qu'elle est en promiscuous, je regarde la suite de ta réponse, mais je répondrais ce soir suite à demande conjugale)

Donc en clair, si je résume, avec le mode promiscuous tout est bien routé, sans rien n'est routé, la machine cible ne reçoit aucun paquet que ce soit sur le port 40000 ou 40003. La même démarche que si dessus montre

Code : Tout sélectionner

root@hermes:/home/francois# ip link set br0 promisc off

root@hermes:/home/francois# iptables -t nat -L -v | grep 40003
   14   840 DNAT       tcp  --  br0    any     anywhere             anywhere             tcp dpt:40003 to:192.168.160.7:40003
    2   120 MASQUERADE  tcp  --  any    any     anywhere             challenge            tcp dpt:40003
# essai de connection (echec)
root@hermes:/home/francois# iptables -t nat -L -v | grep 40003
   16   960 DNAT       tcp  --  br0    any     anywhere             anywhere             tcp dpt:40003 to:192.168.160.7:40003
    2   120 MASQUERADE  tcp  --  any    any     anywhere             challenge            tcp dpt:40003

root@hermes:/home/francois# ip link set br0 promisc on
# essai de connection (succès)
root@hermes:/home/francois# iptables -t nat -L -v | grep 40003
   17  1020 DNAT       tcp  --  br0    any     anywhere             anywhere             tcp dpt:40003 to:192.168.160.7:40003
    3   180 MASQUERADE  tcp  --  any    any     anywhere             challenge            tcp dpt:40003

root@hermes:/home/francois# iptables  -L -v | grep 40003
    3   180 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:40003
# essai de connection (echec)
root@hermes:/home/francois# iptables  -L -v | grep 40003
    4   240 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:40003
root@hermes:/home/francois# ip link set br0 promisc off
# essai de connection (echec)
root@hermes:/home/francois# iptables  -L -v | grep 40003
    4   240 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:40003
root@hermes:/home/francois# 
Donc la règle FORWARD n'est pas appliquée avec le promiscuous à off

les règles iptables à cet instant sont

Code : Tout sélectionner

# Generated by xtables-save v1.8.2 on Sat Oct  8 10:58:49 2022
*filter
:INPUT ACCEPT [41195:2956460]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [36802:40397936]
:f2b-sshd - [0:0]
:f2b-postfix-sasl - [0:0]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-USER - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:f2b-dovecot - [0:0]
-A INPUT -s 195.178.120.188/32 -j DROP
-A INPUT -p tcp -m multiport --dports 110,995,143,993,587,465,4190 -j f2b-dovecot
-A INPUT -p tcp -m multiport --dports 25,465,587,143,993,110,995 -j f2b-postfix-sasl
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 40000 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 40003 -j ACCEPT
-A f2b-sshd -s 68.183.20.198/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 117.102.113.50/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 20.70.152.170/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 61.7.142.185/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -j RETURN
-A f2b-postfix-sasl -s 5.34.207.23/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -s 5.34.207.246/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -s 212.70.149.68/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -s 212.70.149.22/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -j RETURN
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-USER -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A f2b-dovecot -j RETURN
COMMIT
# Completed on Sat Oct  8 10:58:49 2022
# Generated by xtables-save v1.8.2 on Sat Oct  8 10:58:49 2022
*nat
:PREROUTING ACCEPT [16294:1224174]
:INPUT ACCEPT [15040:1143025]
:POSTROUTING ACCEPT [250:19018]
:OUTPUT ACCEPT [250:19018]
:DOCKER - [0:0]
-A PREROUTING -i br0 -p tcp -m tcp --dport 40003 -j DNAT --to-destination 192.168.160.7:40003
-A PREROUTING -i br0 -p tcp -m tcp --dport 40002 -j DNAT --to-destination 192.168.160.7:22
-A PREROUTING -i br0 -p tcp -m tcp --dport 40000 -j DNAT --to-destination 192.168.160.7:40000
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 40003 -j MASQUERADE
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 22 -j MASQUERADE
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 40000 -j MASQUERADE
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Sat Oct  8 10:58:49 2022
Avatar de l’utilisateur
franb
Membre
Membre
Messages : 106
Inscription : 04 nov. 2017, 09:41
Status : Hors-ligne

Bon, je te confirme que,

1) modulo le changement de br0 en eth1 (interface branchée), la redirection fonctionne.
2) après un reboot, le problème persiste, OK avec mode promiscuous nok sans
2) Je ne connaissais pas l'option -p, voilà ce que ça donne
18:56:48.352137 IP 129.199.129.80.33006 > 192.168.160.7.40003: Flags [S], seq 3795929742, win 64240, options [mss 1460,sackOK,TS val 1654470676 ecr 0,nop,wscale 7], length 0
18:56:49.365000 IP 129.199.129.80.33006 > 192.168.160.7.40003: Flags [S], seq 3795929742, win 64240, options [mss 1460,sackOK,TS val 1654471689 ecr 0,nop,wscale 7], length 0
18:56:51.381009 IP 129.199.129.80.33006 > 192.168.160.7.40003: Flags [S], seq 3795929742, win 64240, options [mss 1460,sackOK,TS val 1654473705 ecr 0,nop,wscale 7], length 0
^C
La règle -A FORWARD -p tcp -m tcp --dport 40003 -j ACCEPT n'est pas prise en compte quand le mode promiscuous.
Je met la police FORWARD à ACCEPT, ça ne change rien, je vire les règles FORWARD, également, j'avais ça à cet instant

Code : Tout sélectionner

# Generated by xtables-save v1.8.2 on Sat Oct  8 19:06:05 2022
*filter
:INPUT ACCEPT [669:51427]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [535:44592]
:f2b-sshd - [0:0]
:f2b-postfix-sasl - [0:0]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-USER - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:f2b-dovecot - [0:0]
-A INPUT -s 195.178.120.188/32 -j DROP
-A INPUT -p tcp -m multiport --dports 110,995,143,993,587,465,4190 -j f2b-dovecot
-A INPUT -p tcp -m multiport --dports 25,465,587,143,993,110,995 -j f2b-postfix-sasl
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A f2b-sshd -s 61.177.173.43/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 210.183.21.48/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 20.70.152.170/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 61.7.142.185/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -j RETURN
-A f2b-postfix-sasl -s 5.34.207.23/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -s 212.70.149.22/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -s 212.70.149.68/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-postfix-sasl -j RETURN
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-USER -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A f2b-dovecot -j RETURN
COMMIT
# Completed on Sat Oct  8 19:06:05 2022
# Generated by xtables-save v1.8.2 on Sat Oct  8 19:06:05 2022
*nat
:PREROUTING ACCEPT [418:31435]
:INPUT ACCEPT [389:29569]
:POSTROUTING ACCEPT [8:547]
:OUTPUT ACCEPT [8:547]
:DOCKER - [0:0]
-A PREROUTING -i br0 -p tcp -m tcp --dport 40000 -j DNAT --to-destination 192.168.160.7:40000
-A PREROUTING -i br0 -p tcp -m tcp --dport 40001 -j DNAT --to-destination 192.168.160.7:40001
-A PREROUTING -i br0 -p tcp -m tcp --dport 40002 -j DNAT --to-destination 192.168.160.7:40002
-A PREROUTING -i br0 -p tcp -m tcp --dport 40003 -j DNAT --to-destination 192.168.160.7:40003
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 40000 -j MASQUERADE
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 40001 -j MASQUERADE
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 40002 -j MASQUERADE
-A POSTROUTING -d 192.168.160.7/32 -p tcp -m tcp --dport 40003 -j MASQUERADE
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A DOCKER -i docker0 -j RETURN
COMMIT
# Completed on Sat Oct  8 19:06:05 2022
en revanche, en faisant

Code : Tout sélectionner

echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
Là tout marche bien y compris en mode non promiscuous.
Bref:
-> Ça vient du pont, br0 remplacé par eth1 enlève le souci.
-> C'est reproductible sur une machine fraichement démarrée
-> Je confirme l'influence du mode promiscuous sur br0
-> Cela bloque au niveau «filter» même si la police par defaut de FORWARD est ACCEPT
-> faire echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables règle le problème
-> Je ne comprend toujours pas
PascalHambourg
Contributeur
Contributeur
Messages : 876
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

Moi non plus je ne comprends pas tout mais je pressens que c'est lié au chemin que les paquets prennent selon qu'iptables est activé sur les paquets pontés et le mode promiscuous est présent.

Pour essayer d'en savoir plus, j'avais suggéré de lancer tcpdump avec -e pour afficher les adresses MAC et aussi sur l'interface ethernet physique pour voir les paquets quand ils entrent et sortent et pas seulement quand ils sont vus par le pont car des opérations de NAT IP et MAC peuvent avoir lieu entre les deux, et aussi d'instrumenter toutes les chaînes de toutes les tables d'iptables pour voir le cheminement précis des paquets.
Avatar de l’utilisateur
franb
Membre
Membre
Messages : 106
Inscription : 04 nov. 2017, 09:41
Status : Hors-ligne

Mode procsimuous on:

Code : Tout sélectionner

09:29:49.232316 68:a3:78:80:5f:68 > 00:0e:c6:d0:ee:66, ethertype IPv4 (0x0800), length 74: 129.199.129.80.53990 > 192.168.160.7.40003: Flags [S], seq 3408867648, win 64240, options [mss 1460,sackOK,TS val 1706851556 ecr 0,nop,wscale 7], length 0
09:29:49.232518 00:01:c0:07:6d:62 > 00:0e:c6:d0:ee:66, ethertype IPv4 (0x0800), length 74: 192.168.160.1.53990 > 192.168.160.7.40003: Flags [S], seq 3408867648, win 64240, options [mss 1460,sackOK,TS val 1706851556 ecr 0,nop,wscale 7], length 0
09:29:49.233455 00:0e:c6:d0:ee:66 > 68:a3:78:80:5f:68, ethertype IPv4 (0x0800), length 74: 192.168.160.7.40003 > 129.199.129.80.53990: Flags [S.], seq 2237769233, ack 3408867649, win 65160, options [mss 1460,sackOK,TS val 1257162486 ecr 1706851556,nop,wscale 7], length 0
09:29:49.233579 00:01:c0:07:6d:62 > 68:a3:78:80:5f:68, ethertype IPv4 (0x0800), length 74: 192.168.160.1.40003 > 129.199.129.80.53990: Flags [S.], seq 2237769233, ack 3408867649, win 65160, options [mss 1460,sackOK,TS val 1257162486 ecr 1706851556,nop,wscale 7], length 0
09:29:49.236100 68:a3:78:80:5f:68 > 00:0e:c6:d0:ee:66, ethertype IPv4 (0x0800), length 66: 129.199.129.80.53990 > 192.168.160.7.40003: Flags [.], ack 1, win 502, options [nop,nop,TS val 1706851560 ecr 1257162486], length 0
09:29:49.236217 00:01:c0:07:6d:62 > 00:0e:c6:d0:ee:66, ethertype IPv4 (0x0800), length 66: 192.168.160.1.53990 > 192.168.160.7.40003: Flags [.], ack 2237769234, win 502, options [nop,nop,TS val 1706851560 ecr 1257162486], length 0
mode promiscuous off

Code : Tout sélectionner

09:32:09.594752 00:01:c0:07:6d:62 > 00:0e:c6:d0:ee:66, ethertype IPv4 (0x0800), length 74: 129.199.129.80.34124 > 192.168.160.7.40003: Flags [S], seq 583438231, win 64240, options [mss 1460,sackOK,TS val 1706991918 ecr 0,nop,wscale 7], length 0
09:32:10.612894 00:01:c0:07:6d:62 > 00:0e:c6:d0:ee:66, ethertype IPv4 (0x0800), length 74: 129.199.129.80.34124 > 192.168.160.7.40003: Flags [S], seq 583438231, win 64240, options [mss 1460,sackOK,TS val 1706992937 ecr 0,nop,wscale 7], length 0
09:32:12.628918 00:01:c0:07:6d:62 > 00:0e:c6:d0:ee:66, ethertype IPv4 (0x0800), length 74: 129.199.129.80.34124 > 192.168.160.7.40003: Flags [S], seq 583438231, win 64240, options [mss 1460,sackOK,TS val 1706994953 ecr 0,nop,wscale 7], length 0
ls adresses arp sont correctes et si je fais le tcpdump sur l'interface physique, j'ai les paquets sortants uniquement pour promiscuous à on

Code : Tout sélectionner

oot@hermes:/home/francois# tcpdump -i eth1 -p -n -e port 40003
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
09:38:32.149929 68:a3:78:80:5f:68 > 00:01:c0:07:6d:62, ethertype IPv4 (0x0800), length 74: 129.199.129.80.51920 > 192.168.160.1.40003: Flags [S], seq 3175939228, win 64240, options [mss 1460,sackOK,TS val 1707374474 ecr 0,nop,wscale 7], length 0
09:38:33.176738 68:a3:78:80:5f:68 > 00:01:c0:07:6d:62, ethertype IPv4 (0x0800), length 74: 129.199.129.80.51920 > 192.168.160.1.40003: Flags [S], seq 3175939228, win 64240, options [mss 1460,sackOK,TS val 1707375501 ecr 0,nop,wscale 7], length 0
09:38:35.188658 68:a3:78:80:5f:68 > 00:01:c0:07:6d:62, ethertype IPv4 (0x0800), length 74: 129.199.129.80.51920 > 192.168.160.1.40003: Flags [S], seq 3175939228, win 64240, options [mss 1460,sackOK,TS val 1707377513 ecr 0,nop,wscale 7], length 0
^C
3 packets captured
3 packets received by filter
0 packets dropped by kernel
root@hermes:/home/francois# ip link set br0 promisc on
root@hermes:/home/francois# tcpdump -i eth1 -p -n -e port 40003
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes
09:38:50.364396 68:a3:78:80:5f:68 > 00:01:c0:07:6d:62, ethertype IPv4 (0x0800), length 74: 129.199.129.80.41064 > 192.168.160.1.40003: Flags [S], seq 1411262770, win 64240, options [mss 1460,sackOK,TS val 1707392688 ecr 0,nop,wscale 7], length 0
09:38:50.364608 00:01:c0:07:6d:62 > 00:0e:c6:d0:ee:66, ethertype IPv4 (0x0800), length 74: 192.168.160.1.41064 > 192.168.160.7.40003: Flags [S], seq 1411262770, win 64240, options [mss 1460,sackOK,TS val 1707392688 ecr 0,nop,wscale 7], length 0
09:38:50.365450 00:0e:c6:d0:ee:66 > 00:01:c0:07:6d:62, ethertype IPv4 (0x0800), length 74: 192.168.160.7.40003 > 192.168.160.1.41064: Flags [S.], seq 758089704, ack 1411262771, win 65160, options [mss 1460,sackOK,TS val 1257703618 ecr 1707392688,nop,wscale 7], length 0
09:38:50.365642 00:01:c0:07:6d:62 > 68:a3:78:80:5f:68, ethertype IPv4 (0x0800), length 74: 192.168.160.1.40003 > 129.199.129.80.41064: Flags [S.], seq 758089704, ack 1411262771, win 65160, options [mss 1460,sackOK,TS val 1257703618 ecr 1707392688,nop,wscale 7], length 0
09:38:50.367956 68:a3:78:80:5f:68 > 00:01:c0:07:6d:62, ethertype IPv4 (0x0800), length 66: 129.199.129.80.41064 > 192.168.160.1.40003: Flags [.], ack 1, win 502, options [nop,nop,TS val 1707392692 ecr 1257703618], length 0
09:38:50.368064 00:01:c0:07:6d:62 > 00:0e:c6:d0:ee:66, ethertype IPv4 (0x0800), length 66: 192.168.160.1.41064 > 192.168.160.7.40003: Flags [.], ack 1, win 502, options [nop,nop,TS val 1707392692 ecr 1257703618], length 0
^C
6 packets captured
7 packets received by filter
J'essaye de voir ce que tu veux dire par instrumenter... J'ai également mes des logs sur les chaines

mode promiscuous à off:

Code : Tout sélectionner

Oct  9 10:08:50 hermes kernel: [55281.657410] PRE:IN=br0 OUT= PHYSIN=eth1 MAC=00:01:c0:07:6d:62:68:a3:78:80:5f:68:08:00 SRC=129.199.129.80 DST=192.168.160.1 LEN=60 TOS=0x00 PREC=0x00 TTL=53 ID=41655 DF PROTO=TCP SPT=33732 DPT=40003 WINDOW=64240 RES=0x00 SYN URGP=0 
Oct  9 10:08:51 hermes kernel: [55282.661837] PRE:IN=br0 OUT= PHYSIN=eth1 MAC=00:01:c0:07:6d:62:68:a3:78:80:5f:68:08:00 SRC=129.199.129.80 DST=192.168.160.1 LEN=60 TOS=0x00 PREC=0x00 TTL=53 ID=41656 DF PROTO=TCP SPT=33732 DPT=40003 WINDOW=64240 RES=0x00 SYN URGP=0 
Oct  9 10:08:53 hermes kernel: [55284.677812] PRE:IN=br0 OUT= PHYSIN=eth1 MAC=00:01:c0:07:6d:62:68:a3:78:80:5f:68:08:00 SRC=129.199.129.80 DST=192.168.160.1 LEN=60 TOS=0x00 PREC=0x00 TTL=53 ID=41657 DF PROTO=TCP SPT=33732 DPT=40003 WINDOW=64240 RES=0x00 SYN URGP=0 
mode promiscuous à on:

Code : Tout sélectionner

Oct  9 10:07:23 hermes kernel: [55194.135993] PRE:IN=br0 OUT= PHYSIN=eth1 MAC=00:01:c0:07:6d:62:68:a3:78:80:5f:68:08:00 SRC=129.199.129.80 DST=192.168.160.1 LEN=60 TOS=0x00 PREC=0x00 TTL=53 ID=14386 DF PROTO=TCP SPT=48276 DPT=40003 WINDOW=64240 RES=0x00 SYN URGP=0 
Oct  9 10:07:23 hermes kernel: [55194.136065] FOR:IN=br0 OUT=br0 PHYSIN=eth1 MAC=00:0e:c6:d0:ee:66:68:a3:78:80:5f:68:08:00 SRC=129.199.129.80 DST=192.168.160.7 LEN=60 TOS=0x00 PREC=0x00 TTL=52 ID=14386 DF PROTO=TCP SPT=48276 DPT=40003 WINDOW=64240 RES=0x00 SYN URGP=0 
Oct  9 10:07:23 hermes kernel: [55194.136091] POST:IN= OUT=br0 PHYSIN=eth1 SRC=129.199.129.80 DST=192.168.160.7 LEN=60 TOS=0x00 PREC=0x00 TTL=52 ID=14386 DF PROTO=TCP SPT=48276 DPT=40003 WINDOW=64240 RES=0x00 SYN URGP=0 
Oct  9 10:07:23 hermes kernel: [55194.136957] FOR:IN=br0 OUT=br0 PHYSIN=eth1 MAC=68:a3:78:80:5f:68:00:0e:c6:d0:ee:66:08:00 SRC=192.168.160.7 DST=129.199.129.80 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=40003 DPT=48276 WINDOW=65160 RES=0x00 ACK SYN URGP=0 
Oct  9 10:07:23 hermes kernel: [55194.139591] FOR:IN=br0 OUT=br0 PHYSIN=eth1 MAC=00:0e:c6:d0:ee:66:68:a3:78:80:5f:68:08:00 SRC=129.199.129.80 DST=192.168.160.7 LEN=52 TOS=0x00 PREC=0x00 TTL=52 ID=14387 DF PROTO=TCP SPT=48276 DPT=40003 WINDOW=502 RES=0x00 ACK URGP=0 
Oct  9 10:07:24 hermes kernel: [55195.387076] FOR:IN=br0 OUT=br0 PHYSIN=eth1 MAC=00:0e:c6:d0:ee:66:68:a3:78:80:5f:68:08:00 SRC=129.199.129.80 DST=192.168.160.7 LEN=57 TOS=0x00 PREC=0x00 TTL=52 ID=14388 DF PROTO=TCP SPT=48276 DPT=40003 WINDOW=502 RES=0x00 ACK PSH URGP=0 
Oct  9 10:07:24 hermes kernel: [55195.388014] FOR:IN=br0 OUT=br0 PHYSIN=eth1 MAC=68:a3:78:80:5f:68:00:0e:c6:d0:ee:66:08:00 SRC=192.168.160.7 DST=129.199.129.80 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=28696 DF PROTO=TCP SPT=40003 DPT=48276 WINDOW=510 RES=0x00 ACK URGP=0 
Oct  9 10:07:24 hermes kernel: [55195.388145] FOR:IN=br0 OUT=br0 PHYSIN=eth1 MAC=68:a3:78:80:5f:68:00:0e:c6:d0:ee:66:08:00 SRC=192.168.160.7 DST=129.199.129.80 LEN=57 TOS=0x00 PREC=0x00 TTL=63 ID=28697 DF PROTO=TCP SPT=40003 DPT=48276 WINDOW=510 RES=0x00 ACK PSH URGP=0 
Oct  9 10:07:24 hermes kernel: [55195.390975] FOR:IN=br0 OUT=br0 PHYSIN=eth1 MAC=00:0e:c6:d0:ee:66:68:a3:78:80:5f:68:08:00 SRC=129.199.129.80 DST=192.168.160.7 LEN=52 TOS=0x00 PREC=0x00 TTL=52 ID=14389 DF PROTO=TCP SPT=48276 DPT=40003 WINDOW=502 RES=0x00 ACK URGP=0 
Oct  9 10:07:25 hermes kernel: [55196.465763] FOR:IN=br0 OUT=br0 PHYSIN=eth1 MAC=00:0e:c6:d0:ee:66:68:a3:78:80:5f:68:08:00 SRC=129.199.129.80 DST=192.168.160.7 LEN=52 TOS=0x00 PREC=0x00 TTL=52 ID=14390 DF PROTO=TCP SPT=48276 DPT=40003 WINDOW=502 RES=0x00 ACK FIN URGP=0 
Oct  9 10:07:25 hermes kernel: [55196.468060] FOR:IN=br0 OUT=br0 PHYSIN=eth1 MAC=68:a3:78:80:5f:68:00:0e:c6:d0:ee:66:08:00 SRC=192.168.160.7 DST=129.199.129.80 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=28698 DF PROTO=TCP SPT=40003 DPT=48276 WINDOW=510 RES=0x00 ACK FIN URGP=0 
Oct  9 10:07:25 hermes kernel: [55196.470536] FOR:IN=br0 OUT=br0 PHYSIN=eth1 MAC=00:0e:c6:d0:ee:66:68:a3:78:80:5f:68:08:00 SRC=129.199.129.80 DST=192.168.160.7 LEN=52 TOS=0x00 PREC=0x00 TTL=52 ID=14391 DF PROTO=TCP SPT=48276 DPT=40003 WINDOW=502 RES=0x00 ACK URGP=0 
Seules les règles PREROUTING sont appliquées sans le promiscuous
Avatar de l’utilisateur
franb
Membre
Membre
Messages : 106
Inscription : 04 nov. 2017, 09:41
Status : Hors-ligne

rajout au message précédent: J'ai regardé sur internet avec les mots clefs FORWARD br0 promiscuous, il semble que beaucoup mettent les interfaces bridge mais également celles genre vnet en mode promiscuous pour avoir du routage.

De plus
root@hermes:/home/francois# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP mode DEFAULT group default qlen 1000
link/ether 00:01:c0:07:6d:62 brd ff:ff:ff:ff:ff:ff
3: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN mode DEFAULT group default qlen 1000
link/ether 00:01:c0:07:6d:63 brd ff:ff:ff:ff:ff:ff
4: wlx000df0630d5a: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:0d:f0:63:0d:5a brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 00:01:c0:07:6d:62 brd ff:ff:ff:ff:ff:ff
7: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
link/ether 02:42:f0:86:48:07 brd ff:ff:ff:ff:ff:ff
montre que les interfaces physiques, elles, restent en mode normal. Je patauge toujours mais je me demande ce que signifie exactement mode promiscuous pour br0... [ma femme me dit que ça sera plus clair après avoir ranger la cave (où sont les ordis) ais j'ai un doute]
PascalHambourg
Contributeur
Contributeur
Messages : 876
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

J'ai combiné et réordonné les différentes traces et remplacé les adresses MAC et IP par des étiquettes pour la lisibilité.

Code : Tout sélectionner

br0: 192.168.160.1 00:01:c0:07:6d:62
eth1:              00:01:c0:07:6d:62

source: 129.199.129.80 68:a3:78:80:5f:68
target: 192.168.160.7  00:0e:c6:d0:ee:66
Avec br0 promisc on

Code : Tout sélectionner

eth1 [source_MAC] > [br0_MAC] [source_IP] > [br0_IP]
PRE: IN=br0 OUT= PHYSIN=eth1 MAC=[br0_MAC]:[source_MAC]:08:00 SRC=[source_IP] DST=[br0_IP]
(iptables DNAT a lieu ici)
br0  [source_MAC] > [target_MAC] [source_IP] > [target_IP]
FOR: IN=br0 OUT=br0 PHYSIN=eth1 MAC=[target_MAC]:[source_MAC]:08:00 SRC=[source_IP] DST=[target_IP]
POST:IN= OUT=br0 PHYSIN=eth1 SRC=[source_IP] DST=[target_IP]
(iptables MASQUERADE a lieu ici)
br0  [br0_MAC] > [target_MAC] [br0_IP]  > [target_IP]
eth1 [br0_MAC] > [target_MAC] [br0_IP]  > [target_IP]
(Note: dans l'en-tête MAC figurant dans les traces LOG d'iptables, l'adresse MAC destination est en premier et l'adresse MAC source en second)
On peut voir que DNAT ne modifie pas seulement l'adresse IP destination mais aussi l'adresse MAC destination. C'est nécessaire si le paquet est purement ponté.
Mais ici le paquet ne semble pas ponté mais routé. On le voit deux fois sur br0, avant et après routage. Je me serais attendu à ce qu'il soit ponté puisqu'après le DNAT son adresse MAC n'est plus celle de br0, mais c'est peut-être le promisc qui le fait router.

Pour info, un schéma du cheminement des paquets dans netfilter : https://upload.wikimedia.org/wikipedia/ ... t-flow.svg
Je ne sais pas dans quelle mesure il est encore d'actualité.

Avec br0 promisc off

Code : Tout sélectionner

eth1 [source_MAC] > [br0_MAC] [source_IP] > [br0_IP]
PRE: IN=br0 OUT= PHYSIN=eth1 MAC=[br0_MAC]:[source_MAC]:08:00 SRC=[source_IP] DST=[br0_IP]
(iptables DNAT a lieu ici)
br0  [br0_MAC] > [target_MAC] [source_IP] > [target_IP]
Ici c'est encore moins normal : après DNAT, l'adresse MAC source du paquet est aussi remplacée par celle de br0 alors que son adresse IP reste celle de la source puisque le paquet n'est pas encore passé par POSTROUTING et MASQUERADE.
Je soupçonne qu'ensuite le paquet est écarté parce qu'il a l'adresse MAC source du pont d'entrée.

Quelle version du noyau Linux utilises-tu ?
Utilises-tu iptables-legacy ou iptables-nft ?
Avatar de l’utilisateur
franb
Membre
Membre
Messages : 106
Inscription : 04 nov. 2017, 09:41
Status : Hors-ligne

Voilà... donc noyau 4.19 et iptables-nft

Code : Tout sélectionner

francois@hermes:~$ ls -l /etc/alternatives/iptables
lrwxrwxrwx 1 root root 22 juil. 18  2019 /etc/alternatives/iptables -> /usr/sbin/iptables-nft
francois@hermes:~$ dpkg -l | grep linux-image
ii  linux-image-4.19.0-5-686-pae 4.19.37-5                           i386         Linux 4.19 for modern PCs (signed)
ii  linux-image-686-pae          4.19+105                            i386         Linux for modern PCs (meta-package)
francois@hermes:~$ uname -r
4.19.0-5-686-pae
francois@hermes:~$ dpkg -l | grep iptables
ii  iptables                     1.8.2-4                             i386         administration tools for packet filtering and NAT
francois@hermes:~$ iptables -v
iptables v1.8.2 (nf_tables): no command specified
Try `iptables -h' or 'iptables --help' for more information.
francois@hermes:~$ ls -l  /sbin/iptables
lrwxrwxrwx 1 root root 26 juil. 18  2019 /sbin/iptables -> /etc/alternatives/iptables
francois@hermes:~$ 
PascalHambourg
Contributeur
Contributeur
Messages : 876
Inscription : 05 août 2016, 20:25
Status : Hors-ligne

Pas très à jour ton noyau 4.19.0-5, buster doit en être au 4.19.0-22 . Des noyaux 5.10 sont même disponibles dans buster-lts.

Si tu as du temps à perdre, ça pourrait valoir le coup de tester avec iptables-legacy.
Soit en utilisant explicitement iptables-legacy au lieu de iptables dans tes scripts (tous, y compris ceux de fail2ban, docker... il ne faut pas mélanger), soit en modifiant l'alternative avec

Code : Tout sélectionner

update-alternatives --config iptables
Avatar de l’utilisateur
franb
Membre
Membre
Messages : 106
Inscription : 04 nov. 2017, 09:41
Status : Hors-ligne

Bon, je n'ai vu aucune différence, même comportement. Pour le noyau, c'est exact, mais quand un noyau fonctionne bien, je ne cours pas après la mise à jour sauf raison explicite. Bon, j'ai supprimé le bridge en attendant, et là tout marche bien. Mais, même si j'ai affiné ma connaissance de tcpdump (option -p et -e que j'ignorais), la raison du pbm est toujours inconnue
Répondre