Problème iptables

Bonjour à tous ,

Alors voila mon problème, j’ai crée mon scripte iptables mais le problème c’est que je n’est pas d’accès en local du pc1 au pc2 !

#Suppression de toutes les chaînes
iptables -t filter -F
iptables -t filter -X

#Définition de la cibles par défaut
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

#On autorise le réseaux lo
iptables -t filter -A OUTPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

iptables -t filter -A INPUT -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

#On autorise le réseaux eth0
iptables -t filter -A OUTPUT -o eth0 -s 192.168.1.100/104 -d 192.168.1.100/104 -j ACCEPT
iptables -t filter -A INPUT -i eth0 -s 192.168.1.100/104 -d 192.168.1.100/104 -j ACCEPT

#On autorise le réseaux eth1
iptables -t filter -A OUTPUT -o eth1 -s 10.0.0.0/8 -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -o eth1 -s 10.0.0.0/8 -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -d 10.0.0.0/8 -p tcp --sport 80 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -d 10.0.0.0/8 -p tcp --sport 443 -j ACCEPT

#On autorise mumble
iptables -A INPUT -p udp --dport 64739 -j ACCEPT
iptables -A INPUT -p tcp --dport 64739 -j ACCEPT

#On autorise SSH
iptables -A INPUT -p udp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#On autorise FTP
iptables -A INPUT -p udp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT

#On autorise les ping
iptables -A INPUT -p icmp -j ACCEPT

Je c’est que j’ai fait de très grosse bêtise ! Bhouuu ! :smiling_imp: ( sur lo , eth0 et eth1 )

Voila merci de votre aide ! Merci à debian-fr.org !

Salut,

Tu devrais nous dire ce qui ne va pas et un copié-collé de

/sin/iptables -L -v -n --line-numbers serait un plus :slightly_smiling:

...
#On autorise le réseaux eth0
iptables -t filter -A OUTPUT -o eth0 -s 192.168.1.100/104 -d 192.168.1.100/104 -j ACCEPT
iptables -t filter -A INPUT -i eth0 -s 192.168.1.100/104 -d 192.168.1.100/104 -j ACCEPT
...

Je ne suis pas un expert du tout avec iptables mais pourquoi /104 pour le masque ?

[quote="-Fred-"] ... #On autorise le réseaux eth0 iptables -t filter -A OUTPUT -o eth0 -s 192.168.1.100/104 -d 192.168.1.100/104 -j ACCEPT iptables -t filter -A INPUT -i eth0 -s 192.168.1.100/104 -d 192.168.1.100/104 -j ACCEPT ...
Je ne suis pas un expert du tout avec iptables mais pourquoi /104 pour le masque ?[/quote]

S’il a compris comme ricardo et moi cela signifierait de 100 à 104 ? Mais je n’ai rien d’affirmatif ???

Je ne suis pas d’accord le / signifie bien pour le masque qui ne peut aller plus loin que /32

Ceux deux formes d’écritures sont équivalentes :

iptables -t filter -A OUTPUT -o eth0 -s 192.168.1.0/24 -j ACCEPT iptables -t filter -A OUTPUT -o eth0 -m iprange --src-range 192.168.1.1-192.168.1.254 -j ACCEPT

D’une part, il y a une erreur sur le masque. D’autre part, tu as du inverser INPUT et OUTPUT (ainsi que -i et -o) dans :

#On autorise le réseaux eth1
iptables -t filter -A OUTPUT -o eth1 -s 10.0.0.0/8 -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -o eth1 -s 10.0.0.0/8 -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -d 10.0.0.0/8 -p tcp --sport 80 -j ACCEPT
iptables -t filter -A INPUT -i eth1 -d 10.0.0.0/8 -p tcp --sport 443 -j ACCEPT

Je suppose que tu veux autoriser le réseau 10.0.0.0/8 à joindre le serveur web sur la machine ou tu lances iptables. Il faut donc autoriser

  • en entrée d’une adresse 10.0.0.0/8 à destination du port 80
  • en sortie du port 80 vers une adresse 10.0.0.0/8
  • idem pour le 443

