Forum Freedom-IP

Forum d'entraide de la communauté Freedom-IP

Vous n'êtes pas identifié(e).

#1 2013-09-17 09:24:16

ljere
Membres de confiance
Inscription : 2012-04-22
Messages : 460

Tutoriel pour Iptables

Iptables est un programme en ligne de commande permettant de configurer les règles de filtrage. Il s’adresse aux administrateurs systèmes.
Le paquet iptables comprend également ip6tables. ip6tables est utilisé pour configurer le filtre des paquets IPv6.

La première chose à faire c’est de lister les règles actives.

sudo iptables -L

Normalement si rien n’est activé on doit avoir un retour de ce style

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

On voit donc trois parties

Chain INPUT : correspond aux règles manipulant le trafic entrant ;

Chain FORWARD : correspond aux règles manipulant la redirection du trafic ;

Chain OUTPUT : correspond aux règles manipulant le trafic sortant.

Maintenant qu’on a vu rapidement les bases on va créer un script qu’on nommera parefeu et qu’on placera dans etc/init.d/
ce qui permettra de lancer nos règles à chaque démarrage
la première section on y touche pas

#!/bin/sh
### BEGIN INIT INFO
# Provides: chillispot et freeradius dans le chroot
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $remote_fs
# Default-Start:
# Default-Stop:
# Short-Description: Wireless & LAN Access Point Controller
# Description: ChilliSpot is an open source captive portal
# or wireless LAN access point controller.
### END INIT INFO

Ensuite on place les variables qui correspondent à votre configuration un sudo ifconfig -a vous permettra de récupérer les informations nécessaires pour moi ça donne ça:

interfaceWWW="eth0"
interfaceVPN="tun0"
localIP="192.168.0.13"
network="192.168.0.0/24"

On commence par initialiser les chaînes

 start() {

# Dans cette partie, on met en place le firewall
#vidage des chaînes
iptables -F
#destruction des chaînes personnelles
#stratégies par défaut
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

On va commencer par accepter toutes les connexions locales ainsi que les connexions déjà établi

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

#on accepte tout le réseau local
iptables -A INPUT -s $network -j ACCEPT
iptables -A OUTPUT -d $network -j ACCEPT
iptables -A FORWARD -s $network -j ACCEPT 

#on autorise toutes les connexion déjà établies

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

On va choisir les ports qui nous sont nécessaire pour mon cas j’ai besoin du ports 22 pour le ssh, du 80 pour le http et du 5900 pour le vnc

#on accepte toute les entrées sur le port 80 venant d'internet (serveur APACHE), 5900 venant du vnc et le port 22 de SSH
iptables -A INPUT -p tcp -i $interfaceWWW --dport 5900 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp -i $interfaceWWW --dport 80 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp -i $interfaceWWW --dport 22 -m state --state NEW -j ACCEPT

Si vous voulez autoriser le ping en entrant ou en sortant

# On autorise le PC a faire des pings sur des IP externes et à répondre aux requêtes "ping"
iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# On autorise les pings 
iptables -A INPUT -p icmp -j ACCEPT

Cette partie concerne mon VPN j’ouvre les ports en sortie pour pouvoir me connecter à mon VPN

#on autorise les connecion sortante sur interfaceWWW pour initialiser les connexion VPN
iptables -A OUTPUT -p TCP --dport 3333 -m state --state NEW -o $interfaceWWW -j ACCEPT
iptables -A OUTPUT -p TCP --dport 1111 -m state --state NEW -o $interfaceWWW -j ACCEPT
iptables -A OUTPUT -p TCP --dport 2222 -m state --state NEW -o $interfaceWWW -j ACCEPT
iptables -A OUTPUT -p UDP --dport 53 -m state --state NEW -o $interfaceWWW -j ACCEPT
iptables -A OUTPUT -p TCP --dport 9999 -m state --state NEW -o $interfaceWWW -j ACCEPT
iptables -A OUTPUT -p TCP --dport 4444 -m state --state NEW -o $interfaceWWW -j ACCEPT
iptables -A OUTPUT -p TCP --dport 8080 -m state --state NEW -o $interfaceWWW -j ACCEPT
iptables -A OUTPUT -p TCP --dport 80 -m state --state NEW -o $interfaceWWW -j ACCEPT
iptables -A OUTPUT -p TCP --dport 443 -m state --state NEW -o $interfaceWWW -j ACCEPT

#on autorise les connexions sortantes sur le VPN
iptables -A OUTPUT -m state --state NEW -o $interfaceVPN -j ACCEPT

J’autorise ensuite le broadcast upnp pour que ma freebox puisse détecter le serveur Mediatomb

# Special case to allow 0.0.0.0 source for UPnP to use IGMP to
# register clients with media servers and routers.
iptables -A INPUT -i $interfaceWWW -s 0.0.0.0/32 -d 224.0.0.1/32 -p igmp -j ACCEPT

# UPnP uses IGMP multicast to find media servers.  Accept IGMP broadcast packets
iptables -A INPUT -i $interfaceWWW -d 239.0.0.0/8 -p igmp -j ACCEPT

Je n’ai plus qu’à ouvrir les ports relatifs à mediatomb comme j’ai deux freeplayer j’ai cherché leurs IP grâce à deux pings soit ping -c2 freeboxhd1.freebox.fr et ping -c2 freeboxhd2.freebox.fr

# ports relatifs à mediatomb pour le traffic local
iptables -A INPUT -p tcp --dport 49152 -s $network -i $interfaceWWW -j ACCEPT
iptables -A INPUT -p udp --dport 49152 -s $network -i $interfaceWWW -j ACCEPT
iptables -A INPUT -p udp --dport 1900 -s  $network -i $interfaceWWW -j ACCEPT
iptables -A INPUT -p tcp --dport 58846 -j ACCEPT
# ports relatifs à mediatomb pour la freebox HD1
iptables -A INPUT -p tcp --dport 49152 -s 212.27.40.254 -i $interfaceWWW -j ACCEPT
iptables -A INPUT -p udp --dport 49152 -s 212.27.40.254 -i $interfaceWWW -j ACCEPT
iptables -A INPUT -p udp --dport 1900 -s  212.27.40.254 -i $interfaceWWW -j ACCEPT
# ports relatifs à mediatomb pour la freebox HD2
iptables -A INPUT -p tcp --dport 49152 -s 212.27.40.253 -i $interfaceWWW -j ACCEPT
iptables -A INPUT -p udp --dport 49152 -s 212.27.40.253 -i $interfaceWWW -j ACCEPT
iptables -A INPUT -p udp --dport 1900 -s  212.27.40.253 -i $interfaceWWW -j ACCEPT

Pour la suite je vous donne des ports qui peuvent vous être utile mais dont moi je n’ai pas besoin vu que je passe par un vpn
le port 25 en tcp qui sert pour l’envoi d’email en SMTP.

#on autorise les connexion sortante vers le 25 sur interfaceWWW
iptables -A OUTPUT -p TCP --dport 25 -m state --state NEW -o $interfaceWWW -j ACCEPT

Je pense que si vous avez d’autres ports à ouvrir vous pourrez maintenant le faire seul on va donc terminer notre script

}
  
 stop() {

     iptables -P INPUT ACCEPT
     iptables -P FORWARD ACCEPT
     iptables -P OUTPUT ACCEPT
     iptables -F
 }
  
 case "$1" in
  start)
         start
         ;;
  
 stop)
         stop
         ;;
 restart)
         stop && sleep 2 && start
         ;;
 *)
         echo "Usage $0 {start|stop|restart}"
         exit 1
 esac
  
 exit 0

