Iptables et plage IP

Salut,
J’ai un petit souci avec une règle iptables, je n’arrive pas à faire ce que je souhaite…

La règle originale:

Je souhaite exclure certaines IP de cette règle. J’y arrive pour une IP ou pour une plage entière:

J’aimerais placer plusieurs IP ou des bouts de plages IP:
Par exemple: 10.9.11.200-10.9.11.210 + 10.9.8.2-10.9.8.10

J’ai essayé avec ! -m iprange --src-range 10.9.11.200-10.9.11.210 mais évidemment iptables n’accepte pas…

Je m’arrache un peu les cheveux avec ce truc…

J’ai pensé à ce genre de script qui me semblait pas mal

range=10.9.11. for ((i=200;i<=210;i++)); do iptables -t filter -A FORWARD -m mark --mark 0x1 ! -s $range$i -j REJECT done
Mais je n’arrive pas à le faire fonctionner:

Un coup de pouce serait le bienvenu…

Dans un premier temps tu peut écrire des règles séparés pour chaque plage d’IP.

sinon peut-être en passant par IPSET mais là je connais pas plus que ça :confused:

Salut,

[quote=“Clochette”]Dans un premier temps tu peut écrire des règles séparés pour chaque plage d’IP.

sinon peut-être en passant par IPSET mais là je connais pas plus que ça :confused:[/quote]

Oui j’y avais pensé, mais c’est pas joli d’avoir la même ligne répétée 25 fois…
Je regarde ipset, merci.

Plages séparées avec un “deux points” :

EDIT : pas plages, bien sûr, mais IPs :blush:

Il me semble que tu ne place pas ta négation (!) au bon endroit, et c’est d’ailleurs ce que te signale iptables :

Essaie voir avec -m iprange ! --src-range 10.9.11.200-10.9.11.210

[quote=“NooP”]Il me semble que tu ne place pas ta négation (!) au bon endroit, et c’est d’ailleurs ce que te signale iptables :

Essaie voir avec -m iprange ! --src-range 10.9.11.200-10.9.11.210[/quote]

Bien vu, je n’avais pas pris la peine de lire convenablement le message! Alors que la réponse était sous mon nez…
C’est parfait, j’ai enfin fini de torturer cette pauvre ligne iptables.

Merci beaucoup. :023

Tiens, au cas où :

linux-france.org/prj/inetdoc … -tutorial/

[quote=“NooP”]Tiens, au cas où :

linux-france.org/prj/inetdoc … -tutorial/[/quote]

Merci je l’ai déjà en marque page, mais je n’ai jamais eu le courage, ça me semble tellement pharaonique comme étude… :confused:
Il faudrait déjà reprendre les bases que je n’ai pas…

Edit: Je vais l’imprimer (je sais… la forêt…) et me mettre ça à mon chevet. Dés que j’ai fini ma saga “le Clan des Otori” je tenterais de basculer dessus…

Hello
tu peux faire du Quos/iproute2 tu verra c est sport et la doc est assez dificile a mmettre en application parfois :slightly_smiling:
iptables est très large permet pas mal de chose ,mai a selont moi 1 point qui manque pour un petit utilisateur que je suis.

le nom des interface , on devrai avoir une option qui permet de dire toute les interface ,puis on black liste celel qui on pas besoin defiltre, le loopack (lo) 127.0.0.1 … par exemple sinon c’est très bien conçus . a si si on pouvai identifier le processus qui reçois/emet le paquet , plutot que l port ou l’ip.

[quote=“panthere”]Hello
tu peux faire du Quos/iproute2 tu verra c est sport et la doc est assez dificile a mmettre en application parfois :slightly_smiling:
iptables est très large permet pas mal de chose ,mai a selont moi 1 point qui manque pour un petit utilisateur que je suis.

le nom des interface , on devrai avoir une option qui permet de dire toute les interface ,puis on black liste celel qui on pas besoin defiltre, le loopack (lo) 127.0.0.1 … par exemple sinon c’est très bien conçus . a si si on pouvai identifier le processus qui reçois/emet le paquet , plutot que l port ou l’ip.[/quote]

C’est marrant, je regardais justement ça hier.
Je n’ai pas le temps en ce moment; Je vais tranquillement commencer par wondershaper (ti s’occupe de rien, j’m’occupe de tout…) je verrais ensuite…

j’ai fait un petit script qui autorisai les processus qui on fait aux moins 1 fois la demande pour sortire si t’est interesser :slightly_smiling: (note a ne pas utiliser évidement ,sa montre les avantage et inconvenient)