Niloo : le masque ne peut pas aller plus loin que /30 en fait. Il te faut au moins 4 adresses pour un sous-réseau : l’adresse de réseau, l’adresse de broadcast et deux machines. :wink:

[quote=“Niloo”]Je ne suis pas d’accord le / signifie bien pour le masque qui ne peut aller plus loin que /32

Ceux deux formes d’écritures sont équivalentes :

iptables -t filter -A OUTPUT -o eth0 -s 192.168.1.0/24 -j ACCEPT iptables -t filter -A OUTPUT -o eth0 -m iprange --src-range 192.168.1.1-192.168.1.254 -j ACCEPT[/quote]

Autant je comprends bien la seconde forme, autant la première reste pour moi abstraite :blush:
Elles sont rigoureusement EGALES ?

[quote]iptables v1.4.8: host/network 192.168.0.2-192.168.0.5' not found Tryiptables -h’ or ‘iptables --help’ for more information.
iptables v1.4.8: host/network 192.168.0.2-192.168.0.5' not found Tryiptables -h’ or ‘iptables --help’ for more information.
iptables v1.4.8: host/network 192.168.0.2-192.168.0.5' not found Tryiptables -h’ or ‘iptables --help’ for more information.
[/quote]

[quote=“ggoodluck47”][quote=“Niloo”]Je ne suis pas d’accord le / signifie bien pour le masque qui ne peut aller plus loin que /32

Ceux deux formes d’écritures sont équivalentes :

iptables -t filter -A OUTPUT -o eth0 -s 192.168.1.0/24 -j ACCEPT iptables -t filter -A OUTPUT -o eth0 -m iprange --src-range 192.168.1.1-192.168.1.254 -j ACCEPT[/quote]

Autant je comprends bien la seconde forme, autant la première reste pour moi abstraite :blush:
Elles sont rigoureusement EGALES ?

[quote]iptables v1.4.8: host/network 192.168.0.2-192.168.0.5' not found Tryiptables -h’ or ‘iptables --help’ for more information.
iptables v1.4.8: host/network 192.168.0.2-192.168.0.5' not found Tryiptables -h’ or ‘iptables --help’ for more information.
iptables v1.4.8: host/network 192.168.0.2-192.168.0.5' not found Tryiptables -h’ or ‘iptables --help’ for more information.
[/quote][/quote]
En gros : chaque bloc d’adresse (192, 168, 1, 1) est codé en binaire, sur 8 bits. Un masque en /24 signifie que les 24 bits de poids forts, c’est à dire les plus à gauche sont à 1 : ils délimitent le réseau.
/24 = 11111111.11111111.11111111.00000000 (compte, il y a 24 “1”)
Les bits à zéro délimiteront le sous réseau, c’est à dire les adresses qui seront dans le même domaine de broadcast, et qui accessoirement “numéroteront” chacune des interfaces réseau. Les adresses en 192.168.1.0 avec un masques en /24 iront de :
1100000.10101000.00000001.00000000 = 192.168.1.0 <-- adresse du réseau
1100000.10101000.00000001.00000001 = 192.168.1.1
1100000.10101000.00000001.00000010 = 192.168.1.2
1100000.10101000.00000001.00000011 = 192.168.1.3

1100000.10101000.00000001.11111111 = 192.168.1.255 <-- adresse du broadcast
d’ou : 192.168.1.0/24 <=> 192.168.1.1-192.168.1.254

Et comme tu le remarques, un masque ne peut aller au de la de 32 puisque chaque bloc étant codé sur 8 bits, et qu’une adresse comporte 4 blocs (en ipv4 en tout cas) : 4x8 = 32.

Tu feras aussi le rapprochement avec la notation du masque : 255.255.255.0 <=> /24, qui est plus claire une fois les 0 et les 1 posés :041

Pour l’erreur de syntaxe, c’est peut être qu’à la place d’un -, il faut un : pour signifier une plage avec iptables : 192.168.1.1:192.168.1.254

