Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

IPTables : interdire/autoriser qu'une adresse IP sorte sur Internet pendant un certain temps

20 réponses
Avatar
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 ?


Merci d'avance

10 réponses

1 2
Avatar
Pascal Hambourg
Salut,


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


Ça tombe bien, les deux types d'accès sont gérés indépendamment par
iptables. Les paquets traversant le routeur sont gérés par la chaîne
FORWARD, et ceux destinés au routeur par la chaîne INPUT.

Quelle règle dois-je lancer pour annuler cette règle ?


Ça dépend du jeu de règles déjà en place, comme toujours. Par exemple :

iptables -A FORWARD -s 192.168.0.2 -j REJECT --reject-with net-unreach

A installer *avant* toute règle susceptible d'accepter le paquet. Si ce
genre de restriction est temporaire, il peut être intéressant de leur
dédier une chaîne utilisateur appelée au bon endroit pour y ajouter ou
supprimer les règles de blocage sans perturber le reste du jeu de règles
iptables.

[début du script créant le jeu de règles]
# création de la chaîne utilisateur
iptables -N bloque_ip
# appel de la chaîne utilisateur si le paquet entre par l'interface LAN
# <if_lan> et sort par l'interface extérieure <if_ext>
iptables -A FORWARD -i <if_lan> -o <if_ext> -j bloque_ip
[suite et fin du script créant le jeu de règles]

Pour bloquer l'adresse source <adr_ip> :
iptables -A bloque_ip -s <adr_ip> -j REJECT --reject-with net-unreach

Pour supprimer le blocage :
iptables -D bloque_ip -s <adr_ip> -j REJECT --reject-with net-unreach

Avatar
R12y
On Wed, 19 Apr 2006 15:29:47 +0200, Pascal Hambourg wrote:

Les paquets traversant le routeur sont gérés par la chaîne
FORWARD,


ça serait pas MASQUERADE dans le sens ou il l'entend? J'ai cru comprendre
qu'il parlait du sens "sortant"...

--
Debian/apt Repo: http://locataire-serveur.info/sections/liens/debian-repository
Fedora/yum Repo: http://locataire-serveur.info/sections/liens/fedora-core-yum

Avatar
Pascal Hambourg
On Wed, 19 Apr 2006 15:29:47 +0200, Pascal Hambourg wrote:

Les paquets traversant le routeur sont gérés par la chaîne
FORWARD,


ça serait pas MASQUERADE dans le sens ou il l'entend?


J'ai compris la demande comme "empêcher la machine locale qui a
l'adresse 192.168.0.2 d'envoyer des paquets vers internet". S'il
s'agissait en fait de "ne pas balancer sur internet des paquets avec
l'adresse source 192.168.0.2", alors la cible SNAT ou MASQUERADE est
effectivement la solution. Mébon, je ne vois pas trop pourquoi NATer
cette adresse et pas les autres.

J'ai cru comprendre qu'il parlait du sens "sortant"...


Tout est relatif. Ici "sortant" veut dire du réseau local vers internet,
mais ça passe par la chaîne FORWARD dans les deux sens.


Avatar
noone

On Wed, 19 Apr 2006 15:29:47 +0200, Pascal Hambourg wrote:

Les paquets traversant le routeur sont gérés par la chaîne FORWARD,



ça serait pas MASQUERADE dans le sens ou il l'entend?



J'ai compris la demande comme "empêcher la machine locale qui a
l'adresse 192.168.0.2 d'envoyer des paquets vers internet". S'il
s'agissait en fait de "ne pas balancer sur internet des paquets avec
l'adresse source 192.168.0.2", alors la cible SNAT ou MASQUERADE est
effectivement la solution. Mébon, je ne vois pas trop pourquoi NATer
cette adresse et pas les autres.

J'ai cru comprendre qu'il parlait du sens "sortant"...



Tout est relatif. Ici "sortant" veut dire du réseau local vers internet,
mais ça passe par la chaîne FORWARD dans les deux sens.


