Firewall / Routeur sous Linux

Fermé
DAG - 15 janv. 2008 à 20:09
 louis - 22 avril 2008 à 15:21
Bonjour, 

Je doit mettre en place un routeur sous Linux pour permettre de filtrer les échange entre l'internet un réseau local de l'entreprise.
Voici l'architecture réseau souhaitée pour l'entreprise :

------------------
|    Internet    |     
------------------
         |
         | 
         |   @IP publique
---------------------------
|    Routeur frontal    |
---------------------------
               |   10.14.200.250
               |   
               |
               |   eth0 = 10.14.200.150
------------------------------------
|    Roteur / Firewall LINUX    |
------------------------------------
                      |   eth1 = 192.168.1.1
                      |
                      |
                      |   Switch avec @ en : 192.168.1.xxx
--------------------------------------------
|    Réseau local de l'entreprise...    |
--------------------------------------------


Je n'arrive pour le moment à aucun résultats... Internet ne passe pas le firewall...

J'ai essayé avec les commandes suivante :

[        ]# iptables -F
[        ]# iptables -X
[        ]# iptables -t nat -F
[        ]# iptables -t nat -X
[        ]# iptables -t nat POSTROUTING -o eth0 -j nat
[        ]# echo 1 > /proc/sys/net/ipv4/ipforward

Ou en utilisant des routes :

[        ]# route add -net 10.14.200.150 netmask 255.0.0.0 eth0
[        ]# route add -net 192.168.1.1 netmask 255.255.255.0 eth0
[        ]# route add default eth0

Configuration d'un PC "client" (faisant partie du réseau local) 
@ = 192.168.1.xxx
mask = 255.255.255.0
gw = 192.168.1.150


Est-ce que quelqu'un aurai une idée de la configuration pour que je puisse utiliser la machine LINUX comme passerelle vers l'autre routeur, ou comme routeur et que je puisse par la suite appliquer des regles iptables ? 

Merci devos réponses.
A voir également:

8 réponses

efflamm Messages postés 22 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 30 janvier 2008 3
15 janv. 2008 à 21:36
Bonjour,

Pour plus de simplicité dans tes démarches je te conseille fortement les outils suivants :

iptables-save > un_fichier // pour sauver un travail dans un fichier
iptables-restore < un_fichier // pour restaurer ce même travail

Il manque des éléments essentiels dans ton approche : tu ne masquerade rien. Il te manque une règle pour cela (à la fin du code).
Ensuite ton approche du problème doit mieux passer si tu raisonnes en "flux" et en "interface réseau".

Une approche assez similaire à ton besoin faite en fin 2005/ début 2006, il s'agit d'un serveur linux Debian jouant le rôle de routeur. Deux carte réseaux, une branché sur le lan 10.0.1.x, l'autre à un modem routeur 192.168.0.x.L'idée c'etait de faire un pare feu logiciel assez léger pour de petite config, avec tout de meme des possibilités de log.

*filter

# 1ère étape on drop tout. On discute pas.
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

#ici on crée les règles qui vont servir par la suite à trier tout ça.
:Cid4288B349.0 - [0:0]
:Cid4288B349.1 - [0:0]
:Cid4288B353.0 - [0:0]
:Cid4288B35D.0 - [0:0]
:Cid4288B35D.1 - [0:0]
:Cid4288B372.0 - [0:0]
:Cid4288B372.1 - [0:0]
:RULE_5 - [0:0]
:RULE_8 - [0:0]
:eth1_In_RULE_0 - [0:0]

### en premier on veut traiter INPUT
# on respecte les connections déja établies
#ne pas faire cela cest une garantie de quelque bon sprint vers le local serveur ;-)
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# on fait en sorte que tout les flux locaux passe par la règle eth1_In_RULE_0
-A INPUT -s 192.168.0.11 -i eth1 -j eth1_In_RULE_0
-A INPUT -s 10.0.1.1 -i eth1 -j eth1_In_RULE_0
-A INPUT -s 10.0.1.0/255.255.255.0 -i eth1 -j eth1_In_RULE_0

#on accepte tout les connections sur le loopback.
-A INPUT -i lo -m state --state NEW -j ACCEPT

