Demande d'avis sur mon premier script Iptables

Demande d'avis sur mon premier script Iptables - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 30-10-2009 à 18:16:48    

Bonjour,
 
Voici mon 1er scripr Iptable, je voudrais sur un Serveur WEB@home  accepter HTTP pour tout le monde et n'accepter SSH que pour mon adresse IP du boulot et mon adresse IP de ma workstation située sur le réseau local du serveur.
 
j'ai rajouter aussi quelque règle antiflodd et antispoofing et le LOG des paquets rejetés.
 
Merci de me dire si ce script convient à mes attentes ou si j'ai écrit des bêtises et/ou si j'ai oublier quelque choses.
 
Salutations
 

Citation :


#!/bin/sh
 
#Variables
$iptables="/bin/iptables"
 
 
# RAZ DES TABLES
$iptables -F
$iptables -X
 
# Ne pas casser les connexions établies
$iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 
# Interdire tous les paquets
$iptables -P INPUT DROP
$iptables -P FORWARD DROP
$iptables -P OUTPUT DROP
 
 
 
 
###########
## INPUT ##
###########
# HTTP
$iptables -A INPUT -p tcp --dport 80 -j ACCEPT
 
# SSH
$iptables -A INPUT -i eth0 -p tcp --dport 22 -s 82.238.xxx.xxx -j ACCEPT  
$iptables -A INPUT -i eth0 -p tcp --dport 22 -s 192.168.xxx.xxx -j ACCEPT
 
# LOOPBACK
$iptables -A INPUT -i lo -j ACCEPT
 
 
 
############
## OUTPUT ##
############
# HTTP
$iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
 
# SSH
$iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
 
# LOOPBACK
$iptables -A OUTPUT -o lo -j ACCEPT
 
 
 
############
## DIVERS ##
############
# Syn Flood
$iptables -N syn-flood
$iptables -A INPUT -i $NET -p tcp --syn -j syn-flood
$iptables -A syn-flood -m limit --limit 1/s --limit-burst 10 -j RETURN
$iptables -A syn-flood -j DROP
 
# Spoofing
$iptables -N SPOOFED
$iptables -A SPOOFED -s 127.0.0.0/8 -j DROP
$iptables -A SPOOFED -s 169.254.0.0/12 -j DROP
$iptables -A SPOOFED -s 172.16.0.0/12 -j DROP
$iptables -A SPOOFED -s 192.168.0.0/16 -j DROP
$iptables -A SPOOFED -s 10.0.0.0/8 -j DROP
 
# LOG des paquets rejetés
$iptables -N LOG_DROP
$iptables -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP]:'
$iptables -A LOG_DROP -j DROP
$iptables -A INPUT -j LOG_DROP
$iptables -A OUTPUT -j LOG_DROP
$iptables -A FORWARD -j LOG_DROP

Reply

Marsh Posté le 30-10-2009 à 18:16:48   

Reply

Marsh Posté le 30-10-2009 à 19:13:39    

Pour ma part j'en pense ceci :
0. ça fait ce que tu veux.
1. Utilise au moins -m state --state NEW lorsque tu autorises unport.
2. Ta chaîne SPOOF est inutilisée  et pour info tu droppes tout le trafic provenant de ton LAN, heureusement que tu acceptes HTTP et SSH avant
3. tu vas vite enlever ta règles pour logguer tout le trafic droppé, useless et c'est un truc à se remplir /var

Message cité 1 fois
Message édité par o'gure le 30-10-2009 à 19:13:56

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 30-10-2009 à 19:31:31    

De plus ta chaine LOG_DROP ne log pas les paquets droppés plus haut dans le script.
 
Une chaine logdrop c'est comme-ça : http://olivieraj.free.fr/fr/linux/ [...] 03-10.html (très bon site au passage)


---------------
| < Ceci n'est pas une pipe.
Reply

Marsh Posté le 30-10-2009 à 20:13:25    

Citation :


#Variables
$iptables="/bin/iptables"


 
0) fail :o


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 30-10-2009 à 20:50:55    

o'gure a écrit :

Pour ma part j'en pense ceci :
0. ça fait ce que tu veux.
1. Utilise au moins -m state --state NEW lorsque tu autorises unport.
2. Ta chaîne SPOOF est inutilisée  et pour info tu droppes tout le trafic provenant de ton LAN, heureusement que tu acceptes HTTP et SSH avant
3. tu vas vite enlever ta règles pour logguer tout le trafic droppé, useless et c'est un truc à se remplir /var