[quote=“dric64”]

Pour l’erreur de syntaxe, c’est peut être qu’à la place d’un -, il faut un : pour signifier une plage avec iptables : 192.168.1.1:192.168.1.254[/quote]
Bon, je n’ai pas de chance, la seule chose que je voulais modifier, c’était justement le ‘:’ à la place du '-'
Je ne tire pas assez vite :confused:

Re,

Désolé :

Je propose (pas testé):
iptables -t filter -A OUTPUT -o eth0 -m iprange --src-range from 192.168.1.1 -to 192.168.1.254 -j ACCEPT

Bonjour ,

Merci de toute vos réponse rapide !

Pour répondre au poste de ggoodluck ses les 3 réseaux lo , eth0 et eth1 qui foire …
mon iptables vien d’ici : olivieraj.free.fr/fr/linux/infor … 03-06.html

et je voudrai que mon pc2 192.168.0.2 peut “parler” avec pc1 192.168.0.1

[quote=“lolit0”]Bonjour ,

Merci de toute vos réponse rapide !

Pour répondre au poste de ggoodluck ses les 3 réseaux lo , eth0 et eth1 qui foire …
mon iptables vien d’ici : olivieraj.free.fr/fr/linux/infor … 03-06.html

et je voudrai que mon pc2 192.168.0.2 peut “parler” avec pc1 192.168.0.1[/quote]

Je sais pas faire “parler” les PC :laughing: :laughing: :laughing:

[quote=“lolit0”]Bonjour ,

Merci de toute vos réponse rapide !

Pour répondre au poste de ggoodluck ses les 3 réseaux lo , eth0 et eth1 qui foire …
mon iptables vien d’ici : olivieraj.free.fr/fr/linux/infor … 03-06.html

et je voudrai que mon pc2 192.168.0.2 peut “parler” avec pc1 192.168.0.1[/quote]

Si tu corrige le masque de sous réseau, ca devrait être bon.

Une personne c’est faire parler les pc ? :038

Mon iptables -L

Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all – lo * 0.0.0.0/0 0.0.0.0/0
2 8 528 ACCEPT all – eth0 * 192.168.1.0/24 192.168.1.0/24
3 0 0 ACCEPT tcp – eth1 * 0.0.0.0/0 10.0.0.0/8 tcp spt:80
4 0 0 ACCEPT tcp – eth1 * 0.0.0.0/0 10.0.0.0/8 tcp spt:443
5 0 0 ACCEPT udp – * * 0.0.0.0/0 0.0.0.0/0 udp dpt:64739
6 0 0 ACCEPT tcp – * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:64739
7 0 0 ACCEPT udp – * * 0.0.0.0/0 0.0.0.0/0 udp dpt:22
8 0 0 ACCEPT tcp – * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
9 0 0 ACCEPT udp – * * 0.0.0.0/0 0.0.0.0/0 udp dpt:21
10 0 0 ACCEPT tcp – * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
11 0 0 ACCEPT icmp – * * 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all – * lo 0.0.0.0/0 0.0.0.0/0
2 5 524 ACCEPT all – * eth0 192.168.1.0/24 192.168.1.0/24
3 0 0 ACCEPT tcp – * eth1 10.0.0.0/8 0.0.0.0/0 tcp dpt:80
4 0 0 ACCEPT tcp – * eth1 10.0.0.0/8 0.0.0.0/0 tcp dpt:443

Sa marche sauf l’accès à internet mais j’en et pas besoin je croie !

dric64, ton explication est bonne excepté sur ce point, ça doit être de l’inattention, mais autant le préciser : c’est “Un masque en /XX signifie que les XX bits de poids forts, c’est à dire les plus à gauche sont fixés et sont ceux de l’ip précédant le /XX : ils délimitent le réseau”

Sinon sur iptables, d’abord un petit graphique du fonctionnement : faqs.org/docs/iptables/image … averse.jpg
À droite les paquets forwardés (en cas de partage de connexion par exemple), à gauche ceux originaires ou à destination de la machine (le local process).