# tous les broadcasts  sur toute les interfaces et vers toute les directions soient dirigés vers une règle
-A INPUT -d 255.255.255.255 -j Cid4288B349.1

#on accepte les nouvelles connections en provenance du lan et on les diriges dans une règle
-A INPUT -s 10.0.1.0/255.255.255.0 -m state --state NEW -j Cid4288B353.0

#on accepte les nouvelles connections en provenance de la carte réseau connecté au réseau modem routeur
-A INPUT -s 192.168.0.11 -m state --state NEW -j ACCEPT

#on accepte les nouvelles connections en provenance de la carte réseau connecté au lan
-A INPUT -s 10.0.1.1 -m state --state NEW -j ACCEPT

#on accepte les nouvelles connections à destination du modem routeur mais on les envoie dans une règle
-A INPUT -d 192.168.0.11 -m state --state NEW -j Cid4288B372.1

#on accepte les nouvelles connections à destination de la carte réseau connecté au lan mais on les envoie dans une règle
-A INPUT -d 10.0.1.1 -m state --state NEW -j Cid4288B372.1

#tout le  reste à destination de la carte réseau connecté au modem routeur et 
# et de la carte réseau connecté au lan fait l'objet d'un traitement dans une règle
-A INPUT -d 192.168.0.11 -j RULE_5
-A INPUT -d 10.0.1.1 -j RULE_5

#on laisse passer les messages port inacessible à destination du lan, c'est préférable pour un routeur ;-)
-A INPUT -d 10.0.1.0/255.255.255.0 -p icmp -m icmp --icmp-type 3 -m state --state NEW -j ACCEPT

#on accepte absolument toute nouvelle connection en provenance du lan
# c'est essentiel
-A INPUT -s 10.0.1.0/255.255.255.0 -m state --state NEW -j ACCEPT

#Si quelque chose n'a pas été filtré alors il y a un problème, un flux non géré en général, redirection de port et autre sucrerie.
-A INPUT -j RULE_8

### le bloc INPUT est terminé
### on attaque le bloc FORWARD

# même politique que précédement on est tolérant envers les connections déja établies.
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

#tout les paquets à transférer en provenance de l'interface connecté au réseau modem routeur sont traités dans une règle
-A FORWARD -s 192.168.0.11 -i eth1 -j eth1_In_RULE_0

#même chose pour ceux provenant de la carte réseau connecté au lan et passant bien par la bonne interface
-A FORWARD -s 10.0.1.1 -i eth1 -j eth1_In_RULE_0

#c'est la même chose que précedement sauf que cette fois ci ce sont les paquets en provenance du lan
-A FORWARD -s 10.0.1.0/255.255.255.0 -i eth1 -j eth1_In_RULE_0

# on laisse passer le code port inacessible à destination du lan
-A FORWARD -d 10.0.1.0/255.255.255.0 -p icmp -m icmp --icmp-type 3 -m state --state NEW -j ACCEPT

#toute nouvelle connection en provenance du lan est systématique accepté
-A FORWARD -s 10.0.1.0/255.255.255.0 -m state --state NEW -j ACCEPT

# une redirection particulière vers une IP précise du LAN
-A FORWARD -d 10.0.1.108 -i eth1 -o eth0 -p tcp -m tcp --dport 8100 -j ACCEPT

# si quelque chose n'est pas traité, il y a un problème, on envoie dans une règle.
-A FORWARD -j RULE_8

###le bloc FORWARD est terminé
### le bloc OUTPUT commence

# déja vu non ? en sortie cette fois
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# même chose pour le loopbak, oubliez ceci juste une fois pour voir :)
-A OUTPUT -o lo -m state --state NEW -j ACCEPT

#les broadcast vont dans une règle spéciale
-A OUTPUT -d 255.255.255.255 -j Cid4288B349.0

# les paquet à destination du lan  passe aussi dans une règle
-A OUTPUT -d 10.0.1.0/255.255.255.0 -j Cid4288B35D.0

# on accepte toute nouvelle connection sortante provenant de la carte réseau connecté au modem routeur
-A OUTPUT -s 192.168.0.11 -m state --state NEW -j ACCEPT

#meme chose pour celle du lan
-A OUTPUT -s 10.0.1.1 -m state --state NEW -j ACCEPT

