OVH Cloud OVH Cloud

Firewall et acces ftp

15 réponses
Avatar
pascal
Salut,

Derrière mon firewall (iptables) j'ai un serveur ftp (proftpd), sur lequel
je peut me connecter, mais ne peut plus rentrer en mode passif !

Les régles iptables n'ont pas changer de l'ancien serveur au nouveau. Cela
fonctionnait bien avant.

Voici les régles.
#FTP ********************************************
iptables -A INPUT -i ppp0 -p tcp --source-port 21 -m state --state
ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --destination-port 21 -m state --state
NEW,ESTABLISHED -j ACCEPT
# externe -------------------------------------
iptables -A INPUT -i ppp0 -p tcp --destination-port 21 -m state --state
NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --source-port 21 -m state --state
ESTABLISHED -j ACCEPT
#data (mode actif)------------------------------
iptables -A INPUT -i ppp0 -p tcp --source-port 20 -m state --state
ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --destination-port 20 -m state --state
ESTABLISHED -j ACCEPT
#in
iptables -A INPUT -i ppp0 -p tcp --destination-port 20 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --source-port 20 -m state --state
ESTABLISHED
-j ACCEPT
# mode passif------------------------------------
iptables -A INPUT -i ppp0 -p tcp --source-port 1024:65535
--destination-port 1024:65535 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --source-port 1024:65535
--destination-port 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
# externe
iptables -A INPUT -i ppp0 -p tcp --destination-port 1024:65535
--source-port 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT

Je vais être obliger de sortir le firewall et là, je frémis !

10 réponses

1 2
Avatar
TiChou
Dans le message <news:c8sfer$ie2$,
*pascal* tapota sur f.c.o.l.configuration :

Salut,


Bonjour,

Derrière mon firewall (iptables) j'ai un serveur ftp (proftpd), sur lequel
je peut me connecter, mais ne peut plus rentrer en mode passif !


Le FTP étant un protocole applicatif spécial, il nécéssite sous Linux
l'utilisation d'un module de suivi de connexion, ip_conntrack_ftp, pour que
les connexions FTP soient filtrées correctement par le firewall.
Il faut donc charger ce module :

modprobe ip_conntrack_ftp

Les régles iptables n'ont pas changer de l'ancien serveur au nouveau. Cela
fonctionnait bien avant.

Voici les régles.
#FTP ********************************************
[...]


Je ne vais pas commenter vos règles, disons que d'une manière générale elles
sont redondantes et trop nombreuses pour être efficace.
Le filtrage des connexions FTP en entrée devrait se résumer à une règle
principale et à une autre règle commune à l'ensemble des éventuelles autres
règles :

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

Le filtrage en sortie dans le cas où la politique est de ne rien autoriser
(iptables -P OUTPUT DROP) :

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

Je vais être obliger de sortir le firewall et là, je frémis !


Mais non, faut pas tant craindre d'être attaqué. :)

--
TiChou

Avatar
pascal
On Mon, 24 May 2004 12:41:24 +0200, TiChou wrote:

Le FTP étant un protocole applicatif spécial, il nécéssite sous Linux
l'utilisation d'un module de suivi de connexion, ip_conntrack_ftp, pour que
les connexions FTP soient filtrées correctement par le firewall.
Il faut donc charger ce module :

modprobe ip_conntrack_ftp
grmbl ! ip_conntrack est chargé au démarrage, pas ip_conntrack_ftp !


Les régles iptables n'ont pas changer de l'ancien serveur au nouveau. Cela
fonctionnait bien avant.

Voici les régles.
#FTP ********************************************
[...]


Je ne vais pas commenter vos règles, disons que d'une manière générale elles
sont redondantes et trop nombreuses pour être efficace.
Le filtrage des connexions FTP en entrée devrait se résumer à une règle
principale et à une autre règle commune à l'ensemble des éventuelles autres
règles :

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

Le filtrage en sortie dans le cas où la politique est de ne rien autoriser
(iptables -P OUTPUT DROP) :

iptables -A OUTPUT -o ppp0 -p tcp --sport 21 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -o ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Oui, l'iptables, c'est du clair/obscurt pour moi. Ou je mis suit pas assez

penché dessus.

Je vais être obliger de sortir le firewall et là, je frémis !


Mais non, faut pas tant craindre d'être attaqué. :)
Une attaque sur l'apache par jour (en essayant une attaque IIS),10

tentatives/heure pour forcer SAMBA (record de 10000 fichiers de log générer
par samba sur une période de 3 semaines)...