Bien sur!

Ouala :laughing:
petite parenthèse:
avis aux DEBUTANT , ne pas utiliser ce script pour votre par feux surtout sur un serveur !

note : il fait un petit disque en ram
note 2.- il consome un peux de cpu
note 3 .- c’est sympa d’avoir juste a autoriser le processus mai , le probleme c’est que c’est pas tout a fait fiable.
enfin il dat d’il y a 2 ans aux moins a mes debut ,donc c’est mal coder m’enfin je voulais savoir si c’était possible de le faire.

#!/bin/sh
DAEMON="Firewall 0.4"
NAME="Firewall"
ID=$$
DESC="Firwall 0.4"

#programe autoriser
ProgAuto=(wget ssh nfsd hddtemp)

#performance et securiter
# PauseForBreak=0.1
# PauseForClose=0.1
PauseWhile=0.5
#protocole -i4 =ipv4  -i6 = ipv6 -i=tous
protocol="-i"
# votre interface reseaux
ETH="eth0"
#Fichier temporaire pour les appelles lsof
File="/home/dd_ram/lsof_auto"
# si vous voulez que sa scan en permance laisser sure true et i = 1 et boucledesortie = 0
# si vous voulez que celasoie juste pour le demarrage régler a
# une valeur qui vous convienne environ 300
#toute foit avant de rectiver  le par feux vous devrez l'a appler de cette manière:
#/etc/init.d/firewall stop && /etc/init.d/firewall start
boucleinfinie="true"
boucledesortie="0"
i="1"
#log des prog,port fermer (ON : OFF)
LOG="ON"
#permet de loguer avec iptables (ici avec ulog) (ON : OFF)
LOGIP="OFF"
prefix="LOGIP-ON"
#fichier permettant facilment de savoir si un port est fermer
pathlog="/home/dd_ram/close.log"
#Repertoire qui ser aux montage d'un volume en ram
ddvol="/home/dd_ram"
# cela represente une faille
Restricted="0755"
#Contien le PID  en cour 
PID="/home/dd_ram/pid"

echo "Configuration des règles de base"
#root interdi en sortie sauf sur le port 53 !
idroot="0"
#state input
DROPSTATE="-m state --state NEW,INVALID"
#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
#==============================================
# on autorise tout ce qui est en local
#règle de filtrage pour rejeter les paquets en prioriter et pour proteger les service par defaut qui son ouvert
iptables -A INPUT -f -j DROP
iptables -A INPUT -i $ETH $DROPSTATE -j DROP
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 -m state --state NEW,ESTABLISHED,RELATED -p TCP --dport 53 -m owner --uid-owner $idroot -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -p UDP --dport 53 -m owner --uid-owner $idroot -j ACCEPT
iptables -A OUTPUT -o $ETH -m owner --uid-owner $idroot -j DROP
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"
#===============================================

set -m

case "$1" in
  start)
echo "montage du disque virtuel"
mount -t tmpfs -o size=5m,nr_inodes=10k,mode=$Restricted tmpfs "$ddvol"
echo "montage du disque terminer"
echo "$$" > "$PID"