#tout paquet à destination de la carte réseau connecté au modem routeur est maintenant dirigé dans une règle.
-A OUTPUT -d 192.168.0.11 -m state --state NEW -j Cid4288B372.0

#meme chose pour la carte réseau connecté au lan
-A OUTPUT -d 10.0.1.1 -m state --state NEW -j Cid4288B372.0

#si quelque chose d'autre passe par la carte réseau connecté au modem routeur on envoie dans une règle.
-A OUTPUT -d 192.168.0.11 -j RULE_5

#meme chose pour la carte connecté au lan
-A OUTPUT -d 10.0.1.1 -j RULE_5

#on laisse passer le code 3 port inacessible à destination et en provenance du lan
-A OUTPUT -d 10.0.1.0/255.255.255.0 -p icmp -m icmp --icmp-type 3 -m state --state NEW -j ACCEPT
-A OUTPUT -s 10.0.1.0/255.255.255.0 -m state --state NEW -j ACCEPT

#si quelque chose d'autre passe on envoie dans une règle.
-A OUTPUT -j RULE_8

###le bloc OUTPUT est terminé
### le plus intéressant maintenant le TRAITEMENT à l'intérieur des règles 

#on drop un vieux protocole , anciennement dhcp
-A Cid4288B349.0 -p udp -m udp -m multiport --dports 68,67 -j DROP
-A Cid4288B349.1 -p udp -m udp -m multiport --dports 68,67 -j DROP

#on accepte les connections à destination de la carte connecté au modem routeur
-A Cid4288B353.0 -d 192.168.0.11 -j ACCEPT

#pareil pour la carte connecté au lan
-A Cid4288B353.0 -d 10.0.1.1 -j ACCEPT

#on précise quel type de protocole on veut filtrer ici, la réponse ping et le TTL
-A Cid4288B35D.0 -p icmp -m icmp --icmp-type 0/0 -j Cid4288B35D.1
-A Cid4288B35D.0 -p icmp -m icmp --icmp-type 11/0 -j Cid4288B35D.1
-A Cid4288B35D.1 -s 192.168.0.11 -j ACCEPT
-A Cid4288B35D.1 -s 10.0.1.1 -j ACCEPT

# ici on définit les service qu'on laisse passer pop,smtp,ftp,http,ssh,wgs
-A Cid4288B372.0 -p tcp -m tcp -m multiport --dports 110,25,21,20,80,22,8100 -j ACCEPT
-A Cid4288B372.1 -p tcp -m tcp -m multiport --dports 110,25,21,20,80,22,8100 -j ACCEPT

### le bloc TRAITEMENT étant terminé
### on passe maintenant aux traitement des logs via syslog

#c'est simple on log et on drop
-A RULE_5 -j LOG --log-prefix "RULE 5 -- DENY " --log-level 6
-A RULE_5 -j DROP
-A RULE_8 -j LOG --log-prefix "RULE 8 -- DENY " --log-level 6
-A RULE_8 -j DROP
-A eth1_In_RULE_0 -j LOG --log-prefix "RULE 0 -- DENY " --log-level 6
-A eth1_In_RULE_0 -j DROP
COMMIT
*nat

### DNAT et SNAT 
:PREROUTING ACCEPT [14120:1457190]
:POSTROUTING ACCEPT [24501:1885523]
:OUTPUT ACCEPT [24484:1884575]

### squid en mode prxy cache transparent nécessite cette règle
-A PREROUTING -s 10.0.1.0/255.255.255.0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.1.1:3128

### redirection de port pour wgs
-A PREROUTING -i eth1 -p tcp -m tcp --dport 8100 -j DNAT --to-destination 10.0.1.108

### et pour finir on fait le masquerading du réseau local
### c'est essentiel
-A POSTROUTING -s 10.0.1.0/255.255.255.0 -o eth1 -j MASQUERADE
COMMIT


Espérant t'avoir donné quelque pistes. Ho, j'allais oublier hésite pas à consulter des liens de ce type pour acquérir les notions de base de netfiler!
Par exemple :
http://www.linux-france.org/prj/edu/archinet/systeme/ch62.html
0
Salut Efflam,

J'ai besoin d'installer ça chez moi est-ce que tu pourrait t'en occuper moyennant rémunération?

