Problème avec Iptable et un paquet

Fermé
DoctorAngry Messages postés 159 Date d'inscription samedi 16 mars 2019 Statut Membre Dernière intervention 9 mars 2022 - Modifié le 28 oct. 2021 à 20:05
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 3 nov. 2021 à 17:58
Bonsoir,

J'ai configuré mon Iptable, tout allait bien.

Problème, j'ai voulu installer proftpd, mais cela n'a pas marché.

E: Impossible de récupérer http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian/pool/main/p/php7.3/php7.3_7.3.31-1~deb10u1_all.deb  Impossible de se connecter à ftp.igh.cnrs.fr:http :


Donc j'ai ouvert tous mes ports, et j'ai re-testé. Là ça a bien fonctionné.
Je voudrais savoir s'il y a un moyen de connaître précisément quel port je dois ouvrir pour pouvoir télécharger ce paquet ; ou un autre si jamais j'ai de nouveau le problème.
Je précise que mes ports 80, 443, 20 et 21 étaient ouverts. Le reste fermé.

Merci !

3 réponses

avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
Modifié le 29 oct. 2021 à 02:45
Bonjour,

Tout allait bien... jusqu'à la première connexion sortante, en HTTP.

Faut voir dans quel sens tu as ouvert ces ports, ce que tu as bloqué, si tu as autorisé/bloqué les paquets sortants, si tu as autorisé les réponses dans le sens inverse, ...
Nous ne sommes pas devins, merci de donner plus de détails (c'est-à-dire tes règles iptables).

Il n'est pas clair si tu veux autoriser les connexions pour un serveur HTTP(S) et FTP installé sur ton propre système, ou si tu veux filtrer les connexions sortantes de manière à autoriser uniquement le surf (HTTP/HTTPS) et le FTP vers d'autres serveurs.

Si c'est le second cas, tu te trompes... Un utilisateur peut utiliser le fait que tu autorises les ports 21/80/443 comme destination pour se connecter à un serveur quelconque (SSH, VPN, ...) qu'il aura mis sur le port 443 par exemple. Le port n'impose pas le protocole. Et puisque tu autorises les connexions sur le port 443, donc du TLS, l'utilisateur pourrait se connecter à un VPN de type TLS sur le port 443 et contourner tes restrictions. Même si tu fais de la DPI, tu verras du trafic TLS mais sans pouvoir dire si c'est du HTTP via TLS (HTTPS) ou autre-chose.

Je suspecte que tu as bloqué toutes les connexions entrantes, et autorisé les connexions entrantes à destination des ports 21/80/443 en pensant que cela permettrait aussi la communication avec des serveurs distants sur ces ports. C'est faux. Si tu inities une connexion depuis ton système vers un serveur distant sur le port 80, le port source des paquets sortants (ton ordinateur -> serveur distant) sera attribué aléatoirement (mais restera le même durant la communication). Or, c'est ce port source aléatoire qui deviendra le port de destination pour la réponse. C'est grâce à cela qu'il est possible de télécharger simultanément deux fichiers en HTTPS, parce que les deux flux se font à destination de deux ports différents de ton ordinateur (sans oublier qu'il y a sûrement un NAT entre les deux).
Cela signifie que la règle autorisant les INPUT sur le port de destination 80 est sans effet pour accepter les réponses d'une connexion vers un autre serveur sur le port 80. Il faut ajouter un règle pour autoriser les INPUT avec un port source 80, ou bien autoriser les INPUT avec état RELATED / ESTABLISHED.

Voir cette discussion :
https://superuser.com/questions/460621/iptables-firewall-only-allows-internet-traffic-if-source-port-of-80-is-allowed

Le plus simple est d'autoriser tous les paquets sortants, et autoriser les paquets entrants s'ils se rapportent à une connexion sortant déjà initialisée.

Je te recommande ce guide pour débuter :
https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands

Pour plus de détails :
https://www.digitalocean.com/community/tutorials/a-deep-dive-into-iptables-and-netfilter-architecture
https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html

Et un diagramme utile :
https://en.wikipedia.org/wiki/Netfilter#/media/File:Netfilter-packet-flow.svg
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 29 oct. 2021 à 12:34
Bonjour,

A priori il faut au moins que les ports sortants associés à FTP soient ouverts, à savoir :
  • le port 20 (pour les données FTP) ;
  • le port 21 (pour les commandes FTP).


Ensuite, si le serveur FTP est en mode passif, celui-ci ouvrira un port aléatoire (voir cette explication) et il faut bien évidemment que ton pare-feu te permette de t'y connecter. La plage des ports passifs est défini du côté du serveur FTP.

Note que la plupart des dépôts apt sont également accessibles via HTTP (port 80).

Ensuite, généralement, au niveau du pare-feu, on contrôle plutôt les ports de sa propre machine, plutôt que les ports auxquels on peut accéder vers une autre machine (voir ce tutoriel).

Bonne chance
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 3 nov. 2021 à 18:04
En complément, tu peux t'appuyer sur cette discussion pour configurer iptables de sorte à pouvoir accéder à un serveur ftp distant.

1) Assure-toi que le module
nf_conntrack_ftp
est chargé avec la commande
lsmod
. Si ça n'est pas le cas tu peux le charger avec
sudo modprobe nf_conntrack_ftp
. Le chargement de ce module au démarrage peut-être avec la commande :

sudo sysctl net.netfilter.nf_conntrack_helper=1


2) Ensuite on ajoute les règles
iptables
qui vont bien (tu peux dans le doute faire 2a et 2b)
2)a) Si le serveur FTP cible est actif :

sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 20 -j ACCEPT


2)b) Si le serveur FTP cible est passif il faut aussi ajouter :

sudo iptables -A INPUT -p tcp --dport 1024:65535 -m conntrack --ctstate RELATED -j ACCEPT


Bonne chance
0
Gafor Messages postés 41 Date d'inscription jeudi 19 juin 2014 Statut Membre Dernière intervention 3 juin 2023 5
31 oct. 2021 à 16:50
Apparemment ProFTPd est un serveur, le problème doit être les entrées et les ports ouverts, je vois que :

« Les connexions FTP passives utiliseront des ports à partir de 1024, ce qui signifie que vous devez transférer tous les ports 1024-65535 du NAT au serveur FTP ».

« Passives » je suppose que c’est de l’UDP, bon courage au niveau sécurité.
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié le 2 nov. 2021 à 16:07
Bonjour Gafor

Merci pour ton message, cependant quelques remarques :
  • Oui,
    proftpd
    est un serveur FTP.
  • Non, FTP est un protocole qui fonctionne traditionnellement sur TCP (voir la page wikipedia sur FTP) pas sur UDP.
  • « Les connexions FTP passives utiliseront des ports à partir de 1024, ce qui signifie que vous devez transférer tous les ports 1024-65535 du NAT au serveur FTP ; Oui c'est le point dont nous parlions tous précédemment, s'il s'agit d'un serveur FTP avec connexion passive, il faut ouvrir des ports supplémentaires. Si c'est un serveur accessible en connexions actives, les ports 20 et 21 devraient suffire. Mais comme précédemment, c'est plus au niveau des connexion entrantes que sortantes qu'il faut être vigilant.
  • Non, le fait qu'un protocole fonctionne sur TCP ou UDP n'a dans le cas général pas de rapport direct avec la sécurité, c'est plus les couches supérieures au sens du modèle OSI (e.g. couche 6) qui en sont responsable. Prenons un exemple : un service de VoIP fonctionne traditionnellement en UDP, ça n'empêche pas d'avoir des communications chiffrées et une authentification préalable (comme dans des logiciels comme skype ou teams).
  • Il existe des serveurs FTP qui se veulent plus sûrs que la moyenne (comme
    vsftpd
    pour very secure ftp) mais qui sont assez pénibles à mettre en place que
    proftpd
    ou d'autres approches (e.g. un transfert via
    scp
    ou, dans le cas des dépôts de paquets, des serveurs https).


Bonne chance
0