Règles iptables qui ne marchent pas

Bonjour,
ya t-il un spécialiste iptables dans la salle ?
Car ces règles ne sembles pas vouloir fonctionner mais le pire c’est qu’il n’y a aucune erreur:

#!/bin/sh

echo Mise en place des regles de filtrage...
# Configuration de base
# Reinitialisation des tables actuelles
iptables -t filter -F
iptables -t filter -X
echo - Vidage : [OK]

# Autoriser les connexions SSH
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
echo - Autoriser SSH : [OK]

# Interdire toute connexion entrante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
echo - Interdire toute connexion entrante : [OK]

# Interdire toute connexion sortante
iptables -t filter -P OUTPUT DROP
echo - Interdire toute connexion sortante : [OK]

# Configuration specifique
# Autoriser les requetes DNS, FTP, HTTP, NTP (pour les mises a jour)
iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
echo - Autoriser les requetes DNS, FTP, HTTP, NTP : [OK]

# Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
echo - Autoriser loopback : [OK]

# Autoriser ping
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
echo - Autoriser ping : [OK]

# HTTP
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
echo - Autoriser serveur Apache : [OK]

# FTP
modprobe ip_conntrack_ftp
iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
echo - Autoriser serveur FTP : [OK]

# Mail
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
echo - Autoriser serveur Mail : [OK]

# Protection de quelques types d'attaque
# Syn-Flood
iptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPT
iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT
echo - Limiter le Syn-Flood : [OK]

# 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
echo - Bloquer le Spoofing : [OK]

Voilà, je n’ai accès à rien, ni apache et ni ssh.
d’avance merci

Salut,
Vu ton logo, tu sembles être sous FreeBSD (ou noyau BSD), ce qui voudrait dire que tu n’utilises pas par défaut iptables mais un autre pare-feu (je crois PF).

Je peux me tromper mais si c’est le cas, tu as ta réponse.

Bonne journée.

Merci pour ta réponse Pyer mais si je n’utiliserais que bsd je ne serais pas là.

  1. Les règles ne correspondent pas aux commentaires.

  2. Tu sembles confondre paquet et connexion. Les règles iptables traitent des paquets, pas des connexions. Une connexion implique un ensemble de paquets allant dans les deux sens.

  3. Il manque une règle acceptant les paquets retour émis par les processus locaux, typiquement :

D’ailleurs la règle équivalente en INPUT n’est pas spécifique à FTP ni même aux paquets des seules connexions entrantes, elle s’applique aux paquets de toutes les connexions et c’est grâce à elle que les connexions sortantes fonctionnent.

  1. La règle pour le port 20 ne sert à rien.

  2. Les règles dans FORWARD ne servent que si la machine fonctionne en routeur et non en simple hôte. De toute façon des limites à 1/s seraient beaucoup trop basses.

  3. La chaîne SPOOFED n’est appelée dans aucune chaîne principale, elle est donc sans effet.

Ouah merci, ça c’est de la réponse :smiley:
je vais voir tout ça

EDIT toujours pareille.

Mais encore ?
Tu as vérifié que la sortie d’iptables-save correspond aux règles du script ?
Tu peux ajouter des règles avec la cible LOG en fin de chaînes pour voir quels sont les paquets bloqués, et en déduire les règles qui manquent.

Je pense bien mais je pensai que tu étais sous une version de debian utilisant un noyau BSD (ça existe).

En ce qui concerne iptables, je ne suis pas un pro (j’ai encore du bouleau :slightly_smiling:) et ton script n’avait pas l’air de contenir d’erreurs (pour moi en tout cas); maintenant PascalHambourg a l’air assez calé sur le sujet.

Sur ce, bonne journée et bonne chance pour ton problème.

Mets la Policy du Forward à Accept…

Pascal, tu peux être plus explicite sur le port 20 ?

Une connexion standard à un serveur ftp se fait juste avec le port 21.
Donc il ne faut pas autoriser le port 20 mais juste les related etablished et les éventuels ports passifs si ils sont utilisés.

Au passage, juste un exemple de syntaxe, on peut contracter ceci :

iptables -t filter -A INPUT -p tcp --dport 20 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
En ceci :

Pascal, tu peux être plus explicite sur le port 20 ?[/quote]

Le port 20 sert au mode actif, c’est le serveur FTP qui à partir de ce port initialise une connexion. Il s’agit donc de l’autoriser en sortie mais pas en entrée, dans ce sens, ça ne sert à rien.

Donc, si on a le "RELATED, ESTABLISHED’, inutile de mentionner le port 20, si je comprends bien.

Oui je pense car le module ftp fait que l’ouverture de la connexion est considéré comme «related» à celle du client sur le port 21.

J’ai donc enlevé cette ligne dans le tuto “iptables pour les nuls”.