######################################################################
# C O N F I G U R A T I O N   F I R E W A L L
#
# (c) 2003 A. CANONNE
# http://www.canonne.net
######################################################################

######################################################################
# D E F I N I T I O N   D E   V A R I A B L E S
######################################################################
ip_boulot1="xxx.xxx.xxx.xxx"

######################################################################
# I N I T I A L I S A T I O N   R E S E A U / K E R N E L
######################################################################

# Activation du forwarding
# C'est pas pour faire joli, on aura des règles
# de forward et il faut bien que les paquets
# traversent la machine, donc on met ce fichier à 1
echo 1 > /proc/sys/net/ipv4/ip_forward

# Alors la, on va appliquer quelques astuces
# pour empêcher les attaques de type spoofing
# et bloquer les réponses ICMP du firewall,
# comme ça c'est très propre. Attention, le
# fait de bloquer le trafic ICMP sur
# le firewall bloque les pings.

# Je veux pas de spoofing
#if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
#then
#  for filtre in /proc/sys/net/ipv4/conf/*/rp_filter
#    do
#      echo 1 > $filtre
#  done
#fi

# pas de icmp
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 


######################################################################
# I N I T I A L I S A T I O N   D E S   C H A I N E S
######################################################################

# Nous vidons les chaînes :
iptables -F

# Nous supprimons d'éventuelles chaînes personnelles :
iptables -X

# Nous les faisons pointer par défaut sur DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Nous faisons de même avec toutes les autres tables, 
# à savoir "nat" et "mangle", mais en les faisant pointer
# par défaut sur ACCEPT. Ca ne pose pas de problèmes 
# puisque tout est bloqué au niveau "filter"

iptables -t nat -F
iptables -t nat -X

iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

######################################################################
# G E S T I O N   M A C H I N E   L O C A L E
######################################################################

# Nous considérons que la machine elle même est sûre 
# et que les processus locaux peuvent communiquer entre eux 
# via l'interface locale :

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

######################################################################
# G E S T I O N    F I R E W A L L -> L A N
######################################################################
#on permet toutes les liaisons firewall-LAN
#iptables -A INPUT  -i eth0 -m state --state ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT

#on permet l'utilisation de VNC
iptables -A INPUT  -i eth0 -p tcp --sport 5900 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 5900 -m state --state NEW,ESTABLISHED -j ACCEPT

######################################################################
# G E S T I O N   L A N -> F I R E W A L L
######################################################################
#on permet toutes les liaisons LAN-firewall
#iptables -A INPUT  -i eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED -j ACCEPT 

#on permet l'acces au serveur web
iptables -A INPUT  -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT  -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

#on permet l'acces au serveur smtp
iptables -A INPUT  -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

#on permet l'acces au serveur imap
iptables -A INPUT  -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT

#on permet l'acces au serveur ssh
iptables -A INPUT  -i eth0 -p tcp --dport 2201 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 2201 -m state --state ESTABLISHED -j ACCEPT

#on permet l'acces au serveur Samba
iptables -A INPUT  -i eth0 -m state --state NEW,ESTABLISHED -p udp --dport 137 -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED     -p udp --sport 137 -j ACCEPT
iptables -A INPUT  -i eth0 -m state --state ESTABLISHED     -p udp --dport 137 -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state NEW,ESTABLISHED -p udp --sport 137 -j ACCEPT
iptables -A INPUT  -i eth0                                  -p udp --dport 138 -j ACCEPT
iptables -A OUTPUT -o eth0                                  -p udp --sport 138 -j ACCEPT
iptables -A INPUT  -i eth0 -m state --state NEW,ESTABLISHED -p tcp --dport 139 -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED     -p tcp --sport 139 -j ACCEPT

#on permet l'acces au serveur ldap
iptables -A INPUT  -i eth0 -p tcp --dport 389 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 389 -m state --state ESTABLISHED -j ACCEPT


######################################################################
# G E S T I O N   I N T E R N E T -> S E R V E U R S
######################################################################

