ReLoad

Thierry Jaouen ~ WikiBlog
"Rien à foutre d'être lu, tant que je peux me relire."

Outils pour utilisateurs

Outils du site


blog:2012:06:01:daemonlogger

DaemonLogger Mirror

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”.

Prealable

  1. Avoir un câble RJ45 croisé ! Car, plus tard, on branchera directement les serveurs par ce câble.
  2. Poser quelques restriction pour que les données ne “fuitent” pas partout en polluant (voir pire) le reseau.

sysctl

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

interfaces

(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”.

iptables ou ferm

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

ebtables

FIXME : y a pas un truc a faire là?

Brancher le câble croisé

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…

DaemonLogger

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.

blog/2012/06/01/daemonlogger.txt · Dernière modification : 2012/05/31 23:19 de thierry