#!/bin/sh # firewall v1.0.1 Oct 13 09:48:57 PDT 2003 written by : Kernel # this script is free software according to the GNU General Public License (see http://www.gnu.org/licenses/gpl.html) # 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 ! 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 #################################### 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 ppp0 -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 ############################ 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 http(80) ...]" #iptables -A INPUT -p tcp --dport 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 ftp -j ACCEPT #iptables -A INPUT -p tcp --dport ftp-data -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