voila j’espère que ce tutoriel vous servira bien

Dernière modification par ljere (2013-09-17 09:31:37)


AMD 3000+, nvidia FX5200 et 2 giga de ram sur Voyager 12.04 LTS en 32 bit
et TOSHIBA satellite_c670d-11l sur openbox/xubuntu 14.04 en 64 bit

Hors ligne

#2 2013-09-17 09:33:57

Antonin
Membres de confiance
Inscription : 2011-11-28
Messages : 3 729

Re : Tutoriel pour Iptables

Bonjour,

Merci beaucoup pour ce tutoriel.

Bien cordialement,
Antonin.

Hors ligne

#3 2013-10-05 19:47:03

hellfirefox
Membre
Inscription : 2012-06-03
Messages : 64

Re : Tutoriel pour Iptables

Yop!
J'ai lu tout le tuto d'une traite! Et il y a une question qui me titille ...
Est que ca peut nous permettre de faire un genre de "split de connexion" ?
C à d, en configurant correctement les règles, je vais pouvoir me connecter en SSH à un serveur avec son ip public même s'il utilise un VPN? (En gros utiliser le port 22 avec la connexion internet du serveur et pas son VPN)
Et si oui, est ce qu'il faut plusieurs cartes réseau ? (une pour la connexion internet, une pour le vpn)
Merci smile

Hors ligne

#4 2013-10-06 07:31:16

ljere
Membres de confiance
Inscription : 2012-04-22
Messages : 460

Re : Tutoriel pour Iptables

si ta question est bien «est ce que tu peux te connecter en ssh alors que tu es protégé par le vpn» la réponse est oui et cela avec une seul carte réseau par exemple tu peux utiliser

ssh userexterne@ipexterne

pour du ssh et

ssh -L 5900:127.0.0.1:5900 userexterne@ipexterne

pour créer une boucle ssh et utiliser un vnc sur 127.0.0.1 avec le mot de passe de la machine externe
ça permet de supprimer cette règle

iptables -A INPUT -p tcp -i $interfaceWWW --dport 5900 -m state --state NEW -j ACCEPT

sinon presque toute ces infos sont expliqué sur mon blog dans ma signature  wink

Dernière modification par ljere (2013-10-06 07:31:46)


AMD 3000+, nvidia FX5200 et 2 giga de ram sur Voyager 12.04 LTS en 32 bit
et TOSHIBA satellite_c670d-11l sur openbox/xubuntu 14.04 en 64 bit

Hors ligne

#5 2013-10-06 12:41:12

hellfirefox
Membre
Inscription : 2012-06-03
Messages : 64

Re : Tutoriel pour Iptables

C'est parfait ce tuto!
Je vais aller jeter un coup d’œil sur ton blog et te laisser des questions débiles big_smile
Merci!

Hors ligne

Pied de page des forums