# pour le serveur FTP
iptables -A INPUT  -i ppp0 -p tcp --source $ip_boulot1 --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT  -i ppp0 -p tcp --source $ip_boulot1 --dport 20 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -i ppp0 -p tcp --source $ip_boulot1 --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT

# Pour le serveur web
iptables -A INPUT  -i ppp0 -p tcp --source $ip_boulot1 --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT  -i ppp0 -p tcp --source $ip_boulot1 --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

# Pour le serveur geneweb
iptables -A INPUT  -i ppp0 -p tcp --source $ip_boulot1 --dport 2317 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 2317 -m state --state ESTABLISHED -j ACCEPT

# Pour le serveur imaps
#iptables -A INPUT  -i ppp0 -p tcp --source $ip_boulot1 --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -o ppp0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT 

# pour le serveur ssh
iptables -A OUTPUT -o ppp0 -p tcp --sport 2201  -j ACCEPT
iptables -A INPUT  -i ppp0 -p tcp --dport 2201  -j ACCEPT

# pour le serveur smtp
iptables -A OUTPUT -o ppp0 -p tcp --sport 25 -j ACCEPT
iptables -A INPUT  -i ppp0 -p tcp --dport 25 -j ACCEPT


######################################################################
# G E S T I O N   F I R E W A L L -> I N T E R N E T
######################################################################

# Toutes les connexions Firewall-Internet
#iptables -A OUTPUT -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#iptables -A  INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Resolution DNS pour le firewall
iptables -A INPUT  -i ppp0 -p udp --source-port 53 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p udp --destination-port 53 -j ACCEPT
iptables -A INPUT  -i ppp0 -p tcp --source-port 53 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --destination-port 53 -j ACCEPT

# connexions Firewall-Internet (ntp)
iptables -A INPUT  -i ppp0 -p udp --source-port 123 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p udp --destination-port 123 -j ACCEPT
iptables -A INPUT  -i ppp0 -p tcp --source-port 123 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --destination-port 123 -j ACCEPT

# connexions Firewall-Internet (http/https)
iptables -A OUTPUT -p tcp --dport 80  -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -p tcp --sport 80  -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -p tcp --sport 443 -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# connexions Firewall-Internet (ftp)a #bof bof a revoir !!!
iptables -A OUTPUT -o ppp0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -i ppp0 -p tcp --sport 21 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# connexions Firewall-Internet (pop)
iptables -A OUTPUT -p tcp --dport 110  -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -p tcp --sport 110  -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# connexions Firewall-Internet (imaps)
iptables -A OUTPUT -p tcp --dport 993  -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -p tcp --sport 993  -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# connexions Firewall-Internet (smtp)
iptables -A OUTPUT -p tcp --dport 25  -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -p tcp --sport 25  -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# connexions Firewall-Internet (nntp)
iptables -A OUTPUT -p tcp --dport 119  -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -p tcp --sport 119  -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# connexions Firewall-Internet (mysql)
iptables -A OUTPUT -p tcp --dport 3306 -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -p tcp --sport 3306 -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# connexions Firewall-Internet (serveur de clefs gpg)
iptables -A OUTPUT -p tcp --dport 11371 -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -p tcp --sport 11371 -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT


######################################################################
# G E S T I O N   L A N -> I N T E R N E T
######################################################################

# Translation d'adresses pour tout ce qui traverse la passerelle
# en sortant par ppp0
#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.2 -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.3 -o ppp0 -j MASQUERADE

# Toutes les connexions qui sortent du LAN-Net sont acceptées
#iptables -A FORWARD -i eth0 -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#iptables -A FORWARD -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Resolution DNS pour les machines du LAN
iptables -A FORWARD -i ppp0 -o eth0 --protocol udp --source-port 53 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 --protocol udp --destination-port 53 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth0 --protocol tcp --source-port 53 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 --protocol tcp --destination-port 53 -j ACCEPT

# connexions LAN-Internet (http/https)
iptables -A FORWARD -p tcp --dport 80  -i eth0 -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --dport 443 -i eth0 -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --sport 80  -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --sport 443 -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT