Effectuer des actions sur un serveur qui a été géré par un autre n’est souvent pas chose facile : il est très compliqué de savoir ce qui a été fait avant et pourquoi ça ne fonctionne pas.
Récemment, pour prouver qu’un certificat X.509 permettait de mettre en œuvre TLS, j’ai dû configurer Apache avec ce certificat. C’est une opération plutôt simple, surtout que la plupart des distributions proposent un fichier de configuration « SSL » où il ne reste qu’à modifier les chemins vers la clé privée, la clé publique et l’éventuel certificat intermédiaire.
Après quelques configurations qui ne fonctionnent pas, pour cause de «Connection refused», alors que tout semble être correct, j’entreprends des vérifications plus poussées. Apache écoute-t-il sur le port 443 ? Oui. Le trafic IPv4 ou IPv6 arrive-t-il bien sur le port 443 du serveur ? Oui. La configuration réseau est-elle correcte ? Oui. « iptables » contient-il des règles qui pourraient bloquer le trafic sur le port 443 ? Aucune règle présente dans « iptables », et l’action par défaut est « ACCEPT ».
De plus, ce qui est encore plus étrange, c’est que bien qu’un accès soit totalement impossible depuis l’extérieur du serveur, un accès local fonctionne parfaitement.
Comment est-ce possible alors que « iptables » est vide ? Totalement vide ? Non, car une irréductible table de « iptables » est passée inaperçue : la table NAT.
C’est après avoir passé une bonne vingtaine de minutes à chercher pourquoi ça ne fonctionnait pas, que je suis tombé sur la table NAT qui redirigeait le port 443 sur un autre port … Du coup, voici une commande qui va permettre de lister vraiment toutes les règles de toutes les tables mise en place dans « iptables » :
for t in filter nat mangle raw security ; do echo -e "##########\nTable $t\n##########" ; iptables -t $t -L -n ; done
Et voici la même commande pour IPv6 :
for t in filter mangle raw security ; do echo -e "##########\nTable $t\n##########" ; ip6tables -t $t -L -n ; done
Finalement, après avoir supprimé cette règle de redirection de port dans la table NAT, tout fonctionne correctement.