Concrêtement je ne veux pas que 192.168.0.2 puisse accéder à Internet
(entrant ou sortant... peu importe !)

Le tout c'est que je veux pouvoir accéder quand même au routeur



Avatar
noone
je viens de mettre ceci sur IPCop (mon routeur sous Linux)

iptables -N bloque_ip
iptables -A FORWARD -i eth0 -o ppp0 -j bloque_ip
iptables -A bloque_ip -s 192.168.0.2 -j REJECT --reject-with net-unreach

mais depuis le client 192.168.0.2 j'arrive toujours à pinger Google (et
à voir une page sur Internet) !


Voici les règles définies par IPCop



# iptables-save
# Generated by iptables-save v1.2.11 on Wed Apr 19 18:21:13 2006
*mangle
:PREROUTING ACCEPT [38:2480]
:INPUT ACCEPT [38:2480]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [21:2184]
:POSTROUTING ACCEPT [21:2184]
:PORTFWMANGLE - [0:0]
-A PREROUTING -j PORTFWMANGLE
-A PORTFWMANGLE -s 192.168.0.0/255.255.255.0 -d 83.200.142.92 -p tcp -m
tcp --dport 22 -j MARK --set-mark 0x1
-A PORTFWMANGLE -s 192.168.0.0/255.255.255.0 -d 83.200.142.92 -p udp -m
udp --dport 22 -j MARK --set-mark 0x1
COMMIT
# Completed on Wed Apr 19 18:21:13 2006
# Generated by iptables-save v1.2.11 on Wed Apr 19 18:21:13 2006
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [21:2184]
:BADTCP - [0:0]
:CUSTOMFORWARD - [0:0]
:CUSTOMINPUT - [0:0]
:CUSTOMOUTPUT - [0:0]
:DHCPBLUEINPUT - [0:0]
:DMZHOLES - [0:0]
:GUIINPUT - [0:0]
:IPSECBLUE - [0:0]
:IPSECRED - [0:0]
:LOG_DROP - [0:0]
:LOG_REJECT - [0:0]
:NEWNOTSYN - [0:0]
:PORTFWACCESS - [0:0]
:PSCAN - [0:0]
:REDFORWARD - [0:0]
:REDINPUT - [0:0]
:WIRELESSFORWARD - [0:0]
:WIRELESSINPUT - [0:0]
:XTACCESS - [0:0]
:ipac~fi - [0:0]
:ipac~fo - [0:0]
:ipac~i - [0:0]
:ipac~o - [0:0]
-A INPUT -j ipac~o
-A INPUT -j BADTCP
-A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 10/sec
-A INPUT -j CUSTOMINPUT
-A INPUT -j GUIINPUT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -m state --state NEW -j ACCEPT
-A INPUT -s 127.0.0.0/255.0.0.0 -m state --state NEW -j DROP
-A INPUT -d 127.0.0.0/255.0.0.0 -m state --state NEW -j DROP
-A INPUT -i eth0 -p ! icmp -m state --state NEW -j ACCEPT
-A INPUT -i ipsec+ -j ACCEPT
-A INPUT -j DHCPBLUEINPUT
-A INPUT -j IPSECRED
-A INPUT -j IPSECBLUE
-A INPUT -m state --state NEW -j WIRELESSINPUT
-A INPUT -j REDINPUT
-A INPUT -m state --state NEW -j XTACCESS
-A INPUT -m limit --limit 10/min -j LOG --log-prefix "INPUT "
-A FORWARD -j ipac~fi
-A FORWARD -j ipac~fo
-A FORWARD -j BADTCP
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS
--clamp-mss-to-pmtu
-A FORWARD -j CUSTOMFORWARD
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i lo -m state --state NEW -j ACCEPT
-A FORWARD -s 127.0.0.0/255.0.0.0 -m state --state NEW -j DROP
-A FORWARD -d 127.0.0.0/255.0.0.0 -m state --state NEW -j DROP
-A FORWARD -i eth0 -m state --state NEW -j ACCEPT
-A FORWARD -i ipsec+ -j ACCEPT
-A FORWARD -m state --state NEW -j WIRELESSFORWARD
-A FORWARD -j REDFORWARD
-A FORWARD -m state --state NEW -j PORTFWACCESS
-A FORWARD -m limit --limit 10/min -j LOG --log-prefix "OUTPUT "
-A OUTPUT -j ipac~i
-A OUTPUT -j CUSTOMOUTPUT
-A BADTCP -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG
-j PSCAN
-A BADTCP -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j PSCAN
-A BADTCP -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j PSCAN
-A BADTCP -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j PSCAN
-A BADTCP -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j PSCAN
-A BADTCP -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state
NEW -j NEWNOTSYN
-A GUIINPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A LOG_DROP -m limit --limit 10/min -j LOG
-A LOG_DROP -j DROP
-A LOG_REJECT -m limit --limit 10/min -j LOG
-A LOG_REJECT -j REJECT --reject-with icmp-port-unreachable
-A NEWNOTSYN -m limit --limit 10/min -j LOG --log-prefix "NEW not SYN? "
-A NEWNOTSYN -j DROP
-A PORTFWACCESS -d 192.168.0.2 -i ppp0 -p tcp -m tcp --dport 22 -j ACCEPT
-A PORTFWACCESS -d 192.168.0.2 -i ppp0 -p udp -m udp --dport 22 -j ACCEPT
-A PSCAN -p tcp -m limit --limit 10/min -j LOG --log-prefix "TCP Scan? "
-A PSCAN -p udp -m limit --limit 10/min -j LOG --log-prefix "UDP Scan? "
-A PSCAN -p icmp -m limit --limit 10/min -j LOG --log-prefix "ICMP Scan? "
-A PSCAN -f -m limit --limit 10/min -j LOG --log-prefix "FRAG Scan? "
-A PSCAN -j DROP
-A REDINPUT -i eth1 -j ACCEPT
-A REDINPUT -i eth1 -j ACCEPT
-A XTACCESS -d 83.200.142.92 -i ppp0 -p udp -m udp --dport 113 -j ACCEPT
-A ipac~fi -i eth0
-A ipac~fi -i ppp0
-A ipac~fo -o eth0
-A ipac~fo -o ppp0
-A ipac~i -o eth0
-A ipac~i -o ppp0
-A ipac~o -i eth0
-A ipac~o -i ppp0
COMMIT
# Completed on Wed Apr 19 18:21:13 2006
# Generated by iptables-save v1.2.11 on Wed Apr 19 18:21:13 2006
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:CUSTOMPOSTROUTING - [0:0]
:CUSTOMPREROUTING - [0:0]
:PORTFW - [0:0]
:REDNAT - [0:0]
:SQUID - [0:0]
-A PREROUTING -j CUSTOMPREROUTING
-A PREROUTING -j SQUID
-A PREROUTING -j PORTFW
-A POSTROUTING -j CUSTOMPOSTROUTING
-A POSTROUTING -j REDNAT
-A POSTROUTING -m mark --mark 0x1 -j SNAT --to-source 192.168.0.1
-A PORTFW -d 83.200.142.92 -p tcp -m tcp --dport 22 -j DNAT
--to-destination 192.168.0.2:22
-A PORTFW -d 83.200.142.92 -p udp -m udp --dport 22 -j DNAT
--to-destination 192.168.0.2:22
-A REDNAT -o ppp0 -j MASQUERADE
-A SQUID -d 83.200.142.92 -i eth0 -p tcp -m tcp --dport 80 -j RETURN
-A SQUID -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 800
COMMIT
# Completed on Wed Apr 19 18:21:13 2006



