Tcpdump contourne-t-il iptables?

48

J'ai configuré par erreur un serveur DNS ouvert résolveur, qui a rapidement été utilisé pour de nombreuses attaques DDoS provenant de / vers la Russie. Pour cette raison, j'ai complètement bloqué le port 53 sur les deux serveurs DNS pour tout le monde, à l'exception des adresses IP de confiance. Cela fonctionne, je ne peux plus me connecter à eux, mais ce qui me semble bizarre, c’est que, lorsque je lance tcpdump sur eth1 (interface sur le serveur avec Internet public), je vois beaucoup de paquets entrants de l’attaquant au port 53.

Est-il normal que tcpdump affiche ces paquets même si iptables les supprime? Ou ai-je mal configuré iptables?

D'autre part, je ne vois aucun paquet sortant de mon serveur, ce que je faisais auparavant, alors je suppose que le pare-feu fonctionne en quelque sorte. Cela me surprend que le noyau ne laisse pas tomber les paquets entièrement? Ou est-ce que le tcpdumpnoyau est connecté de manière à voir les paquets avant même qu’ils ne parviennent à iptables?

Petr
la source

Réponses:

61

C'est une bonne question.

En fait, tcpdump est le premier logiciel trouvé après le câble (et la carte réseau, si vous préférez) sur le chemin IN , et le dernier sur le chemin OUT .

Wire -> NIC -> tcpdump -> netfilter/iptables

iptables -> tcpdump -> NIC -> Wire

Ainsi, tous les paquets atteignant votre interface et tous les paquets quittant votre interface sont visualisés. Comme les paquets sur le port 53 ne reçoivent pas de réponse, comme le montre tcpdump, vous avez vérifié que vos règles iptables ont été correctement configurées.

MODIFIER

Je devrais peut-être ajouter quelques détails. tcpdump est basé sur libpcap , une bibliothèque qui crée un socket . Lorsqu'un paquet ordinaire est reçu dans la pile réseau, le noyau commence par vérifier si un socket de paquet est intéressé par le paquet nouvellement arrivé et, le cas échéant, il transmet le paquet à ce socket de paquet. Si l'option ETH_P_ALL est choisie, tous les protocoles passent par le socket de paquet.

libpcap implémente un de ces sockets avec l'option activée, conserve une copie pour son usage personnel et duplique le paquet dans la pile réseau, où il est traité par le noyau de la manière habituelle, y compris en le passant d'abord à netfilter , le noyau contrepartie space d' iptables . Même chose, dans l'ordre inverse ( c'est-à - dire , d'abord netfilter, puis dernier passage dans la socket), à la sortie.

Est-ce que c'est sujet au piratage? Mais bien sûr. Il existe certainement des rootkits de validation de concept utilisant libpcap pour intercepter les communications destinées au rootkit avant que le pare-feu ne puisse les toucher. Mais même cela reste dérisoire par rapport au fait qu’une simple requête de Google met au jour un code qui cache du trafic, même de libpcap . Néanmoins, la plupart des professionnels pensent que les avantages du débogage des filtres de paquets réseau l'emportent largement sur les inconvénients.

MariusMatutiae
la source
Existe-t-il un moyen de l'afficher pour que je puisse voir quels paquets ont été autorisés et lesquels ont été abandonnés?
Petr
2
@Petr vous pouvez enregistrer les paquets déposés par iptables, thegeekstuff.com/2012/08/iptables-log-packets
MariusMatutiae le