#!/bin/sh
#
###############################################################################
# NOM: iptable-ipmasquerading-1.sh
#
# COMMENTAIRE : Exemple d'utilisation de l'IP masquerading
#               paradise.sky.net va pouvoir aller sur web.internet.net
# 
# 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/02                     Dernière modification le : 2003/07/05
###############################################################################

# Chargement des modules du suivi de connexion
modprobe ip_conntrack        ; # Module principal du suivi de connexion
modprobe ip_conntrack_ftp    ; # Module du suivi de connexion FTP
modprobe ip_conntrack_irc    ; # Module du suivi de connexion IRC

# 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 -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
iptables -t filter -A INPUT  -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -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 -s 192.168.0.0/24 -d 192.168.0.0/24 -j ACCEPT
iptables -t filter -A INPUT  -i eth0 -s 192.168.0.0/24 -d 192.168.0.0/24 -j ACCEPT

################################################################################
# IP masquerading
################################################################################

# Chargement des modules du NAT
modprobe iptable_nat    ; # Module principal du NAT
modprobe ip_nat_ftp     ; # Module du NAT FTP
modprobe ip_nat_irc     ; # Module du NAT IRC

# 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 ACCEPTES
iptables -t nat -P PREROUTING  ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT      ACCEPT

# Autorise les paquet à aller d'une interface réseau à l'autre
iptables -t filter -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -d 0.0.0.0/0 -m state --state ! INVALID           -j ACCEPT
iptables -t filter -A FORWARD -i eth1 -o eth0 -s 0.0.0.0/0 -d 192.168.0.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Demande à la table NAT de modifier les paquets sortants
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.0/24 -j MASQUERADE

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