#!/bin/bash # On definit ici les deux interfaces # INTERFACE_LOCALE : votre carte reseau INTERFACE_LOCALE="eth0" # INTERFACE_INTERNET : l'interface vous connectant a internet INTERFACE_INTERNET="ppp0" # Entrez ici l'adresse IP locale du serveur Quake si vous en avez un SERVEUR_QUAKE="192.168.0.1" start() { echo -n "Demarrage du firewall/routeur : " echo 1 > /proc/sys/net/ipv4/ip_forward 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 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts modprobe ip_tables modprobe ip_nat_ftp modprobe ip_nat_irc modprobe iptable_filter modprobe iptable_mangle modprobe iptable_nat iptables -F iptables -X # Regles definissant la syntaxe des paquets dropped dans le /var/log/messages iptables -N LOG_DROP iptables -A LOG_DROP -j LOG --log-prefix '[DROP] : ' iptables -A LOG_DROP -j DROP # On commence par rejeter toutes les regles iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # On acceptes les requetes locales iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Pareil pour le modem sauf les requetes entrantes qui doivent venir de notre machine iptables -A OUTPUT -o ${INTERFACE_INTERNET} -j ACCEPT iptables -A INPUT -i ${INTERFACE_INTERNET} -m state --state ESTABLISHED -j ACCEPT # Ajoutez cette regle si vous faites de l'IRC iptables -A INPUT -i ${INTERFACE_INTERNET} -m state --state NEW,ESTABLISHED -p tcp --dport 113 -j ACCEPT # Decommentez les deux lignes ci-dessous si vous avez un serveur ftp # iptables -A INPUT -i ${INTERFACE_INTERNET} -m state --state NEW,ESTABLISHED -p udp --dport 20 -j ACCEPT # iptables -A INPUT -i ${INTERFACE_INTERNET} -m state --state NEW,ESTABLISHED -p tcp --dport 21 -j ACCEPT # Decommentez la ligne ci-dessous si vous avez un serveur web # iptables -A INPUT -i ${INTERFACE_INTERNET} -m state --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT # Route un serveur quake de l'internet vers votre machine locale # Decommentez la ligne ci-dessous si vous vous en servez # La meme methode s'applique pour un serveur CS, remplacez juste le port # iptables -A PREROUTING -t nat -p udp -i ppp0 --dport 27960 -j DNAT --to ${SERVEUR_QUAKE} # Autorise les paquets entrants et sortant entre le modem et le LAN # Ces regles servent a autoriser les machines de votre reseau vers l'internet iptables -A FORWARD -i ${INTERFACE_LOCALE} -o ${INTERFACE_INTERNET} -j ACCEPT iptables -A FORWARD -o ${INTERFACE_LOCALE} -i ${INTERFACE_INTERNET} -j ACCEPT # Cache l'adresse IP source des machines du reseau iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE # Logging iptables -A FORWARD -j LOG_DROP iptables -A INPUT -j LOG_DROP iptables -A OUTPUT -j LOG_DROP echo " [Done.]" touch /var/lock/firewall echo } stop() { echo -n "Arret du firewall/routeur : " # purge le firewall iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT # purge les regles de routage iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -F iptables -t nat -F iptables -X iptables -t nat -X echo " [Done.]" rm -f /var/lock/firewall echo } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) iptables -L iptables -t nat -L RETVAL=? ;; *) echo "Usage: firewall {start|stop|restart|status}" RETVAL=1 esac exit