voici le script :
#!/bin/sh
# firewall v1.0 Sept 15 20:45:21 PDT 2001 written by : Kernel <kernel@trustonme.net>
# this script is free software according to the GNU General Public License (see [
www.gnu.org])
# Start/stop/restart/status firewall:
firewall_start() {
echo "[Démarrage du firewall]"
############################### REGLES PAR DEFAUT ###########################
echo "[Initialisation de la table filter]"
iptables -F
iptables -X
echo "[Politique par défaut de la table filter]"
# On ignore tout ce qui entre ou transite par la passerelle
iptables -P INPUT DROP
iptables -P FORWARD DROP
# On accepte, ce qui sort
iptables -P OUTPUT ACCEPT
# Pour éviter les mauvaises suprises, on va
# autoriser l'accès à la loopback, c'est vital !
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
############################### LOCAL-INTERNET ###########################
echo "[On autorise les clients à accéder à internet ]"
#On créé une nouvelle chaîne, le nom est indifférent
# appelons-la "local-internet"
iptables -N local-internet
# On définit le profil de ceux qui appartiendront à "local-internet"
# "local-internet" concerne toutes les connections sauf celles venant d'internet ( ! = non)
# En gros avec ça, vous rendez, vos serveurs inaccessibles depuis internet.
# Pas de panique, certains serveurs seront autorisés explicitement dans la suite.
iptables -A local-internet -m state --state NEW -i ! eth0 -j ACCEPT
iptables -A local-internet -m state --state NEW -i ! ppp0 -j ACCEPT
#Evidemment, une fois acceptées comme "local-internet", les connections peuvent continuer
# et faire des petits :-)
iptables -A local-internet -m state --state ESTABLISHED,RELATED -j ACCEPT
# On termine en indiquant que les connections appartenant à "local-internet"
# accèdent à internet de manière transparente.
iptables -A INPUT -j local-internet
iptables -A FORWARD -j local-internet
############################### LES TABLES NAT ET MANGLE #############################
echo "[Initialisation des tables nat et mangle]"
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
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
############################## ON NOTE LES CONNEXIONX /VAR/LOG/MESSAGE ######################
iptables --append FORWARD --match limit --jump LOG
iptables --append OUTPUT --match limit --jump LOG
#################################### LE MASQUERADING ########################################
# Commentez ces 2 lignes, si vous ne faîtes pas du masquerading (nat)
#echo "[Mise en place du masquerading]"
#iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
################################# ACTIVATION DE LA PASSERELLE ##################
#echo "[Activation de la passerelle]"
#echo 1 > /proc/sys/net/ipv4/ip_forward
################################# PAS DE SPOOFING ############################
echo "[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 SYNFLOOD ####################
echo "[Pas de synflood]"
if [ -e /proc/sys/net/ipv4/tcp_syncookies ] ; then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi
################################## PAS DE PING ###############################
# commentez ces 6 lignes, si vous autorisez les pings sur votre passerelle
#echo "[Pas ping]"
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ] ; then
# echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#fi
############################ noter dans fichiers les accés ################################
iptables -t filter -A INPUT -j LOG
############################ Fonctionnalités serveurs #####################################
echo "[Etude des fonctionalités serveurs, visibles depuis internet ]"
# A ce stade, tous vos clients du réseau local et de la passerelle ont accès à internet. Mieux,
# vos clients du réseau local, ont accès à vos serveurs apache, proftp ... localement. Mais personne
# depuis internet ne peux accéder à l'un des serveurs que vous hébergés.
# Il est bien-sûr possible de dévérrouiller pontuellement l'accès à un serveur depuis internet,
# en décommentant les 2 ou 3 lignes correspondantes.
#echo "[autorisation du serveur ssh(22) ...]"
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
#echo "[autorisation du serveur smtp(25) ...]"
iptables -A INPUT -p tcp --dport smtp -j ACCEPT
#echo "[autorisation du serveur pop (110)...]"
iptables -A INPUT -p tcp --dport pop3 -j ACCEPT
#echo "[autorisation du serveur http(80) ...]"
iptables -A INPUT -p tcp --dport www -j ACCEPT
#iptables -A OUTPUT -p tcp --sport www -j ACCEPT
#echo "[autorisation du serveur https(443) ...]"
iptables -A INPUT -p tcp --dport https -j ACCEPT
#echo "[autorisation du serveur DNS(53) ...]"
iptables -A INPUT -p udp --dport domain -j ACCEPT
iptables -A INPUT -p tcp --dport domain -j ACCEPT
#echo "[autorisation du serveur irc(6667) ...]"
#iptables -A INPUT -p tcp --dport ircd -j ACCEPT
#echo "[autorisation du serveur cvs (2401) ...]"
#iptables -A INPUT -p tcp --dport cvspserver -j ACCEPT
#echo "[autorisation du serveur FTP(21 et 20) ...]"
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
#iptables -A INPUT -i ppp0 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -o ppp0 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A INPUT -i ppp0 -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -A OUTPUT -o ppp0 -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
#echo "[autorisation du serveur FTP-Passif(1024 a 65535) ...]"
#iptables -A INPUT -i ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -o ppp0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
#echo "[autorisation du serveur webmin (10002) ...]"
iptables -A INPUT -p tcp --dport 10002 -j ACCEPT
#echo "[autorisation du serveur xMule (4662 et 4672) ...]"
#iptables -A INPUT -p tcp --dport 4662 -j ACCEPT
#iptables -A INPUT -p udp --dport 4672 -j ACCEPT
#echo "[autorisation du serveur MSNFichiers (6893 et 6894) ...]"
iptables -A INPUT -p tcp --dport 6893 -j ACCEPT
# iptables -A INPUT -p tcp --dport 6894 -j ACCEPT
#echo "[autorisation du serveur VNCserver (5801 et 5901) ...]"
iptables -A INPUT -p tcp --dport 5801 -j ACCEPT
iptables -A INPUT -p tcp --dport 5901 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 5801 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 5901 -j ACCEPT
#echo "[autorisation du webmail (143)....]"
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
#echo "[autorisation du serveur snmp (161) .......]
#iptables -A INPUT -p udp --dport 161 -j ACCEPT
# Ne pas décommenter les 3 lignes qui suivent.
# Plus généralement :
#echo "[autorisation du serveur Mon_truc(10584) ...]"
#iptables -A INPUT -p tcp --dport 10584 -j ACCEPT
echo "[firewall activé !]"
}
firewall_stop() {
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
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
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
echo " [firewall descativé! ]"
}
firewall_restart() {
firewall_stop
sleep 2
firewall_start
}
case "$1" in
'start')
firewall_start
;;
'stop')
firewall_stop
;;
'restart')
firewall_restart
;;
'status')
iptables -L
iptables -t nat -L
iptables -t mangle -L
;;
*)
echo "Usage: firewall {start|stop|restart|status}"
esac