[iptables] : j'pète un cable !

: j'pète un cable ! [iptables] - réseaux et sécurité - Linux et OS Alternatifs

Marsh Posté le 31-05-2003 à 14:24:26    

Bonjour tout le monde,
 
Je suis entrain de monter un firewall via iptables. En gros ça donne :
 
http://wordpad.free.fr/reseau-little.jpg
Il y a donc du NAT, de sorte que les PC du LAN puisse avoir accès au web, aux port 20 et 21, ..etc.
 
Le problème est que :
1) Mon script iptables ne marche pas de tout :( (y'a rien qui est filtré)
2) Lorsque je l'éxécute, j'ai l'impression que la configuration d'iptables est "écrasée" quelques minutes plus tard.
 
Voici mon script qui active les règles iptables :
www.chez.com/lockness/linux/iptables_regles.txt
 
Concernant le second problème : une fois mon script lancé et un iptables -L -v, j'obtiens bel et bien la bonne configuration (Chain client (22 references) et Chain serveur (2 refrences)), mais quelques minutes plus tard j'obtiens ça (pour un iptables -L -v) :
http://www.chez.com/lockness/linux [...] moinsv.txt
 
Quelqu'un peut-il m'aider car là je commence sérieusement à péter un cable ! ça me rend fou ce iptables :-/
Une solution ?


Message édité par Lockness le 31-05-2003 à 23:00:49
Reply

Marsh Posté le 31-05-2003 à 14:24:26   

Reply

Marsh Posté le 31-05-2003 à 15:52:41    

Lockness a écrit :

Bonjour tout le monde,
 
Je suis entrain de monter un firewall via iptables. En gros ça donne :
 
INTERNET-------------ppp0-[ROUTEUR_DEBIAN]-eth0-----------Reseau local
 
Il y a donc du NAT, de sorte que les PC du LAN puisse avoir accès au web, aux port 20 et 21, ..etc.
 
Le problème est que :
1) Mon script iptables ne marche pas de tout :( (y'a rien qui est filtré)
2) Lorsque je l'éxécute, j'ai l'impression que la configuration d'iptables est "écrasée" quelques minutes plus tard.
 
Voici mon script qui active les règles iptables :
www.chez.com/lockness/linux/iptables_regles.sh
 
Concernant le second problème : une fois mon script lancé et un iptables -L -v, j'obtiens bel et bien la bonne configuration (Chain client (22 references) et Chain serveur (2 refrences)), mais quelques minutes plus tard j'obtiens ça (pour un iptables -L -v) :
http://www.chez.com/lockness/linux [...] moinsv.txt
 
Quelqu'un peut-il m'aider car là je commence sérieusement à péter un cable ! ça me rend fou ce iptables :-/
Une solution ?


 
y'a une erreur pour atteindre ton script.
 
tiens une url pour generer un script iptables pour une passerelle du type que tu decris : http://morizot.net/firewall/gen/index.php
 
addapte le a tes besoins .

Reply

Marsh Posté le 31-05-2003 à 17:17:30    

Merci pour le lien mais malheureusement cela ne m'explique pas pourquoi les règles iptables sont reinitialisées alors que ne le demande pas... :( Spécifique à la Debian ?
(note : des règles sont exécutées au démarrage par /etc/init.d/networking mais ce script n'est utilisé qu'au bout, et pas de manière périodique comme on pourrait le voir dans une cronttab par ex.)

Reply

Marsh Posté le 31-05-2003 à 18:09:42    

Lockness a écrit :

Merci pour le lien mais malheureusement cela ne m'explique pas pourquoi les règles iptables sont reinitialisées alors que ne le demande pas... :( Spécifique à la Debian ?
(note : des règles sont exécutées au démarrage par /etc/init.d/networking mais ce script n'est utilisé qu'au bout, et pas de manière périodique comme on pourrait le voir dans une cronttab par ex.)


 :non: il n'y a pas de règles iptables dans ce script, juste quelques protections contre le spoofing et l'activation du routage des paquets


Message édité par nikosaka le 31-05-2003 à 18:10:01
Reply

Marsh Posté le 31-05-2003 à 19:10:51    

Citation :

juste quelques protections contre le spoofing et l'activation du routage des paquets


 
Hum... qd ça commence par iptables -A... etc : si c'est pas des règles iptables ça : je me fais moine  :) !

Reply

Marsh Posté le 31-05-2003 à 23:44:04    

up !
Please help  :(  :( ...

Reply

Marsh Posté le 31-05-2003 à 23:58:10    

Tu as un probleme avec le "-sport $port" ici :

Code :
  1. # On part du principe qu'il n'y a pas de serveur sur les ordinateurs du LAN.
  2. # Les connexions NAISSANTES leur étant destinées sont donc rejetées
  3. for port in $PORTS_TCP_CLIENT; do
  4.   $iptables -A FORWARD -i eth0 -s 192.168.0.0/24 -p tcp \
  5.   --sport $port --dport $port -j client
  6.   $iptables -A FORWARD -o eth0 -d 192.168.0.0/24 -p tcp \
  7.   --sport $port --dport $port -j client
  8. done
  9. for port in $PORTS_UDP_CLIENT; do
  10.   $iptables -A FORWARD -i eth0 -s 192.168.0.0/24 -p udp \
  11.   --sport $port --dport $port -j client
  12.   $iptables -A FORWARD -o eth0 -d 192.168.0.0/24 -p udp \
  13.   --sport $port --dport $port -j client
  14. done


Le client utilise des ports variables pour sortir (il n'utilise pas le port de sortie 80 pour aller sur un site http).
A mon avis il faut enlever ce paramtre de ces 4 lignes.
 
Je pense aussi que les lignes avec "-o eth0" ne sont pas necessaires.
 
Edit : je sais pas si j'ai été assez clair, moi je metrais ca à la place :

Code :
  1. ]# On part du principe qu'il n'y a pas de serveur sur les ordinateurs du LAN.
  2. # Les connexions NAISSANTES leur étant destinées sont donc rejetées
  3. for port in $PORTS_TCP_CLIENT; do
  4.   $iptables -A FORWARD -i eth0 -s 192.168.0.0/24 -p tcp \
  5.   --dport $port -j client
  6. done
  7. for port in $PORTS_UDP_CLIENT; do
  8.   $iptables -A FORWARD -i eth0 -s 192.168.0.0/24 -p udp \
  9.   --dport $port -j client
  10. done


fin edit.
 
Et accessoirement tu peux retirer les lignes INPUT ici :

Code :
  1. ##
  2. ## Services pour lesquels on est que "client"
  3. ##
  4. for port in $PORTS_TCP_CLIENT; do
  5.   $iptables -A INPUT -i ppp0 -p tcp --sport $port -j client
  6.   $iptables -A OUTPUT -o ppp0 -p tcp --dport $port -j client ;done
  7. for port in $PORTS_UDP_CLIENT; do
  8.   $iptables -A INPUT -i ppp0 -p udp --sport $port -j client
  9.   $iptables -A OUTPUT -o ppp0 -p udp --dport $port -j client ;done


vu que tu acceptes les connections ESTABLISHED et RELATED.


Message édité par Nis+ le 01-06-2003 à 00:04:05
Reply

Marsh Posté le 01-06-2003 à 00:18:24    

En effet, pour le FORWARD tu as raison. Par contre, pour le INPUT je ne comprends pas pourquoi tu me mets ça... (je ne veux accepter que certaines ports (donc services))
 
EDIT :
Faut-il que j'établisse les règles du FORWARD plutot par rapport à eth0 ou par rapport à ppp0 ?
 
D'autre part, si l'attribution des ports source est aléatoire (principe du NAT) : dois-je accepter tout paquet FORWARDé depuis n'importe que port pour qu'il puisse arriver à mes ordis du LAN ?


Message édité par Lockness le 01-06-2003 à 00:24:33
Reply

Marsh Posté le 01-06-2003 à 01:11:47    

Pour le INPUT:
1/ les services sont sur le serveur internet donc les ports correspondent aux ports de destination et tu ne peux pas connaitre le port source à l'avance sur ton ordinateur (dans le sens sortant <=> envoie de la requete <=> OUTPUT)
2/ Pour le retour (serveur>ton ordi) tu connais le port source mais pas celui de destination mais la communication est deja etablie.
Donc j'en arrive à ca :

Code :
  1. #1/ pour la sortie
  2. iptables -A OUTPUT -o ppp0 -p tcp --dport $ports -j ACCEPT
  3. iptables -A OUTPUT -o ppp0 -p udp --dport $ports -j ACCEPT
  4. #2/ pour le retour
  5. iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT


(a adapter, j'ai du mal avec -A client / -j client)
le reste est forcement bloquer par la regle par default
 
pour le forward, je regarde demain, j'ai peur d'avoir dis des betises.
Redit: et puis non c'est pas necessaire
Edit: plus restrictif


Message édité par Nis+ le 01-06-2003 à 01:15:34
Reply

Marsh Posté le 01-06-2003 à 02:46:14    

Non y a rien de spécifique a debian, chez moi ça n'ecrase pas "périodiquement" comme tu le decris.
 
Pour la l'icmp (ping) etant donné que en Output tu as new, tu peux envoyé un ping, tu n'as donc pas besoin des lignes que tu as mises
 


#######################
# REGLES DE CONNEXION #
#######################
 
# Connexions etablies et relatives acceptees
iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o ppp0 -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT


 
Par contre comme il a été dis, certaines regles clientes sont inutiles, web (port source > 1024) ftp (port source > 1024) etc
 

Reply

Marsh Posté le 01-06-2003 à 02:46:14   

Reply

Marsh Posté le 01-06-2003 à 04:14:01    

Merci pour ses conseils mais finalement j'ai refait le script. Ca a l'air de marcher. Va falloir que je fasse deux trois tests pour valider et c bon.
 
Et avec mon nouveau script, plus de pb de "configuration volatile". Je diagnostique ça comme un pb de ma configuration initiale (bien que c'est qd meme très strange...). Mais bon, now, plus de pb, il me conserver bien la config que je lui donne.
Faut dire que j'ai fait du ménage dans /etc/init.d et /etc/alternatives :)
 
Pour les curieux, mon script (qui a l'air de marcher) est ici :
www.chez.com/lockness/linux/iptables_start.sh.txt
 
Note : pour le FORWARD / ports > 1024 je l'ai pas encore implémenter mais ça va venir.
 
HJ : que ce soit du ftp, du http, du trucmuche ou du pornop (Porno Protocole : dédicace à HJ :D !) : ça sera tjs un port source > 1024 en NAT. Je veux dire par là que c'est pas spécifique de certains protocoles mais du principe du NAT lui-même. Si une erreur s'est glissée ds ce que j'ai dit, n'hésitez pas à m'en faire part !


Message édité par Lockness le 01-06-2003 à 04:15:47
Reply

Marsh Posté le 01-06-2003 à 04:24:57    

Citation :

1/ les services sont sur le serveur internet donc les ports correspondent aux ports de destination et tu ne peux pas connaitre le port source à l'avance sur ton ordinateur (dans le sens sortant <=> envoie de la requete <=> OUTPUT)


 
Ne confondrais-tu pas avec le NAT ? les ports sources (LAN -> INTERNET) ne sont changés (il me semble) qu'en cas de NAT. Je veux dire par là que le routeur lui-même si il doit faire une requete lambda ne vas pas modifier son port source vers ]1024;65536[, il va garder le port source originel.
Par contre, c'est pour le NAT, c'est-à-dire pour les ordis qui passent par le routeur pour envoyer leur requête, que les ports sources sont changés (afin de différencier à qui apparetenait telle et telle requete lors de la redirection des réponses).
Enfin,disons que moi je le comprends comme ça  :)  :sol: !

Reply

Marsh Posté le 01-06-2003 à 12:41:30    

Je persiste.
Le port du utiliseé comme source par le client n'est pas forcement le port de destination sur le serveur.
 
Voila, le netstat d'une connection ssh en reseau local (donc sans nat) :

Code :
  1. tcp        0     20 10.0.0.5:ssh            10.0.0.3:1259           ESTABLISHED


Sur le serveur, le port est bien ssh (22) mais sur le client le port est 1259 dans ce cas là et change quand on fais une nouvelle connection (exemple qq minutes apres j'ai eu 1271).
 
Il en va de même pour acceder à un serveur http, je pense aussi pour le ftp. Le reste, je sais pas trop mais je vois pas pourquoi ca ne serait pas le même principe.
 
Et puis bravo pour ton script ;) J'ai pas regarder mais vu qu'il marche c'est bien

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed