Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
script schell (sh) pour iptables
Envoyé par: panthere noire

hello
Je me suis bricoller un petit script qui ferme automatiquement les programe qui pointe leur nez ,grace a iptables et netstat.
Sa marche assez bien bien que perfectible, car pour le moment je le teste.

Je voudrai le lancer comme demon aux demarrage du pc ou simplente en tapant /etc/init.d/nomduprog
mai comme celui ci tourne en boucle il ne rend pas la main aux terminal & console et quand je veux l'areter ben sa tourne toujours :-(
donc si quelqu'un a une idée je suis preneur smiling smiley

Note: si vous avez un pc de puissance faible augmenter la valeur de pause et de pause2 ];-)

voici le code

#!/bin/sh
PATH=/usr/eth0cal/sbin:/usr/eth0cal/bin:/sbin:/bin:/usr/sbin:/usr/bin:/sbin/iptables
ssh="ssh"
File="/tmp/ipnetstat_auto"
PortClose="/tmp/ipnetstatclose"
ProgAuto="/etc/netstat_auto_iptables.conf"
ETH="eth1"
pause="0.5"
pause2="1"
DAEMON=/etc/init.d/iptable_auto
NAME=Firewall
ID=$$
DESC="Firwall 0.1"
BreakON="ON"
set -m

case "$1" in
  start)
if [ -e $ProgAuto ] ;then
	echo "Configuration trouvée Démarrage"
else
	echo "Fichier de configuration $ProgAuto non trouver. Ce fichier contien les programes autoriser par iptables!" 
	echo "Fin du programe"
	exit 
fi
rm "$File"
rm "$PortClose"
echo "Configuration des règles de base"
#Mise a zero des regle (par précaution)
#
# On remet la police par défaut à ACCEPT
#
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

#
# On remet les polices par défaut pour la table NAT
#
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

#
# On vide (flush) toutes les règles existantes
#
iptables -F
iptables -t nat -F

#
# Et enfin, on efface toutes les chaînes qui ne
# sont pas à defaut dans la table filter et nat

iptables -X
iptables -t nat -X
#==============================================
#local
iptables -A INPUT -i $ETH -s 192.168.1.0/24 -j ACCEPT
#loopack
iptables -A INPUT -i lo -j ACCEPT
#iptables -t filter -A INPUT -i $ETH -m limit --limit 24/h --limit-burst 1 -p all -j ULOG --ulog-prefix="USER INPUT Final"
#==============================================
#==============================================
#le loopack
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o $ETH -d 192.168.1.0/24 -j ACCEPT
#iptables -t filter -A OUTPUT -o $ETH -m limit --limit 24/h --limit-burst 1 -p all -j ULOG --ulog-prefix="USER OUTPUT Final"
#===============================================
while true
do
netstat -laputen > $File
while read line
do
#echo $line|cut -d: -f2 | cut -b1-6

n1=`echo $line | cut -d: -f2 | cut -b1-1`
n2=`echo $line | cut -d: -f2 | cut -b2-2`
n3=`echo $line | cut -d: -f2 | cut -b3-3`
n4=`echo $line | cut -d: -f2 | cut -b4-4`
n5=`echo $line | cut -d: -f2 | cut -b5-5`
n6=`echo $line | cut -d: -f2 | cut -b6-6`
step=""
if [ -n "$n1" ] ;then
num=$((`expr match "$n1" '[[:digit:]]'`))
	if [ $num -eq 1  ] ;then
	step=$step$n1
		num=$((`expr match "$n2" '[[:digit:]]'`))
		if [ $num -eq 1  ] ;then
		step=$step$n2
			num=$((`expr match "$n3" '[[:digit:]]'`))
			if [ $num -eq 1  ] ;then
			step=$step$n3
				num=$((`expr match "$n4" '[[:digit:]]'`))
				if [ $num -eq 1  ] ;then
				step=$step$n4
					num=$((`expr match "$n5" '[[:digit:]]'`))
					if [ $num -eq 1  ] ;then
					step=$step$n5
						num=$((`expr match "$n6" '[[:digit:]]'`))
						if [ $num -eq 1  ] ;then
						step=$step$n6
						fi
					fi
				fi
			fi
		fi

	Prog=`grep "$step" $ProgAuto`
	if [ "$Prog" = "$ProgAuto" ] ;then
		echo "le programe autoriser $Prog a le port $step"
	else
		if [ -e $PortClose ] ;then
			StepPort=`grep "$step" $PortClose`
