IPTables : interdire/autoriser qu'une adresse IP sorte sur Internet pendant un certain temps
20 réponses
noone
Bonjour,
je voudrais interdire qu'une adresse IP (192.168.0.2) sorte sur Internet.
Quelle règle IPTable dois-je ajouter ?
Je veux quand même que cette adresse puisse contacter le routeur 192.168.0.1
Quelle règle dois-je lancer pour annuler cette règle ?
Comment mettre en place un système où j'autorise des clients pendant par
exemple 1 heure ? (je pense aux taches périodiques avec cron... mais je
n'ai jamais pratiqué)
Avez-vous une petite interface web (PHP ou Perl) permettant de gérer ça ?
Ok merci mais alos je fais comment ????? (Désolé... je ne suis pas très doué avec iptables... c'est d'ailleurs pour ça que j'utilise IPCop sur un vieux PC)
Il faut apprendre. Soit apprendre comment insérer ses propres règles de filtrage dans IPCop (que je ne connais pas), soit apprendre à utiliser directement iptables (ce que j'ai choisi de faire).
Ok merci mais alos je fais comment ????? (Désolé... je ne suis pas très
doué avec iptables... c'est d'ailleurs pour ça que j'utilise IPCop sur
un vieux PC)
Il faut apprendre.
Soit apprendre comment insérer ses propres règles de filtrage dans IPCop
(que je ne connais pas), soit apprendre à utiliser directement iptables
(ce que j'ai choisi de faire).
Ok merci mais alos je fais comment ????? (Désolé... je ne suis pas très doué avec iptables... c'est d'ailleurs pour ça que j'utilise IPCop sur un vieux PC)
Il faut apprendre. Soit apprendre comment insérer ses propres règles de filtrage dans IPCop (que je ne connais pas), soit apprendre à utiliser directement iptables (ce que j'ai choisi de faire).
noone
Voici le résultat
# --------------------------------------- # | disable or enable internet connection | # ---------------------------------------
for ip in `cat internet_rules_room_$room.dat` do echo "start internet connection for $ip for $time minutes" iptables -D bloque_ip -s $ip -j REJECT --reject-with net-unreach done
sleep "$time"m
$0 stop $room ;;
stop) for ip in `cat internet_rules_room_$room.dat` do echo "stop internet connection for $ip" iptables -I bloque_ip -s $ip -j REJECT --reject-with net-unreach # -A done ;;
le problème c'est qu'en regardant la chaine FORWARD via # iptables -L Chain FORWARD (policy DROP) target prot opt source destination bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere ipac~fi all -- anywhere anywhere ipac~fo all -- anywhere anywhere BADTCP all -- anywhere anywhere TCPMSS tcp -- anywhere anywhere tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU CUSTOMFORWARD all -- anywhere anywhere ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere state NEW DROP all -- 127.0.0.0/8 anywhere state NEW DROP all -- anywhere 127.0.0.0/8 state NEW ACCEPT all -- anywhere anywhere state NEW ACCEPT all -- anywhere anywhere WIRELESSFORWARD all -- anywhere anywhere state NEW REDFORWARD all -- anywhere anywhere PORTFWACCESS all -- anywhere anywhere state NEW LOG all -- anywhere anywhere limit: avg 10/min burst 5 LOG level warning prefix `OUTPUT '
for ip in `cat internet_rules_room_$room.dat`
do
echo "start internet connection for $ip for $time minutes"
iptables -D bloque_ip -s $ip -j REJECT --reject-with net-unreach
done
sleep "$time"m
$0 stop $room
;;
stop)
for ip in `cat internet_rules_room_$room.dat`
do
echo "stop internet connection for $ip"
iptables -I bloque_ip -s $ip -j REJECT --reject-with net-unreach
# -A
done
;;
le problème c'est qu'en regardant la chaine FORWARD via
# iptables -L
Chain FORWARD (policy DROP)
target prot opt source destination
bloque_ip all -- anywhere anywhere
bloque_ip all -- anywhere anywhere
bloque_ip all -- anywhere anywhere
bloque_ip all -- anywhere anywhere
bloque_ip all -- anywhere anywhere
bloque_ip all -- anywhere anywhere
bloque_ip all -- anywhere anywhere
bloque_ip all -- anywhere anywhere
bloque_ip all -- anywhere anywhere
bloque_ip all -- anywhere anywhere
ipac~fi all -- anywhere anywhere
ipac~fo all -- anywhere anywhere
BADTCP all -- anywhere anywhere
TCPMSS tcp -- anywhere anywhere tcp
flags:SYN,RST/SYN TCPMSS clamp to PMTU
CUSTOMFORWARD all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state
RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere state NEW
DROP all -- 127.0.0.0/8 anywhere state NEW
DROP all -- anywhere 127.0.0.0/8 state NEW
ACCEPT all -- anywhere anywhere state NEW
ACCEPT all -- anywhere anywhere
WIRELESSFORWARD all -- anywhere anywhere state NEW
REDFORWARD all -- anywhere anywhere
PORTFWACCESS all -- anywhere anywhere state NEW
LOG all -- anywhere anywhere limit: avg
10/min burst 5 LOG level warning prefix `OUTPUT '
for ip in `cat internet_rules_room_$room.dat` do echo "start internet connection for $ip for $time minutes" iptables -D bloque_ip -s $ip -j REJECT --reject-with net-unreach done
sleep "$time"m
$0 stop $room ;;
stop) for ip in `cat internet_rules_room_$room.dat` do echo "stop internet connection for $ip" iptables -I bloque_ip -s $ip -j REJECT --reject-with net-unreach # -A done ;;
le problème c'est qu'en regardant la chaine FORWARD via # iptables -L Chain FORWARD (policy DROP) target prot opt source destination bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere bloque_ip all -- anywhere anywhere ipac~fi all -- anywhere anywhere ipac~fo all -- anywhere anywhere BADTCP all -- anywhere anywhere TCPMSS tcp -- anywhere anywhere tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU CUSTOMFORWARD all -- anywhere anywhere ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere state NEW DROP all -- 127.0.0.0/8 anywhere state NEW DROP all -- anywhere 127.0.0.0/8 state NEW ACCEPT all -- anywhere anywhere state NEW ACCEPT all -- anywhere anywhere WIRELESSFORWARD all -- anywhere anywhere state NEW REDFORWARD all -- anywhere anywhere PORTFWACCESS all -- anywhere anywhere state NEW LOG all -- anywhere anywhere limit: avg 10/min burst 5 LOG level warning prefix `OUTPUT '
Pareil, une seule règle mise en place au début (faute de mieux) de la chaîne FORWARD une fois pour toutes suffit.
for ip in `cat internet_rules_room_$room.dat` do echo "start internet connection for $ip for $time minutes" iptables -D bloque_ip -s $ip -j REJECT --reject-with net-unreach
Avec -A (append) au lieu de -D (delete) ça devrait être mieux.
[...]
stop) for ip in `cat internet_rules_room_$room.dat` do echo "stop internet connection for $ip" iptables -I bloque_ip -s $ip -j REJECT --reject-with net-unreach
Je suppose que c'est plutôt ici qu'il faut mettre -D. Si le but est de simplement effacer toutes les règles contenues dans la chaîne bloque_ip, il y a plus simple :
iptables -F bloque_ip
[...]
case "$1" in
start)
iptables -N bloque_ip
Pas la peine de recréer la chaîne à chaque fois, une fois pour toutes
suffit.
Pareil, une seule règle mise en place au début (faute de mieux) de la
chaîne FORWARD une fois pour toutes suffit.
for ip in `cat internet_rules_room_$room.dat`
do
echo "start internet connection for $ip for $time minutes"
iptables -D bloque_ip -s $ip -j REJECT --reject-with net-unreach
Avec -A (append) au lieu de -D (delete) ça devrait être mieux.
[...]
stop)
for ip in `cat internet_rules_room_$room.dat`
do
echo "stop internet connection for $ip"
iptables -I bloque_ip -s $ip -j REJECT --reject-with net-unreach
Je suppose que c'est plutôt ici qu'il faut mettre -D. Si le but est de
simplement effacer toutes les règles contenues dans la chaîne bloque_ip,
il y a plus simple :
Pareil, une seule règle mise en place au début (faute de mieux) de la chaîne FORWARD une fois pour toutes suffit.
for ip in `cat internet_rules_room_$room.dat` do echo "start internet connection for $ip for $time minutes" iptables -D bloque_ip -s $ip -j REJECT --reject-with net-unreach
Avec -A (append) au lieu de -D (delete) ça devrait être mieux.
[...]
stop) for ip in `cat internet_rules_room_$room.dat` do echo "stop internet connection for $ip" iptables -I bloque_ip -s $ip -j REJECT --reject-with net-unreach
Je suppose que c'est plutôt ici qu'il faut mettre -D. Si le but est de simplement effacer toutes les règles contenues dans la chaîne bloque_ip, il y a plus simple :
iptables -F bloque_ip
noone
Je suppose que c'est plutôt ici qu'il faut mettre -D.
non non ça marche comme ça...
Si le but est de simplement effacer toutes les règles contenues dans la chaîne bloque_ip, il y a plus simple :
iptables -F bloque_ip
oui mais on fait comment pour supprimer la chaine ?
Je suppose que c'est plutôt ici qu'il faut mettre -D.
non non ça marche comme ça...
Si le but est de
simplement effacer toutes les règles contenues dans la chaîne bloque_ip,
il y a plus simple :
iptables -F bloque_ip
oui mais on fait comment pour supprimer la chaine ?
# iptables -D bloque_ip 1 iptables: Index of deletion too big
# iptables -X bloque_ip iptables: Can't delete chain with references left
Je n'arrive pas à effacer la règle # iptables -I FORWARD -i eth0 -o ppp0 -j bloque_ip
noone
Bon finalement je travaille directement avec la chaine FORWARD et ça m'évite le problème de la création/suppression de la chaine bloque_ip
#!/bin/sh # --------------------------------------- # | disable or enable internet connection | # ---------------------------------------
room=$2 if [ "$room" = "" ]; then room="32"; fi
time=$3 if [ "$time" = "" ]; then time="60"; fi
if_lan=eth0 if_ext=ppp0
case "$1" in
start)
for ip in `cat internet_rules_room_$room.dat` do if [ $time != 0 ]; then echo "start internet connection for $ip for $time minutes" else echo "start internet connection for $ip" fi iptables -D FORWARD -i $if_lan -o $if_ext -s $ip -j REJECT --reject-with net-unreach done
if [ $time != 0 ]; then sleep "$time"m
$0 stop $room fi ;;
stop) for ip in `cat internet_rules_room_$room.dat` do echo "stop internet connection for $ip"
Au moins ça n'ajoute pas de règles superflues à l'utilisation
par contre comme ça tente de supprimer une règle qui n'existe pas j'ai un message d'erreur (mais je préfère ça à l'empilement de règles...
Bon finalement je travaille directement avec la chaine FORWARD
et ça m'évite le problème de la création/suppression de la chaine bloque_ip
#!/bin/sh
# ---------------------------------------
# | disable or enable internet connection |
# ---------------------------------------
room=$2
if [ "$room" = "" ]; then room="32"; fi
time=$3
if [ "$time" = "" ]; then time="60"; fi
if_lan=eth0
if_ext=ppp0
case "$1" in
start)
for ip in `cat internet_rules_room_$room.dat`
do
if [ $time != 0 ]; then
echo "start internet connection for $ip for $time minutes"
else
echo "start internet connection for $ip"
fi
iptables -D FORWARD -i $if_lan -o $if_ext -s $ip -j REJECT
--reject-with net-unreach
done
if [ $time != 0 ]; then
sleep "$time"m
$0 stop $room
fi
;;
stop)
for ip in `cat internet_rules_room_$room.dat`
do
echo "stop internet connection for $ip"
Bon finalement je travaille directement avec la chaine FORWARD et ça m'évite le problème de la création/suppression de la chaine bloque_ip
#!/bin/sh # --------------------------------------- # | disable or enable internet connection | # ---------------------------------------
room=$2 if [ "$room" = "" ]; then room="32"; fi
time=$3 if [ "$time" = "" ]; then time="60"; fi
if_lan=eth0 if_ext=ppp0
case "$1" in
start)
for ip in `cat internet_rules_room_$room.dat` do if [ $time != 0 ]; then echo "start internet connection for $ip for $time minutes" else echo "start internet connection for $ip" fi iptables -D FORWARD -i $if_lan -o $if_ext -s $ip -j REJECT --reject-with net-unreach done
if [ $time != 0 ]; then sleep "$time"m
$0 stop $room fi ;;
stop) for ip in `cat internet_rules_room_$room.dat` do echo "stop internet connection for $ip"
# iptables -D bloque_ip 1 iptables: Index of deletion too big
Cette commande superflue essaie d'effacer la règle n° 1 dans la chaîne bloque_ip alors que cette chaîne est vide. Vide parce qu'aucune règle n'y a été ajoutée après sa création, vide aussi parce que la commande -F l'aurait vidée de toutes les règles existantes de toute façon.
# iptables -X bloque_ip iptables: Can't delete chain with references left
Même problème qu'avant : il existe une chaîne qui fait référence à bloque_ip (qui se termine par -j bloque_ip). C'est cette règle qu'il faut supprimer avant de pouvoir supprimer la chaîne elle-même.
Je n'arrive pas à effacer la règle # iptables -I FORWARD -i eth0 -o ppp0 -j bloque_ip
iptables -D FORWARD -i eth0 -o ppp0 -j bloque_ip
Note : s'il existe plusieurs règles identiques correspondant, la première d'entre elle est supprimée.
Mais je répète, pourquoi vouloir supprimer cette règle et la chaîne qu'elle appelle ? Quand la chaîne est vide l'effet est le même.
Ok c'était le 2) qui me manquait...
Je sais. J'avais vu le message d'erreur au sujet des références restantes.
# iptables -D bloque_ip 1
iptables: Index of deletion too big
Cette commande superflue essaie d'effacer la règle n° 1 dans la chaîne
bloque_ip alors que cette chaîne est vide. Vide parce qu'aucune règle
n'y a été ajoutée après sa création, vide aussi parce que la commande -F
l'aurait vidée de toutes les règles existantes de toute façon.
# iptables -X bloque_ip
iptables: Can't delete chain with references left
Même problème qu'avant : il existe une chaîne qui fait référence à
bloque_ip (qui se termine par -j bloque_ip). C'est cette règle qu'il
faut supprimer avant de pouvoir supprimer la chaîne elle-même.
Je n'arrive pas à effacer la règle
# iptables -I FORWARD -i eth0 -o ppp0 -j bloque_ip
iptables -D FORWARD -i eth0 -o ppp0 -j bloque_ip
Note : s'il existe plusieurs règles identiques correspondant, la
première d'entre elle est supprimée.
Mais je répète, pourquoi vouloir supprimer cette règle et la chaîne
qu'elle appelle ? Quand la chaîne est vide l'effet est le même.
# iptables -D bloque_ip 1 iptables: Index of deletion too big
Cette commande superflue essaie d'effacer la règle n° 1 dans la chaîne bloque_ip alors que cette chaîne est vide. Vide parce qu'aucune règle n'y a été ajoutée après sa création, vide aussi parce que la commande -F l'aurait vidée de toutes les règles existantes de toute façon.
# iptables -X bloque_ip iptables: Can't delete chain with references left
Même problème qu'avant : il existe une chaîne qui fait référence à bloque_ip (qui se termine par -j bloque_ip). C'est cette règle qu'il faut supprimer avant de pouvoir supprimer la chaîne elle-même.
Je n'arrive pas à effacer la règle # iptables -I FORWARD -i eth0 -o ppp0 -j bloque_ip
iptables -D FORWARD -i eth0 -o ppp0 -j bloque_ip
Note : s'il existe plusieurs règles identiques correspondant, la première d'entre elle est supprimée.
Mais je répète, pourquoi vouloir supprimer cette règle et la chaîne qu'elle appelle ? Quand la chaîne est vide l'effet est le même.
noone
Mais je répète, pourquoi vouloir supprimer cette règle et la chaîne qu'elle appelle ? Quand la chaîne est vide l'effet est le même.
Ok merci beaucoup pour toutes ces explications !
Mais je répète, pourquoi vouloir supprimer cette règle et la chaîne
qu'elle appelle ? Quand la chaîne est vide l'effet est le même.