Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/06/2015, à 23:12

PITDU53

Configuration d'un pare-feu avec iptables (+Partage de connexion)

Bonjour,

Dans le but de mettre en place un serveur mandataire transparent et d'un pare-feu sur un ubuntu-server. J'ai effectué des recherches sur l’utilisation d'iptables.

voici un petit schéma du réseau : (le serveur mandataire + pare-feu sera nommé : PROXY)

                                     livebox-1.home               $Interface_Internet      $Interface_Local

                                                                                              eth1 :                      eth0 :

                                      192.168.1.1/24                  192.168.1.50/24     172.16.0.1/16            172.16.0.10/16

[INTERNET]<----->[Livebox]<------------------------------------------->[PROXY]<----------------------------------->[POSTE_1]

Dans un premier temps j'ai décider de mettre en place le pare-feu avec iptables avec des règles basiques.

voici la partie qui configure le partage de connexion :

##################################################################################################
# Met en place le masquage ip
##################################################################################################
echo "Met en place le masquage ip (l'IP masquerading)"
     
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_nat_irc
     
iptables -t filter -A FORWARD -i $Interface_Local -o $Interface_Internet -s 172.16.0.0/16 -d 192.168.1.0/24 -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -i $Interface_Internet -o $Interface_Local -s 192.168.1.0/24 -d 172.16.0.0/16 -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
     
iptables -t nat -A POSTROUTING -o $Interface_Internet -s 172.16.0.0/16 -d 192.168.1.0/24 -p all -j MASQUERADE
     
echo 1 > /proc/sys/net/ipv4/ip_forward
##################################################################################################

Mais le partage de connexion ne fonctionne pas je n'ai pas d’accès à internet. Ma question est donc simple si vous en avez la réponse. Quel est l'erreur que j'ai commise en faisant la conception de ces règles (voir même du reseau)?
Il est possible que vous souhaitiez voir l’intégralité du script, voir même dans le cas ou j'aurrais apporté des modifications, celui-ci est disponible ici :

https://github.com/HoudayerPierre/iptab … r/iptables

Enfin voici le resultat de iptables -L :

Chain INPUT (policy DROP)
target     prot opt source               destination        
ACCEPT     all  --  anywhere             anywhere           
ACCEPT     all  --  172.16.0.0/16        172.16.0.1         
ACCEPT     all  --  172.16.255.255       172.16.0.1         
ACCEPT     all  --  192.168.1.0/24       livebox-1.home       state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
 
Chain FORWARD (policy DROP)
target     prot opt source               destination        
ACCEPT     tcp  --  192.168.1.0/24       172.16.0.0/16        tcp dpt:http state NEW,RELATED,ESTABLISHED
ACCEPT     tcp  --  172.16.0.0/16        192.168.1.0/24       tcp spt:http state RELATED,ESTABLISHED
ACCEPT     udp  --  192.168.1.0/24       172.16.0.0/16        udp dpt:http state NEW,RELATED,ESTABLISHED
ACCEPT     udp  --  172.16.0.0/16        192.168.1.0/24       udp spt:http state RELATED,ESTABLISHED
ACCEPT     tcp  --  192.168.1.0/24       172.16.0.0/16        tcp dpt:https state NEW,RELATED,ESTABLISHED
ACCEPT     tcp  --  172.16.0.0/16        192.168.1.0/24       tcp spt:https state RELATED,ESTABLISHED
ACCEPT     udp  --  192.168.1.0/24       172.16.0.0/16        udp dpt:https state NEW,RELATED,ESTABLISHED
ACCEPT     udp  --  172.16.0.0/16        192.168.1.0/24       udp spt:https state RELATED,ESTABLISHED
ACCEPT     all  --  172.16.0.0/16        192.168.1.0/24       state NEW,RELATED,ESTABLISHED
ACCEPT     all  --  192.168.1.0/24       172.16.0.0/16        state RELATED,ESTABLISHED
 
Chain OUTPUT (policy DROP)
target     prot opt source               destination        
ACCEPT     all  --  anywhere             anywhere           
ACCEPT     all  --  172.16.0.1           172.16.0.0/16      
ACCEPT     all  --  172.16.0.1           172.16.255.255     
ACCEPT     all  --  livebox-1.home       192.168.1.0/24       state NEW,RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain

Je vous remercie de votre attention et de la future aide que vous pouvez m'apporter. N’hésitez pas à me demander si vous trouvez qu'il manque des informations.

Hors ligne

#2 Le 23/06/2015, à 07:56

tiramiseb

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

iptables -t nat -A POSTROUTING -o $Interface_Internet -s 172.16.0.0/16 -d 192.168.1.0/24 -p all -j MASQUERADE

[...]
je n'ai pas d’accès à internet

Eh bien oui, tu ne fais ton masquerading que pour les paquets dont la destination est ton réseau 192.168.1.0/24.

Il faut enlever le "-d"...

Par ailleurs, dans la mesure où l'adresse IP côté Internet est fixe, tu peux faire du SNAT au lieu du MASQUERADING.

Hors ligne

#3 Le 23/06/2015, à 15:36

PITDU53

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

Je vous remercie de votre réponse mais je constate que le problème persiste, j'ai modifié la ligne que vous m'avez demander mais il n'y a toujours pas d’accès à internet (pour le client et l'action est refusée au serveur). J'ai revérifier toutes la commandes du script mais je ne trouve pas mon erreur.

voici la ligne modifiée, est-ce exact ?

iptables -t nat -A POSTROUTING -o $Interface_Internet -s 172.16.0.0/16 -p all -j MASQUERADE

Hors ligne

#4 Le 23/06/2015, à 15:44

tiramiseb

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

Cette ligne elle-même me semble bonne.
Par contre, tu as bien fait ça sur le masquerading, mais as-tu aussi autorisé le forwarding comme ça ? Car si tu as gardé la règle de forwarding précédente, qui n'accepte de transmettre que les paquets à destination de 192.168.1.0/24, ça ne marchera bien évidemment pas.

Si tout semble ok à ce niveau, alors il faudrait que tu montres le retour des commandes :

iptables -vnL
iptables -t nat -vnL

... et que tu expliques comment tu testes.

Hors ligne

#5 Le 23/06/2015, à 16:41

PITDU53

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

Tout d’abord voici le script complet ICI .
Ensuite le resultat de iptables -vnL : ICI