Merci pour ton aide  :jap:  
 
0.C'est déjà ca  :D  
 
1.Si j'ai bien compris je remplace par exemple:
$iptables -A INPUT -p tcp --dport 80 -j ACCEPT  
par
$iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
Peux tu me dire pourquoi ? je voudrai comprendre
 
2.Pourquoi la chaine SPOOF est inutilisé ?
 
3.Tu as raison, merci

Reply

Marsh Posté le 30-10-2009 à 20:56:10    

High Plains Drifter a écrit :

De plus ta chaine LOG_DROP ne log pas les paquets droppés plus haut dans le script.
 
Une chaine logdrop c'est comme-ça : http://olivieraj.free.fr/fr/linux/ [...] 03-10.html (très bon site au passage)


Merci pour le lien  :jap:  

Reply

Marsh Posté le 30-10-2009 à 20:57:26    

zecrazytux a écrit :

Citation :


#Variables
$iptables="/bin/iptables"


 
0) fail :o


Heu comme ça c'est mieux ?  :??:  

Citation :


$iptables=/bin/iptables


 

Reply

Marsh Posté le 30-10-2009 à 21:02:38    

/sbin/iptables :o


---------------
THRAK (def.) : 1) A sudden and precise impact moving from intention, direction and commitment, in service of an aim. 2) 117 guitars almost striking the same chord simultaneously.
Reply

Marsh Posté le 30-10-2009 à 21:07:08    

paulnux a écrit :


Heu comme ça c'est mieux ?  :??:  

Citation :


$iptables=/bin/iptables


 


 
non :o
 

Citation :


/sbin/iptables :o


 
non plus :o
 
l'erreur se situe à l'assignation de la valeur (wich est ton pote, j'ai pas vérifié) à la variable iptables.
C'est pas du php ni du perl.
 
en shell:
 
déclaration:
var=valeur
 
utilisation:
$var


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 30-10-2009 à 21:13:59    

Cela dit, initialiser une variable correctement avec une valeur incorrecte ne mène pas beaucoup plus loin. :o
 
Le path de l'exécutable est /sbin/iptables


---------------
THRAK (def.) : 1) A sudden and precise impact moving from intention, direction and commitment, in service of an aim. 2) 117 guitars almost striking the same chord simultaneously.
Reply

Marsh Posté le 30-10-2009 à 21:13:59   

Reply

Marsh Posté le 30-10-2009 à 21:29:11    

THRAK a écrit :

Cela dit, initialiser une variable correctement avec une valeur incorrecte ne mène pas beaucoup plus loin. :o
 
Le path de l'exécutable est /sbin/iptables


 
certes, tu dis vrai :o
 
s/non plus/ouai aussi :o /


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 30-10-2009 à 22:15:47    

Citation :

IPTABLE=$(which iptables)
$IPTABLE pwet pwet...


Message édité par Fork Bomb le 30-10-2009 à 22:16:22

---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Marsh Posté le 30-10-2009 à 22:43:56    

Bon j'ai du mal a suivre mais si j'ai bien compris:
which iptables me renvoi /sbin/iptables
Donc:

Citation :


iptables=$/sbin/iptables


Heu j'ai bon la ?  :??:  :pt1cable:

Reply

Marsh Posté le 30-10-2009 à 22:45:37    

Nan iptables=/sbin/iptables
 
Ou comme l'a écrit Homer_Simpson
iptables=$(which iptables)
 
le $() aura pour effet d'exécuter which iptables a chaque exécution du script et de placer le résultat dans la variable $iptables


Message édité par High Plains Drifter le 30-10-2009 à 22:49:30

---------------
| < Ceci n'est pas une pipe.
Reply

Marsh Posté le 30-10-2009 à 22:56:50    

Arfffffff j'ai enfin compris merci à tous  :jap:  :jap:  
 
Me reste plus que la confirmation de remplacer:

Citation :

$iptables -A INPUT -p tcp --dport 80 -j ACCEPT  
par
$iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

Reply

Marsh Posté le 30-10-2009 à 22:59:40    

C'est ça.


---------------
| < Ceci n'est pas une pipe.
Reply

Marsh Posté le 30-10-2009 à 23:28:05    

A moins que:

Citation :


$iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT  


Soit mieux ?????????????

Reply

Marsh Posté le 30-10-2009 à 23:34:39    

Tu accepte déjà les connexions établies  

Citation :

# Ne pas casser les connexions établies
$iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT


Tu peux toujours mettre --state NEW,ESTABLISHED -j ACCEPT mais l'état ESTABLISHED ne sera jamais évalué.


