1. !/bin/bash
#################################################
#
# Script de firewall
#
#
#################################################


###Variables###
IPTABLES=/sbin/iptables
ILAN=lan
IWAN=wan
ILO=lo
LAN=192.168.0.0/24
IPWAN=$(/sbin/ifconfig $IWAN | grep 'inet ' | tr -s ' ' | tr ' ' : | cut -d: -f4)


###CONFIG###
#active le forward
echo 1 > /proc/sys/net/ipv4/ip_forward

modprobe ip_nat_ftp
modprobe ip_conntrack_ftp

#purge
$IPTABLES -t filter -F INPUT
$IPTABLES -t filter -F FORWARD
$IPTABLES -t filter -F OUTPUT

$IPTABLES -t nat -F PREROUTING
$IPTABLES -t nat -F OUTPUT
$IPTABLES -t nat -F POSTROUTING

#par defaut
$IPTABLES -t filter -P INPUT DROP
$IPTABLES -t filter -P FORWARD DROP
$IPTABLES -t filter -P OUTPUT DROP
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT

#"partage de connexion"
#$IPTABLES -t nat -A POSTROUTING -s $LAN -o $IWAN -j SNAT --to-source $IPWAN
$IPTABLES -t nat -A POSTROUTING -s $LAN -o $IWAN -j MASQUERADE

###TUNING###
# Active la protection broadcast echo
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
                                                
# Active la protection TCP syn cookie
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
     
# Enregistre les paquets avec des adresses impossibles
# (cela inclut les paquets usurpés (spoofed), les paquets routés
# source, les paquets redirigés), mais faites attention à ceci
# sur les serveurs web très chargés
echo 1 >/proc/sys/net/ipv4/conf/all/log_martians 
     
#Active la protection sur les mauvais messages d'erreur
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
     
# Maintenant la protection ip spoofing
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
     
# Désactive l'acceptation Redirect ICMP
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
     
# Désactive Source Routed
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route


###REGLES###
#autorise les réponses
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#autorise tout le loopback
$IPTABLES -A INPUT -i $ILO -j ACCEPT
$IPTABLES -A OUTPUT -o $ILO -j ACCEPT

#autorise le trafic sortant du routeur
$IPTABLES -A OUTPUT -j ACCEPT
$IPTABLES -t nat -A OUTPUT -j ACCEPT

#autorise le traffic du LAN vers le routeur
$IPTABLES -A INPUT -m state --state NEW -i $ILAN -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW -o $ILAN -j ACCEPT

#autorise le forward du LAN vers l'extérieur
$IPTABLES -A FORWARD -m state --state NEW -i $ILAN -o $IWAN -j ACCEPT

#autorise l'extérieur vers différents services internes
#web
$IPTABLES -A INPUT -m state --state NEW -i $IWAN -p Tcp --dport 80 -j ACCEPT
#ftp
$IPTABLES -A INPUT -m state --state NEW -i $IWAN -p Tcp --dport 21 -j ACCEPT
#ssh
$IPTABLES -A INPUT -m state --state NEW -i $IWAN -p Tcp --dport 56789 -j ACCEPT
#bittornado
$IPTABLES -A INPUT -m state --state NEW -i $IWAN -p Tcp -m multiport --dports 6885,6886,6887,6888,6889,6890 -j ACCEPT
#mldonkey
$IPTABLES -A INPUT -m state --state NEW -i $IWAN -p tcp -m multiport --dport 11712,14470,50000,50001 -j ACCEPT


#rdp sur un poste du LAN
$IPTABLES -A FORWARD -d 192.168.0.100 -p tcp --dport 3389 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -d $IPWAN -p tcp --dport 3389 -j DNAT --to-destination 192.168.0.100:3389
#skype
$IPTABLES -A FORWARD -p tcp --dport 35587 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -p tcp --dport 35587 -j DNAT --to-destination 192.168.0.100:35587

#log
$IPTABLES -A INPUT -j ULOG --ulog-prefix='[IPTABLES DROP]'
$IPTABLES -A OUTPUT -j ULOG --ulog-prefix='[IPTABLES DROP]'
$IPTABLES -A FORWARD -j ULOG --ulog-prefix='[IPTABLES DROP]'