Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

iptables et ftp passif

14 réponses
Avatar
Etienne SOBOLE
salut.
j'ai trouvé ces lignes sur internet pour autoriser mes postes client ace
connecter a FTP

iptables -A INPUT -i ppp0 -p tcp --sport 21 -m state --state ESTABLISHED -j
ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 21 -m state --state
NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -i ppp0 -p tcp --sport 20 -m state --state
ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -m state --state ESTABLISHED -j
ACCEPT

iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m
state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m
state --state ESTABLISHED,RELATED -j ACCEPT

mais qu'est ce que ca veux dire???
surtout les deux dernières???

est ce que tout les port de ma machines sont ouvert entre 1024 et 65536 ???

Etienne

10 réponses

1 2
Avatar
Cedric Blancher
Dans sa prose, Etienne SOBOLE nous ecrivait :
j'ai trouvé ces lignes sur internet pour autoriser mes postes client ace
connecter a FTP
iptables -A INPUT -i ppp0 -p tcp --sport 21 -m state --state ESTABLISHED
-j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 21 -m state --state
NEW,ESTABLISHED -j ACCEPT


Ce sont les règles qui permettent d'autoriser la connexion de commandes
au serveur FTP. Dans l'esprit des deux règles finales, il faudrait
ajouter --dport 1024: à la première règle et un --sport 1024: à la
seconde.

iptables -A INPUT -i ppp0 -p tcp --sport 20 -m state --state
ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -m state --state
ESTABLISHED -j ACCEPT


Ces règles autorisent la connexion de données en mode actif, du serveur
port 20 au client sur un port non privilégié. Si on veut aussi
restrictif que les deux règles ci-dessous, il faudrait rajouter un
--dport 1024: à la première règle et un --sport 1024: à la seconde.

iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 --dport 1024:65535
-m state --state ESTABLISHED -j ACCEPT iptables -A OUTPUT -o ppp0 -p tcp
--sport 1024:65535 --dport 1024:65535 -m state --state
ESTABLISHED,RELATED -j ACCEPT


Ces règles autorisent la connexion de données en mode passif.

mais qu'est ce que ca veux dire???


man iptables
[...]
state
This module, when combined with connection tracking, allows access to
the connection tracking state for this packet.

--state state
Where state is a comma separated list of the connection states
to match. Possible states are INVALID meaning that the packet
is associated with no known connection, ESTABLISHED meaning that
the packet is associated with a connection which has seen pack-
ets in both directions, NEW meaning that the packet has started
a new connection, or otherwise associated with a connection
which has not seen packets in both directions, and RELATED mean-
ing that the packet is starting a new connection, but is associ-
ated with an existing connection, such as an FTP data transfer,
or an ICMP error.

Pour de plus amples détails encore, on peut facilement chercher sur le
web, en commençant par exemple par le site officiel de Netfilter :

http://www.netfilter.org/

Aller, étrangement, dans la section "Documentation, Tutorials" :

http://www.netfilter.org/documentation/index.html#tutorials

Et prendre le tout premier dans la liste :

http://iptables-tutorial.frozentux.net/

Pour aller vite, c'est expliqué là :

http://iptables-tutorial.frozentux.net/iptables-tutorial.html#STATEMACHINE

Plus précisément :

http://iptables-tutorial.frozentux.net/iptables-tutorial.html#USERLANDSTATES
http://iptables-tutorial.frozentux.net/iptables-tutorial.html#COMPLEXPROTOCOLS

C'est dur de chercher sur le net quand même...

est ce que tout les port de ma machines sont ouvert entre 1024 et 65536
???


À la lumière de ce que racontent le man et le tutoriel, non.

--
Et en France on continuera de rouler à droite et de laisser les femmes
bais^H^H^H^H^Haimer qui elles veulent.
(Le premier qui me fout au GNU, je le mords)
-+-MN in GNU: Fais-moi mal, Johnny Johnny Johnny envoie-moi au ciel-+-

Avatar
ben64
Etienne SOBOLE wrote:
salut.
j'ai trouvé ces lignes sur internet pour autoriser mes postes client ace
connecter a FTP

iptables -A INPUT -i ppp0 -p tcp --sport 21 -m state --state ESTABLISHED -j
ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 21 -m state --state
NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -i ppp0 -p tcp --sport 20 -m state --state
ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -m state --state ESTABLISHED -j
ACCEPT

iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m
state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m
state --state ESTABLISHED,RELATED -j ACCEPT

mais qu'est ce que ca veux dire???
surtout les deux dernières???

est ce que tout les port de ma machines sont ouvert entre 1024 et 65536 ???

Etienne


Non ca veut dire qu'il faut que ca soit un port compris entre 1024 et 65535.
Il y a quand même beaucoup plus simple, beaucoup plus efficace et plus
sécurisé pour faire du ftp passif, en utilisant les modules
ip_conntrack_ftp et ip_nat_ftp.

