#!/bin/sh -norc # Paramètrage du réseau local (LAN = Local Area Network) LAN_INTERFACE=eth1 ; # Interface réseau interne LAN_IP=192.168.0.1 ; # Adresse réseau interne LAN_NETWORK=192.168.0.0/24 ; # Réseau interne LAN_BROADCAST=192.168.0.255 ; # Adresse de broadcast interne # Paramètrage de la connexion Internet (WAN = Wild Area Network = Réseau Large) #WAN_INTERFACE=eth1 ; # Interface réseau externe (Internet) #WAN_IP=10.0.0.1 ; # Adresse réseau externe (Internet) #WAN_NETWORK=10.0.0.0/8 ; # Réseau externe (Internet) # REMARQUE: # Si vous utiliser une connexion par modem (RTC/RNIS/ADSL) pour vous connecter à Internet # utilisez les variables ci-dessous. Elle permettrons à ce script de détecter # automatiquement votre adresse IP Internet WAN_INTERFACE=eth0 ; # Interface modem WAN_IP=192.168.1.173 #WAN_IP=`/sbin/ifconfig | grep "P-t-P" | sed "s/^[: a-z]*\([.0-9]*\).*/\1/g"` ; # Récupère l'adresse réseau externe (Internet) WAN_NETWORK=0.0.0.0/0 # Paramètrage de l'IP masquerading # NAT=0 <=> Le NAT N'est PAS autorisé # NAT=1 <=> Le NAT est autorisé NAT=0 # Paramètrage du port forwarding # PF=0 <=> Le port forwarding N'est PAS autorisé # PF=1 <=> Le port forwarding est autorisé PF=0 PF_PROTO=tcp ; # Type de frame FTP_2QUARANTE=60647 ; #port ftp sur 2quarante VNC_2QUARANTE=5900 ; #port vnc sur 2quarante SSH_2QUARANTE=666 ; #port ssh sur 2quarante WEB_2QUARANTE=80 ; #port web sur 2quarante PF_IP=192.168.1.173 ; # Adresse IP du serveur sur le LAN # Paramétrage du LOG # LOG=LOG_IN <=> On log toutes les tentatives d'intrusions non autorisées # LOG=LOG_OUT <=> On log toutes les tentatives de sortie non autorisées # LOG=LOG_IN-OUT <=> On log toutes les tentatives d'entrées et sorties non autorisées # LOG=ULOG_IN <=> On log (avec ULOG) toutes les tentatives d'intrusions non autorisée # LOG=ULOG_OUT <=> On log (avec ULOG) toutes les tentatives de sorties non autorisées # LOG=ULOG_IN-OUT <=> On log (avec ULOG) toutes les tentatives d'entrées et sorties non autorisées # LOG=NONE <=> On ne log RIEN du tout LOG=ULOG_IN-OUT LOG_PREFIX=Netfilter ############################################################################### ############################################################################### # A PARTIR DE CE POINT, VOUS N'AVEZ PLUS BESOIN DE CONFIGURER CE SCRIPT!!! ############################################################################### ############################################################################### ############################################################################### # Initialisation de Netfilter ############################################################################### # Initialise la table Filter (par défaut tout les échanges sont refusés) echo "+ Initialisation de la table Filter" iptables -t filter -F iptables -t filter -X iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP iptables -t filter -P OUTPUT DROP # Initialise la table NAT (par défaut tout les échanges sont activés) echo "+ Initialisation de la table NAT" iptables -t nat -F iptables -t nat -X iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -t nat -P POSTROUTING ACCEPT # Initialise la table Mangle (par défaut tout les échanges sont activés) echo "+ Initialisation de la table Mangle" iptables -t mangle -F iptables -t mangle -X iptables -t mangle -P PREROUTING ACCEPT iptables -t mangle -P INPUT ACCEPT iptables -t mangle -P FORWARD ACCEPT iptables -t mangle -P OUTPUT ACCEPT iptables -t mangle -P POSTROUTING ACCEPT echo "+ Desactivation du NAT" echo 0 > /proc/sys/net/ipv4/ip_forward ############################################################################### # Règles du localhost # On NE fait PAS de restriction aux adresses IP source / destination 127.0.0.0 ############################################################################### echo "+ Règles du localhost" iptables -t filter -A OUTPUT -o lo -p all -j ACCEPT iptables -t filter -A INPUT -i lo -p all -j ACCEPT ############################################################################### # Règles de conexion au reseau local # Tout est autorisé ############################################################################### echo "+ Règles du réseau local ($LAN_INTERFACE - $LAN_IP - $LAN_NETWORK)" # Connexions firewall <-> réseau iptables -t filter -A OUTPUT -o $LAN_INTERFACE -s $LAN_IP -d $LAN_NETWORK -p all -j ACCEPT iptables -t filter -A INPUT -i $LAN_INTERFACE -s $LAN_NETWORK -d $LAN_IP -p all -j ACCEPT # Connexions firewall <-> broadcast réseau iptables -t filter -A OUTPUT -o $LAN_INTERFACE -s $LAN_IP -d $LAN_BROADCAST -p all -j ACCEPT iptables -t filter -A INPUT -i $LAN_INTERFACE -s $LAN_BROADCAST -d $LAN_IP -p all -j ACCEPT ############################################################################### # Règles de connexion à Internet # Seul les connexions initialisés par la machine sont autorisées # C'est le suivit de connexion ############################################################################### # Chargement des modules pour le suivit de connexion modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_conntrack_irc echo "+ Règles pour Internet ($WAN_INTERFACE - $WAN_IP - $WAN_NETWORK)" iptables -t filter -A OUTPUT -o $WAN_INTERFACE -s $WAN_IP -d $WAN_NETWORK -p all -m state --state ! INVALID -j ACCEPT iptables -t filter -A INPUT -i $WAN_INTERFACE -s $WAN_NETWORK -d $WAN_IP -p all -m state --state RELATED,ESTABLISHED -j ACCEPT ############################################################################### # Règles pour le port forwarding # Pour que le port forwarding soit activé, il faut la variable "$PF" soit à "1" ############################################################################### if [ "$PF" == "1" ]; then # Chargement des modules pour le port forwarding modprobe iptable_nat echo "+ Autorise le port forwardong de $WAN_IP:$VNC_2QUARANTE -> $PF_IP:$VNC_2QUARANTE" iptables -t filter -A FORWARD -i $WAN_INTERFACE -o $LAN_INTERFACE -s $WAN_NETWORK -d $LAN_NETWORK -p $PF_PROTO --dport $VNC_2QUARANTE -m state --state ! INVALID -j ACCEPT iptables -t filter -A FORWARD -i $LAN_INTERFACE -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p $PF_PROTO --sport $VNC_2QUARANTE -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A PREROUTING -i $WAN_INTERFACE -s $WAN_NETWORK -d $WAN_IP -p $PF_PROTO --dport $VNC_2QUARANTE -j DNAT --to-destination $PF_IP iptables -t nat -A POSTROUTING -o $LAN_INTERFACE -s $WAN_NETWORK -d $PF_IP -p $PF_PROTO --dport $VNC_2QUARANTE -j SNAT --to-source $LAN_IP echo "+ Autorise le port forwardong de $WAN_IP:$SSH_2QUARANTE -> $PF_IP:$SSH_2QUARANTE" iptables -t filter -A FORWARD -i $WAN_INTERFACE -o $LAN_INTERFACE -s $WAN_NETWORK -d $LAN_NETWORK -p $PF_PROTO --dport $SSH_2QUARANTE -m state --state ! INVALID -j ACCEPT iptables -t filter -A FORWARD -i $LAN_INTERFACE -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p $PF_PROTO --sport $SSH_2QUARANTE -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A PREROUTING -i $WAN_INTERFACE -s $WAN_NETWORK -d $WAN_IP -p $PF_PROTO --dport $SSH_2QUARANTE -j DNAT --to-destination $PF_IP iptables -t nat -A POSTROUTING -o $LAN_INTERFACE -s $WAN_NETWORK -d $PF_IP -p $PF_PROTO --dport $SSH_2QUARANTE -j SNAT --to-source $LAN_IP echo "+ Autorise le port forwardong de $WAN_IP:$FTP_2QUARANTE -> $PF_IP:$FTP_2QUARANTE" iptables -t filter -A FORWARD -i $WAN_INTERFACE -o $LAN_INTERFACE -s $WAN_NETWORK -d $LAN_NETWORK -p $PF_PROTO --dport $FTP_2QUARANTE -m state --state ! INVALID -j ACCEPT iptables -t filter -A FORWARD -i $LAN_INTERFACE -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p $PF_PROTO --sport $FTP_2QUARANTE -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A PREROUTING -i $WAN_INTERFACE -s $WAN_NETWORK -d $WAN_IP -p $PF_PROTO --dport $FTP_2QUARANTE -j DNAT --to-destination $PF_IP iptables -t nat -A POSTROUTING -o $LAN_INTERFACE -s $WAN_NETWORK -d $PF_IP -p $PF_PROTO --dport $FTP_2QUARANTE -j SNAT --to-source $LAN_IP echo "+ Autorise le port forwardong de $WAN_IP:$WEB_2QUARANTE -> $PF_IP:$WEB_2QUARANTE" iptables -t filter -A FORWARD -i $WAN_INTERFACE -o $LAN_INTERFACE -s $WAN_NETWORK -d $LAN_NETWORK -p $PF_PROTO --dport $WEB_2QUARANTE -m state --state ! INVALID -j ACCEPT iptables -t filter -A FORWARD -i $LAN_INTERFACE -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p $PF_PROTO --sport $WEB_2QUARANTE -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A PREROUTING -i $WAN_INTERFACE -s $WAN_NETWORK -d $WAN_IP -p $PF_PROTO --dport $WEB_2QUARANTE -j DNAT --to-destination $PF_IP iptables -t nat -A POSTROUTING -o $LAN_INTERFACE -s $WAN_NETWORK -d $PF_IP -p $PF_PROTO --dport $WEB_2QUARANTE -j SNAT --to-source $LAN_IP echo 1 > /proc/sys/net/ipv4/ip_forward else echo "+ Le port forwarding N'est PAS autorisé" if [ "$NAT" == "0" ]; then echo 0 > /proc/sys/net/ipv4/ip_forward fi fi ############################################################################### # Règles pour l'IP masquerading # Pour que le IP masquerading soit activé, il faut la variable "$NAT" soit à "1" ############################################################################### if [ "$NAT" == "1" ]; then # Chargement des modules pour l'IP masquerading modprobe iptable_nat modprobe ip_nat_ftp modprobe ip_nat_irc echo "+ Autorise l'IP masquerading de $LAN_NETWORK -> $WAN_NETWORK" iptables -t filter -A FORWARD -i $LAN_INTERFACE -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p all -m state --state ! INVALID -j ACCEPT iptables -t filter -A FORWARD -i $WAN_INTERFACE -o $LAN_INTERFACE -s $WAN_NETWORK -d $LAN_NETWORK -p all -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -o $WAN_INTERFACE -s $LAN_NETWORK -d $WAN_NETWORK -p all -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward else echo "+ L'IP masquerading N'est PAS autorisé" echo 0 > /proc/sys/net/ipv4/ip_forward fi ############################################################################### # Règles diverses choppés ici ou là sans que je les comprenne ############################################################################### # pas d'ip spoofing #for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done # Disable Source Routed Packets #for i in /proc/sys/net/ipv4/conf/*/accept_source_route; do # echo 0 > $i #done #permettre le ftp modprobe iptable_nat modprobe ip_nat_ftp modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_conntrack_irc # ssh depusi l'exterieur iptables -A INPUT -p tcp --dport 1698 -j ACCEPT #pour le transfert irc iptables -A INPUT -p tcp --dport 6881:6886 -j ACCEPT #pour le transfert msn iptables -A INPUT -p tcp --dport 6891:6901 -j ACCEPT #video sur msn #iptables -A INPUT -p tcp --dport 6901 -j ACCEPT #serveur web accessible de l'exterieur iptables -A INPUT -p tcp --dport 3698 -j ACCEPT #iptables -A OUTPUT -p tcp --sport 3698 -j ACCEPT #iptables -A INPUT -p tcp --dport 7963 -j ACCEPT #iptables -A INPUT -p tcp --dport 3698 -m state --state NEW -j ACCEPT #iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #iptables -A INPUT -p tcp --dport 7963 -j ACCEPT #iptables -A INPUT -p tcp --dport 7963 -m state --state NEW -j ACCEPT #iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ############################################################################### # Règles pour le log ############################################################################### echo "+ Definition des logs ($LOG)" case "$LOG" in LOG_IN) iptables -t filter -A INPUT -p all -j LOG --log-prefix $LOG_PREFIX ;; LOG_OUT) iptables -t filter -A OUTPUT -p all -j LOG --log-prefix $LOG_PREFIX ;; LOG_IN-OUT) iptables -t filter -A INPUT -p all -j LOG --log-prefix $LOG_PREFIX iptables -t filter -A OUTPUT -p all -j LOG --log-prefix $LOG_PREFIX ;; ULOG_IN) iptables -t filter -A INPUT -p all -j ULOG --ulog-prefix $LOG_PREFIX ;; ULOG_OUT) iptables -t filter -A OUTPUT -p all -j ULOG --ulog-prefix $LOG_PREFIX ;; ULOG_IN-OUT) iptables -t filter -A INPUT -p all -j ULOG --ulog-prefix $LOG_PREFIX iptables -t filter -A OUTPUT -p all -j ULOG --ulog-prefix $LOG_PREFIX ;; esac echo "+ ------====== SCRIPT TERMINE! ======------" echo "+ Pour afficher votre configuration Netfilter, lancez:" echo " - 'iptables -L -n -v' pour la table 'Filter'" echo " - 'iptables -L -n -v -t nat' pour la table 'NAT'" echo " - 'iptables -L -n -v -t mangle' pour la table 'Mangle'" #(Eliminer les paquets destinés aux ports privilégiés) #iptables -A INPUT -p TCP -i ! $LAN_INTERFACE -d 0/0 --dport 0:1023 -j DROP #iptables -A INPUT -p UDP -i ! $LAN_INTERFACE -d 0/0 --dport 0:1023 -j DROP #iptables -A INPUT -p TCP -i $WAN_INTERFACE -d 0/0 --dport 0:19 -j DROP #iptables -A INPUT -p UDP -i $WAN_INTERFACE -d 0/0 --dport 0:19 -j DROP #iptables -A INPUT -p TCP -i $WAN_INTERFACE -d 0/0 --dport 22:1023 -j DROP #iptables -A INPUT -p UDP -i $WAN_INTERFACE -d 0/0 --dport 22:1023 -j DROP # Deny ICMP echo-requests #iptables -t filter -A INPUT -i $WAN_INTERFACE -p icmp --icmp-type echo-request -j DROP # Deny TCP connection attempts #iptables -A INPUT -i $EXT -p tcp --syn -j LOG #iptables -A INPUT -i $WAN_INTERFACE -p tcp --syn -j DROP # edonkey depuis l'exterieur # torrent depuis l'exterieur #iptables -A INPUT -p tcp --dport 8793 -j ACCEPT # edonkey depuis l'exterieur # soulseek depusi l'exterieur #iptables -A INPUT -p tcp --dport 2240 -j ACCEPT