[iptables] un script de 2 ligne qui marche pas

un script de 2 ligne qui marche pas [iptables] - réseaux et sécurité - Linux et OS Alternatifs

Marsh Posté le 11-01-2003 à 19:25:11    

voici un script qui répond de maniere bizarre :  
passerelle : 192.168.0.1
1 pc  192.168.0.2
je veux autoriser le net qu'au pc du dessus. donc j'ai mis le script suivant.
 
(typement je lance ce script alors que tout le reseau local surf, joue sur le net, et/ou utilise mirc)  
quand je le script est lancé :
le pc en 192.168.0.2 continue d'avoir acces a tout normallement.
les autre pc n'ont pu acces aux pages web, mais ils peuvent utiliser Mirc, et même continuer la partie du jeu qu'ils ont en cours (DAOC pour ne pas le citer). C'est normal ca ??
..comment faire un script qui coupe tout brutalement ?
 
 
 
 
 

Code :
  1. LAN_IP=192.168.0.0/24
  2. LAN_IFACE=eth0
  3. LO_IP=127.0.0.1/32
  4. LO_IFACE=lo
  5. INET_IFACE=ppp0
  6. IPT=/sbin/iptables
  7. #ini
  8. echo '0' > /proc/sys/net/ipv4/ip_forward
  9. $IPT -F
  10. $IPT -X
  11. #default
  12. $IPT -P INPUT  DROP
  13. $IPT -P OUTPUT ACCEPT
  14. $IPT -P FORWARD ACCEPT
  15. #accept que mes connections / portable / localhost
  16. $IPT -A INPUT -i $INET_IFACE -j ACCEPT
  17. $IPT -A INPUT -i $LO_IFACE -j ACCEPT
  18. $IPT -A INPUT -i $LAN_IFACE -s 192.168.0.2 -j ACCEPT
  19. #activer le forwarding d ip
  20. echo '1' > /proc/sys/net/ipv4/ip_forward
  21. $IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE

Reply

Marsh Posté le 11-01-2003 à 19:25:11   

Reply

Marsh Posté le 11-01-2003 à 20:24:42    

Bon, tout d'abord, ton script tel qu'il est écrit la est très risqué pour tout ce qui ce trouve sur ton LAN : il est visible depuis Internet. C'est comme si tu n'avais aucune protection.
 
Ensuite, si tel que tu le mets, tu espère n'autoriser l'accès au net qu'a une machine... c'est bizarre que tu coupes le net (pages webs) aux autres avec ça.
 
Donc voici ci-dessous un script qui réponds à tes besoins, tout en te laissant la possibilité d'avoir une meilleur protection entre ton LAN et internet.
 
LAN_IP=192.168.0.0/24  
LAN_IFACE=eth0  
 
LO_IP=127.0.0.1/32  
LO_IFACE=lo  
 
INET_IFACE=ppp0  
 
IPT=/sbin/iptables  
 
#ini  
echo '0' > /proc/sys/net/ipv4/ip_forward  
$IPT -F  
$IPT -X  
 
#default  
$IPT -P INPUT  DROP  
$IPT -P OUTPUT ACCEPT  
$IPT -P FORWARD DROP  
 
#accept que mes connections / portable / localhost  
$IPT -A INPUT -i $INET_IFACE -j ACCEPT  
$IPT -A INPUT -i $LO_IFACE -j ACCEPT  
$IPT -A INPUT -i $LAN_IFACE -j ACCEPT
 
#Activation des règles de FORWARD (c'est cette section qui est testé pour les transfert de donnée entre le LAN et internet)
# Dans le cas ou tu ne veux autoriser internet qu'a 192.168.0.2
$IPT -A FORWARD -i $LAN_IFACE -s 192.168.0.2/32 \
   -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

# Dans le cas ou tu veux autoriser le net à tout le monde
#$IPT -A FORWARD -i $LAN_IFACE \
   -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

# Gère la réponse du net
$IPT -A FORWARD -i $INET_IFACE \
   -m state --state RELATED,ESTABLISHED -j ACCEPT
 
 
#activer le forwarding d ip  
echo '1' > /proc/sys/net/ipv4/ip_forward  
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE
 
Je pense que ça répond amplement à tes souhaits.
 
Le passant.


Message édité par le passant le 11-01-2003 à 20:28:03
Reply

Marsh Posté le 11-01-2003 à 20:50:15    

oui, tout a fait le script que j'ai fourni ne faisait pas de "firewall", mais je capte pas pkoi il supprime pas les connections ...  
il laissait passer des paquet venant du Lan :(

Reply

Marsh Posté le 11-01-2003 à 21:31:27    

Et bien oui, exactement :
 
LAN <--> internet c'est FORWARD
 
LAN --> Passerelle et Internet --> passerelle c'est INPUT
 
passerelle --> LAN et passerelle --> Internet c'est OUTPUT
 
Donc comme tu avais FORWARD d'ouvert, tu ne filtrais rien. Donc la porte ouverte à tout type de connection.
 
Sauf pour internet. Là, je comprends pas.
Si ta passerelle est le serveur de nom, et que tu bloqie son accès à toute les machines sauf la 192.168.0.2, ça explique pourquoi aucune n'avait accès à internet.
 
Sauf que pour que ta passerelle devait avoir une possibilité de recevoir des réponses du net sur le port DNS (53), et ce n'est pas le cas.
 
Comprends po trop !
 
Ce que tu dois bien comprendre, c'est le schéma que j'ai mis plus haut.
 
Un petit site pour t'aider pour la suite :
http://christian.caleca.free.fr
 
Le passant.

Reply

Marsh Posté le 11-01-2003 à 22:24:16    

oui, ma passerelle est bien serveur de nom pour tout mon reseau local.
 
j'avias pas bien capté, le system pour le firewall :
je pensais que :  
 
lan <-> internet  
 
c'etait d'abord "input" puis "forward" et enfin "output" !!
 
tu viens de m'eclaircir le sujet et je t'en remercie :o)

Reply

Marsh Posté le 11-01-2003 à 23:45:57    

Arghh !!! Dans le script que je t'ai filé (et dans le tiens aussi) il y a une enorme bourde !!!!
 
Je ne comprennais pas d'où pouvait venir l'acceptation du DNS, mais je viens juste de tilter !!!
 
C'est ce truc :
 
$IPT -A INPUT -i $INET_IFACE -j ACCEPT
 
A virer absolument !!!
 
Désolé pour le temps de détante, mais ch'uis un eu claqué.
 
Donc cette ligne tu dois la virer absolument et la remplacer par un truc du style :
 
$IPT -A INPUT -i $INET_IFACE -p udp -sp 53 \
   -m state --state RELATED -j ACCEPT

 
Parce que la, dans l'état actuel des choses, tu as commis la même erreur que pour le FORWARD !!!!
 
A changer tout de suite !!!!
 
Sur le INPUT -i $INET_IFACE, fait bien attention au port qui sont ouvert, ET dans quels conditions tu dois les ouvrir !!
C'est vraiment très important !
 
Sinon, n'importe qui pourra accéder à ta passerelle, et donc au reste de ton LAN, même si tu as des règles FORWARD blindé.
 
Ah moins que ce ne soit qu'un script de test, mais même...
 
Le passant.

Reply

Marsh Posté le 11-01-2003 à 23:50:33    

euh la je capte pu ...
le forward est blindé ok.
 
le seul truc que ca peut faire c blocker les port de la machine
mais vu qu'aucun service ne tourne dessus :??:
 
(au passage dns, c tcp + udp il me semble)

Reply

Marsh Posté le 12-01-2003 à 00:18:38    

Slvn a écrit :

euh la je capte pu ...
le forward est blindé ok.
 
le seul truc que ca peut faire c blocker les port de la machine
mais vu qu'aucun service ne tourne dessus :??:
 
(au passage dns, c tcp + udp il me semble)


 
Il faut aussi fermer le INPUT dans le sens : internet --> passerelle.
Et ça c'est géré par les règles du style : INPUT -i $INET_IFACE.
 
Si tu la met en -j ACCEPT, ça veut dire que tu acceptes tout ET n'importe quoi dessus, or, ce n'est pas ce qu'on souhaite, surtout depuis internet !
 
Pour reprendre le sens de ton script tu dois voir que :
 
A/ Traffic LAN --> internet : FORWARD -i $LAN_IFACE
 
B/ Traffic internet --> LAN : FORWARD -i $INET_IFACE
 
C/ Traffic LAN --> passerelle : INPUT -i $LAN_IFACE
 
D/ Traffic passerelle --> LAN : OUTPUT -o $LAN_IFACE
 
E/ Traffic internet --> passerelle : INPUT -i $INET_IFACE
 
F/ Traffic passerelle --> internet : OUTPUT -o $INET_IFACE
 
Si tu ne fais pas extrèmement attention aux autorisations que tu donnes sur les points B et E, tu riques d'avoir pas mal de surprises (prises de contrôle de ta passerelle, de ton LAN à distance, etc...).
 
En effet, même si aucun service n'est actif chez toi, les "méchants" peuvent scanner les différents ports et voir lesquels sont ouverts.
Une fois ceci fais, j'imagine qu'ils peuvent s'en servir pour faire plein de choses pas sympathiques.
 
Dans ce cas, le plus simple est de fermer les ports, que des services soient actif ou pas !
Pas de portes ouvertes = moins de possibilité pour venir t'embèter !
 
J'espère avoir réussi à te convaincre.
 
Tiens, je pense une image :
 
Une porte ouverte est du type : -j ACCEPT, n'importe qui peut s'inviter chez toi avec ou sans invitation.
 
Une porte avec un protier qui filtre est : -m state --state ... -j ACCEPT, tu contrôle ce qui ce passe.
 
Une porte murée : -j DROP
 
Dans le cas B et E, seules les 2 dernières solutions sont indispensables, la première étant pour les suicidaires (ou certains autres cas particuliers).
 
Je t'invite fortement à lire le maximum de choses avant de poursuivre, tu évitera ainsi pas mal de soucis.
 
Le passant.
 
ps : DNS utilise PRINCIPALEMENT ET EXCLUSIVEMENT udp.

Reply

Marsh Posté le 12-01-2003 à 00:32:51    

un grand merci a toi Le passant :jap:
 
je vais ameliorer le script grace au manuel officiel

Reply

Marsh Posté le 12-01-2003 à 01:27:30    

De rien, bonne lecture.
 
Le passant.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed