Demande d'avis sur mon premier script Iptables - Codes et scripts - Linux et OS Alternatifs
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
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)
Marsh Posté le 30-10-2009 à 20:13:25
Citation : |
0) fail
Marsh Posté le 30-10-2009 à 20:50:55
o'gure a écrit : Pour ma part j'en pense ceci : |
Merci pour ton aide
0.C'est déjà ca
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
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. |
Merci pour le lien
Marsh Posté le 30-10-2009 à 20:57:26
zecrazytux a écrit :
|
Heu comme ça c'est mieux ?
Citation : |
Marsh Posté le 30-10-2009 à 21:02:38
/sbin/iptables
Marsh Posté le 30-10-2009 à 21:07:08
paulnux a écrit :
|
non
Citation : |
non plus
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
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.
Le path de l'exécutable est /sbin/iptables
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. |
certes, tu dis vrai
s/non plus/ouai aussi /
Marsh Posté le 30-10-2009 à 22:15:47
Citation : IPTABLE=$(which iptables) |
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 : |
Heu j'ai bon la ?
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
Marsh Posté le 30-10-2009 à 22:56:50
Arfffffff j'ai enfin compris merci à tous
Me reste plus que la confirmation de remplacer:
Citation : $iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
Marsh Posté le 30-10-2009 à 23:28:05
A moins que:
Citation : |
Soit mieux ?????????????
Marsh Posté le 30-10-2009 à 23:34:39
Tu accepte déjà les connexions établies
Citation : # Ne pas casser les connexions établies |
Tu peux toujours mettre --state NEW,ESTABLISHED -j ACCEPT mais l'état ESTABLISHED ne sera jamais évalué.
Marsh Posté le 30-10-2009 à 23:39:38
Un immense merci a toi High Plains Drifter je vais me coucher moins bête ce soir, j'aime les explications
Marsh Posté le 31-10-2009 à 10:35:43
Voici le script réécrit avec votre aide
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 : |
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 :
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).
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
#!/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