Avatar
Annie D.
B'jour, je m'incruste dans la discussion parce que je suis en train de
peaufiner mes propres règles iptables.

TiChou wrote:

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


Que pensez-vous de l'ajout d'un --syn sur la première règle ?
Aussi, j'aurais tendance à inverser l'ordre des deux règles parce que la
seconde a beaucoup plus de chance de "matcher" que la première : un seul
paquet NEW par session FTP, un RELATED par transfert et plein
d'ESTABLISHED. Est-ce que ça aurait réellement une influence sur les
performances ?

Le filtrage en sortie dans le cas où la politique est de ne rien autoriser
(iptables -P OUTPUT DROP) :

iptables -A OUTPUT -o ppp0 -p tcp --sport 21 -m state --state NEW -j ACCEPT


Cette règle est-elle bien utile ? Si j'ai bien compris comment marche le
suivi de connexion, le premier paquet émis par le serveur (SYN/ACK en
réponse au SYN du client) devrait avoir l'état ESTABLISHED, non ?

iptables -A OUTPUT -o ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT


Avatar
TiChou
Dans le message <news:,
*Annie D.* tapota sur f.c.o.l.configuration :

B'jour,


Bonjour Annie,

je m'incruste dans la discussion parce que je suis en train de
peaufiner mes propres règles iptables.

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


Que pensez-vous de l'ajout d'un --syn sur la première règle ?


Oui, c'est encore mieux et c'est ce que je fais généralement, mais ici j'ai
voulu faire au plus simple.

Aussi, j'aurais tendance à inverser l'ordre des deux règles parce que la
seconde a beaucoup plus de chance de "matcher" que la première : un seul
paquet NEW par session FTP, un RELATED par transfert et plein
d'ESTABLISHED.


Oui, vous avez entièrement raison et alors que j'essaye toujours d'optimiser
mes règles iptables et de les placer au mieux, je n'avais jamais pensé à
mieux placer la règle qui matchent les paquets ESTABLISHED et RELATED.

Est-ce que ça aurait réellement une influence sur les performances ?


En théorie oui comme vous l'avez démontré, mais en pratique cela dépend bien
sûr du nombre de règles et aussi du débit, des performances de la machine,
etc. Il serait intéressant un jour, car c'est une question qui revient
souvent, de faire une série de tests sur les performances de telle ou telle
règle et les ressources consommées.
Mais comme cela nous coute rien de placer cette règle le plus tôt possible,
autant le faire. Zou, me voilà à éditer mon script de firewall ! :)

Le filtrage en sortie dans le cas où la politique est de ne rien
autoriser (iptables -P OUTPUT DROP) :

iptables -A OUTPUT -o ppp0 -p tcp --sport 21 -m state --state NEW -j
ACCEPT


Cette règle est-elle bien utile ?


Elle est surtout erronée. :)

Il faut remplacer '--sport' par '--dport'. Ici il s'agissait bien de la
règle qui autorise à la machine de se connecter sur un ftp distant.

--
TiChou


Avatar
Annie D.
TiChou wrote:

Oui, vous avez entièrement raison et alors que j'essaye toujours d'optimiser
mes règles iptables et de les placer au mieux, je n'avais jamais pensé à
mieux placer la règle qui matchent les paquets ESTABLISHED et RELATED.


Il doit être plus logique pour l'esprit humain de placer cette règle en
fin de liste à la suite des règles autorisant l'établissement des
connexions. Et je crains qu'un script dans lequel les règles sont
placées dans un ordre optimal pour la vitesse de traitement soit assez
peu lisible.

Est-ce que ça aurait réellement une influence sur les performances ?


En théorie oui comme vous l'avez démontré, mais en pratique cela dépend bien
sûr du nombre de règles et aussi du débit, des performances de la machine,
etc. Il serait intéressant un jour, car c'est une question qui revient
souvent, de faire une série de tests sur les performances de telle ou telle
règle et les ressources consommées.