ben64

Avatar
Samuel
iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m
state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m
state --state ESTABLISHED,RELATED -j ACCEPT

mais qu'est ce que ca veux dire???
surtout les deux dernières???
est ce que tout les port de ma machines sont ouvert entre 1024 et 65536
???


Salut,

Nan, c'est le 'related' qui fait différence pour le conntrack associé (ici
FTP).
Les ports ne seront ouvert que s'il y a eu une connexion sur le port 20
d'abord (related)

A+
Samuel.

Avatar
Cedric Blancher
Dans sa prose, ben64 nous ecrivait :
Non ca veut dire qu'il faut que ca soit un port compris entre 1024 et
65535. Il y a quand même beaucoup plus simple, beaucoup plus efficace et
plus sécurisé pour faire du ftp passif, en utilisant les modules
ip_conntrack_ftp et ip_nat_ftp.


Tu devrais revoir le fonctionnement du moteur d'états de Netfilter.

Le module ip_conntrack_ftp est le module qui va justement permettre de
générer les "expectations" qui vont entraîner la catégorisation en
état RELATED. Mais en tout état de cause, le chargement des modules de
suivi de session ne dispense _certainement_ pas d'écrire des règles de
filtrage. Et inversement, l'efficacité de ces règles suppose le
chargement de ces modules...

--
BOFH excuse #366:

ATM cell has no roaming feature turned on, notebooks can't connect

Avatar
ben64
Dans sa prose, ben64 nous ecrivait :

Non ca veut dire qu'il faut que ca soit un port compris entre 1024 et
65535. Il y a quand même beaucoup plus simple, beaucoup plus efficace et
plus sécurisé pour faire du ftp passif, en utilisant les modules
ip_conntrack_ftp et ip_nat_ftp.



Tu devrais revoir le fonctionnement du moteur d'états de Netfilter.

Le module ip_conntrack_ftp est le module qui va justement permettre de
générer les "expectations" qui vont entraîner la catégorisation en
état RELATED. Mais en tout état de cause, le chargement des modules de
suivi de session ne dispense _certainement_ pas d'écrire des règles de
filtrage. Et inversement, l'efficacité de ces règles suppose le
chargement de ces modules...



Ces modules ne dispensent certainement pas d'écrire des règles de
filtrages, et je ne l'ai jamais dit, relis mon message.
J'ai juste dit qu'il y avait beaucoup plus simple, et il y a beaucoup
plus simple.

Du style :

#!/bin/bash

EXT_INF=ppp0

modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P OUTPUT DROP

iptables -I INPUT -i $EXT_INF -p tcp --dport 21 --syn -m state --state
NEW -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -I OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Voilà c'est tout ! Pas la peine d'aller chercher le port 20 ou quelque
chose d'autres. Quand une connexion arrive sur le port 20, les modules
ip_conntrack_ftp et ip_nat_ftp le gèrent. Et il passent dans la règles
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT en tant
que RELATED.

Donc tu devrais revoir le fonctionnement de ces modules ...


Avatar
Cedric Blancher
Dans sa prose, ben64 nous ecrivait :
Ces modules ne dispensent certainement pas d'écrire des règles de
filtrages, et je ne l'ai jamais dit, relis mon message. J'ai juste dit
qu'il y avait beaucoup plus simple, et il y a beaucoup plus simple.


Ce que tu as dit, c'est que l'utilisation des modules était beaucoup plus
simple que les règles exposées, sans pour autant ajouter la moindre la
règle derrière, donc implicitement qu'aucune règle n'est nécessaire.
Et je suis heureux de ne pas avoir été le seul à le comprendre comme
ça (cf. post de Gael). C'est là que se situe le problème, nul part
ailleurs.

modprobe ip_nat_ftp


Ne sert à rien, tu ne fais pas de NAT.

Voilà c'est tout ! Pas la peine d'aller chercher le port 20 ou quelque
chose d'autres.


Jamais dit le contraire. Simplement quand tu donnes des solutions, ne les
donne pas à moitié, ça évitera aux autres de ne pas te comprendre.

Donc tu devrais revoir le fonctionnement de ces modules ...


Sans commentaire.

--
BOFH excuse #311:

transient bus protocol violation

Avatar
ben64
Ce que tu as dit, c'est que l'utilisation des modules était beaucoup plus
simple que les règles exposées, sans pour autant ajouter la moindre la
règle derrière, donc implicitement qu'aucune règle n'est nécessaire.
Et je suis heureux de ne pas avoir été le seul à le comprendre comme
ça (cf. post de Gael). C'est là que se situe le problème, nul part
ailleurs.