Personnellement, je définis toutes les politiques par :

[code]iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT

iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT[/code]

donc plusieurs remarques :

  • Comme son nom l’indique, la table filter sert à filtrer, il vaut mieux donc l’utiliser elle et laisser le reste en ACCEPT.
  • Je mets OUTPUT sur filter en ACCEPT, car il n’y passe que les paquets originaires de MA machine, à moins que tu ne veuilles bloquer des connexions sortantes, ça me semble inutile de mettre un DROP et d’ouvrir des trucs.
  • Il me semble qu’il est inutile de spécifier l’ip source sur OUTPUT-filter et l’ip destination sur INPUT-filter vu que dans tous les cas, c’est celle de ta machine.
  • Il est également inutile de spécifier des ip du type 0.0.0.0/0, vu que par défaut, c’est la même chose.

PS : ça serait pas mal de savoir à quoi ressemble ton réseau, parce que la, ça me semble bizarre. Je suppose que les deux pc sont connectés à Internet par une box quelconque en filaire sur eth0, alors à quoi sert eth1, qui est surement du wifi ? Sont-ils également connectés ensemble en wifi ?

lolit0, utilise les balises code pour des commandes ou résultats de commandes, c’est beaucoup plus clair, la police est monospace et les espaces/tabs conservés :

[code]Mon iptables -L

Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all – lo * 0.0.0.0/0 0.0.0.0/0
2 8 528 ACCEPT all – eth0 * 192.168.1.0/24 192.168.1.0/24
3 0 0 ACCEPT tcp – eth1 * 0.0.0.0/0 10.0.0.0/8 tcp spt:80
4 0 0 ACCEPT tcp – eth1 * 0.0.0.0/0 10.0.0.0/8 tcp spt:443
5 0 0 ACCEPT udp – * * 0.0.0.0/0 0.0.0.0/0 udp dpt:64739
6 0 0 ACCEPT tcp – * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:64739
7 0 0 ACCEPT udp – * * 0.0.0.0/0 0.0.0.0/0 udp dpt:22
8 0 0 ACCEPT tcp – * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
9 0 0 ACCEPT udp – * * 0.0.0.0/0 0.0.0.0/0 udp dpt:21
10 0 0 ACCEPT tcp – * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
11 0 0 ACCEPT icmp – * * 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all – * lo 0.0.0.0/0 0.0.0.0/0
2 5 524 ACCEPT all – * eth0 192.168.1.0/24 192.168.1.0/24
3 0 0 ACCEPT tcp – * eth1 10.0.0.0/8 0.0.0.0/0 tcp dpt:80
4 0 0 ACCEPT tcp – * eth1 10.0.0.0/8 0.0.0.0/0 tcp dpt:443
[/code]

Pour ssh, tu n’as pas besoin d’ouvrir en udp.

Pour Internet, il y a un voire deux problèmes, et des gros :

  • Si ta connexion Internet passe par eth0, ton pare feu t’empêche de contacter des serveurs autres que 192.168.1.0/24, si ça passe par eth1, ça va, mais je me répète, je te conseille de mettre la politique d’OUTPUT en ACCEPT, et de virer les règles sur cette chaine.

  • Et surtout, il te manque quelque part le classique “state RELATED,ESTABLISHED”, qui permet à une connexion sortante d’obtenir sa réponse, sans ça, toutes les réponses des serveurs web contactés (et de tout ce que tu cantactes je crois) se prennent un DROP dans la tronche lorsqu’elles arrivent sur filter-INPUT. En fait, quand tu te connectes à un serveur web, ta requete spécifie le port destination, 80, et un port source quelconque, du style 45934, et le serveur web te répondra en envoyant sa réponse sur ce port, et ton ordi saura que ce qui arrive sur ce port est la réponse à telle requête.
    Or ce port est fermé, et tu peux pas ouvrir tous les ports de ton ordi, sinon le pare feu sert à rien donc il y a le “state RELATED,ESTABLISHED”, qui laisse entrer les réponses, donc tu dois rajouter quelque part la ligne :