Je demande, parce que la machine qui me sert de routeur est actuellement
un Pentium 100 sur laquelle tourne un noyau 2.2 avec ipchains (la
nouvelle version que je prépare avec votre aide n'est pas encore prête)
qui ne sert que du routage NAT avec un petit nombre de règles ipchains
pour une ligne ADSL 512/128 en PPPoE. Avant, c'était un 486DX-33 qui
jouait ce rôle, et je pensais que c'était largement suffisant pour cette
tâche dans la mesure où l'occupation CPU restait modeste. Or depuis le
changement de matériel j'ai gagné plusieurs millisecondes de latence. A
moins que le remplacement des cartes réseau (3C509 -> 3C509B et NE2000
ISA -> NE2000 PCI) y soit aussi pour quelque chose. Comme le futur
noyau 2.4 sera plus lourd à gérer et comme ce routeur assurera des
fonctions supplémentaires (serveur SSH et VPN), l'idée d'optimiser le
traitement des paquets me paraît ne pas être à négliger. Des avis ?

D'autre part, je vois le plus souvent dans la même règle l'acceptation
des paquets ESTABLISHED et RELATED. Or les paquets RELATED peuvent
contenir diverses choses, comme des messages ICMP, qui, il me semble,
nécessitent un filtrage un peu plus serré. Aussi j'aurais tendance à
séparer le traitement des deux états. Le traitement des paquets
ESTABLISHED, normalement les plus fréquents, resterait en début de
chaîne pour l'efficacité et le traitement des paquets RELATED se
trouverait plus bas avec celui des NEW, après les règles de filtrage des
trucs indésirables pour la sécurité. Cela ne pénaliserait pas les
performances puisque ces paquet sont normalement rares. Qu'en
pensez-vous ?


Avatar
Vincent RIEDWEG
En cette belle journée du Mardi 25 Mai 2004 01:19, Annie D. écrivait sur
fr.comp.os.linux.configuration :
TiChou wrote:

Oui, vous avez entièrement raison et alors que j'essaye toujours
d'optimiser mes règles iptables et de les placer au mieux, je n'avais
jamais pensé à mieux placer la règle qui matchent les paquets ESTABLISHED
et RELATED.


Il doit être plus logique pour l'esprit humain de placer cette règle en
fin de liste à la suite des règles autorisant l'établissement des
connexions. Et je crains qu'un script dans lequel les règles sont
placées dans un ordre optimal pour la vitesse de traitement soit assez
peu lisible.


Tout dépend de l'esprit humain en question ;o))

Est-ce que ça aurait réellement une influence sur les performances ?


En théorie oui comme vous l'avez démontré, mais en pratique cela dépend
bien sûr du nombre de règles et aussi du débit, des performances de la
machine, etc. Il serait intéressant un jour, car c'est une question qui
revient souvent, de faire une série de tests sur les performances de
telle ou telle règle et les ressources consommées.


Je demande, parce que la machine qui me sert de routeur est actuellement
un Pentium 100 sur laquelle tourne un noyau 2.2 avec ipchains (la
nouvelle version que je prépare avec votre aide n'est pas encore prête)
qui ne sert que du routage NAT avec un petit nombre de règles ipchains
pour une ligne ADSL 512/128 en PPPoE. Avant, c'était un 486DX-33 qui
jouait ce rôle, et je pensais que c'était largement suffisant pour cette
tâche dans la mesure où l'occupation CPU restait modeste. Or depuis le
changement de matériel j'ai gagné plusieurs millisecondes de latence. A
moins que le remplacement des cartes réseau (3C509 -> 3C509B et NE2000
ISA -> NE2000 PCI) y soit aussi pour quelque chose. Comme le futur
noyau 2.4 sera plus lourd à gérer et comme ce routeur assurera des
fonctions supplémentaires (serveur SSH et VPN), l'idée d'optimiser le
traitement des paquets me paraît ne pas être à négliger. Des avis ?


Le serveur ssh (sauf si utilisé par le vpn:) ne devrait en général prendre
que peut de temps processeur car on n'est pas constamment connecté en ssh.
Le vpn, de par sa fonction de cryptage/décryptage est lui plus gourmand en
temps processeur.

Quant à se poser la question sur l'ordre des règles afin d'avoir de
meilleures performances, c'est bien dans l'absolu... Mais les différences
de performances ne se voient que lorsque l'on commence à filtrer de gros
débit (plus de 2,4Gb/s)...

D'autre part, je vois le plus souvent dans la même règle l'acceptation
des paquets ESTABLISHED et RELATED. Or les paquets RELATED peuvent
contenir diverses choses, comme des messages ICMP, qui, il me semble,
nécessitent un filtrage un peu plus serré. Aussi j'aurais tendance à
séparer le traitement des deux états. Le traitement des paquets
ESTABLISHED, normalement les plus fréquents, resterait en début de
chaîne pour l'efficacité et le traitement des paquets RELATED se
trouverait plus bas avec celui des NEW, après les règles de filtrage des
trucs indésirables pour la sécurité. Cela ne pénaliserait pas les
performances puisque ces paquet sont normalement rares. Qu'en
pensez-vous ?


Traiter les paquets ESTABLISHED en début est une bonne chose. Dissossier les
paquets RELATED des paquets ESTABLISHED est, amha, une hérésie. En effet,
bien que les paquets RELATED soit moins nombreux (sauf si l'on hébèrge un
gros serveur ftp:), le traitement par netfilter des paquets ESTABLISHED des
paquets RELATED est identique : c'est des entrées présentes dans la
conntrack.

Traiter les entrées présentes dans la conntrack (chargée en RAM) au début
permet de :
1 - ne pas avoir à analyser le paquet plus scrupuleusement
2 - éviter le traitement de règles inutiles
3 - simplifier les règles (quand on a compris le principe:)
4 - augmenter les performances dans le cas de gros débits à filtrer

De plus, d'un point de vu performances, c'est toujours mieux d'ordonner le
reste de ses règles en fonction du trafic traité : plus le trafic
correspoindant à traiter par un règle est important, plus on doit la placer
vers le début du script. C'est un peu comme le vélo : plus on pédale moins
fort, moins on avance plus vite:)

Pour récapituler : c'est très bien de penser à cela dans l'absolu, mais,
même avec un p100 ca ne va pas changer grand chose avec une connexion
ADSL...

Vincent.



Avatar
Thomas Nemeth
Le mar 25 mai 2004 à 01:19, Annie D. a tapoté :
| TiChou wrote:
| >
| > Oui, vous avez entièrement raison et alors que j'essaye toujours d'optimiser
| > mes règles iptables et de les placer au mieux, je n'avais jamais pensé à
| > mieux placer la règle qui matchent les paquets ESTABLISHED et RELATED.
|
| Il doit être plus logique pour l'esprit humain de placer cette règle en
| fin de liste à la suite des règles autorisant l'établissement des
| connexions. Et je crains qu'un script dans lequel les règles sont
| placées dans un ordre optimal pour la vitesse de traitement soit assez
| peu lisible.

C'est à ça que servent les commentaires.


| > > Est-ce que ça aurait réellement une influence sur les performances ?
| >
| > En théorie oui comme vous l'avez démontré, mais en pratique cela dépend bien
| > sûr du nombre de règles et aussi du débit, des performances de la machine,
| > etc. Il serait intéressant un jour, car c'est une question qui revient
| > souvent, de faire une série de tests sur les performances de telle ou telle
| > règle et les ressources consommées.
|
| Je demande, parce que la machine qui me sert de routeur est actuellement
| un Pentium 100 sur laquelle tourne un noyau 2.2 avec ipchains (la

Bienvenue au club ;)


| Comme le futur
| noyau 2.4 sera plus lourd à gérer et comme ce routeur assurera des
| fonctions supplémentaires (serveur SSH et VPN), l'idée d'optimiser le
| traitement des paquets me paraît ne pas être à négliger. Des avis ?

En ce qui concerne le routage et le traitement des paquets pour le
firewall, je conseille fortement de créer de nouvelles chaines (en
plus de ACCEPT, DROP ou DENY). En effet, si tu as beaucoup de règles
pour le firewall, les regrouper en chaines permet de passer à une
chaine si le paquet correspond aux données communes de ces règles ou
de zapper completement la chaine (bien pratique si elle est longue).

Ça m'est arrivé ici lorsque j'avais un bonne 15aine de règles pour
l'acceptation de ssh. Ceci dit, utilisant encore ipchains, j'ai
encore mes règles divisées en chaines pour TCP, UDP et ICMP. Ça a
aussi l'avantage d'être plus facile à maintenir.


| D'autre part, je vois le plus souvent dans la même règle l'acceptation
| des paquets ESTABLISHED et RELATED. Or les paquets RELATED peuvent
| contenir diverses choses, comme des messages ICMP, qui, il me semble,

Dans ce cas tu filtres ICMP avant dans une chaine spécifique à tes
souhaits :)


