Iptables Policy et FORWARD

Bonjour à tous,
mon premier message sur ce forum avec l’ouverture d’un nouveau sujet sur iptables… :blush: (284 pages dans la recherche)
J’espère ne pas me faire taper sur les doigts car je ne poste pas au bon endroit ou avec la bonne syntaxe. (je sais que ce forum est rigoureux sur le sujet)
J’ai deux petites questions assez précises sur iptables auxquelles j’ai du mal à répondre avec Google.

1/ IPTABLES -P correspond aux règles par défaut…n’est-ce pas? Est-ce que si je fais un script IPTABLES avec des règles iptables -P INPUT DROP, iptables -P OUTPUT DROP etc., puis-je les placer n’importe où dans le script, concrètement est-ce qu’il y a une notion d’ordre avec ces règles ou dois-je les placer en premier (en opposition avec -A et -I)?

2/ Est-ce que ce paramètre /proc/sys/net/ipv4/ip_forward correspond à la règle FORWARD ou absolument pas?

Merci d’avance et vive l’humour! :smiley:

  1. [mono]-P[/mono] définit la politique par défaut d’une chaîne prédéfinie, c’est-à-dire la cible ACCEPT, DROP (ou plus rarement QUEUE) qui est appliqué au paquet s’il traverse toutes les règles de la chaîne sans qu’aucune n’ait décidé de son sort. Ce n’est pas une règle mais une propriété attachée à la chaîne. Son placement dans un script par rapport à la création des règles avec [mono]-A[/mono] ou [mono]-I[/mono] est indifférent sur le résultat final mais peut avoir un impact d’ordre temporel pendant l’exécution du script car la politique par défaut ne sera active qu’à partir du moment où elle est définie.

Exemple, en supposant que la chaîne INPUT est vide ([mono]iptables -F INPUT[/mono]) :

iptables -P INPUT DROP iptables -A INPUT -p icmp -j ACCEPT
n’est pas la même chose que

iptables -A INPUT -p icmp -j ACCEPT iptables -P INPUT DROP
Dans le premier cas, des paquets ICMP arrivant entre les deux commandes pourraient être bloqués par la politique par défaut DROP car la règle qui les accepte n’existe pas encore.
Dans le second cas, des paquets non ICMP arrivant entre les deux commandes pourraient être acceptés avant que la politique par défaut passe à DROP.
Le choix de l’ordre dépend du comportement souhaité.
Une fois les deux commandes exécutées, le résultat est le même quel que soit l’ordre : seuls les paquets ICMP seront acceptés.

  1. FORWARD n’est pas une règle mais une chaîne d’iptables qui peut contenir des règles. La valeur du paramètre [mono]ip_forward[/mono] détermine si des paquets reçus et non destinés à la machine peuvent être retransmis ou non vers leur destination, donc si la machine se comporte en routeur ou en simple hôte. Ces paquets traversent ensuite la chaîne FORWARD. Par conséquent si ip_forward est à 0 (sans entrer dans les détails, car il y a aussi un paramètre [mono]forwarding[/mono] spécifique pour chaque interface), aucun paquet ne passera dans la chaîne FORWARD.

Ok merci, très clair et désolé pour les abus de langage entre chaine et règle etc. Donc pour être sûr de ce que tu me dis à 100% et voir si j’ai compris

1°/ Mieux vaut mettre la politique par défaut au début pour plus de sureté?
2°/ Si ip_forward=0 la chaîne FORWARD est un non-sens dans un script?

Cordialement,

  1. Cela dépend de la politique par défaut choisie. Pour la sécurité il faut mettre ce qui est le plus restrictif en premier. Donc :
  • Si la chaîne a une politique par défaut DROP et des règles ACCEPT (plus sûr), il vaut mieux définir la politique en premier et les règles ensuite, surtout si elles sont nombreuses.
  • Si la chaîne a une politique par défaut ACCEPT et des règles DROP (moins sûr), il vaut mieux définir la politique en dernier. Mais si elle était déjà à ACCEPT cela ne change pas grand-chose en fait. Il faudrait donc la mettre à DROP avant de créer les règles puis à ACCEPT après.
  1. Bah non, c’est ceintures et bretelles. Ça ne coûte rien de définir la politique de FORWARD à DROP et de la vider.

Merci! :041
J’essaye d’inclure des règles limitant le flood et les scans de ports.
Toutes ces règles sont avec la chaîne FORWARD, et je capte pas trop. Pourquoi ne sont-elles pas en INPUT?

Exemple:

iptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPT iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

Avec des limites aussi basses ce n’est pas de la limitation de flood, c’est carrément de l’auto-déni de service. Un navigateur peut faire des dizaines de requêtes DNS et connexions HTTP en moins d’une seconde pour afficher la moindre page web.

Si ces règles sont dans la chaîne FORWARD, c’est qu’elles doivent s’appliquer aux paquets qui ne font que traverser la machine servant de routeur. Si elles étaient dans la chaîne INPUT, elles s’appliqueraient aux paquets reçus à destination de la machine en tant qu’hôte.

Ces règles ne sont pas de moi! Ce sont des règles pour un serveur, pas de navigation http sur cette machine. J’ai vu ce genre de règles sur plusieurs sites parlant de sécurité avec iptables et pour limiter un peu, notamment les scans de ports (genre nmap). Bref en tout cas merci!