Pouvez-vous recommander une bonne introduction à iptables? [fermé]

15

Je dois installer un pare-feu sur un serveur Linux (toute mon expérience précédente est avec Windows). Mes règles sont censées être assez simples - interdire tout, autoriser certains ports avec tous, autoriser certains ports pour des sous-réseaux IP spécifiques, tandis que le réseau est petit mais complexe (chaque hôte a des adresses IP dans au moins 2192.168 ... réseaux, tout le monde peut interconnecter de nombreuses façons différentes). Je pense que l'utilisation des wrappers iptables peut compliquer le système en introduisant logiquement de nombreuses entités inutiles et il serait préférable de rester simple et d'utiliser directement iptables.

Pouvez-vous recommander une bonne introduction rapide sur la façon d'écrire des règles iptables?

Ivan
la source

Réponses:

26

Des liens vers la documentation officielle et recommandée existent sur le site Web de Netfilter.

Ce n'est pas un nouveau sujet, les ressources sont illimitées .

La plupart des commandes de base sont assez intuitives et peuvent facilement faire référence à la page de manuel .

netfilter, qui est la technologie au niveau du noyau qui permet le filtrage des paquets, est assez avancée. Il existe des tables supplémentaires qui peuvent modifier les paquets, traduire les paquets et autrement affecter le routage. L' iptablesutilitaire est l'outil utilisateur pour interagir avec netfilter. Si vous souhaitez en savoir plus sur les fonctionnalités avancées, je vous suggère de consulter la documentation susmentionnée. Pour une introduction aux fonctionnalités de base, veuillez lire la suite.

Pour répertorier toutes les règles existantes:

iptables -L -n

-n empêche iptables de résoudre les ips, ce qui produit une sortie plus rapide.

La table par défaut est la filtertable, qui est utilisée pour appliquer les règles de base du pare-feu aux trois chaînes. Les trois chaînes par défaut dans le filtertableau sont INPUT, OUTPUTet FORWARD.

Les chaînes sont largement explicites. La chaîne INPUT affecte les paquets entrant, la chaîne OUTPUT affecte les paquets générés localement, et enfin FORWARD pour tous les paquets qui transitent par le système.

Parmi les cibles que vous pouvez spécifier, vous pouvez les DROPpaquets, ce qui signifie simplement ignorer et ne pas répondre. Vous pouvez des REJECTpaquets, où une réponse icmp serait envoyée à la source du refus. Enfin, vous pouvez ACCEPTles utiliser, ce qui permet aux paquets de continuer le routage.

Souvent, avec un pare-feu extérieur, le choix par défaut sera DROPopposé à REJECT, car il réduit l'empreinte visible de votre réseau sur Internet. Par exemple, une adresse IP qui autrement limite les services à un hôte spécifique aurait moins de visibilité avec DROP.

Remarque, -Asignifie ajouter à la fin de la chaîne. Si vous souhaitez insérer en haut, vous pouvez utiliser -I. Toutes les règles sont traitées de haut en bas. -Dpour suppression.

Vers DROPun paquet entrant provenant de 192.168.235.235:

iptables -A INPUT -s 192.168.235.235 -j DROP

Cela saute à la DROPcible pour tous les protocoles provenant de cette IP.

Accepter:

iptables -A INPUT -s 192.168.235.235 -j ACCEPT

Pour empêcher l'accès à cette adresse IP à partir de votre serveur ou réseau local:

iptables -A OUTPUT -d 192.168.235.235 -j DROP

Vous pouvez spécifier le -pprotocole, la -ssource du paquet, la -ddestination du paquet, le port de destination --dport, le port source --sportet de nombreux autres indicateurs qui affecteront la façon dont les paquets sont traités par la règle.

Si votre INPUTstratégie par défaut était DROPet que vous vouliez autoriser tout le monde sur le 192.168.123.0/24sous - réseau à accéder à SSH sur votre serveur, voici un exemple:

iptables -A INPUT -s 192.168.123.0/24 -p tcp --dport 22 -j ACCEPT

C'est vrai, vous pouvez également utiliser la notation CIDR !

De manière générale, la meilleure politique par défaut est DROPpour toutes les chaînes. Chaque chaîne a une politique par défaut, qui est spécifiée par l' -Pindicateur. Même si votre stratégie est définie par défaut DROP, il est toujours conseillé d'avoir l'entrée finale dans une chaîne pour qu'elle soit DROPégalement.

Par exemple, pour modifier la stratégie DROPpour les chaînes INPUT, FORWARD et OUTPUT:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

Attention , si vous spécifiez la politique par défaut de DROP for INPUT sur un système distant sans vous autoriser au préalable à accéder à SSH, vous pourriez vous empêcher d'accéder au système. Si sur un système distant, vous pouvez spécifier une crontab temporaire pour vider toutes les règles toutes les 5 minutes en tant que sécurité intégrée.

Pour supprimer toutes les règles et autoriser tout le trafic:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -X
iptables -F

Remarque, -Xsupprime toutes les chaînes créées. -Fvide toutes les règles.

Il existe des outils natifs pour enregistrer et restaurer les règles. En particulier, iptables-saveet iptables-restore. La plupart des distributions Linux modernes ont saveet restorefonctionnent dans un fichier init iptables fourni avec le système.

Il existe d'autres meilleures pratiques de pare-feu, telles que la suppression de paquets mal formés et d'autres types de trafic indésirable. C'est l'un des avantages de l'utilisation d'un utilitaire frontal tel que Shorewall , car il implémentera un grand nombre de ces politiques par défaut. Néanmoins, je suis d'accord avec votre approche et je préfère également maintenir directement mes propres règles, et ces mêmes bonnes pratiques peuvent être mises en œuvre sans frontal.

Warner
la source
2
Je suis juste tombé sur cette réponse en cherchant des trucs iptables aléatoires ici (je recherche SF / SO avant Google!), Et cette réponse très détaillée semble mériter plus d'amour pour le vote, alors je lui en ai donné!
Andrew Barber
+1 belle réponse. Je mentionnerais également Debian WIKI .
michal.kreuzman
1

J'ai trouvé https://help.ubuntu.com/community/IptablesHowTo utile récemment. Je ne pense pas que quoi que ce soit là-dedans soit particulièrement spécifique à Ubuntu.

gbroiles
la source
J'utilise Arch sur mon ordinateur portable, mais un serveur Ubuntu Lucid est exactement la tâche à configurer. Cela peut donc être utile s'il n'est pas obsolète (cela concerne Ubuntu 8.04 à ma connaissance).
Ivan