Désolé si je n'ai pas été clair.
Mon but n'était pas de donner les règles pour faire du FTP, j'ai juste
répondu à la question initiale : "est ce que tout les port de ma
machines sont ouvert entre 1024 et 65536 ???", et j'ai dit qu'il y avait
plus simple en utilisant les modules, sans pour autant donner la
réponse, vu qu'il y a abondance de documentation sur Internet à ce sujet.

Donc je répète ces modules ne dispensent en aucun cas de toutes les
règles du firewall.

Désolé encore.

ben64

Avatar
Samuel
iptables -I INPUT -i $EXT_INF -p tcp --dport 21 --syn -m state --state
NEW -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -I OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT



Salut,

Choui pas d'accord !!!
Tu n'as pas à gérer le port 20 à cause des deux dernières lignes qui sont à
mon sens hyper trop permissives.
Surtout avec le conntrack ftp, où il y avait une faille y'a pas si longtemps
que ça !!!
Il vaut mieux ceinture ET bretelles (-sp 1024:65535 etc ....)

Mais je me trompe peut-être.

Samuel.

Avatar
Etienne SOBOLE
"ben64" a écrit dans le message de news:
3f606eaa$0$27048$

iptables -I INPUT -i $EXT_INF -p tcp --dport 21 --syn -m state --state
NEW -j ACCEPT

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


Si j'ai bien compris, l'idée c'est de filtrer que sur l'etablissement des
connections et pas des connexion elles meme.

ce qui revient a utiliser les regles
iptables INPUT ... --dport ...
pour le filtrage en entrée (Internet -> Reseau)

et

iptables OUTPUT... --dport ...
pour le filtrage en sortie (Reseau -> Internet)


donc si j'ai bien compris (2 eme)
on utilise jamais --sport pour les règle de firewall puiqu'elle sont
forcément ESTABLISHED ou RELATED


Etienne

Avatar
Eric Razny
"Etienne SOBOLE" a écrit dans le message de
news:bk762p$2u4o$
"ben64" a écrit dans le message de news:
3f606eaa$0$27048$

iptables -I INPUT -i $EXT_INF -p tcp --dport 21 --syn -m state --state
NEW -j ACCEPT

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


Si j'ai bien compris, l'idée c'est de filtrer que sur l'etablissement des
connections et pas des connexion elles meme.


Les deuxièmes et troisièmes règles sont un filtrage (le filtre laisse
passer). Tu filtre donc bien les "connexion elles meme" selon ton
expression.
Elles sont nécessaires si tu veux laisser passer les paquets ESTABLISHED et
RELATED dans les deux sens.
(à noter comme il n'y a pas de FORWARD je suppose que tu as ton serveur ftp
sur ton FW, c'est "mal" :) [1]
Accessoirement tu peux préciser les interfaces si tu as un FW multipattes
(mais tu peux simplement filtrer sur le serveur lui même).

ce qui revient a utiliser les regles
iptables INPUT ... --dport ...
pour le filtrage en entrée (Internet -> Reseau)
et
iptables OUTPUT... --dport ...
pour le filtrage en sortie (Reseau -> Internet)


c'est plus complexe que ça (enfin si je comprends ta question, je n'en suis
pas sur!)
Ta première règle permet l'établissement d'une connexion (supposée ftp mais
rien n'est sur!) de l'extérieur, en tcp sur le port 21 de ta machine.
A noter le --syn qui n'est pas redondant avec le NEW.

Une fois la connexion établie c'est la gestion *statefull* du FW *avec* le
module de suivi ftp qui va assurer dynamiquement l'autorisation d'ouverture
des ports.

Attention : si d'autres modules sont chargés et que d'autres règles
permettent d'initier des connexion ces deux règles laisseront passer les
paquets correspondants aussi.

donc si j'ai bien compris (2 eme)
on utilise jamais --sport pour les règle de firewall puiqu'elle sont
forcément ESTABLISHED ou RELATED


Ben ce n'est pas ça non plus.
(--sport ou --dport dans ton exemple suivant un ftp actif ou passif)
Si tu te contente des règles 2 & 3 tu laisse passer toutes les connexion
établies ou gérées par un module du FW. Or il se peut que tu veuille être
plus restrictif (ex : IPs ou heures particulières pour accéder au ftp par
exemple). Dans ce cas tu vas ajouter des infos sur le port (dans le cas du
ftp pense au mode actif et au mode passif, ça fait deux séries de règles) et
tu continueras avec d'autres règles pour les autres services.

Le mieux je pense est de faire un tour sur les tutorials du site de
netfilter, où des exemples simples et progressifs sont donnés.
(important : pour comprendre les règles il faut aussi comprendre un minimum
le fonctionnement des couches réseau filtrées et des protocoles utilisés).

Eric

[1] ou tu ajoute une couche de netfilter sur ton serveur ftp, c'est mieux :)


1 2