DaemonLogger permet de recupérer “logger” ce qui arrive sur un interface réseau, mais surtout, permet de “mirrorer” une interface vers une autre.
Cela est d'un grand interet pour des outils comme “snort”. (“snort” est juste un exemple, il ne sera pas expliqué comment l'installer dans cette article)
~~READMORE~~
Sur notre “firewall”, on va écouter ce qui arrive sur l'interface “eth0” (qui correspond au LAN) et dupliquer tout vers l'interface “eth3”.
Du côté du serveur “snort”, on recupèrera les données sur “eth2”.
Sur le firewall et le serveur “snort”:
Dans /etc/sysctl.d/local.conf
, ajouter:
net.ipv4.conf.all.arp_ignore=1
Puis appliquer les modifs tout de suite:
# sysctl -p /etc/sysctl.d/local.conf
(Le câble Ethernet croisé n'est pas branché)
Sur le “firewall” , dans /etc/network/interfaces
, préparer l'interface:
auto eth3 iface eth3 inet manual up ip link set dev $IFACE up
L'interface n'a pas d'IP et pourtant elle monte
Sur le serveur “snort”, dans /etc/network/interfaces
, préparer l'interface:
auto eth2 iface eth2 inet manual up ip link set dev $IFACE up promisc on
On fait de même que pour le “firewall”, mais en activant en plus le mode “promisc”.
Sur le “firewall”, si besoin: DROP de tout.
“netfilter/iptables/ferm” n'a , a priori, pas de prise sur la communication de cette interface, mais dans le doute, faire un DROP :
Exemple, avec ferm (facile a traduire en règle iptables):
@def $SNORT_IF="eth3"; table raw chain PREROUTING if $SNORT_IF NOTRACK; table raw chain OUTPUT of $SNORT_IF NOTRACK; chain FORWARD if $SNORT_IF DROP; chain FORWARD of $SNORT_IF DROP; chain INPUT if $SNORT_IF DROP; chain OUTPUT of $SNORT_IF DROP;
Sur le serveur “snort”, on créé quelques règles:
ce serveur n'est pas un “firewall” et n'est pas censé avoir des règles complexes |
Donc, on fait un truc léger:
# ------------------------------------ # Regles iptables avec Ferm # ------------------------------------ @def $SNORT_IF = eth2; # ---------------------------------- # Ce n'est pas un firewall ! # ---------------------------------- chain ( INPUT OUTPUT FORWARD ) policy ACCEPT; # ----------- # All # ----------- # Aucun suivit sur aucune interface table raw chain PREROUTING NOTRACK; # ----------- # SNORT # ----------- @if 1 { # pas d'Input ? chain INPUT if $SNORT_IF DROP; # pas de retour chain OUTPUT of $SNORT_IF DROP; # surtout pas de forward chain FORWARD if $SNORT_IF DROP; chain FORWARD of $SNORT_IF DROP; } # --------------- # EOF
Aprés avoir appliqué ces règles, et a ce stade, on peut brancher le câble.
le serveur “snort” n'est pas supposé pouvoir faire du FORWARD entre interface… contrairement au “firewall”. Mais c'est une autre histoire |
: y a pas un truc a faire là?
Rien aprés branchement, normal, il faut monter les interfaces qu'on a configuré.
Sur le “firewall” :
# ifup eth3
Sur le serveur “snort” :
# ifup eth2
“ifconfig eth3/eth2” doit montrer une interface “UP”.
Utiliser “ethtool” pour vérifier…
Sur le “firewall” , on va enfin activer le “mirroring” de ce qui passe sur le LAN (eth0 dans notre cas):
# aptitude update # aptitude install daemonlogger
Et enfin:
# daemonlogger -i eth0 -o eth3
Et voila:
Sur le serveur “snort”, un petit “tcpdump” ou “iftop” nous montrent le reseau dupliqué.
# iftop -i eth2 -n
On remarquera que sur le “firewall” :
$ /sbin/ifconfig eth3 eth3 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:191809256 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 lg file transmission:1000 RX bytes:0 (0.0 B) TX bytes:143278104321 (133.4 GiB) Interruption:16 Mémoire:fdfe0000-fe000000
“ RX = 0 ” !
Alors que sur le serveur “snort”, “ TX = 0 ” .
Normal.