#!/bin/sh
#
###############################################################################
# NOM: iptable-portforwarding-2.sh
#
# COMMENTAIRE : Exemple d'utilisation du port fowarding
#               pirate.internet.net.sky.net va pouvoir utiliser le HTTP de
#               paradise.sky.net
#               Dans ce script, nous n'utiliserons pas le SNAT, ce qui obligera
#               la mise en place d'une route par défaut sur paradise.sky.net
#               ("route add default gw phoenix0.sky.net")
#               Ce script utilise la méthode "sale" définie dans la
#               documentation, vous NE devriez PAS vous en inspirer!
# 
# Ce script fait partie du document :
#        "Firewall et sécurité d'un réseau personnel sous Linux"
#        http://olivieraj.free.fr/fr/linux/information/firewall/
#
# Auteur: Olivier ALLARD-JACQUIN (http://olivieraj.free.fr/)
# Créé le: 2003/07/06                     Dernière modification le : 2003/07/06
###############################################################################

# Suppression de toutes les chaînes pré-définies de la table FILTER
iptables -t filter -F

# Suppression de toutes les chaînes utilisateur de la table FILTER
iptables -t filter -X

# Par defaut, toute les paquets de la table FILTER sont détruits
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

# Autorise le port 6000 sur Phoenix (phoenix0 et phoenix1), afin de supporter
# le export display pour les besoins de la conférence
# En temps normal, ces lignes DOIVENT êtres supprimées!!!
iptables -t filter -A OUTPUT -p 6   --sport 6000 -j ACCEPT  ; # -p 6   <=> protocole X11
iptables -t filter -A OUTPUT -p tcp --sport 6000 -j ACCEPT  ; # -p tcp <=> protocole TCP
iptables -t filter -A INPUT  -p 6   --dport 6000 -j ACCEPT
iptables -t filter -A INPUT  -p tcp --dport 6000 -j ACCEPT

# Autorise l'interface loopback à dialoguer avec elle-même
iptables -t filter -A OUTPUT -o lo -j ACCEPT
iptables -t filter -A INPUT  -i lo -j ACCEPT

# Autorise les connexions avec le réseau 192.168.0.0/24 connecté à l'interface eth0
iptables -t filter -A OUTPUT -o eth0 -d 192.168.0.0/24 -j ACCEPT
iptables -t filter -A INPUT  -i eth0 -s 192.168.0.0/24 -j ACCEPT


################################################################################
# Port fowarding
################################################################################

# Chargement des modules du NAT
modprobe iptable_nat    ; # Module principal du NAT

# Suppression de toutes les chaînes pré-définies de la table NAT
iptables -t nat -F

# Suppression de toutes les chaînes utilisateur de la table NAT
iptables -t nat -X 

# Par defaut, toute les paquets de la table NAT sont DROP
iptables -t nat -P PREROUTING  ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT      ACCEPT

# Autorise phoenix1.internet.net à répondre aux ping des machines de internet.net
iptables -t filter -A INPUT  -i eth1 -s 0.0.0.0/0 -d 10.0.0.1  -p icmp -m state --state ! INVALID           -j ACCEPT
iptables -t filter -A OUTPUT -o eth1 -s 10.0.0.1  -d 0.0.0.0/0 -p icmp -m state --state RELATED,ESTABLISHED -j ACCEPT

# Fait suivre les trames venant d'Internet et à destination de paradise.sky.net
iptables -t filter -A FORWARD -i eth1 -o eth0 -s 0.0.0.0/0   -d 192.168.0.2 -p tcp --dport 80 \
         -m state --state ! INVALID -j ACCEPT

# Fait suivre les trames venant paradise.sky.net et à destination d'Internet
iptables -t filter -A FORWARD -i eth0 -o eth1 -s 192.168.0.2 -d 0.0.0.0/0   -p tcp --sport 80 \
         -m state --state RELATED,ESTABLISHED -j ACCEPT

# Pour les trames arrivant sur le port 80 de phoenix1.internet.net, change l'adresse de destination en paradise.sky.net
iptables -t nat -A PREROUTING  -i eth1 -s 0.0.0.0/0   -d 10.0.0.1  -p tcp --dport 80 \
	 -m state --state ! INVALID -j DNAT --to-destination 192.168.0.2:80

# On retire ici la commande iptables permettant de faire du SNAT

# Pour le debugage:
# Log les trames utilisant les cibles par defaut de PREROUTING et de POSTROUTING.
# Cela peut aider à trouver une mauvaise configuration de ces chaînes
#iptables -t nat -A PREROUTING  -j LOG --log-prefix PreRoutingError
#iptables -t nat -A POSTROUTING -j LOG --log-prefix PostRoutingError

# Activation du NAT dans le kernel
echo 1 > /proc/sys/net/ipv4/ip_forward

echo "##############################################################"
echo "# IMPORTANT                                                  #"
echo "# N'oubliez pas de définir la route par defaut sur Paradise: #"
echo "# route add default gw phoenix0.sky.net                      #"
echo "##############################################################"