Chain INPUT (policy DROP 6 packets, 490 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
   12   895 ACCEPT     all  --  eth0   *       172.16.0.0/16        172.16.0.1          
    0     0 ACCEPT     all  --  eth0   *       172.16.255.255       172.16.0.1          
  330 24064 ACCEPT     all  --  eth1   *       192.168.1.0/24       192.168.1.50         state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  eth1   eth0    192.168.1.0/24       172.16.0.0/16        tcp dpt:80 state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  eth0   eth1    172.16.0.0/16        192.168.1.0/24       tcp spt:80 state RELATED,ESTABLISHED
    0     0 ACCEPT     udp  --  eth1   eth0    192.168.1.0/24       172.16.0.0/16        udp dpt:80 state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     udp  --  eth0   eth1    172.16.0.0/16        192.168.1.0/24       udp spt:80 state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  eth1   eth0    192.168.1.0/24       172.16.0.0/16        tcp dpt:443 state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  eth0   eth1    172.16.0.0/16        192.168.1.0/24       tcp spt:443 state RELATED,ESTABLISHED
    0     0 ACCEPT     udp  --  eth1   eth0    192.168.1.0/24       172.16.0.0/16        udp dpt:443 state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     udp  --  eth0   eth1    172.16.0.0/16        192.168.1.0/24       udp spt:443 state RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  eth0   eth1    172.16.0.0/16        192.168.1.0/24       state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  eth1   eth0    192.168.1.0/24       172.16.0.0/16        state RELATED,ESTABLISHED

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0           
   12  1231 ACCEPT     all  --  *      eth0    172.16.0.1           172.16.0.0/16       
    0     0 ACCEPT     all  --  *      eth0    172.16.0.1           172.16.255.255      
  206 28600 ACCEPT     all  --  *      eth1    192.168.1.50         192.168.1.0/24       state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53

Le résultat de iptables -t nat -vnL : ICI

Chain PREROUTING (policy ACCEPT 96 packets, 8024 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  eth1   *       192.168.1.0/24       192.168.1.50         tcp dpt:80 to:172.16.0.10
    0     0 DNAT       udp  --  eth1   *       192.168.1.0/24       192.168.1.50         udp dpt:80 to:172.16.0.10
    0     0 DNAT       tcp  --  eth1   *       192.168.1.0/24       192.168.1.50         tcp dpt:443 to:172.16.0.10
    0     0 DNAT       udp  --  eth1   *       192.168.1.0/24       192.168.1.50         udp dpt:443 to:172.16.0.10

Chain INPUT (policy ACCEPT 7 packets, 486 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 32 packets, 2232 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 32 packets, 2232 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 SNAT       tcp  --  *      eth0    192.168.1.0/24       172.16.0.10          tcp dpt:80 to:172.16.0.10
    0     0 SNAT       udp  --  *      eth0    192.168.1.0/24       172.16.0.10          udp dpt:80 to:172.16.0.10
    0     0 SNAT       tcp  --  *      eth0    192.168.1.0/24       172.16.0.10          tcp dpt:443 to:172.16.0.10
    0     0 SNAT       udp  --  *      eth0    192.168.1.0/24       172.16.0.10          udp dpt:443 to:172.16.0.10
    0     0 MASQUERADE  all  --  *      eth1    192.168.10.0/24      0.0.0.0/0     

Donc je teste en faisant :
- un ping 172.16.0.1 depuis POSTE1 => OK
- un ping 8.8.8.8 depuis POSTE1 => ERREUR ( délai d'attente dépassée )

Puis :
- un ping 172.16.0.10 depuis PROXY => OK
- un ping 192.168.1.1 depuis PROXY => OK
- un ping 8.8.8.8 depuis PROXY => ERREUR ( Operation not permitted )

et pour autoriser le forwarding j'ai utiliser ceci :

echo 1 > /proc/sys/net/ipv4/ip_forward

Sinon voici la configuration réseau du proxy au cas ou j'ai fais une betise : ICI

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# RaspberryPi server web ( MAC :9C   172.16.50.0/24 )
auto eth2
iface eth2 inet static
address 172.16.50.1
netmask 255.255.255.0

# Primary Interface livebox => internet ( MAC :7b   192.168.1.0/24 )
auto eth1
iface eth1 inet dhcp
# 192.168.1.50 DHCP static address

# LAN network ( MAC :8f   172.16.0.0/16)
auto eth0
iface eth0 inet static
address 172.16.0.1
netmask 255.255.0.0
gateway 192.168.1.1

J'espère avoir été sasser clair et de ne pas avoir oublier d'informations.

Dernière modification par PITDU53 (Le 23/06/2015, à 16:42)

Hors ligne

#6 Le 23/06/2015, à 20:53

tiramiseb

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

Oui bah c'est comme je te l'ai expliqué en #4, tu n'as pas pensé à changer la chaîne forward.

Hors ligne

#7 Le 23/06/2015, à 23:52

PITDU53

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

Excusez moi j'avais pas du bien comprendre, j'ai donc changer et voici les nouvelles commandes :

iptables -t filter -A FORWARD -i $Interface_Local -o $Interface_Internet -s 172.16.0.0/16 -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -i $Interface_Internet -o $Interface_Local -s 192.168.1.0/24 -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A POSTROUTING -o $Interface_Internet -s 172.16.0.0/16 -p all -j MASQUERADE

affichage de iptables -vnL :

Chain INPUT (policy DROP 10 packets, 734 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    7   512 ACCEPT     all  --  eth0   *       172.16.0.0/16        172.16.0.1          
    0     0 ACCEPT     all  --  eth0   *       172.16.255.255       172.16.0.1          
   30  2149 ACCEPT     all  --  eth1   *       192.168.1.0/24       192.168.1.50         state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  eth1   eth0    192.168.1.0/24       172.16.0.0/16        tcp dpt:80 state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  eth0   eth1    172.16.0.0/16        192.168.1.0/24       tcp spt:80 state RELATED,ESTABLISHED
    0     0 ACCEPT     udp  --  eth1   eth0    192.168.1.0/24       172.16.0.0/16        udp dpt:80 state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     udp  --  eth0   eth1    172.16.0.0/16        192.168.1.0/24       udp spt:80 state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  eth1   eth0    192.168.1.0/24       172.16.0.0/16        tcp dpt:443 state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  eth0   eth1    172.16.0.0/16        192.168.1.0/24       tcp spt:443 state RELATED,ESTABLISHED
    0     0 ACCEPT     udp  --  eth1   eth0    192.168.1.0/24       172.16.0.0/16        udp dpt:443 state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     udp  --  eth0   eth1    172.16.0.0/16        192.168.1.0/24       udp spt:443 state RELATED,ESTABLISHED
    3   234 ACCEPT     all  --  eth0   eth1    172.16.0.0/16        0.0.0.0/0            state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  eth1   eth0    192.168.1.0/24       0.0.0.0/0            state RELATED,ESTABLISHED

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0           
    7   708 ACCEPT     all  --  *      eth0    172.16.0.1           172.16.0.0/16       
    0     0 ACCEPT     all  --  *      eth0    172.16.0.1           172.16.255.255      
   30  2093 ACCEPT     all  --  *      eth1    192.168.1.50         192.168.1.0/24       state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53

et enfin de iptables -t net -vnL :

Chain PREROUTING (policy ACCEPT 60 packets, 4697 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  eth1   *       192.168.1.0/24       192.168.1.50         tcp dpt:80 to:172.16.0.10
    0     0 DNAT       udp  --  eth1   *       192.168.1.0/24       192.168.1.50         udp dpt:80 to:172.16.0.10
    0     0 DNAT       tcp  --  eth1   *       192.168.1.0/24       192.168.1.50         tcp dpt:443 to:172.16.0.10
    0     0 DNAT       udp  --  eth1   *       192.168.1.0/24       192.168.1.50         udp dpt:443 to:172.16.0.10

Chain INPUT (policy ACCEPT 5 packets, 349 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 30 packets, 2093 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 30 packets, 2093 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 SNAT       tcp  --  *      eth0    192.168.1.0/24       172.16.0.10          tcp dpt:80 to:172.16.0.10
    0     0 SNAT       udp  --  *      eth0    192.168.1.0/24       172.16.0.10          udp dpt:80 to:172.16.0.10
    0     0 SNAT       tcp  --  *      eth0    192.168.1.0/24       172.16.0.10          tcp dpt:443 to:172.16.0.10
    0     0 SNAT       udp  --  *      eth0    192.168.1.0/24       172.16.0.10          udp dpt:443 to:172.16.0.10
    2   156 MASQUERADE  all  --  *      eth1    172.16.0.0/16        0.0.0.0/0      

j'avoue que la je comprend plus trop ce qu'il se passe.

Hors ligne

#8 Le 24/06/2015, à 09:49

tiramiseb

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

Tu te prends la tête avec toutes tes adresses IP que tu mets partout !
Ok maintenant tes paquets ont le droit de sortir... Mais les retours ne sont pas autorisés : tu n'autorises que les retours (state RELATED,ESTABLISHED) en provenance de ton réseau 192.168.1.0/24 !
Pourquoi toutes ces complications ?
Et puis pourquoi faire du SNAT entrant ?

Enfin, pour une telle configuration, pourquoi ne pas utiliser un outil plus adapté, comme Shorewall ?

Hors ligne

#9 Le 24/06/2015, à 10:12

tiramiseb

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

Voici un script qui fait ce que tu veux, avec quelques commentaires en-dessous par rapport à ton script à toi :

#!/bin/sh
### BEGIN INIT INFO
# Provides:          iptables
# Required-Start:    $local_fs
# Required-Stop:
# Default-Start:     2
# Default-Stop:
# Short-Description: Pare-feu et partage de connexion internet.
### END INIT INFO

LOC="eth0" # Réseau local
NET="eth1" # Accès à Internet (Livebox)
SRV="eth2" # Serveur web

NETWORK_LOC="172.16.0.0/16"
IP_NET="192.168.1.50"
SERVEUR_INTERNE="172.16.0.10"

start() {
	iptables -F
	iptables -P FORWARD DROP
	iptables -t nat -F
	
	# Rediriger les connexions HTTP et HTTPS entrantes vers le serveur interne
	iptables -t nat -A PREROUTING -i $NET -d $IP_NET -p tcp -m multiport --dports 80,443 -j DNAT --to-destination $SERVEUR_INTERNE
	iptables -A FORWARD -i $NET -d $IP_SERVEUR_INTERNE -p tcp -m multiport --dports 80,443 -j ACCEPT
	
	# Autoriser toutes les requêtes sortantes, du réseau local vers Internet
	iptables -t nat -A POSTROUTING -o $NET -s $NETWORK_LOC -j SNAT --to-source $IP_NET
	iptables -t filter -A FORWARD -i $LOC -o $NET -j ACCEPT
	
	# Autoriser toutes les réponses entrantes si elles correspondent à une requête en cours
	iptables -t filter -A FORWARD -i $NET -o $LOC -m state --state ESTABLISHED,RELATED -j ACCEPT

	echo 1 > /proc/sys/net/ipv4/ip_forward
}

stop() {
	iptables -F
	iptables -P FORWARD ACCEPT
	iptables -t nat -F
	echo 0 > /proc/sys/net/ipv4/ip_forward
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart)
		stop
		start
		;;
	*)
		echo "Usage $0 {start|stop|restart}"
		exit 1
esac

- ton plus gros problème, c'est que tu précises toujours des adresses sources et destinations : mais si la source c'est Internet, alors la source ce n'est pas 192.168.0.0/24, et vu que tu n'autorises que ce réseau, ça ne pourra pas passer
- si tu sais être le seul à gérer la machine, pas besoin de remettre à "ACCEPT" des trucs que tu n'as jamais mis à "DROP"
- pas besoin de filtrage en sortie, tu es maître de ta machine, pas la peine de lui interdire des choses
- si tu gères bien ton serveur, pas besoin de filtrage en entrée, tu es maître de ta machine, elle ne va écouter que sur les ports intéressants, qu'il faudrait alors que tu ouvres ; bloquer des ports déjà fermés n'ajoute aucune sécurité
- pas besoin de toucher à la table mangle, tu ne l'utilises pas
- pas besoin de charger les modules, ils se chargent tout seuls
- "-t filter" ne sert à rien, c'est la table par défaut si tu ne précises rien
- "-p all" ne sert à rien, c'est déjà le cas si tu ne précises pas "-p"
- je suis partisan de la simplification : si tu précises l'interface d'entrée, alors pas besoin de préciser les adresses IP à autoriser (sauf cas spéciaux où il y a des traitements différents à faire selon des adresses IP différentes bien sûr)
- si tu sais que personne, jamais, n'ajoutera de chaîne, tu peux enlever "iptables -X"
- à mon sens, "-m state --state NEW,ESTABLISHED,RELATED" est plutôt inutile : ça revient à ne bloquer que les paquets "eronnés", généralement liés à des attaques ; si tu fais confiance à ton réseau interne, bah tu peux tout laisser sortir
- pour les règles entrantes vers ton serveur interne, il ne FAUT PAS autoriser le port 80 vers TOUTES les adresses IP : c'est là que le filtrage par adresse IP est utile, il faut filtrer uniquement vers ton serveur
- si tu précises déjà l'adresse IP destination, pas besoin de préciser l'interface de sortie
- si tu autorises les sorties de manière globale, pas besoin d'autoriser explicitement les réponses aux requêtes vers ton serveur interne
- si tu fais déjà du SNAT ou du MASQUERADING en sortie globalement, tu n'as pas besoin de faire du SNAT explicitement pour les réponses aux requêtes vers ton serveur interne
- si tu n'as pas activé les options que tu appelles "anti-spoofing" (qui ne protègent du spoofing que dans certains cas très réduits, ce qui veut dire que de manière générale ce n'est pas très utile), pas besoin de les désactiver quand tu arrêtes ton machin


PS : oui, toutes tes règles qui vont dans tous les sens peuvent être réduites en 5 commandes
PPS : menfin à ta place j'utiliserais quand même Shorewall

Dernière modification par tiramiseb (Le 24/06/2015, à 10:19)

Hors ligne

#10 Le 24/06/2015, à 14:42

PITDU53

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

Merci beaucoup pour votre temps et l'aide apportée je comprend mieux maintenant. C'est quand même beaucoup plus clair merci !
J'ai juste un problème que j'ai tenté de résoudre, quand je lance le script iptables me renvois :

Bad argument 'tcp'
try 'iptable -h' .....

J'ai essayé, comme vous m'avez dis de retirer le "-p tcp" pour qu'il prenne tout les protocoles mais il refuse et me dis que -m multiports à besoin de "-p tcp" ... 
enfin pour faire suivre le service DNS j'ai ajouté ces règles.

iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

Je sens que c'est pas loin de fonctionner car sur le poste client l'icone de l’accès réseau n'as plus le panneau "/!\" et signale l'accès à internet.
Pour résumer :
- La redirection vers le serveur web revoie une erreur.
- Depuis le client je peux faire un ping sur 8.8.8.8 et 173.194.45.55 (un serveur de google.fr) mais comme le service DNS ne suit pas les adresses comme google.fr ne fonctionne pas.
- Les règles pour le service DNS sont elles correctes ?

Dernière modification par PITDU53 (Le 25/06/2015, à 02:09)

Hors ligne

#11 Le 29/06/2015, à 08:31

tiramiseb

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

PITDU53 a écrit :

quand je lance le script iptables me renvois :

Bad argument 'tcp'
try 'iptable -h' .....

C'est que tu as une ligne mal formée. Tu ne montres pas le script que tu exécutes, alors je ne peux pas t'aider.

J'ai essayé, comme vous m'avez dis de retirer le "-p tcp" pour qu'il prenne tout les protocoles

Je n'ai pas indiqué de retirer "-p tcp".
J'ai indiqué que "-p all" est inutile parce que c'est déjà ce qui se fait par défaut.

enfin pour faire suivre le service DNS j'ai ajouté ces règles.

iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

Si tu as bien mis les policies "OUTPUT" et "INPUT" en "ACCEPT", c'est inutile.

- La redirection vers le serveur web revoie une erreur.

C'est vague.

- Depuis le client je peux faire un ping sur 8.8.8.8 et 173.194.45.55 (un serveur de google.fr) mais comme le service DNS ne suit pas les adresses comme google.fr ne fonctionne pas.
- Les règles pour le service DNS sont elles correctes ?

Comme dit ci-dessus, si tout est en ACCEPT il n'y a pas besoin de règle spéciale.

Hors ligne

#12 Le 29/06/2015, à 13:31

PITDU53

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

J'ai maintenant un accès complet à internet, le seul problème restant c'est la redirection vers le serveur web qui ne fonctionne pas car sur un ordinateur de l'interface internet quand je met dans un navigateur l'adresse ip du proxy ça me renvoie une erreur : page web inaccessible, connexion expirée.

voici les commandes utilisées :

NET="eth1" # Accès à Internet (Livebox)
SERVEUR_INTERNE="172.16.0.10"

iptables -t nat -A PREROUTING -i $NET -p tcp --dport 80 -j DNAT --to-destination $SERVEUR_INTERNE:80
iptables -A FORWARD -i $NET -p tcp --dport 80 -j ACCEPT

Merci de votre aide, j'espère avoir été assez clair.

Hors ligne

#13 Le 29/06/2015, à 13:40

tiramiseb

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

sur un ordinateur de l'interface internet quand je met dans un navigateur l'adresse ip du proxy ça me renvoie une erreur : page web inaccessible

qu'appelles-tu « un ordinateur de l'interface internet » ?
On reste toujours dans l'un de tes deux réseaux, pas sur le "vrai" Internet ?

Regarde les paquets qui passent (avec tcpdump), regarde les compteurs d'iptables sur les différentes règles...

Hors ligne

#14 Le 29/06/2015, à 14:09

pires57

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

iptables -t nat -A PREROUTING -i $NET -p tcp --dport 80 -j DNAT --to $SERVEUR_INTERNE

Inutile de spécifier le port de destination deux fois (sauf cas spéciaux avec de la redirection de port (squid par exemple)

Je n'ai pas trop suivi le truc, pourrais tu me montrer le script entier que tu as actuellement?


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#15 Le 29/06/2015, à 15:06

PITDU53

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

Voici le script complet :

LOC="eth0" # Réseau local
NET="eth1" # Accès à Internet (Livebox)
SRV="eth2" # Serveur web

NETWORK_LOC="172.16.0.0/16"
IP_NET="192.168.1.50"
SERVEUR_INTERNE="172.16.0.10"

start() {
	iptables -F
	iptables -P FORWARD ACCEPT
	iptables -t nat -F
	
	# Rediriger les connexions HTTP et HTTPS entrantes vers le serveur interne
	echo "Redirection des connexions entrantes (HTTP) vers le serveur interne"
	#iptables -t nat -A PREROUTING -i $NET -d $IP_NET -p tcp --dports 80 -j DNAT --to-destination $SERVEUR_INTERNE
	#iptables -A FORWARD -i $NET -d $SERVEUR_INTERNE -p tcp --dports 80 -j ACCEPT
	iptables -t nat -A PREROUTING -i $NET -p tcp --dport 80 -j DNAT --to-destination $SERVEUR_INTERNE:80
	iptables -A FORWARD -i $NET -p tcp --dport 80 -j ACCEPT
	#iptables -t nat -A POSTROUTING -o $NET -j MASQUERADE
	
	# Autoriser toutes les requêtes sortantes, du réseau local vers Internet
	echo "Autoriser toutes les requêtes sortantes, du réseau local vers Internet"
	iptables -t nat -A POSTROUTING -o $NET -s $NETWORK_LOC -j SNAT --to-source $IP_NET
	iptables -t filter -A FORWARD -i $LOC -o $NET -j ACCEPT
	
	# Autoriser toutes les réponses entrantes si elles correspondent à une requête en cours
	echo "Autoriser toutes les réponses entrantes si elles correspondent à une requête en cours"
	iptables -t filter -A FORWARD -i $NET -o $LOC -m state --state ESTABLISHED,RELATED -j ACCEPT

	# Activer l'ip_forward
	echo "Activer l'ip_forward"
	echo 1 > /proc/sys/net/ipv4/ip_forward
}

stop() {
	# Effacer les règles précedentes
	echo "Effacer les règles précedentes"
	iptables -F
	iptables -P FORWARD ACCEPT
	iptables -t nat -F
	
	# Desactiver l'ip_forward
	echo "Desactiver l'ip_forward"
	echo 0 > /proc/sys/net/ipv4/ip_forward
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart)
		stop
		start
		;;
	*)
		echo "Usage $0 {start|stop|restart}"
		exit 1
esac

également disponible en cas de modifications : ICI

Dernière modification par PITDU53 (Le 29/06/2015, à 15:06)

Hors ligne

#16 Le 30/06/2015, à 12:28

pires57

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

Salut,

J'ai légèrement modifié.

	# Rediriger les connexions HTTP et HTTPS entrantes vers le serveur interne
	echo "Redirection des connexions entrantes (HTTP) vers le serveur interne"
	#iptables -t nat -A PREROUTING -i $NET -d $IP_NET -p tcp --dports 80 -j DNAT \ --to-destination $SERVEUR_INTERNE:80
	#iptables -A FORWARD -i $NET -d $SERVEUR_INTERNE -p tcp --dports 80 -j ACCEPT
	iptables -t nat -A POSTROUTING -o $NET -j MASQUERADE
	#Redirige les connections HTTP depuis internet vers vers le serveur.
	iptables -t nat -A PREROUTING -i $NET -p tcp --dport 80 -j DNAT \ --to-destination $SERVEUR_INTERNE:80
	iptables -t nat -A PREROUTING -i $NET -p tcp --dport 443 -j DNAT \ --to-destination $SERVEUR_INTERNE:443 #si tu as du HTTPS
	#iptables -A FORWARD -i $NET  -p tcp --dport 80 -j ACCEPT  #inutile, si ta politique par défaut pour forward est ACCEPT

Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#17 Le 01/07/2015, à 09:56

PITDU53

Re : Configuration d'un pare-feu avec iptables (+Partage de connexion)

Veuillez m’excuser tiramiseb je n'ai pas vu votre message, ce que j'ai mal nommé « un ordinateur de l'interface internet » c'est bien un PC du réseau 192.168.1.0/24 entre la livebox et le proxy.

Pour ce qui ait du script j'ai du modifier la ligne suivante :

 iptables -t nat -A PREROUTING -i $NET -p tcp --dport 80 -j DNAT \ --to-destination $SERVEUR_INTERNE:80 

En retirant le "\" car il avait une erreur (Bad argument):

 iptables -t nat -A PREROUTING -i $NET -p tcp --dport 80 -j DNAT --to-destination $SERVEUR_INTERNE:80 

Mais le problème persiste toujours.

Hors ligne