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