Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1878 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Demande d'avis sur mon premier script Iptables

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Demande d'avis sur mon premier script Iptables

n°1176085
paulnux
Posté le 30-10-2009 à 18:16:48  profilanswer
 

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

mood
Publicité
Posté le 30-10-2009 à 18:16:48  profilanswer
 

n°1176093
o'gure
Modérateur
Multi grognon de B_L
Posté le 30-10-2009 à 19:13:39  profilanswer
 

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 !
n°1176096
High Plain​s Drifter
Posté le 30-10-2009 à 19:31:31  profilanswer
 

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.
n°1176104
zecrazytux
Posté le 30-10-2009 à 20:13:25  profilanswer
 

Citation :


#Variables
$iptables="/bin/iptables"


 
0) fail :o


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1176108
paulnux
Posté le 30-10-2009 à 20:50:55  profilanswer
 

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

n°1176110
paulnux
Posté le 30-10-2009 à 20:56:10  profilanswer
 

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:  

n°1176111
paulnux
Posté le 30-10-2009 à 20:57:26  profilanswer
 

zecrazytux a écrit :

Citation :


#Variables
$iptables="/bin/iptables"


 
0) fail :o


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

Citation :


$iptables=/bin/iptables


 

n°1176112
THRAK
- THR4K -
Posté le 30-10-2009 à 21:02:38  profilanswer
 

/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.
n°1176115
zecrazytux
Posté le 30-10-2009 à 21:07:08  profilanswer
 

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
n°1176116
THRAK
- THR4K -
Posté le 30-10-2009 à 21:13:59  profilanswer
 

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.
mood
Publicité
Posté le 30-10-2009 à 21:13:59  profilanswer
 

n°1176118
zecrazytux
Posté le 30-10-2009 à 21:29:11  profilanswer
 

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
n°1176125
Fork Bomb
Obsédé textuel
Posté le 30-10-2009 à 22:15:47  profilanswer
 

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 !"
n°1176127
paulnux
Posté le 30-10-2009 à 22:43:56  profilanswer
 

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:

n°1176128
High Plain​s Drifter
Posté le 30-10-2009 à 22:45:37  profilanswer
 

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.
n°1176129
paulnux
Posté le 30-10-2009 à 22:56:50  profilanswer
 

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

n°1176131
High Plain​s Drifter
Posté le 30-10-2009 à 22:59:40  profilanswer
 

C'est ça.


---------------
| < Ceci n'est pas une pipe.
n°1176134
paulnux
Posté le 30-10-2009 à 23:28:05  profilanswer
 

A moins que:

Citation :


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


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

n°1176135
High Plain​s Drifter
Posté le 30-10-2009 à 23:34:39  profilanswer
 

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.
n°1176136
paulnux
Posté le 30-10-2009 à 23:39:38  profilanswer
 

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

n°1176167
paulnux
Posté le 31-10-2009 à 10:35:43  profilanswer
 

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
n°1176168
o'gure
Modérateur
Multi grognon de B_L
Posté le 31-10-2009 à 10:41:09  profilanswer
 

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 !
n°1176172
paulnux
Posté le 31-10-2009 à 11:03:23  profilanswer
 

Merci je vais travailler la dessus

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Demande d'avis sur mon premier script Iptables

 

Sujets relatifs
script d'envois d'un fichier par mailScript automatique avec init.d
Certifs Linux LPI, vos retours ? avis?script bash et setuid
[ Linux ][ Script ][ Démarrage ] : Who, Wget résultats vides? PQ?[Résolu][IPTABLES] problème avec NAT
script sh de fichier logScript bash : exécution de plusieurs scripts
problème avec régles iptables[Résolu] Netfilter / Iptables : Redirection de port
Plus de sujets relatifs à : Demande d'avis sur mon premier script Iptables


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR