Citation
/etc/rc.d/rc.firewall#!/bin/sh
# firewall v1.0.1 Oct 13 09:48:57 PDT 2003 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 :
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
############# Priorisation de la bande passante et des connections - QoS ############
// ça, tu n'en auras pas forcément besoin (d'ailleurs, ici c'est encore incomplet, la priorisation (QoS) ne fonctionne que pour les données que j'envoie (upload) mais pas pour le download.)
echo "[priorisation des connections ssh ...]";
iptables -A PREROUTING -t mangle -p tcp --sport 443 -j TOS --set-tos Minimize-Delay
echo "[priorisation des connections http ...]";
iptables -A PREROUTING -t mangle -p tcp --sport http -j TOS --set-tos Maximize-throughput
iptables -A PREROUTING -t mangle -p tcp --sport 3129 -j TOS --set-tos Maximize-throughput
echo "[priorisation des connections Diablo 2 ...]";
iptables -A PREROUTING -t mangle -p tcp --sport 6112:6119 -j TOS --set-tos Minimize-Delay
iptables -A PREROUTING -t mangle -p udp --sport 6112:6119 -j TOS --set-tos Minimize-Delay
iptables -A PREROUTING -t mangle -p tcp --sport 4000 -j TOS --set-tos Minimize-Delay
iptables -A PREROUTING -t mangle -p udp --sport 4000 -j TOS --set-tos Minimize-Delay
# Maximum de débit à Diablo 2
iptables -A PREROUTING -t mangle -p tcp --sport 6112:6119 -j TOS --set-tos Maximize-Throughput
iptables -A PREROUTING -t mangle -p udp --sport 6112:6119 -j TOS --set-tos Maximize-Throughput
iptables -A PREROUTING -t mangle -p tcp --sport 4000 -j TOS --set-tos Maximize-Throughput
iptables -A PREROUTING -t mangle -p udp --sport 4000 -j TOS --set-tos Maximize-Throughput
############################ 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ébergez.
# 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 443 -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
# Ports visibles depuis l'extérieur pour Freenet :
echo "[autorisation du serveur Freenet (23050/tcp) ...]"
iptables -A INPUT -p tcp --dport 23050 -j ACCEPT
echo "[autorisation du serveur aMule (4662/tcp) ...]"
iptables -A INPUT -p tcp --dport 4662 -j ACCEPT
echo "[autorisation du serveur BitTorrent (6881-6889/tcp) ...]"
iptables -A INPUT -p tcp --dport 6881:6889 -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