Tu a raison je n’est pas de eth1 "j’ai pompé un peut de code sur un site :D"
et je suis bien derrière une box sur eth0 et j’ai mi output sur accept mais le problème avec
iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Si j’envoie des requêtes au méchant pirate lui peut me répondre … non ? je suis paranoïaque ?

D’accord, donc en gros, tes deux ordis n’utilisent que eth0, ont pour ip 192.168.0.1 et 192.168.0.2 et devraient pouvoir accéder à Internet et se parler entre eux, c’est ca ?

Si oui, tu pourrais avoir un truc du genre (attention aux ips, des fois tu dis 192.168.1.0, d’autres fois 192.168.0.1) :

[code]#Suppression de toutes les chaînes
iptables -t filter -F
iptables -t filter -X

#Définition de la cibles par défaut
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT

iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT

#On autorise les réponses
iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#On autorise le réseaux lo (les -s et -d sont inutiles ici)
iptables -t filter -A INPUT -i lo -j ACCEPT

#On autorise le réseaux eth0 (le -d est inutile ici)
#la plage 192.168.0.0 - 192.168.0.255 (ton réseau local) peut acceder à ton pc,
#sur tous les ports sur eth0 uniquement
iptables -t filter -A INPUT -i eth0 -s 192.168.0.0/24 -j ACCEPT

#On autorise mumble
iptables -t filter -A INPUT -p udp --dport 64739 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 64739 -j ACCEPT

#On autorise SSH (udp est inutile pour ssh)
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT

#On autorise FTP
iptables -t filter -A INPUT -p udp --dport 21 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT

#On autorise les ping
iptables -t filter -A INPUT -p icmp -j ACCEPT[/code]

La ton réseau local est ouvert, c’est-à dire que tous les pc de la plage 192.168.0.0-192.168.0.255 peuvent se parler sans restriction sur tous les ports sur l’interface eth0. C’est en genéral assez sur, un ordi de ton réseau local n’étant généralement pas une menace, sauf quand tu controles pas le réseau local (hot spot wifi, résidence étudiante), ou tu voudrais remplacer le

iptables -t filter -A INPUT -i eth0 -s 192.168.0.0/24 -j ACCEPT par iptables -t filter -A INPUT -i eth0 -s 192.168.0.0/24 -p udp --dport XX -j ACCEPT iptables -t filter -A INPUT -i eth0 -s 192.168.0.0/24 -p tcp --doprt YY -j ACCEPT ...
Attention, un hotspot wifi se connecterait surement avec eth1, potentiellement avec une plage d’ip différente, il faudrait peut-être modifier les règles.
Inutile toutefois de rouvrir les ports 22, 21 et mumble, les dernières règles les ouvrant pour toutes les ip sur toutes les interfaces (tu pourrais d’ailleurs rajouter des -i eth0 si tu veux pas les ouvrir sur autres choses que ton cable ethernet).

Les ordinateurs n’étant pas sur ce réseau local n’auront accès à ton ordi que sur les ports 64739, 22 et 21, comme spécifié. Si tu veux autoriser ton serveur web depuis l’extérieur du réseau local, tu dois ouvrir les ports 80/443 de la même façon.

[quote=“lolit0”]mais le problème avec
iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Si j’envoie des requêtes au méchant pirate lui peut me répondre … non ? je suis paranoïaque ?[/quote]

Euh me suis jamais posé la question mais à mon avis doit pas y avoir de problèmes. Déja doit y avoir un timeout, il peut pas répondre éternellement, donc un pirate qui irait voir ses logs pourrait pas se dire “tiens il m’a contacté lui, m’en vais le cracker”, il faudrait que la réponse soit quasi immédiate, donc un truc du style un serveur malveillant, mais bon t’es sous Debian, ou du man in the middle, mais la c’est que quelqu’un t’en veux vraiment, et je sais même pas s’il porrait vraiment faire quelque chose de dangereux excepté t’espionner/te voler tes pass, etc.

Mais de toutes façons, si on veut Internet on a pas le choix, on doit accepter les réponses.