#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.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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 ?
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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)
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.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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