| nécessitent un filtrage un peu plus serré. Aussi j'aurais tendance à
| séparer le traitement des deux états. Le traitement des paquets
| ESTABLISHED, normalement les plus fréquents, resterait en début de
| chaîne pour l'efficacité et le traitement des paquets RELATED se
| trouverait plus bas avec celui des NEW, après les règles de filtrage des
| trucs indésirables pour la sécurité. Cela ne pénaliserait pas les
| performances puisque ces paquet sont normalement rares. Qu'en
| pensez-vous ?

Bof. Pas utile.


Thomas
--
BOFH excuse #310:
Asynchronous inode failure.
Avatar
Annie D.
Thomas Nemeth wrote:

En ce qui concerne le routage et le traitement des paquets pour le
firewall, je conseille fortement de créer de nouvelles chaines


J'en ai déjà créé une bonne quinzaine, et ce n'est pas fini. Ça ne
risque pas de ralentir le traitement de sauter de chaîne en chaîne ?

| D'autre part, je vois le plus souvent dans la même règle l'acceptation
| des paquets ESTABLISHED et RELATED. Or les paquets RELATED peuvent
| contenir diverses choses, comme des messages ICMP, qui, il me semble,

Dans ce cas tu filtres ICMP avant dans une chaine spécifique à tes
souhaits :)