Message édité par High Plains Drifter le 30-10-2009 à 23:34:53

---------------
| < Ceci n'est pas une pipe.
Reply

Marsh Posté le 30-10-2009 à 23:39:38    

Un immense merci a toi  :jap:  High Plains Drifter  :jap:  je vais me coucher moins bête ce soir, j'aime les explications

Reply

Marsh Posté le 31-10-2009 à 10:35:43    

Voici le script réécrit avec votre aide  :jap:  
 
o'gure pourquoi tu dis que  la chaîne SPOOF est inutilisée ?
elle est appliquée sur plein de script sur Internet
 
N'hésiter pas a faire des commentaires je suis la pour apprendre, merci
 

Citation :


#!/bin/sh
 
#Variables
iptables=$(which iptables)
 
 
# RAZ DES TABLES
$iptables -F
$iptables -X
 
# Ne pas casser les connexions établies
$iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 
# Interdire tous les paquets
$iptables -P INPUT DROP
$iptables -P FORWARD DROP
$iptables -P OUTPUT DROP
 
 
 
 
###########
## INPUT ##
###########
# HTTP
$iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
 
# SSH
$iptables -A INPUT -i eth0 -p tcp --dport 22 -s 82.238.xxx.xxx -m state --state NEW -j ACCEPT  
$iptables -A INPUT -i eth0 -p tcp --dport 22 -s 192.168.xxx.xxx -m state --state NEW -j ACCEPT
 
# LOOPBACK
$iptables -A INPUT -i lo -m state --state NEW -j ACCEPT
 
 
 
############
## OUTPUT ##
############
# HTTP
$iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
 
# SSH
$iptables -A OUTPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
 
# LOOPBACK
$iptables -A OUTPUT -o lo -m state --state NEW -j ACCEPT
 
 
 
############
## DIVERS ##
############
# Syn Flood
$iptables -N syn-flood
$iptables -A INPUT -i $NET -p tcp --syn -j syn-flood
$iptables -A syn-flood -m limit --limit 1/s --limit-burst 10 -j RETURN
$iptables -A syn-flood -j DROP
 
# Spoofing
$iptables -N SPOOFED
$iptables -A SPOOFED -s 127.0.0.0/8 -j DROP
$iptables -A SPOOFED -s 169.254.0.0/12 -j DROP
$iptables -A SPOOFED -s 172.16.0.0/12 -j DROP
$iptables -A SPOOFED -s 192.168.0.0/16 -j DROP
$iptables -A SPOOFED -s 10.0.0.0/8 -j DROP


Message édité par paulnux le 31-10-2009 à 11:02:46
Reply

Marsh Posté le 31-10-2009 à 10:41:09    

Salut,
Regarde les scripts sur internet et documente toi sur l'utilisation de chaînes iptables/netfilter personnalisées.

 

Voici un schéma qui décrit comment un paquet navigue dans les différentes chaines par défaut. Le cablage entre les différentes chaines est créé par défaut :
http://irp.nain-t.net/lib/exe/fetch.php/netfilter:pileip.gif?w=351
très bonne doc pour comprendre comment netfilter/iptables fonctionne : http://irp.nain-t.net/doku.php/130 [...] chitecture

 

Si tu rajoutes une nouvelle chaines il faut dire à netfilter à certains moment, tel paquet, tu le fais passer dans telle chaine. Si tu ne dis nul part qu'un paquet doit passer par cette chaine, cette chaine est inutile.

 

un simple iptables -A INPUT -j SPOOFED  à un moment donné suffit pour faire passer les paquets arrivant sur une de tes interfaces dans cette chaine et donc subir le traitement approprié. Si aucune règle ne matche le paquet, le paquet revient dans la chaine "appelante" pour continuer son petit voyage à travers netfilter.

 

Par contre, comprends bien que netfilter applique les règles séquentiellement, suivant le schéma au dessus, règle après règle. Si tu mets la règle pour passer les paquets dès le début de ton script, tu va avoir des surprises car dans SPOOFED tu droppes du trafic que tu veux autoriser.

 

Récupérer des morceaux de scripts "sur internet" pourquoi pas, mais il faut bien comprendre ce qu'ils font et ne pas les appliquer "sans réfléchir" (désolé pour expression, mais je pense que tu vois le sens).

 

:)


Message édité par o'gure le 31-10-2009 à 10:46:03

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 31-10-2009 à 11:03:23    

Merci je vais travailler la dessus

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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