Merci

Louis
lvachette@gmail.com
0
Merci beaucoup, je vais étudier ta conf, et essayer de l'adapter à la mienne. Je te remercie de m'avoir répondu.

Juste une petite question, est-ce qu'il y a des routes à mettre au niveau du fairewall ? Et qelle doit etre la conf des clients (doivent-ils avoir comme passerelle l'adresse du firewall, et doivent-ils avoir des routes spécifiques) ?

Désolé pour toutes ces questions, mais je débute...

Merci encore.
0
efflamm Messages postés 22 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 30 janvier 2008 3
15 janv. 2008 à 23:58
Tes postes utilisateurs doivent avoir comme passerelle l'adresse de ton firewell linux, oui. Pas de route à spécifier, cela se fait en général tout seul. Tu dois la changer que dans des cas exceptionnels,cela concerne plutot des serveurs.

pour te simplifier la vie, si c'est compatible avec ton réseau , ça serait de créer un serveur DHCP.L'avantage est triple :

-tu peux quand meme fixer par ip fixe les adresse physiques des cartes(MAC) si besoin, et en général il y a besoin pour certaines applis.

-tu peux gérer sans souci les pc nomades qui se connecte ponctuellement

- si tu dois changer les paramètres réseaux des postes utilisateurs justement (passerelle, dns,netmask,etc..), tu peux le faire d'un coup d'un seul pour tous ou poste par poste directement du serveur, puis en lancant une simple commande sur le poste client ( ipconfig /renew )
0
oui je vais mettre en place un serveur DHCP sur l'interface coté LAN, j'avais prévu de faire ceci.

Autre chose : la conf que que tu as déposée précédament, comment puis-je faire pour la mettre sur mon réseau ? Je ne peux pas la copier, la modifier, puis la mettre sur mon firewall en utilisant la commande iptables-restore ? Utilisais-tu un proxy squid ?

Merci encore une fois pour ton aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
efflamm Messages postés 22 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 30 janvier 2008 3
30 janv. 2008 à 00:45
salut,

désolé du retard, pas eu vraiment le temps de venir ici..

Tu copie dans un fichier le code.Tu l'adaptes à ton réseau. et lorsque tu es prêt à tester tu fais iptables-restore < ton_fichier.
Mais tout ne t'es pas forcément utile, de même il peut manquer des services à laisser passer, etc.. il te faudra tatoner beaucoup, mais c'est une façon d'apprendre même si c'est pas la plus simple ;-)

Pour reprendre ton schéma si cela peut t'aider, voici à quoi ressemblais le réseau :

Internet |
------------------
|
|
| @IP publique
---------------------------
| Routeur frontal |
---------------------------
| xxx.xxx.xxx.xxx
|
|
| eth0 = 192.168.0.11
------------------------------------
| Routeur / Firewall LINUX |
------------------------------------
| eth1 = 10.0.1.1
|
|
| Switch en : 10.0.1.xxx
--------------------------------------------
| Réseau local de l'entreprise... |
--------------------------------------------

Ce qui est identique à ton réseau, ou quasi, hormis les classes qui changent.

Pour Squid, oui effectivement il tournait en mode cache transparent, comme l'illustre cette règle :

-A PREROUTING -s 10.0.1.0/255.255.255.0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.1.1:3128

Elle permet de renvoyer toute les requetes sur le port 80 vers le 3128 uniquement sur l'interface ou squid écoute ( LAN ) et avant le masquerading.

J'ai mis un suivi par mail, histoire de pas oublier à nouveau
0
Merci pour ta réponse.

En fait j'avais eu le temps de trouver, mais ton model m'a bcp servit !

Merci encore,

Ciao.
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
30 janv. 2008 à 15:08
drag peut tu mettre resolue merci a toi et si c'est possible peut tu nous donné l'exemple que tu a crée cela m'interesse aussi
0
Pour l'exemple, j'ai repris la meme conf que efflamm, sauf que j'ai modifier les adresses ip pour l'appliquée à mon réseau, j'ai changé le nom des chaines, et je l'est exécuter en tant que script bash ! Rien de bien méchant ! lol
Mais pour comprendre, j'ai tester les regles quasiment 1 par 1 pour voir ce qu'elles faisaient.
0