rendered paste body#!/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" 2> /dev/null
rm "$PortClose" 2>/dev/null
#on veux autoriser certin port
echo "21" >> $PortClose
echo "22" >> $PortClose
echo "25" >> $PortClose
echo "80" >> $PortClose
echo "110" >> $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
if [ "$BreakON" = "OFF" ] ;then
break 1
break 2
fi
sleep $pause2
done < $File
sleep $pause
if [ "$BreakON" = "OFF" ] ;then
break 0
break 1
break 2
fi
echo "Debug breakon : $BreakON"
done
echo "Firewall stoped"
;;
stop)
#sortie de la boucle principale
BreakON="OFF"
echo "fermeture en court $BreakON"
#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
kill 9 $$
#==============================================
echo "$NAME."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: /etc/init.d/iptable_auto {start|stop} " $DAEMON >&2
exit 1
;;
esac
exit 0