Differences

This shows you the differences between two versions of the page.

Link to this comparison view

linux:script_iptables [2010/01/12 13:29] (current)
Line 1: Line 1:
 +Suite a de recentes discutions sur gcu, j ai decide de proposer un petit script sans pretention de firewalling fonctionnant avec Iptables. Pour des scripts nettement plus elabores, google est votre ami :-)
  
 +Pour fonctionner correctement,​ il necessite le module string, qui peut etre applique a partir des sources de netfilter : http://​www.netfilter.org/​
 +
 +N'​hesitez pas a me mailer pour me signaler toute fonctionnalite "​etrange"​ ;-)
 +
 +<​code>​
 +#!/bin/bash
 +
 +###################################################​
 +## ARCHITECTURE POUR UN FIREWALL A 4 INTERFACES ​ ##
 +## ##
 +##    ​INTERNET ##
 +##       | ##
 +##​ DMZ--------FIREWALL--------ZONE SERVEURS ##
 +##       | ##
 +##      ​LAN ##
 +## ##
 +###################################################​
 +
 +###################################################​
 +## MODULES IPTABLES NECESSAIRES ##
 +###################################################​
 +MODULES_IPTABLES="​ip_tables \
 +                  ipt_string \
 +   ip_conntrack \
 +                  ip_conntrack_ftp \
 +   ip_nat_ftp"​ #​ Modules iptables charges au demarrage
 +INTERNET="​ppp0"​ # Device Internet (plusieurs devices possibles)
 +INTERNET_NAT="​ppp0" ​                            # Device Internet utilise pour le NAT (1 seul device possible)
 +DMZ="" ​  ​  ​       # Device DMZ (IP publiques, serveurs accessible depuis internet)
 +ZONE_SERVEURS="​eth2"​ #​ Device SMZ (IP privees, serveurs accessible en interne)
 +LAN="​eth1 eth3"​ #​ Device intranet (plusieurs devices possibles)
 +
 +PAQUETS_ICMP_AUTHORISES="​0 3 4 5 8 11 12" # Paquets ICMP authorises a circuler entres les differents reseaux ​
 +PING_FLOOD="​1/​s"​ #​ Nombre de PING authorises par seconde
 +LOG_FLOOD="​1/​s"​
 +
 +PROTOCOLES_AUTHORISES="​47"​ #​ Protocoles authorises a circuler via le firewall
 +
 +MASQ_LAN="​YES" ​                                 # Masquerade le Lan
 +MASQ_DMZ="​NO" ​                                  # Masquerade la DMZ
 +MASQ_ZONE_SERVEURS="​YES" ​                       # Masquerade la zone serveurs
 +
 +PORTS_TCP_INTERNET_AUTHORISES="​53"​ #​ Ports TCP du firewall accessible de l'​internet
 +PORTS_UDP_INTERNET_AUTHORISES="​53"​ #​ Ports UDP du firewall accessible de l'​internet
 +PORTS_TCP_DMZ_AUTHORISES=""​ #​ Ports TCP du firewall accessible de la DMZ
 +PORTS_UDP_DMZ_AUTHORISES=""​ #​ Ports UDP du firewall accessible de la DMZ
 +PORTS_TCP_ZONE_SERVEURS_AUTHORISES="​53 113" # Ports TCP du firewall accessible de la zone serveurs
 +PORTS_UDP_ZONE_SERVEURS_AUTHORISES="​53 113" # Ports UDP du firewall accessible de la zone serveurs
 +PORTS_TCP_LAN_AUTHORISES="​53 113 22" # Ports TCP du firewall accessible du LAN
 +PORTS_UDP_LAN_AUTHORISES="​53 113 22" # Ports UDP du firewall accessible du LAN
 +
 +PORTS_TCP_SORTIE_REFUSES="​6346 \
 +   7777 \
 +   8888 \
 +   6699 \
 +   6000" ​                # Ports TCP interdit en sortie du firewall
 +PORTS_UDP_SORTIE_REFUSES="​6346 \
 +   7777 \
 +   8888 \
 +   6699 \
 +   6000" ​                # Ports UDP interdit en sortie du firewall
 +
 +RESEAUX_LAN="​192.168.10.0/​24 \
 +      ​192.168.30.0/​24" ​ # Reseaux composants le LAN
 +RESEAUX_DMZ="" ​                                 # Reseaux composants la DMZ
 +RESEAUX_ZONE_SERVEURS="​192.168.50.0/​24" ​        # Reseaux composants la zone serveurs
 +
 +NAT_TCP_NET="​ 80.13.192.105:​80>​192.168.50.100:​8080 " ​ # NAT => IP_FIREWALL:​PORT_FIREWALL>​IP_INTERNE:​PORT_INTERNE
 +NAT_UDP_NET="" ​ # NAT => IP_FIREWALL:​PORT_FIREWALL>​IP_INTERNE:​PORT_INTERNE
 +
 +MOTS_CLES="​root admin" ​                         # Mots cles a loguer
 +
 +MOTS_CLES_INTERDITS="​mp3>​192.168.10.117 \
 +      ​MP3>​192.168.10.117 \
 +      ​ogg>​192.168.10.117 \
 +      ​OGG>​192.168.10.117" ​       # Mots cles interdit de passage ;-) MOT_CLE>​IP_DESTINATAIRE
 +IP_INTERDITES="​ 66.28.48.0/​24 \
 + 66.28.49.0/​24"​ #​ Adresses interdites d'​entree
 +
 +###################################################​
 +## VARIABLES PROPRES AU SCRIPT (NE PAS EDITER) ​  ## ​
 +###################################################​
 +
 +IPTABLES=`which iptables`
 +MODPROBE=`which modprobe`
 +VERT="​\033[32m"​
 +JAUNE="​\033[33m"​
 +GRAS="​\033[1m"​
 +NORMAL="​\033[m"​
 +ROUGE="​\033[31m"​
 +
 +
 +###################################################​
 +## VERIFICATION DE LA PRESENCE DE IPTABLES ##
 +###################################################​
 +
 +echo -en "​${GRAS}Verification de la presence de IPTABLES :​${NORMAL}"​
 +if [ -z ${IPTABLES} ] ;then
 +    echo -e "​\t\t${ROUGE}FAILED${NORMAL}\n"​
 +    exit 1
 +else
 +    echo -e "​\t\t${VERT}OK${NORMAL}"​
 +fi
 +
 +
 +###################################################​
 +## VERIFICATION DE LA PRESENCE DE MODPROBE ##
 +###################################################​
 +
 +echo -en "​${GRAS}Verification de la presence de MODPROBE :​${NORMAL}"​
 +if [ -z ${MODPROBE} ] ;then
 +    echo -e "​\t\t${ROUGE}FAILED${NORMAL}\n"​
 +    exit 1
 +else
 +    echo -e "​\t\t${VERT}OK${NORMAL}\n"​
 +fi
 +
 +
 +###################################################​
 +## CHARGEMENT DES MODULES PROPRES A IPTABLES ##
 +###################################################​
 +
 +for module in ${MODULES_IPTABLES} ;do
 +    echo -e "​${GRAS}Chargement du module ${module} :​${NORMAL}\t\t\t${VERT}OK${NORMAL}"​
 +    ${MODPROBE} ${module}
 +done
 +echo -e "​\n"​
 +
 +###################################################​
 +## CONFIGURATION DE BASE DU FIREWALL GRACE AU ##
 +## SYSTEME DE FICHIER /proc ##
 +###################################################​
 +
 +###################################################​
 +## ACTIVATION DE L'IP FORWARDING (routage) ##
 +###################################################​
 +
 +echo -en "​${GRAS}${JAUNE}Activation de l'ip forwarding :​${NORMAL}"​
 +if [ -e /​proc/​sys/​net/​ipv4/​ip_forward ] ; then
 +    echo 1 > /​proc/​sys/​net/​ipv4/​ip_forward
 +    echo -e "​\t\t\t\t${VERT}OK${NORMAL}"​
 +else
 +    echo -e "​\t\t\t\t${ROUGE}FAILED${NORMAL}\n"​
 +    exit 1
 +fi
 +
 +###################################################​
 +## Protection contre les SYN FLOOD               ##
 +###################################################​
 +
 +echo -en "​${GRAS}${JAUNE}Protection contre les SYN/FLOOD :​${NORMAL}"​
 +if [ -e /​proc/​sys/​net/​ipv4/​tcp_syncookies ] ; then
 +    echo 1 > /​proc/​sys/​net/​ipv4/​tcp_syncookies
 +    echo -e "​\t\t\t${VERT}OK${NORMAL}"​
 +else
 +    echo -e "​\t\t\t${ROUGE}FAILED${NORMAL}"​
 +fi
 +
 +###################################################​
 +## Defragmente les paquets avant des les reenvoyer#
 +## Utile pour le masquerading ​                   ##
 +###################################################​
 +
 +echo -en "​${GRAS}${JAUNE}Refragmentation des paquets :​${NORMAL}"​
 +if [ -e /​proc/​sys/​net/​ipv4/​ip_always_defrag ] ; then
 +    echo 1 > /​proc/​sys/​net/​ipv4/​ip_always_defrag
 +    echo -e "​\t\t\t\t${VERT}OK${NORMAL}"​
 +else
 +    echo -e "​\t\t\t\t${ROUGE}FAILED${NORMAL}"​
 +fi
 +
 +###################################################​
 +## Permet de ne pas repondre aux paquets ICMP    ##
 +## emis sur le broadcast ​                        ##
 +###################################################​
 +
 +echo -en "​${GRAS}${JAUNE}Insensibilite aux paquets ICMP emis sur le brodcast :​${NORMAL}"​
 +if [ -e /​proc/​sys/​net/​ipv4/​icmp_echo_ignore_broadcasts ] ; then
 +    echo 1 > /​proc/​sys/​net/​ipv4/​icmp_echo_ignore_broadcasts
 +    echo -e "​\t${VERT}OK${NORMAL}"​
 +else
 +    echo -e "​\t${ROUGE}FAILED${NORMAL}"​
 +fi
 +
 +###################################################​
 +## Permet d'​ignorer les erreurs ICMP provenant ​  ##
 +## des hotes du reseau reagissant mal aux trames ##
 +## envoyees vers ce qu'ils percoivent comme      ##
 +## l'​addresse de diffusion ​                      ##
 +###################################################​
 +
 +if [ -e /​proc/​sys/​net/​ipv4/​icmp_ignore_bogus_error_responses ] ; then
 +    echo 1 > /​proc/​sys/​net/​ipv4/​icmp_ignore_bogus_error_responses
 +fi
 +
 +###################################################​
 +## Reverse Path Filtering ​                       ##
 +## Permet de ne router que les paquets appartenant#​
 +## a nos reseaux ​                                ##
 +###################################################​
 +
 +echo -e "​${GRAS}${JAUNE}Activation du Reverse Path Filtering :​${NORMAL}\t\t\t${VERT}OK${NORMAL}\n"​
 +for f in /​proc/​sys/​net/​ipv4/​conf/​*/​rp_filter;​ do
 +    echo 1 > $f
 +done
 +
 +
 +###################################################​
 +## EFFACEMENT DES ANCIENNES REGLES ## 
 +###################################################​
 +
 +echo -en "​${GRAS}${JAUNE}Effacement des anciennes regles :​${NORMAL}"​
 +${IPTABLES} -t filter -F INPUT
 +${IPTABLES} -t filter -F OUTPUT
 +${IPTABLES} -t filter -F FORWARD
 +${IPTABLES} -t nat    -F PREROUTING
 +${IPTABLES} -t nat    -F OUTPUT
 +${IPTABLES} -t nat    -F POSTROUTING
 +${IPTABLES} -t mangle -F PREROUTING
 +${IPTABLES} -t mangle -F OUTPUT
 +echo -e "​\t\t\t${VERT}OK${NORMAL}"​
 +
 +###################################################​
 +## REMISE A ZERO DES CHAINES ##
 +###################################################​
 +
 +echo -en "​${GRAS}${JAUNE}Remise a zero des chaines :​${NORMAL}"​
 +${IPTABLES} -t filter -Z
 +${IPTABLES} -t nat    -Z
 +${IPTABLES} -t mangle -Z
 +echo -e "​\t\t\t\t${VERT}OK${NORMAL}"​
 +
 +###################################################​
 +## MISE EN PLACE DE LA POLITIQUE PAR DEFAUT ##
 +###################################################​
 +
 +echo -en "​${GRAS}${JAUNE}Mise en place de la polique par defaut :​${NORMAL}"​
 +${IPTABLES} -t filter -P INPUT   DROP
 +${IPTABLES} -t filter -P OUTPUT ​ ACCEPT
 +${IPTABLES} -t filter -P FORWARD DROP
 +echo -e "​\t\t${VERT}OK${NORMAL}\n"​
 +
 +###################################################​
 +## MOTS CLES A LOGUER ​                           ##
 +###################################################​
 +
 +if [ "​${MOTS_CLES}"​ != ""​ ] ;then
 +    echo -ne "​${GRAS}${JAUNE}Activation du systeme de logs par mots cles :​${NORMAL}"​
 +    for mot in ${MOTS_CLES} ;do
 + ${IPTABLES} -A INPUT -m string --string "​${mot}"​ -j LOG --log-level info --log-prefix "​${mot} : "
 + ${IPTABLES} -A FORWARD -m string --string "​${mot}"​ -j LOG --log-level info --log-prefix "​${mot} : "
 +    done
 +    echo -e "​\t\t${VERT}OK${NORMAL}"​
 +fi
 +
 +###################################################​
 +## Interdiction d'​entree de certaines adresses ##
 +## via le firewall en tcp et en udp ##
 +###################################################​
 +
 +if [ "​${IP_INTERDITES}"​ != ""​ ] ;then
 +    echo -e "​${GRAS}${JAUNE}Interdiction d'​entree de certaines adresses :​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +    ​
 +    for adr in ${IP_INTERDITES} ;do
 + ${IPTABLES} -t filter -A FORWARD -p tcp -s ${adr} -j DROP
 + ${IPTABLES} -t filter -A FORWARD -p udp -s ${adr} -j DROP
 +    done
 +fi
 +
 +###################################################​
 +## Interdiction de sortie de certains ports via ##
 +## le firewall en tcp  ##
 +###################################################​
 +
 +if [ "​${PORTS_TCP_SORTIE_REFUSES}"​ != ""​ ] ;then
 +    echo -e "​${GRAS}${JAUNE}Interdiction de sortie de certains ports TCP :​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +    ​
 +    for port_no in ${PORTS_TCP_SORTIE_REFUSES} ;do
 + ${IPTABLES} -t filter -A FORWARD -p tcp --dport ${port_no} -j DROP
 + ${IPTABLES} -t filter -A OUTPUT -p tcp -o ${INTERNET} --dport ${port_no} -j DROP
 +    done
 +fi
 +
 +###################################################​
 +## Interdiction de sortie de certains ports via ##
 +## le firewall en udp  ##
 +###################################################​
 +
 +if [ "​${PORTS_TCP_SORTIE_REFUSES}"​ != ""​ ] ;then
 +    echo -e "​${GRAS}${JAUNE}Interdiction de sortie de certains ports UDP :​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +    ​
 +    for port_no in ${PORTS_TCP_SORTIE_REFUSES} ;do
 + ${IPTABLES} -t filter -A FORWARD -p udp --dport ${port_no} -j DROP
 + ${IPTABLES} -t filter -A OUTPUT -p udp -o ${INTERNET} --dport ${port_no} -j DROP
 +    done
 +fi
 +###################################################​
 +## Interdiction de passage de certains mots cles ##
 +###################################################​
 +
 +if [ "​${MOTS_CLES_INTERDITS}"​ != ""​ ] ;then
 +    echo -e "​${GRAS}${JAUNE}Interdiction de passage de certains mots cles :​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +
 +    for mot_cles in ${MOTS_CLES_INTERDITS} ;do
 + mot=`echo ${mot_cles} | sed '​s/>​.*//​g'​`
 + ip=`echo ${mot_cles} | sed '​s/​.*>//​g'​`
 +
 + ${IPTABLES} -A INPUT -m string --string "​${mot}"​ -d ${ip} -j DROP
 + ${IPTABLES} -A FORWARD -m string --string "​${mot}"​ -d ${ip} -j DROP
 +    done
 +fi
 +
 +###################################################​
 +## Autorisation des paquets ICMP ## 
 +###################################################​
 +
 +if [ "​${PAQUETS_ICMP_AUTHORISES}"​ != "" ​ ] ;then
 +    echo -e "​${GRAS}${JAUNE}Authorisation de certains paquets ICMP :​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +    ​
 +    for icmp_no in ${PAQUETS_ICMP_AUTHORISES} ;do
 + ${IPTABLES} -t filter -A INPUT   -p icmp --icmp-type ${icmp_no} -m limit --limit ${PING_FLOOD} -j ACCEPT
 + ${IPTABLES} -t filter -A FORWARD -p icmp --icmp-type ${icmp_no} -m limit --limit ${PING_FLOOD} -j ACCEPT
 + ${IPTABLES} -t filter -A OUTPUT ​ -p icmp --icmp-type ${icmp_no} -m limit --limit ${PING_FLOOD} -j ACCEPT
 +    done
 +fi
 +
 +
 +###################################################​
 +## Autorise certains protocoles a circuler ##
 +###################################################​
 +
 +if [ "​${PROTOCOLES_AUTHORISES}"​ != "" ​ ] ;then
 +    echo -e "​${GRAS}${JAUNE}Authorisation de certains protocoles :​${NORMAL}\t\t\t${VERT}OK${NORMAL}"​
 +    ​
 +    for protocole_no in ${PROTOCOLES_AUTHORISES} ;do
 + ${IPTABLES} -t filter -A INPUT   -p ${protocole_no} -j ACCEPT
 + ${IPTABLES} -t filter -A FORWARD -p ${protocole_no} -j ACCEPT
 +    done
 +fi
 +
 +
 +###################################################​
 +## Autorise les connections deja etablie avant le##
 +## lancement de ce script ​                       ##
 +###################################################​
 +
 +echo -e "​${GRAS}${JAUNE}Autorisation des connections deja etablies :​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +${IPTABLES} -t filter -A INPUT   -m state --state ESTABLISHED,​RELATED -j ACCEPT
 +${IPTABLES} -t filter -A FORWARD -m state --state ESTABLISHED,​RELATED -j ACCEPT
 +${IPTABLES} -t filter -A OUTPUT ​ -m state --state ESTABLISHED,​RELATED -j ACCEPT
 +
 +
 +###################################################​
 +## Autorise les connections LocalHost ​           ##
 +###################################################​
 +
 +echo -e "​${GRAS}${JAUNE}Autorisation des connections propres au localhost :​${NORMAL}\t${VERT}OK${NORMAL}"​
 +${IPTABLES} -t filter -A INPUT   -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
 +${IPTABLES} -t filter -A FORWARD -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
 +${IPTABLES} -t filter -A OUTPUT ​ -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
 +
 +###################################################​
 +## Autorisation des connections TCP sur le ##
 +## device internet ##
 +###################################################​
 +
 +if [ "​${INTERNET}"​ != ""​ ] ;then
 +    for internet_device in ${INTERNET} ;do
 + if [ "​${PORTS_TCP_INTERNET_AUTHORISES}"​ != ""​ ] ;then
 +     echo -e "​${GRAS}${JAUNE}Connections TCP sur l'​interface internet ${internet_device}:​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +    ​
 +     for port_no in ${PORTS_TCP_INTERNET_AUTHORISES} ;do
 + ${IPTABLES} -t filter -A INPUT -p tcp -i ${internet_device} --dport ${port_no} -j ACCEPT
 +
 + if [ "​0${port_no}"​ == "​021"​ ] ;then
 +     ${IPTABLES} -t filter -A INPUT -p tcp -i ${internet_device} --sport 20 --dport 1024:65535 ! --syn -j ACCEPT
 + fi
 +     done
 + fi
 +    done
 +fi
 +
 +    ​
 +###################################################​
 +## Autorisation des connections UDP sur le ##
 +## device internet ##
 +###################################################​
 +
 +if [ "​${INTERNET}"​ != ""​ ] ;then
 +    for internet_device in ${INTERNET} ;do
 + if [ "​${PORTS_UDP_INTERNET_AUTHORISES}"​ != ""​ ] ;then
 +     echo -e "​${GRAS}${JAUNE}Connections UDP sur l'​interface internet ${internet_device}:​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +     ​
 +     for port_no in ${PORTS_UDP_INTERNET_AUTHORISES} ;do
 + ${IPTABLES} -t filter -A INPUT -p udp -i ${internet_device} --dport ${port_no} -j ACCEPT
 +     done
 + fi
 +    done
 +fi
 +
 +
 +###################################################​
 +## Autorisation des connections TCP sur le ##
 +## device DMZ ##
 +###################################################​
 +
 +if [ "​${DMZ}"​ != ""​ ] ;then
 +    for dmz_device in ${DMZ} ;do
 + if [ "​${PORTS_TCP_DMZ_AUTHORISES}"​ != ""​ ] ;then
 +     echo -e "​${GRAS}${JAUNE}Connections TCP sur l'​interface DMZ ${dmz_device}:​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +     ​
 +     for port_no in ${PORTS_TCP_DMZ_AUTHORISES} ;do
 + ${IPTABLES} -t filter -A INPUT -p tcp -i ${dmz_device} --dport ${port_no} -j ACCEPT
 +
 + if [ "​0${port_no}"​ == "​021"​ ] ;then
 +     ${IPTABLES} -t filter -A INPUT -p tcp -i ${dmz_device} --sport 20 --dport 1024:65535 ! --syn -j ACCEPT
 + fi
 +     done
 + fi
 +    done
 +fi
 +
 +###################################################​
 +## Autorisation des connections UDP sur le ##
 +## device DMZ ##
 +###################################################​
 +
 +if [ "​${DMZ}"​ != ""​ ] ;then
 +    for dmz_device in ${DMZ} ;do
 + if [ "​${PORTS_UDP_DMZ_AUTHORISES}"​ != ""​ ] ;then
 +     echo -e "​${GRAS}${JAUNE}Connections UDP sur l'​interface DMZ ${dmz_device}:​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +    ​
 +     for port_no in ${PORTS_UDP_DMZ_AUTHORISES} ;do
 + ${IPTABLES} -t filter -A INPUT -p udp -i ${dmz_device} --dport ${port_no} -j ACCEPT
 +     done
 + fi
 +    done
 +fi
 +
 +
 +###################################################​
 +## Autorisation des connections TCP sur le ##
 +## device de la zone serveurs ##
 +###################################################​
 +
 +if [ "​${ZONE_SERVEURS}"​ != ""​ ] ;then
 +    for zone_serveurs_device in ${ZONE_SERVEURS} ;do
 + if [ "​${PORTS_TCP_ZONE_SERVEURS_AUTHORISES}"​ != ""​ ] ;then
 +     echo -e "​${GRAS}${JAUNE}Connections TCP sur l'​interface zone serveurs ${zone_serveurs_device}:​${NORMAL}\t${VERT}OK${NORMAL}"​
 +    ​
 +     for port_no in ${PORTS_TCP_ZONE_SERVEURS_AUTHORISES} ;do
 + ${IPTABLES} -t filter -A INPUT -p tcp -i ${zone_serveurs_device} --dport ${port_no} -j ACCEPT
 +
 + if [ "​0${port_no}"​ == "​021"​ ] ;then
 +     ${IPTABLES} -t filter -A INPUT -p tcp -i ${zone_serveurs_device} --sport 20 --dport 1024:65535 ! --syn -j ACCEPT
 + fi
 +     done
 + fi
 +    done
 +fi
 +
 +###################################################​
 +## Autorisation des connections UDP sur le ##
 +## device de la zone serveurs ##
 +###################################################​
 +
 +if [ "​${ZONE_SERVEURS}"​ != ""​ ] ;then
 +    for zone_serveurs_device in ${ZONE_SERVEURS} ;do
 + if [ "​${PORTS_UDP_ZONE_SERVEURS_AUTHORISES}"​ != ""​ ] ;then
 +     echo -e "​${GRAS}${JAUNE}Connections UDP sur l'​interface zone serveurs ${zone_serveurs_device}:​${NORMAL}\t${VERT}OK${NORMAL}"​
 +     ​
 +     for port_no in ${PORTS_UDP_ZONE_SERVEURS_AUTHORISES} ;do
 + ${IPTABLES} -t filter -A INPUT -p udp -i ${zone_serveurs_device} --dport ${port_no} -j ACCEPT
 +     done
 + fi
 +    done
 +fi
 +
 +###################################################​
 +## Autorisation des connections TCP sur le ##
 +## device du LAN ##
 +###################################################​
 +
 +if [ "​${LAN}"​ != ""​ ] ;then
 +    for lan_device in ${LAN} ;do
 + if [ "​${PORTS_TCP_LAN_AUTHORISES}"​ != ""​ ] ;then
 +     echo -e "​${GRAS}${JAUNE}Connections TCP sur l'​interface LAN ${lan_device}:​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +
 +     for port_no in ${PORTS_TCP_LAN_AUTHORISES} ;do
 + ${IPTABLES} -t filter -A INPUT -p tcp -i ${lan_device} --dport ${port_no} -j ACCEPT
 +
 + if [ "​0${port_no}"​ == "​021"​ ] ;then
 +     ${IPTABLES} -t filter -A INPUT -p tcp -i ${lan_device} --sport 20 --dport 1024:65535 ! --syn -j ACCEPT
 + fi
 +     done
 + fi
 +    done
 +fi
 +
 +
 +###################################################​
 +## Autorisation des connections UDP sur le ##
 +## device du LAN ##
 +###################################################​
 +
 +if [ "​${LAN}"​ != ""​ ] ;then
 +    for lan_device in ${LAN} ;do
 + if [ "​${PORTS_UDP_LAN_AUTHORISES}"​ != ""​ ] ;then
 +     echo -e "​${GRAS}${JAUNE}Connections UDP sur l'​interface LAN ${lan_device}:​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +    ​
 +     for port_no in ${PORTS_UDP_LAN_AUTHORISES} ;do
 + ${IPTABLES} -t filter -A INPUT -p udp -i ${lan_device} --dport ${port_no} -j ACCEPT
 +     done
 + fi
 +    done
 +fi
 +echo -e ""​
 +
 +
 +###################################################​
 +## Masquerade le LAN                             ##
 +###################################################​
 +
 +if [ "​${MASQ_LAN}"​ = "​YES"​ -o "​${MASQ_LAN}"​ = "​yes"​ ] ;then
 +    echo -e "​${GRAS}${JAUNE}Activation du Masquerading pour le LAN :​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +
 +    for reseau in ${RESEAUX_LAN} ;do
 + ${IPTABLES} -t nat -A POSTROUTING -s ${reseau} -o ${INTERNET} -j MASQUERADE
 + ${IPTABLES} -t filter -A FORWARD -s ${reseau} -j ACCEPT
 +    done
 +fi
 +
 +
 +###################################################​
 +## Masquerade la DMZ                             ##
 +###################################################​
 +
 +if [ "​${MASQ_DMZ}"​ = "​YES"​ -o "​${MASQ_DMZ}"​ = "​yes"​ ] ;then
 +    echo -e "​${GRAS}${JAUNE}Activation du Masquerading pour la DMZ :​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +
 +    for reseau in ${RESEAUX_DMZ} ;do
 + ${IPTABLES} -t nat -A POSTROUTING -s ${reseau} -o ${INTERNET} -j MASQUERADE
 + ${IPTABLES} -t filter -A FORWARD -s ${reseau} -j ACCEPT
 +    done
 +fi
 +
 +###################################################​
 +## Masquerade la zone serveurs ​                  ##
 +###################################################​
 +
 +if [ "​${MASQ_ZONE_SERVEURS}"​ = "​YES"​ -o "​${MASQ_ZONE_SERVEURS}"​ = "​yes"​ ] ;then
 +    echo -e "​${GRAS}${JAUNE}Activation du Masquerading pour la zone serveurs :​${NORMAL}\t${VERT}OK${NORMAL}"​
 +
 +    for reseau in ${RESEAUX_ZONE_SERVEURS} ;do
 + ${IPTABLES} -t nat -A POSTROUTING -s ${reseau} -o ${INTERNET} -j MASQUERADE
 + ${IPTABLES} -t filter -A FORWARD -s ${reseau} -j ACCEPT
 +    done
 +fi
 +
 +
 +###################################################​
 +## Activation du NAT en TCP                      ##
 +###################################################​
 +
 +if [ "​${NAT_TCP_NET}"​ != ""​ ] ;then
 +    echo -e "​${GRAS}${JAUNE}Activation du TCP network address translation :​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +
 +    for translation in ${NAT_TCP_NET} ;do
 + srcport=`echo ${translation} | sed '​s/>​.*//​g'​|cut -d : -f 2`
 + srchost=`echo ${translation} | sed '​s/:​.*//​g'​`
 + desthost=`echo ${translation} | sed '​s/​.*>//​g'​| cut -d : -f 1`
 + destport=`echo ${translation} | sed '​s/​.*://​g'​`
 +
 + ${IPTABLES} -t nat -A PREROUTING -p tcp -i ${INTERNET_NAT} -d ${srchost} --dport ${srcport} -j DNAT --to ${desthost}:​${destport}
 + ${IPTABLES} -A FORWARD -p tcp -i ${INTERNET_NAT} -d ${desthost} --dport ${destport} -j ACCEPT
 +    done
 +fi
 +
 +
 +###################################################​
 +## Activation du NAT en UDP                      ##
 +###################################################​
 +
 +if [ "​${NAT_UDP_NET}"​ != ""​ ] ;then
 +    echo -e "​${GRAS}${JAUNE}Activation du UDP network address translation :​${NORMAL}\t\t${VERT}OK${NORMAL}"​
 +
 +    for translation in ${NAT_UDP_NET} ;do
 + srcport=`echo ${translation} | sed '​s/>​.*//​g'​|cut -d : -f 2`
 + srchost=`echo ${translation} | sed '​s/:​.*//​g'​`
 + desthost=`echo ${translation} | sed '​s/​.*>//​g'​| cut -d : -f 1`
 + destport=`echo ${translation} | sed '​s/​.*://​g'​`
 +
 + ${IPTABLES} -t nat -A PREROUTING -p udp -i ${INTERNET_NAT} -d ${srchost} --dport ${srcport} -j DNAT --to ${desthost}:​${destport}
 + ${IPTABLES} -A FORWARD -p udp -i ${INTERNET_NAT} -d ${desthost} --dport ${destport} -j ACCEPT
 +    done
 +fi
 +
 +###################################################​
 +## FUCK nimda and codered :)                     ##
 +###################################################​
 +
 +echo -e "​${GRAS}${JAUNE}Protection contre Nimda et codered :​${NORMAL}\t\t\t${VERT}OK${NORMAL}"​
 +${IPTABLES} -I INPUT -j DROP -m string -p tcp -s 0.0.0.0/0 --string "​c+dir"​
 +${IPTABLES} -I INPUT -j DROP -m string -p tcp -s 0.0.0.0/0 --string "​c+tftp"​
 +${IPTABLES} -I INPUT -j DROP -m string -p tcp -s 0.0.0.0/0 --string "​cmd.exe"​
 +${IPTABLES} -I INPUT -j DROP -m string -p tcp -s 0.0.0.0/0 --string "​default.ida"​
 +${IPTABLES} -I FORWARD -j DROP -m string -p tcp -s 0.0.0.0/0 --string "​c+dir"​
 +${IPTABLES} -I FORWARD -j DROP -m string -p tcp -s 0.0.0.0/0 --string "​c+tftp"​
 +${IPTABLES} -I FORWARD -j DROP -m string -p tcp -s 0.0.0.0/0 --string "​cmd.exe"​
 +${IPTABLES} -I FORWARD -j DROP -m string -p tcp -s 0.0.0.0/0 --string "​default.ida"​
 +
 +
 +###################################################​
 +## Activation des logs                           ##
 +###################################################​
 +
 +echo -ne "​${GRAS}${JAUNE}Activation du systeme de logs :​${NORMAL}"​
 +${IPTABLES} -t filter -A INPUT -p tcp -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "INPUT TCP DROPPED : "
 +${IPTABLES} -t filter -A INPUT -p udp -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "INPUT UDP DROPPED : "
 +${IPTABLES} -t filter -A INPUT -p icmp -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "INPUT ICMP DROPPED : "
 +${IPTABLES} -t filter -A INPUT -f -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "INPUT FRAGMENT DROPPED : "
 +${IPTABLES} -t filter -A INPUT -p all -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "INPUT PROTOCOL DROPPED : "
 +
 +${IPTABLES} -t filter -A FORWARD -p tcp -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "​FORWARD TCP DROPPED : "
 +${IPTABLES} -t filter -A FORWARD -p udp -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "​FORWARD UDP DROPPED : "
 +${IPTABLES} -t filter -A FORWARD -p icmp -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "​FORWARD ICMP DROPPED : "
 +${IPTABLES} -t filter -A FORWARD -f -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "​FORWARD FRAGMENT DROPPED : "
 +${IPTABLES} -t filter -A FORWARD -p all -m limit --limit ${LOG_FLOOD} -j LOG --log-level info --log-prefix "​FORWARD PROTOCOL DROPPED : "
 +echo -e "​\t\t\t\t${VERT}OK${NORMAL}"​
 +</​code>​
linux/script_iptables.txt ยท Last modified: 2010/01/12 13:29 (external edit)