#			echo " stepgrep  $StepPort"
			if [ ! -n "$StepPort" ] ;then
#				echo "port deja fermer"
#			else
#				echo "port en cour de fermeture"
			iptables -A OUTPUT -o $ETH -p tcp --dport $step -j DROP
			iptables -A OUTPUT -o $ETH -p tcp --sport $step -j DROP
			iptables -A INPUT -i $ETH -p tcp --dport $step -j DROP
			iptables -A INPUT -i $ETH -p tcp --sport $step -j DROP
			iptables -A OUTPUT -o $ETH -p udp --dport $step -j DROP
			iptables -A OUTPUT -o $ETH -p udp --sport $step -j DROP
			iptables -A INPUT -i $ETH -p udp --dport $step -j DROP
			iptables -A INPUT -i $ETH -p udp --sport $step -j DROP
				echo $step >> $PortClose
				
			fi
		else
#			echo "port en cour de fermeture $step"
			iptables -A OUTPUT -o $ETH -p tcp --dport $step -j DROP
			iptables -A OUTPUT -o $ETH -p tcp --sport $step -j DROP
			iptables -A INPUT -i $ETH -p tcp --dport $step -j DROP
			iptables -A INPUT -i $ETH -p tcp --sport $step -j DROP
			iptables -A OUTPUT -o $ETH -p udp --dport $step -j DROP
			iptables -A OUTPUT -o $ETH -p udp --sport $step -j DROP
			iptables -A INPUT -i $ETH -p udp --dport $step -j DROP
			iptables -A INPUT -i $ETH -p udp --sport $step -j DROP

			echo $step >> $PortClose
		fi
	fi

	fi
fi
sleep $pause2
done < $File 
sleep $pause

if [ "$BreakON" = "OFF" ] ;then
break 0
break 1
break 2
fi

done
echo "Firewall stoped"
	;;
  stop)
#sortie de la boucle principale
BreakON="OFF"
#Mise a zero des regle (par précaution)
#
# On remet la police par défaut à ACCEPT
#
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

#
# On remet les polices par défaut pour la table NAT
#
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

#
# On vide (flush) toutes les règles existantes
#
iptables -F
iptables -t nat -F

#
# Et enfin, on efface toutes les chaînes qui ne
# sont pas à defaut dans la table filter et nat

iptables -X
iptables -t nat -X
#==============================================

	echo "$NAME."

	;;
  *)
	N=/etc/init.d/$NAME
	echo "Usage: /etc/init.d/iptable_auto {start|stop} " $DAEMON >&2
	exit 1
	;;
esac

exit 0

voila smiling smiley


net install--> sid2.6.32 dist i386
fluxbox
nvidia 8800gtx 768 ddr3

Poste le Wednesday 30 May 2007 04:09:47
Répondre     Citer    
Re: script schell (sh) pour iptables
Envoyé par: oudoubah

Tu peux rajouter du code dans 3 parties :

Au début:
RUN_LOCK=/var/run/kill_them_all

start :
PID=$$
if [ -e $RUN_LOCK ] ; then
   echo "Le démon tourne déjà"
   exit 1
else
   echo "Lancement du démon"
   echo $PID > $RUN_LOCK
fi

stop:
if [ -e $RUN_LOCK ] ; then
   echo "Arrêt du démon"
   kill -TERM $(cat $RUN_LOCK)
   rm -f $RUN_LOCK
else
   echo "Le démon ne tourne pas"
fi

Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"

Poste le Wednesday 30 May 2007 16:21:32
Répondre     Citer    
Re: script schell (sh) pour iptables
Envoyé par: panthere noire

Merci smiling smiley)

net install--> sid2.6.32 dist i386
fluxbox
nvidia 8800gtx 768 ddr3

Poste le Thursday 31 May 2007 17:01:34
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
script schell (sh) pour iptables
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons