web-dev-qa-db-fra.com

Débogueur pour iptables

Je cherche un moyen facile de suivre un paquet via les règles IPTABLES. Ce n'est pas tellement sur la journalisation, car je ne veux pas enregistrer tout le trafic (et je veux seulement avoir des objectifs de journalisation pour très peu de règles).

Quelque chose comme WireShark pour iptables. Ou peut-être même quelque chose de similaire à un débogueur pour un langage de programmation.

Merci chris

Remarque : Ce n'est pas obligé d'être un outil d'interface graphique fantaisie. Mais cela doit faire plus que de montrer un comptoir d'emballage ou ainsi.

Mise à jour : Il semble presque que nous ne trouvions rien qui fournit la fonctionnalité qui est demandée. Dans ce cas: trouvons au moins une bonne technique basée sur la journalisation IPTABLES - qui peut être facilement activée et éteinte, et ne nécessite pas d'écrire des règles IPTABLES de manière redondante (devoir écrire la même règle pour -j LOG et -j ...)

48
Chris Lercher

Je ne peux pas penser à une solution directe, mais je peux penser à une ronde sur le moyen de suivre un paquet.

  1. Connectez-vous chaque règle avec une directive de préfixe de journal (-Log-préfixe "Règle 34")
  2. Générez un paquet de test ou un flux de paquets avec Scédy et définissez le champ TOS sur quelque chose d'unique
  3. grep La sortie de fichier journal pour ce paramètre TOS et voyez les règles qui l'ont enregistré.
10
Haakon

Si vous avez un noyau et une version assez récents d'IPTABLES, vous pouvez utiliser la cible de trace (semble être intégrée au moins Debian 5.0). Vous devez définir les conditions de votre trace aussi spécifiques que possible et désactivez toutes les règles de trace lorsque vous ne déboguez pas, car elle vomme beaucoup d'informations aux journaux.

TRACE
[ (Le module IPT_LOG ou IP6T_LOG est requis pour la journalisation.) Les paquets sont connectés avec le préfixe de chaîne: "Trace: Tablename: TableName: Type: Rulnum" Où type peut être "Règle" pour la règle simple, "Retour" pour la règle implicite ". à la fin d'une chaîne définie par l'utilisateur et d'une "politique" pour la politique des chaînes intégrées. Il ne peut être utilisé que dans la table brute.

Si vous avez ajouté des règles comme celle-ci

iptables -t raw -A PREROUTING -p tcp --destination 192.168.0.0/24 --dport 80 -j TRACE
iptables -t raw -A OUTPUT -p tcp --destination 192.168.0.0/24 --dport 80 -j TRACE

Vous serez fourni avec la sortie qui ressemble à ceci.

# cat /var/log/kern.log | grep 'TRACE:'
Mar 24 22:41:52 enterprise kernel: [885386.325658] TRACE: raw:PREROUTING:policy:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325689] TRACE: mangle:PREROUTING:policy:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325713] TRACE: nat:PREROUTING:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: nat:nat.1:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.12.152 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=80 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: mangle:INPUT:policy:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:INPUT:rule:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world:rule:1 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world_all_c1:return:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world:rule:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
Mar 24 22:41:52 enterprise kernel: [885386.325731] TRACE: filter:in_world_irc_c2:return:2 IN=eth0 OUT= MAC=00:1d:7d:aa:e3:4e:00:04:4b:05:b4:dc:08:00 SRC=192.168.32.18 DST=192.168.32.10 LEN=52 TOS=0x00 PREC=0x00 TTL=128 ID=30561 DF PROTO=TCP SPT=53054 DPT=3128 SEQ=3653700382 ACK=0 WINDOW=8192 RES=0x00 SYN URGP=0 OPT (020405B40103030201010402)
82
Zoredache

Trois réponses sur un post:

1) Débogage par script:

#!/bin/bash
debug() {
    if [ -n "$debug" ]; then
        $@ || echo -e "The command which launched the error:\n$@"
    else
        $@
    fi
}
debug=1
IPTABLES="debug /sbin/iptables"

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
....

2) Débogage par Syslog

De ce site Web: http://www.brandonhutchinson.com/iptables_fw.html

If you want to make a syslog entry of dropped packets, change:

# Drop all other traffic
/sbin/iptables -A INPUT -j DROP

To:

# Create a LOGDROP chain to log and drop packets
/sbin/iptables -N LOGDROP
/sbin/iptables -A LOGDROP -j LOG
/sbin/iptables -A LOGDROP -j DROP

# Drop all other traffic
/sbin/iptables -A INPUT -j LOGDROP


You may also want to configure the --log-level to log dropped packets to a separate file instead of /var/log/messages:

# Drop all other traffic
/sbin/iptables -A INPUT -j LOGDROP --log-level debug


/etc/syslog.conf change:

# Send iptables LOGDROPs to /var/log/iptables
kern.=debug                                             /var/log/iptables

Reload the syslogd service for the change to take effect.
/sbin/service syslog reload

3) Pas de débogage, Nice Iptables Modifier:

En outre, cela peut être utile: http://www.fwbuilder.org/

6
Marc Riera

avait la même question et a trouvé Zorechetache pointant sur Trace/Ipt_log était la solution!

De plus, j'ai trouvé un script qui insère/supprime les règles de journal précédant toutes les règles d'IPTables actuellement actives. Je l'ai essayé et j'ai trouvé qu'il s'agit d'un outil vraiment intéressant. - La sortie est similaire à la solution de trace - Advantage: il fonctionne sur la configuration active IPTABLES, peu importe où elle a été chargée. Vous pouvez transformer la journalisation/éteinte à la volée! Vous n'avez pas besoin de modifier les scripts de pare-feu qui auraient pu être générés par Firewall Builder ou outil, tout ce que vous utilisez ... - Inconvénient: sans modification, le script crée des règles de journalisation pour toutes les règles actives. Au lieu de cela, lors de l'utilisation de règles de trace, vous limiterez probablement la journalisation à des adresses/services/connexions pour lesquelles vous souhaitez enquêter sur le traitement IPTABLES.

De toute façon, j'aime l'Aproach :) Kudos à Tony Clayton, jetez un coup d'œil: http://lists.netfilter.org/pipermail/netfilter/2003-march/043088.html

Cordialement, Chris

2
chris

J'utilise généralement des packets et des compteurs d'octets pour voir comment les règles fonctionnent et de trouver ce qui manque ou mal.

Vous pouvez les voir par "iptables -nvl".

0
Vi.