Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
iptables
Envoyé par: ido

Hello

je viens de m'interesser à iptables je n'avais jamais défini de règles particulières avant ça. Tout fonctionne correctement sauf un petit détail qui est loin d'être grave mais bon je ne pairais pas plus cher à poser la question.

J'ai deux PC en LAN mon pc de bureau qui me sert de passerelle et mon pc portable

j'ai écris le script suivant pour ma passerelle:


#!/bin/bash

# LES TABLES
# "filter": utilisé pour réaliser des pare-feu.
# "mangle": utilisé pour marquer des paquets.
# "nat": utilisé pour effectuer des translations d'adresses.

#iptables [-t table] -A chaîne [-s source] [-d destination] [-p protocole]
#    [-i itfsource] [-o itfdest] [-j cible]
# -"table" est la table dans laquelle se trouve la chaîne manipulée (par défaut, il s'agit de la table filter) ;
# -"chaîne" est le nom de la chaîne à laquelle la règle doit être ajoutée ;
# -"source" est l'adresse source du paquet ;
# -"destination" est l'adresse destination du paquet ;
# -"protocole" est le protocole du paquet (spécifié avec son numéro de port ou par le nom du protocole tel qu'il est déclaré dans le fichier /etc/services) ;
# -"itfsource" est le nom de l'interface réseau source par laquelle le paquet doit arriver ;
# -"itfdest" est le nom de l'interface destination par laquelle le paquet doit sortir ;
# -"cible" est la cible des paquets qui vérifient les critères de sélection de la règle.


# -ACCEPT, pour accepter le paquet qui vérifie le critère de sélection de la règle ;
# -DROP, pour éliminer purement et simplement le paquet ;
# -REJECT, pour rejeter le paquet (en signalant l'erreur à la machine émettrice). Cette cible n'est utilisable que dans les chaînes INPUT, FORWARD et OUTPUT, ainsi que dans les chaînes utilisateurs appelées à partir de ces chaînes ;
# -QUEUE, pour envoyer le paquet à un programme utilisateur capable de communiquer avec NetFilter ;
# -RETURN, pour sortir de la chaîne immédiatement, ou appliquer la règle de la politique par défaut pour les chaînes prédéfinies ;
# -REDIRECT, pour rediriger le paquet sur une autre machine, souvent la machine locale. Cette cible n'est utilisable qu'avec la table nat, car il s'agit d'une translation d'adresse. On ne peut l'utiliser que dans les chaînes PREROUTING et OUTPUT et les chaînes utilisateur appelées à partir de ces chaînes ;
# -SNAT, pour permettre la modification de l'adresse source du paquet. Cette cible n'est bien entendu accessible qu'au niveau de la table nat. Comme la modification de l'adresse source n'a de signification que pour les paquets devant sortir de la passerelle, cette cible ne peut être utilisée que dans la chaîne POSTROUTING et les chaînes utilisateur appelées à partir de cette chaîne ;
# -DNAT, pour effectuer la modification de l'adresse destination du paquet, afin par exemple de le détourner vers une autre machine que celle vers laquelle il devait aller. Cette cible n'est accessible que dans la table nat, et n'est utilisable que dans les chaînes PREROUTING et OUTPUT ainsi que dans les chaînes utilisateur appelées à partir de ces chaînes ;
# -MASQUERADE, pour effectuer une translation d'adresse sur ce paquet, dans le but de réaliser un partage de connexion à Internet. Cette cible n'est accessible que dans la chaîne POSTROUTING de la table nat, ainsi que dans les chaînes utilisateur appelées à partir de cette chaîne.

# iptables -D chaîne numéro >> supression d'une règle.
# iptables -D chaîne numéro >> fixer la politique d'un règle, donc a cible par défaut.

# 127.0.0.0/8 > correspond à la machine elle même
# 192.168.0.0/25 > correspond à toute les machines du réseau 192.168.0.0 (donc 192.168.0.1; 192.168.0.2 etc...) de masque 255.255.255.0 (/25)

# Définition de la politique de base :
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Suppression des règles existantes :
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT

# Communications locales :
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Autorise les communications sortantes pour DNS, HTTP, HTTPS, FTP, POP, SMTP, SSH et IPSec :
iptables -A OUTPUT -o ppp0 -p UDP --dport domain -j ACCEPT
iptables -A OUTPUT -o ppp0 -p UDP --dport 6515 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p TCP --dport domain -j ACCEPT
iptables -A OUTPUT -o ppp0 -p TCP --dport http   -j ACCEPT
iptables -A OUTPUT -o ppp0 -p TCP --dport https  -j ACCEPT
iptables -A OUTPUT -o ppp0 -p TCP --dport pop3   -j ACCEPT
iptables -A OUTPUT -o ppp0 -p TCP --dport smtp   -j ACCEPT
iptables -A OUTPUT -o ppp0 -p TCP --dport imap   -j ACCEPT
iptables -A OUTPUT -o ppp0 -p TCP --dport ssh    -j ACCEPT
iptables -A OUTPUT -o ppp0 -p AH  -j ACCEPT
iptables -A OUTPUT -o ppp0 -p ESP -j ACCEPT
# Gamespy & Neverwinter nights
iptables -A OUTPUT -o ppp0 -p TCP --dport 6515 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p udp --dport 5120:5300 -j ACCEPT
# MSN
iptables -A OUTPUT -o ppp0 -p TCP --dport 1863 -j ACCEPT
# ICQ
iptables -A OUTPUT -o ppp0 -p TCP --dport 5190 -j ACCEPT
# Jabber
iptables -A OUTPUT -o ppp0 -p TCP --dport 5222 -j ACCEPT
# XCHAT
iptables -A OUTPUT -o ppp0 -p TCP --dport 6667 -j ACCEPT

# aMule
iptables -A OUTPUT -o ppp0 -p TCP --dport 4662 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p TCP --dport 4672 -j ACCEPT
iptables -A INPUT -p UDP --dport 4672 -m state --state NEW -j ACCEPT
iptables -A INPUT -p TCP --dport 4662 -m state --state NEW -j ACCEPT

# Autorise l'établissement des connexions protocolaires additionnelles :
iptables -A OUTPUT -o ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Autorise les paquets entrants suite a une connexion que nous avons initiées
iptables -t filter -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -t filter -A OUTPUT -o eth0 -p tcp --dport ftp --syn -j ACCEPT
iptables -t filter -A OUTPUT -o ppp0 -p tcp --dport ftp --syn -j ACCEPT

# Autorise les paquets sortants qui suivent les connexions que nous avons initiées
iptables -t filter -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A OUTPUT -o ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Autorise les paquets entrants FTP
# Remarque : Les reponses ("commandes" et "data") du serveur FTP sont autorisées par la règles ci-dessus
iptables -t filter -A INPUT -i eth0 -p tcp --dport ftp --syn -j ACCEPT
iptables -t filter -A INPUT -i ppp0 -p tcp --dport ftp --syn -j ACCEPT

# Autorise les connexions SSH entrantes :
iptables -A INPUT  -i ppp0 -p TCP --dport ssh -j ACCEPT
iptables -A OUTPUT -o ppp0 -p TCP --sport ssh -j ACCEPT

# Autorise les paquets ICMP intéressants :
iptables -A OUTPUT -p ICMP --icmp-type echo-reply -j ACCEPT
iptables -A INPUT  -p ICMP --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT
iptables -A INPUT  -p ICMP --icmp-type echo-reply -j ACCEPT
iptables -A INPUT  -p ICMP --icmp-type destination-unreachable -j ACCEPT

# PARTAGE DE CONNEXION INTERNET
# Effectue la translation d'adresses :
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
#iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE

# Autorise le trafic DNS, HTTP, HTTPS, FTP, POP, SMTP et SSH au travers de la passerelle :
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p UDP --dport domain -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p UDP --dport 6515 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p TCP --dport domain -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p TCP --dport http -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p TCP --dport https -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p TCP --dport ftp -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p TCP --dport pop3 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p TCP --dport smtp -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p TCP --dport ssh -j ACCEPT
# Gamespy & Neverwinter nights
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p TCP --dport 6515 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p udp --dport 5120:5300 -j ACCEPT
# MSN
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p TCP --dport 1863 -j ACCEPT
# ICQ
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p TCP --dport 5190 -j ACCEPT
# Jabber
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o ppp0 -p TCP --dport 5222 -j ACCEPT

# Autorise l'établissement des connexions protocolaires additionnelles :
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -o eth0 --match state \
	--state ESTABLISHED,RELATED -j ACCEPT

# Autorise le trafic en retour pour les connexions établies par les clients :
iptables -A FORWARD -i ppp0 -d 192.168.0.0/24 --match state \
	--state ESTABLISHED,RELATED -j ACCEPT

# Autorise le trafic ICMP :
iptables -A FORWARD -p ICMP --icmp-type echo-request -j ACCEPT
iptables -A FORWARD -p ICMP --icmp-type echo-reply -j ACCEPT
iptables -A FORWARD -p ICMP --icmp-type destination-unreachable -j ACCEPT

# Règle destiné a résoudre un problème de MTU (Il peut arriver que le MTU de la liaison entre le fournisseur d'accès et le serveur NAT soit légèrement inférieur au MTU de la liaison ETHERNET qui relie le serveur NAT aux machines qui sont derrière le NAT).
# Restreint la taille des paquets des connexions TCP lors de leur établissement afin de résoudre un bogue de certains routeurs et certaines passerelle d'Internet
# Cette règle un peu compliquée permet de modifier le champ MSS (« Maximum Segment Size ») des paquets d'établissement des connexions TCP (paquets disposant des flags TCP SYN ou RST) qui traversent la passerelle, et de forcer ce champ à la valeur de la taille maximum des paquets sur le chemin (« Path Maximum Transmission Unit » dans l'option --clamp-mss-to-pmtu).
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o ppp0 \
	--clamp-mss-to-pmtu

# Activation du routage :
echo "1" > /proc/sys/net/ipv4/ip_forward



Je risque fort de mettre un peu d'ordre la dedant mais le problème n'est pas là:

Lorsque je navigue sur internet avec mon pc portable (celui branché en LAN donc) et sans activer ce script je n'ai aucun problème

En revanche lorsque j'utilise le script et que je navigue sur internet, impossible d'afficher la page de caramail (http://www.msn.com) ou celle de msn (http://www.msn.com).

Ce n'est pas que je désire acceder à ces sites à tout prix mais j'aurais aimer savoir pourquoi ca ne fonctionne pas.

Pouvez vous m'aider?

ha et si vous avez des remarques sur ce script :-)) (c'est mon premier)

Poste le Monday 2 January 2006 23:39:15
Répondre     Citer    
Re: iptables
Envoyé par: ss

Peut-etre car caramail, pour la messagerie instantanee , se connecte sous un autre port et que celui-ci est bloque par IP tables. Pour en etre sur, tappe :
# service iptables stop
puis essaye ensutie, ca pourrait marcher, peut-etre .

Bonne chance,
A+

Poste le Tuesday 3 January 2006 01:09:50
Répondre     Citer    
Re: iptables
Envoyé par: ido

si je tappe service iptables stop (donc sur la passerelle puisque k'iptable est configuré sur la passerelle): >> sur le portable (pc branché en Lan) je n'ai aucun probleme pour acceder a ces sites.

Par contre si j'utilise le script: >> je peux afficher ces sites (donc msn et caramail) sur la passerelle mais pas sur le pc portable (branché en LAN).

Poste le Tuesday 3 January 2006 01:32:30
Répondre     Citer    
Re: iptables
Envoyé par: lolotux

Salut,

au lieu de :
# PARTAGE DE CONNEXION INTERNET
# Effectue la translation d'adresses :
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE

essayes :
# PARTAGE DE CONNEXION INTERNET
# Effectue la translation d'adresses :
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Dis nous ce que cela donne !



Software is like sex !
It's better when it's Free !

Poste le Wednesday 4 January 2006 06:50:14
Répondre     Citer    
Re: iptables
Envoyé par: ido

Ca ne change rien, la page de caramail ne veut toujours pas s'afficher.

Poste le Wednesday 4 January 2006 15:12:07
Répondre     Citer    
Re: iptables
Envoyé par: ido

Ha j'oubliais

Bien sur quand je n'utilise pas le parefeu je partage internet avec cette commande:

echo 1 > /proc/sys/net/ipv4/ip_forward && iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE && iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o ppp0 --clamp-mss-to-pmtu


Lorsque je fais ca je n'ai pas de problemes

Poste le Wednesday 4 January 2006 15:19:05
Répondre     Citer    
Re: iptables
Envoyé par: ido

Ho et la passerelle est sous linux, le portable (branché en LAN) est sous windows

Poste le Wednesday 4 January 2006 15:20:52
Répondre     Citer    
Re: iptables
Envoyé par: ido

Bon ben je viens d'essayer en utilisant un live cd de mandriva (sur le portable, pc branché en LAN)

et le comportement est exactement le meme que sous windows (avec et sans la modif que vous m'avez suggéré)

Poste le Wednesday 4 January 2006 15:47:56
Répondre     Citer    
Re: iptables
Envoyé par: Ballbreaker

Ido,
essaie la doc de Olivier ALLARD-JACQUIN sur [olivieraj.free.fr] c'est très complet sur iptables, il m'a même renseigné un jour personnellement par mail, compétent et sympa...
Bon courage.

Poste le Friday 6 January 2006 19:25:32
Répondre     Citer    
Re: iptables
Envoyé par: ido

Merci Ballbreaker je vais lire ça

Poste le Saturday 7 January 2006 03:31:51
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
iptables
Posez dans ce forum les questions qui ne trouvent pas place dans les autres...

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons