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” ;-)

#!/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}"
linux/script_iptables.txt · Last modified: 2010/01/12 13:29 (external edit)