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"

Le tun0 correspond à mon VPN, donc si vous n'utilisez pas de VPN c'est normal que vous n'ayez pas cette information.
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

Et biensur le peer to peer par exemple avec le port 50018

#on ouvre le port 50018 sur la connexion VPN pour accepter torrent que j'ai mis sur 50018
iptables -A INPUT -p TCP --dport 50018 -m state --state NEW -i $interfaceWWW -j ACCEPT
#on ouvre le port 50018 sur la connexion VPN pour accepter torrent que j'ai mis sur 50018
iptables -A INPUT -p UDP --dport 50018 -m state --state NEW -i $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
Vus : 700
Publié par ljere : 30