Vi, mais du coup ça rajoute des règles inutiles avant le traitement des
paquets ESTABLISHED.

| nécessitent un filtrage un peu plus serré. Aussi j'aurais tendance à
| séparer le traitement des deux états. Le traitement des paquets
| ESTABLISHED, normalement les plus fréquents, resterait en début de
| chaîne pour l'efficacité et le traitement des paquets RELATED se
| trouverait plus bas avec celui des NEW, après les règles de filtrage des
| trucs indésirables pour la sécurité. Cela ne pénaliserait pas les
| performances puisque ces paquet sont normalement rares. Qu'en
| pensez-vous ?

Bof. Pas utile.


Bon, cette idée n'ayant pas l'air de déclencher l'enthousiasme, je la
remets dans ma culotte. Merci à tous pour vos commentaires.

Avatar
Thomas Nemeth
Le mer 26 mai 2004 à 23:21, Annie D. a tapoté :
| Thomas Nemeth wrote:
| >
| > En ce qui concerne le routage et le traitement des paquets pour le
| > firewall, je conseille fortement de créer de nouvelles chaines
|
| J'en ai déjà créé une bonne quinzaine, et ce n'est pas fini. Ça ne
| risque pas de ralentir le traitement de sauter de chaîne en chaîne ?

Hum... Ça dépend de ce qu'il y a dans tes chaînes. Disons que le
fait d'avoir des chaînes simplifie le traitement des paquets. Il
vaut mieux que netfilter vérifie si le paquet doit aller dans une
chaîne ou une autre plutôt que de le comparer à toutes les règles.

Pour faire simple, l'organisation la plus efficace est lorsque tu
as moins de chaînes (à un niveau particulier) que de règles dans
chacune d'elles.


| > | D'autre part, je vois le plus souvent dans la même règle l'acceptation
| > | des paquets ESTABLISHED et RELATED. Or les paquets RELATED peuvent
| > | contenir diverses choses, comme des messages ICMP, qui, il me semble,
| >
| > Dans ce cas tu filtres ICMP avant dans une chaine spécifique à tes
| > souhaits :)
|
| Vi, mais du coup ça rajoute des règles inutiles avant le traitement des
| paquets ESTABLISHED.

Pourquoi inutile ?


Thomas
--
BOFH excuse #98:
The vendor put the bug there.
Avatar
Annie D.
Thomas Nemeth wrote:

Pour faire simple, l'organisation la plus efficace est lorsque tu
as moins de chaînes (à un niveau particulier) que de règles dans
chacune d'elles.


C'est noté.

| > | D'autre part, je vois le plus souvent dans la même règle l'acceptation
| > | des paquets ESTABLISHED et RELATED. Or les paquets RELATED peuvent
| > | contenir diverses choses, comme des messages ICMP, qui, il me semble,
| >
| > Dans ce cas tu filtres ICMP avant dans une chaine spécifique à tes
| > souhaits :)
|
| Vi, mais du coup ça rajoute des règles inutiles avant le traitement des
| paquets ESTABLISHED.

Pourquoi inutile ?


Il me semble que filtrer les "mauvaises choses" avant la règle
d'acceptation des paquets des connexions établies est inutile, puisque
ces choses ont déjà été vérifiées lors de l'établissement de la
connexion (dans l'état NEW). Non ?

Schématiquement, je verrais bien une séquence de ce genre :
- vérifier la cohérence adresses-interfaces
- accepter les paquets ESTABLISHED
- jeter les vilains paquets
- filtrer les ICMP
- filtrer les paquets RELATED
- filtrer les paquets NEW

1 2