while $boucleinfinie ;do
lsof $protocol -P > $File
	while read line ;do
	n1=`echo $line | cut -d":" -f2 | cut -d"(" -f1 | cut -d"-" -f1`
	n2=`echo $line | cut -d" " -f1`
	Found="FALSE"
		if [ "COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME" != "$n1" ] ;then
			for TB in ${ProgAuto[*]} ;do
				if [ "$TB" = "$n2" ] ;then
					#echo "affichage " $n2 "===" $TB "sure le port"  $n1
					Found="TRUE"
					#sleep $PauseForBreak
					break
				fi
			done
			#if [ "$Found" = "TRUE" ] ;then
			#	echo "app auto $n2 sur le port $n1"
			if [ ! -n "${PortClose["$n1"]}" -a "$Found" != "TRUE" ] ;then
				echo "app interdi $n2 sur le port $n1"
				PortClose[$n1]="TRUE"
				if [ "$LOGIP" = "ON" ] ;then
				iptables -t filter -A INPUT -i $ETH -m limit --limit 24/h --limit-burst 1 -p tcp --dport $n1 -j ULOG --ulog-prefix="$prefix"
				iptables -t filter -A INPUT -i $ETH -m limit --limit 24/h --limit-burst 1 -p tcp --sport $n1 -j ULOG --ulog-prefix="$prefix"
				iptables -t filter -A INPUT -i $ETH -m limit --limit 24/h --limit-burst 1 -p udp --dport $n1 -j ULOG --ulog-prefix="$prefix"
				iptables -t filter -A INPUT -i $ETH -m limit --limit 24/h --limit-burst 1 -p udp --dport $n1 -j ULOG --ulog-prefix="$prefix"
				iptables -t filter -A OUTPUT -o $ETH -m limit --limit 24/h --limit-burst 1 -p tcp --dport $n1 -j ULOG --ulog-prefix="$prefix"
				iptables -t filter -A OUTPUT -o $ETH -m limit --limit 24/h --limit-burst 1 -p tcp --sport $n1 -j ULOG --ulog-prefix="$prefix"
				iptables -t filter -A OUTPUT -o $ETH -m limit --limit 24/h --limit-burst 1 -p udp --dport $n1 -j ULOG --ulog-prefix="$prefix"
				iptables -t filter -A OUTPUT -o $ETH -m limit --limit 24/h --limit-burst 1 -p udp --dport $n1 -j ULOG --ulog-prefix="$prefix"

				iptables -A INPUT -i $ETH -p tcp --dport $n1 -j DROP
				iptables -A INPUT -i $ETH -p tcp --sport $n1 -j DROP
				iptables -A INPUT -i $ETH -p udp --dport $n1 -j DROP
				iptables -A INPUT -i $ETH -p udp --sport $n1 -j DROP
				iptables -A OUTPUT -o $ETH -p tcp --dport $n1 -j DROP
				iptables -A OUTPUT -o $ETH -p tcp --sport $n1 -j DROP
				iptables -A OUTPUT -o $ETH -p udp --dport $n1 -j DROP
				iptables -A OUTPUT -o $ETH -p udp --sport $n1 -j DROP
				else
				iptables -A INPUT -i $ETH -p tcp --dport $n1 -j DROP
				iptables -A INPUT -i $ETH -p tcp --sport $n1 -j DROP
				iptables -A INPUT -i $ETH -p udp --dport $n1 -j DROP
				iptables -A INPUT -i $ETH -p udp --sport $n1 -j DROP
				iptables -A OUTPUT -o $ETH -p tcp --dport $n1 -j DROP
				iptables -A OUTPUT -o $ETH -p tcp --sport $n1 -j DROP
				iptables -A OUTPUT -o $ETH -p udp --dport $n1 -j DROP
				iptables -A OUTPUT -o $ETH -p udp --sport $n1 -j DROP
				fi
				#sleep $PauseForClose
				if [ "$LOG" = "ON" ] ;then
					echo "$n2 >=======> $n1" >> $pathlog
				fi
#			elif [ "${PortClose["$n1"]}" = "TRUE" ] ;then
#				echo "port déjà fermer : " $n1
#			else
#				echo "ERREUR inconnue : " ${PortClose[$n1]}
			fi
		fi

	done < $File 
	sleep $PauseWhile

i=$(($i+1))
if [ "$i" = "$boucledesortie" ] ;then
	boucleinfinie="false"
	echo "Le contrôle des programes est terminer le: " `date` >> $pathstop
	
fi
done

	;;
  stop)

PID="/home/dd_ram/pid"
ddvol="/home/dd_ram"
kill -n 9 $(cat $PID) 2>/dev/null
echo "Demontage du volume"
sleep 2
umount -t tmpfs "/home/dd_ram"
# umount -t tmpfs "$ddvol"
echo "Demontage terminer"
echo "Mise a zero des regles d'iptables"
#
# 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 "$DAEMON est terminer"
	;;
  *)
	N=/etc/init.d/$NAME
	echo "Ne pas utiliser /etc/init.d/iptable_auto {start} OR news {start}=stop " $DAEMON >&2
	echo "Usage /etc/init.d/firewall stop && (OR) /etc/init.d/firewall start"
	exit 1
	;;
esac

exit 0

Merci,
Il va me falloir un mois pour éplucher ton “truc”… :033
Mortel! :033

J’ai essayé il me coupe ssh… j’ai deux interfaces, il va falloir adapter.

C est vieux et mes debut, :laughing:
et a mes debut sur le shell donc évidement c’était pas aux point, mai sinon sa ma permis d’aprendre pas mal de truc :slightly_smiling:

ben oui si tu regarde bien le tableaux des processus ne contiens pas le deamon du service,du coup il ferme le port :slightly_smiling: