Il faudrait vérifier le jeu de règles actif complet avec [mono]iptables-save[/mono].
Pour débugger, tu peux aussi ajouter une règle LOG avec préfixe unique avant chaque DROP/REJECT et en fin de la chaîne OUTPUT si sa politique par défaut est DROP, et examiner les paquets bloqués dans les logs du noyau.
Le traceroute ICMP (tel que tu l’utilises via la commande traceroute) n’est qu’une succession de requêtes PING (ICMP type 8 code 0) dont le champ TTL est égal à 1 pour le premier paquet puis est incrémenté de 1 à chaque trame suivante.
A ma connaissance, le traceroute standard des Unix envoie des paquets UDP par défaut, pas ICMP. C’est le traceroute de Windows (tracert) qui envoie des paquets ICMP echo (comme le ping).
D’autre part, la limite à un paquet par seconde risque de ne pas être suffisante, le traceroute n’attendant pas forcément un seconde entre chaque paquet.
Un truc bizarre quand j’active la règle “$IPTABLES -A OUTPUT -p udp -m udp --dport 33434:33523 -j ACCEPT” je n’ai plus l’erreur “Opération non permise” le traceroute basique fonctionne :
Par contre un traceroute --as-path-lookups mais un temps pas possible à m’afficher le résultat, de plus cela ne m’affiche pas les AS traversés…
Cela n’a rien de bizarre, cette règle est nécessaire pour autoriser les paquets UDP émis par le traceroute. D’après ton message initial elle était déjà présente et active, d’où mon étonnement.
Evidement. L’affichage de l’AS des adresses retournées nécessite de contacter d’autres services sur le réseau, traceroute n’ayant pas la liste exhaustive de tous les AS et de tous leurs blocs d’adresses (qui n’est pas figée). Je suppose que ça passe par des requêtes vers les serveurs Whois des différents registres internet régionaux (RIR : RIPE NCC, ARIN, APNIC, AfriNIC, LACNIC), en TCP sur le port 43.
Apparemment ce sont des règles ip6tables, pour les paquets IPv6 (:: est la notation compacte de l’adresse IPv6 indéfinie 0:0:0:0:0:0:0:0, ce serait 0.0.0.0 en IPv4).
Quelle est la valeur de la variable $IPTABLES ?
La machine a une connectivité IPv6 globale ?
Je ne suis pas sûr d’avoir tout compris de ce que tu fais…
En tout cas je viens de faire une capture de trafic de traceroute -A, il interroge bien un serveur Whois en TCPv4/43, whois.radb.net (198.108.0.18).
Que donne une requête whois vers le serveur interrogé par traceroute (du moins chez moi) ?
Si tu as ajouté des règles LOG pour enregistrer les paquets avant de les bloquer, que le traceroute -A ne fonctionne pas mais qu’il n’y a rien dans les logs du noyau, c’est forcément qu’il y a un défaut dans les règles iptables et/ou ip6tables. Sans connaître les jeux de règles actifs complets affichés par iptables-save et ip6tables-save, difficile d’en dire plus.
whois -h whois.radb.net 8.8.8.8 sans firewall !! Sinon cela ne passe pas : “Temps limite dépassé”…
route: 8.8.8.0/24
descr: Google
origin: AS15169
notify: radb-contact@google.com
mnt-by: MAINT-AS15169
changed: radb-contact@google.com 20140124
source: RADB
route: 8.0.0.0/9
descr: Proxy-registered route object
origin: AS3356
remarks: auto-generated route object
remarks: this next line gives the robot something to recognize
remarks: L'enfer, c'est les autres
remarks:
remarks: This route object is for a Level 3 customer route
remarks: which is being exported under this origin AS.
remarks:
remarks: This route object was created because no existing
remarks: route object with the same origin was found, and
remarks: since some Level 3 peers filter based on these objects
remarks: this route may be rejected if this object is not created.
remarks:
remarks: Please contact routing@Level3.net if you have any
remarks: questions regarding this object.
mnt-by: LEVEL3-MNT
changed: roy@Level3.net 20060203
source: LEVEL3
ip6tables-save
# Generated by ip6tables-save v1.4.14 on Wed Feb 5 14:57:04 2014
*mangle
:PREROUTING ACCEPT [24686:3676970]
:INPUT ACCEPT [24656:3674810]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [20088:3980224]
:POSTROUTING ACCEPT [20064:3978304]
COMMIT
# Completed on Wed Feb 5 14:57:04 2014
# Generated by ip6tables-save v1.4.14 on Wed Feb 5 14:57:04 2014
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:KEEP_STATE - [0:0]
:LOG_DROP_IN - [0:0]
:LOG_DROP_OUT - [0:0]
:SCAN_PORT - [0:0]
:SYN_FLOOD - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -j KEEP_STATE
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -s 2001:db8:3c4d:1::1/128 -i eth0 -j DROP
-A INPUT -s ::1/128 -i eth0 -j DROP
-A INPUT -d ::1/128 -i eth0 -j DROP
-A INPUT -d 2001:db8:3c4d:1::1/128 -p tcp -m tcp --dport 80 -m string --string "GET /w00tw00t" --algo bm --to 70 -j DROP
-A INPUT -d 2001:db8:3c4d:1::1/128 -p tcp -m tcp --dport 80 -m string --string "Host: 2001:db8:3c4d:1::1" --algo bm --to 700 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,PSH,URG -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,ACK FIN -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags PSH,ACK PSH -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags ACK,URG URG -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,PSH,URG FIN,PSH,URG -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j SCAN_PORT
-A INPUT -i eth0 -m pkttype --pkt-type broadcast -j SCAN_PORT
-A INPUT -i eth0 -p ipv6-icmp -m limit --limit 1/sec --limit-burst 1 -j ACCEPT
-A INPUT -p ipv6-icmp -m state --state INVALID -j DROP
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -i eth1.101 -j ACCEPT
-A INPUT -i eth1.201 -j ACCEPT
-A INPUT -d 2001:db8:3c4d:1::1/128 -i eth0 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -d 2001:db8:3c4d:1::1/128 -i eth0 -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -d 2001:db8:3c4d:1::1/128 -i eth0 -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT
-A INPUT -d 2001:db8:3c4d:1::1/128 -i eth0 -p udp -m state --state NEW -m udp --dport 9995 -j ACCEPT
-A INPUT -d 2001:db8:3c4d:1::1/128 -i eth0 -p udp -m state --state NEW -m udp --dport 9996 -j ACCEPT
-A INPUT -d 2001:db8:3c4d:1::1/128 -i eth0 -p udp -m state --state NEW -m udp --dport 9997 -j ACCEPT
-A INPUT -j LOG_DROP_IN
-A FORWARD -s ::1/128 -j DROP
-A FORWARD -d ::1/128 -j DROP
-A FORWARD -j DROP
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -j KEEP_STATE
-A OUTPUT -p ipv6-icmp -m state --state INVALID -j DROP
-A OUTPUT -p ipv6-icmp -j ACCEPT
-A OUTPUT -p udp -m udp --dport 33434:33523 -j ACCEPT
-A OUTPUT -o eth1.101 -j ACCEPT
-A OUTPUT -o eth1.201 -j ACCEPT
-A OUTPUT -d 2001:db8:3c4d:1::1/128 -o eth0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A OUTPUT -d 2001:db8:3c4d:1::1/128 -o eth0 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A OUTPUT -d 2001:db8:3c4d:1::1/128 -o eth0 -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A OUTPUT -d 2001:db8:3c4d:1::1/128 -o eth0 -p tcp -m state --state NEW -m tcp --dport 43 -j ACCEPT
-A OUTPUT -d 2001:db8:3c4d:1::1/128 -o eth0 -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A OUTPUT -d 2001:db8:3c4d:1::1/128 -o eth0 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A OUTPUT -d 2001:db8:3c4d:1::1/128 -o eth0 -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A OUTPUT -d 2001:db8:3c4d:1::1/128 -o eth0 -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m state --state NEW -m udp --dport 123 -j ACCEPT
-A OUTPUT -j LOG_DROP_OUT
-A KEEP_STATE -m state --state RELATED,ESTABLISHED -j ACCEPT
-A KEEP_STATE -m state --state INVALID -j DROP
-A LOG_DROP_IN -j LOG --log-prefix "[IPTABLES DROP IN] :"
-A LOG_DROP_IN -j DROP
-A LOG_DROP_OUT -j LOG --log-prefix "[IPTABLES DROP OUT] :"
-A LOG_DROP_OUT -j DROP
-A SCAN_PORT -j DROP
-A SYN_FLOOD -m limit --limit 100/sec --limit-burst 150 -j RETURN
-A SYN_FLOOD -j DROP
COMMIT
# Completed on Wed Feb 5 14:57:04 2014
whois.radb.net n’a qu’une adresse IPv4, ce sont donc les règles iptables qu’il faut examiner, pas les règles ip6tables.
Quelques remarques/questions néanmoins :
je suppose qu’eth0 est l’interface côté internet ?
je suppose que 2001:db8:3c4d:1::1 (préfixe réservé aux exemples et documentation) sert à maquiller l’adresse IPv6 globale réelle d’eth0 ?
les règles pour les ports TCP dans OUTPUT ont toutes la condition “-d 2001:db8:3c4d:1::1 -o eth0”, ce qui est illogique : cette destination locale n’est joignable que par l’interface de loopback lo, pas par eth0. Il ne faudrait pas plutôt “-s 2001:db8:3c4d:1::1” ?
[quote=“PascalHambourg”]whois.radb.net n’a qu’une adresse IPv4, ce sont donc les règles iptables qu’il faut examiner, pas les règles ip6tables.
[/quote]
OK voici le iptables-save ~ à ip6tables-save :
# Generated by iptables-save v1.4.14 on Wed Feb 5 14:43:25 2014
*mangle
:PREROUTING ACCEPT [571178]
:INPUT ACCEPT [571178]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [493212:140901270]
:POSTROUTING ACCEPT [493036:140890710]
COMMIT
# Completed on Wed Feb 5 14:43:25 2014
# Generated by iptables-save v1.4.14 on Wed Feb 5 14:43:25 2014
*nat
:PREROUTING ACCEPT [11767:1558779]
:INPUT ACCEPT [11380:1528186]
:OUTPUT ACCEPT [57693:4883497]
:POSTROUTING ACCEPT [57517:4872937]
COMMIT
# Completed on Wed Feb 5 14:43:25 2014
# Generated by iptables-save v1.4.14 on Wed Feb 5 14:43:25 2014
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:KEEP_STATE - [0:0]
:SCAN_PORT - [0:0]
:SYN_FLOOD - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -j KEEP_STATE
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -p tcp -m tcp --tcp-option 64 -j DROP
-A INPUT -p tcp -m tcp --tcp-option 128 -j DROP
-A INPUT -f -j DROP
-A INPUT -s XXX.XXX.XXX.XXX/32 -i eth0 -j DROP
-A INPUT -s 127.0.0.0/8 -i eth0 -j DROP
-A INPUT -d 127.0.0.0/8 -i eth0 -j DROP
-A INPUT -d XXX.XXX.XXX.XXX/32 -p tcp -m tcp --dport 80 -m string --string "GET /w00tw00t" --algo bm --to 70 -j DROP
-A INPUT -d XXX.XXX.XXX.XXX/32 -p tcp -m tcp --dport 80 -m string --string "Host: XXX.XXX.XXX.XXX" --algo bm --to 700 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,PSH,URG -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,ACK FIN -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags PSH,ACK PSH -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags ACK,URG URG -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,PSH,URG FIN,PSH,URG -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j SCAN_PORT
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j SCAN_PORT
-A INPUT -i eth0 -m pkttype --pkt-type broadcast -j SCAN_PORT
-A INPUT -i eth0 -p icmp -m limit --limit 1/sec --limit-burst 1 -j ACCEPT
-A INPUT -p icmp -f -j DROP
-A INPUT -p icmp -m state --state INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec --limit-burst 1 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i eth1.101 -j ACCEPT
-A INPUT -i eth1.201 -j ACCEPT
-A INPUT -d XXX.XXX.XXX.XXX/32 -i eth0 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -d XXX.XXX.XXX.XXX/32 -i eth0 -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -d XXX.XXX.XXX.XXX/32 -i eth0 -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT
-A INPUT -d XXX.XXX.XXX.XXX/32 -i eth0 -p udp -m state --state NEW -m udp --dport 9995 -j ACCEPT
-A INPUT -d XXX.XXX.XXX.XXX/32 -i eth0 -p udp -m state --state NEW -m udp --dport 9996 -j ACCEPT
-A INPUT -d XXX.XXX.XXX.XXX/32 -i eth0 -p udp -m state --state NEW -m udp --dport 9997 -j ACCEPT
-A INPUT -j DROP
-A FORWARD -s 127.0.0.0/8 -j DROP
-A FORWARD -d 127.0.0.0/8 -j DROP
-A FORWARD -j DROP
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -j KEEP_STATE
-A OUTPUT -p icmp -m state --state INVALID -j DROP
-A OUTPUT -p icmp -m icmp --icmp-type 0 -m limit --limit 1/sec --limit-burst 1 -j ACCEPT
-A OUTPUT -p icmp -m icmp --icmp-type 3 -j DROP
-A OUTPUT -p icmp -m icmp --icmp-type 11 -j DROP
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -p udp -m udp --dport 33434:33523 -j ACCEPT
-A OUTPUT -o eth1.101 -j ACCEPT
-A OUTPUT -o eth1.201 -j ACCEPT
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -o eth0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -o eth0 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -o eth0 -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -o eth0 -p tcp -m state --state NEW -m tcp --dport 43 -j ACCEPT
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -o eth0 -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -o eth0 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -o eth0 -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A OUTPUT -d XXX.XXX.XXX.XXX/32 -o eth0 -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A OUTPUT -o eth0 -p udp -m state --state NEW -m udp --dport 123 -j ACCEPT
-A OUTPUT -j DROP
-A KEEP_STATE -m state --state RELATED,ESTABLISHED -j ACCEPT
-A KEEP_STATE -m state --state INVALID -j DROP
-A SCAN_PORT -j DROP
-A SYN_FLOOD -m limit --limit 100/sec --limit-burst 150 -j RETURN
-A SYN_FLOOD -j DROP
COMMIT
# Completed on Wed Feb 5 14:43:25 2014
Oui, eth0 = WAN
Oui (Idem pour XXX.XXX.XXX.XXX pour iptables-save)
Alors une erreur de ma part en fait… Sur la machine il y avait une adresse IP failover (que je n’utilise plus) et j’avais fais exprès de “forcer/vérifier” que l’IP Fail soit utilisé et sorte bien vers l’interface WAN …
Donc à présent que je n’ai plus d’IP failover, que me conseilles-tu sur la configuration ?