je ne veux pas modifier les règles précédentes je veux que mon script
s'ajoute à la config de ce routeur (et d'un autre sous Mandriva)
Avatar
Pascal Hambourg
je viens de mettre ceci sur IPCop (mon routeur sous Linux)

iptables -N bloque_ip
iptables -A FORWARD -i eth0 -o ppp0 -j bloque_ip
iptables -A bloque_ip -s 192.168.0.2 -j REJECT --reject-with net-unreach

mais depuis le client 192.168.0.2 j'arrive toujours à pinger Google (et
à voir une page sur Internet) !


Si tu n'insères pas la règle au bon endroit, c'est normal.

Voici les règles définies par IPCop
[...]

-A FORWARD -d 127.0.0.0/255.0.0.0 -m state --state NEW -j DROP
-A FORWARD -i eth0 -m state --state NEW -j ACCEPT
[...]


Si la règle qui appelle la chaîne bloque_ip est insérée après la seconde
règle citée qui accepte toute nouvelle connexion arrivant par eth0, elle
sera inefficace.

je ne veux pas modifier les règles précédentes je veux que mon script
s'ajoute à la config de ce routeur (et d'un autre sous Mandriva)


Il va bien falloir, pourtant. Au pire tu peux insérer (-I au lieu de -A)
la règle en début de chaîne FORWARD. L'idéal serait de l'insérer entre
les deux règles citées, mais il faut compter le nombre de règles à
sauter avant (-I <nombre>).

PS: il fait des choses bizarres, IPCop. A quoi riment les chaînes ipac~*
sans cible ?

Avatar
noone
PS: il fait des choses bizarres, IPCop. A quoi riment les chaînes ipac~*
sans cible ?


je n'en sais fichtre rien ! Désolé...

Avatar
noone
Si la règle qui appelle la chaîne bloque_ip est insérée après la seconde
règle citée qui accepte toute nouvelle connexion arrivant par eth0, elle
sera inefficace.


ce qui m'étonne c'est que j'arrive à couper toute connexion
client/routeur en faisantr

iptables -A OUTPUT -d 192.168.0.2 -j DROP

bon je n'ai plus accès à Internet mais je n'ai plus accès au routeur...


Ce qui m'étonne c'est qu'une règle aussi restrictive puisse être
appliquée à la fin et pas la règle moins "dure" qui consiste à interdire
le transfert net/client mais pas routeur/client

Avatar
Pascal Hambourg

ce qui m'étonne c'est que j'arrive à couper toute connexion
client/routeur en faisantr

iptables -A OUTPUT -d 192.168.0.2 -j DROP


Normal, tu empêches ainsi le routeur de répondre au client.

bon je n'ai plus accès à Internet mais je n'ai plus accès au routeur...


Il est anormal que cela coupe aussi l'accès à internet car celui-ci ne
traverse que la chaîne FORWARD, pas les chaînes INPUT ni OUTPUT. Ne
serait-ce pas plutôt que le routeur sert de serveur DNS et que cela
bloque les réponses aux requêtes DNS du client, l'accès internet par
adresse IP fonctionnerait toujours ?

Ce qui m'étonne c'est qu'une règle aussi restrictive puisse être
appliquée à la fin et pas la règle moins "dure" qui consiste à interdire
le transfert net/client mais pas routeur/client


Ton étonnement n'a pas lieu d'être.
Primo, dans ton jeu de règles la chaîne OUTPUT est vide, ou ne contient
que des appels à des chaînes vides ou qui ne font rien. Par conséquent,
au début ou à la fin c'est pareil.
Secundo, les chaînes INPUT, OUTPUT et FORWARD ne sont pas liées. Chaque
paquet ne traverse qu'une seule de ces trois chaînes, selon son origine
et sa destination. La chaîne INPUT n'est traversée que par les paquets
entrants à destination de la machine. La chaîne OUTPUT n'est traversée
que par les paquets émis localement par la machine. La chaîne FORWARD
n'est traversée que par les paquets qui traversent la machine. Les
règles qui bloquent le trafic en entrée (dans INPUT) ou en sortie (dans
OUTPUT) n'ont aucune influence sur les paquets qui traversent la machine
(dans FORWARD), et vice versa.

Avatar
noone
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)
1 2