Table des mati鑽es Page pr馗馘ente Page suivante

III-9 Log (LOG / ULOG)

Jusqu'? pr駸ent, nous avons vu comment configurer nos r鑒les avec Netfilter : d馭inir les cibles par d馭aut, et supprimer des paquets. Mais ? force de tout supprimer, il nous est difficile de conna?tre l'efficacit? de notre firewall, et si il est int駻essant de rajouter ou de supprimer des r鑒les. D'o? l'int駻黎 de logger certaines informations.

Dans ce qui suis, nous allons utiliser l'affreux anglicisme "logger" qui d馗rit l'action de stocker dans un "log" une certaine information.

III-9-1 LOG

C'est la m騁hode la plus standard pour logger des trames. Il s'agit simplement de cr馥r une r鑒le "iptables" dont la cible ("-j [cible]") n'est pas "ACCEPT" ou "DROP", mais tout simplement "LOG". Si nous reprenons le script "iptables-conntrack-1.sh", nous pouvons par exemple rajouter une derni鑽e r鑒le qui va logger tout ce qui na pas 騁? accept? par la cha?ne "INPUT". C'est tr鑚 pratique, car ainsi nous serons averti de tout ce qui tente d'acc馘er aux processus utilisateurs de notre syst鑪e. Pour cela, nous rajoutons cette r鑒le en temps que derni鑽e r鑒le de la cha?ne "INPUT" :
[root@phoenix /]# iptables -t filter -A INPUT -j LOG
Comme Netfilter est un 駘駑ent du Kernel, ses logs sont donc des logs de ce dernier. Et comme tout bon log Kernel, ils se retrouve dans le fichier "/var/log/messages". Ainsi, si pirate.internet.net fait un "nmap" sur les ports HTTP et HTTPS de Phoenix, nous aurons :
[intrus@pirate /]# nmap phoenix1.internet.net -p 80,443
Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Note: Host seems down. If it is really up, but blocking our ping probes, try -P0
Nmap run completed -- 1 IP address (0 hosts up) scanned in 30 seconds
[root@phoenix /]# tail -14 /var/log/messages
Jul 8 23:04:59 phoenix nmbd[2178]: [2003年07月08日 23:04:59, 0] nmbd/nmbd_packets.c:send_netbios_packet(172) 
Jul 8 23:04:59 phoenix nmbd[2178]: send_netbios_packet: send_packet() to IP 10.255.255.255 port 137 failed 
Jul 8 23:04:59 phoenix nmbd[2178]: [2003年07月08日 23:04:59, 0] nmbd/nmbd_namequery.c:query_name(256) 
Jul 8 23:04:59 phoenix nmbd[2178]: query_name: Failed to send packet trying to query name WORKGROUP
Jul 8 23:07:03 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 LEN=28 TOS=0x00 PREC=0x00
 TTL=38 ID=41593 PROTO=ICMP TYPE=8 CODE=0 ID=58020 SEQ=0 
Jul 8 23:07:03 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 LEN=40 TOS=0x00 PREC=0x00
 TTL=39 ID=51459 PROTO=TCP SPT=53120 DPT=80 WINDOW=4096 RES=0x00 ACK URGP=0 
Jul 8 23:07:09 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 LEN=28 TOS=0x00 PREC=0x00
 TTL=38 ID=2581 PROTO=ICMP TYPE=8 CODE=0 ID=58020 SEQ=256 
Jul 8 23:07:09 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 LEN=40 TOS=0x00 PREC=0x00
 TTL=39 ID=27444 PROTO=TCP SPT=53121 DPT=80 WINDOW=4096 RES=0x00 ACK URGP=0 
Jul 8 23:07:15 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 LEN=28 TOS=0x00 PREC=0x00
 TTL=38 ID=29887 PROTO=ICMP TYPE=8 CODE=0 ID=58020 SEQ=512 
Jul 8 23:07:15 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 LEN=40 TOS=0x00 PREC=0x00
 TTL=39 ID=48409 PROTO=TCP SPT=53122 DPT=80 WINDOW=4096 RES=0x00 ACK URGP=0 
Jul 8 23:07:21 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 LEN=28 TOS=0x00 PREC=0x00
 TTL=38 ID=37813 PROTO=ICMP TYPE=8 CODE=0 ID=58020 SEQ=768 
Jul 8 23:07:21 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 LEN=40 TOS=0x00 PREC=0x00
 TTL=39 ID=17449 PROTO=TCP SPT=53123 DPT=80 WINDOW=4096 RES=0x00 ACK URGP=0 
Jul 8 23:07:27 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 LEN=28 TOS=0x00 PREC=0x00
 TTL=38 ID=57294 PROTO=ICMP TYPE=8 CODE=0 ID=58020 SEQ=1024 
Jul 8 23:07:27 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 LEN=40 TOS=0x00 PREC=0x00
 TTL=39 ID=64622 PROTO=TCP SPT=53124 DPT=80 WINDOW=4096 RES=0x00 ACK URGP=0 
Gr稍e au log, on voit que phoenix1.internet.net re輟it une s駻ie de commandes "ping" et de requ黎es sur son port 80 de la part de pirate.internet.net. ノvidement, comme Phoenix ne r駱ond pas ? ces requ黎es, Pirate fait plusieurs essais, et finalement ne testera m麥e pas le port 443.

Un moyen pratique de suivre ses logs en temps r馥l est la commande, lanc? en temps que root : "tail -f /var/log/messages". Cela affichera en permanence la fin de ce fichier de log. Pour l'arr黎er, il suffit d'appuyer sur CTRL+C.

Mais ce fichier sert aussi (surtout !) ? stocker tout les messages d'informations ou d'erreurs du Kernel. Il nous faut donc un moyen de retrouver ces messages de log Netfilter parmi tout les autres messages. On peut configurer avec le param鑼re "--log-prefix=[Message de log]" la r鑒le de log afin qu'elle rajoute syst駑atiquement des messages en d饕ut de log. Ainsi :
[root@phoenix /]# iptables -t filter -A INPUT -s 10.0.0.66 -j LOG --log-prefix="AttackPirate"
[root@phoenix /]# iptables -t filter -A INPUT -s 10.0.0.200 -j LOG --log-prefix="AttackWeb"
indiquera clairement les connexions faites par les machines pirate.internet.net et web.internet.net :
[intrus@pirate /]$ nmap -p 80 phoenix1.internet.net
[intrus@web /]$ nmap -p 80 phoenix1.internet.net
[root@phoenix /]# tail -f /var/log/messages
Jul 8 23:26:06 phoenix kernel: AttackPirate IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 ...
Jul 8 23:26:06 phoenix kernel: AttackWeb IN=eth1 OUT= SRC=10.0.0.200 DST=10.0.0.1 ...
Jul 8 23:26:12 phoenix kernel: AttackPirate IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 ...
Jul 8 23:26:12 phoenix kernel: AttackWeb IN=eth1 OUT= SRC=10.0.0.200 DST=10.0.0.1 ...
Jul 8 23:26:12 phoenix kernel: AttackPirate IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 ...
Jul 8 23:26:12 phoenix kernel: AttackWeb IN=eth1 OUT= SRC=10.0.0.200 DST=10.0.0.1 ...
Jul 8 23:26:25 phoenix kernel: AttackPirate IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 ...
Jul 8 23:26:28 phoenix kernel: AttackPirate IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 ...
Jul 8 23:26:34 phoenix kernel: AttackPirate IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 ...
Cependant, cette m騁hode de log a l'inconv駭ient que m麥e avec des "--log-prefix", il reste difficile de s駱arer les messages de log de Netfilter des autres messages du Kernel. Comme en t駑oigne d'ailleurs le premier affichage du /var/log/message, o? des messages de Samba (en d饕ut de log) sont m駘ang駸 aux messages de Netfilter.

Une autre m騁hode est de d馭inir un "niveau de log" ("log level" en anglais), qui rajoute une autre information aux log, ce qui permet au demon de log (un programme appel? "syslogd") de stocker ces log dans un autre fichier. Par exemple, sur une Mandrake, on peut utiliser (voir "man syslogd", "man syslog.conf", "less /usr/include/sys/syslog.h" pour avoir plus d'informations sur ces commandes) :
[root@phoenix /]# iptables -t filter -A INPUT -j LOG --log-level=4
[root@phoenix /]# less /usr/include/sys/syslog.h
#define LOG_WARNING 4 /* warning conditions */
[root@phoenix /]# less /etc/syslog.conf
kern.=warn -/var/log/kernel/warnings
[intrus@pirate /]$ nmap -p 80 phoenix1.internet.net
Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Note: Host seems down. If it is really up, but blocking our ping probes, try -P0
Nmap run completed -- 1 IP address (0 hosts up) scanned in 60 seconds
[root@phoenix /]# tail -10 /var/log/kernel/warnings
Jul 8 18:55:43 phoenix kernel: MSDOS FS: Using codepage 850
Jul 8 19:26:34 phoenix kernel: i2c-amd756.o version 2.7.0 (20021208)
Jul 8 19:26:34 phoenix kernel: i2c-amd756.o: AMD768 bus detected and initialized
Jul 8 19:28:37 phoenix kernel: UDF-fs: No VRS found
Jul 8 23:53:58 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 ...
Jul 8 23:54:01 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 ...
Jul 8 23:54:07 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 ...
Jul 8 23:54:10 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 ...
Jul 8 23:54:13 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 ...
Jul 8 23:54:19 phoenix kernel: IN=eth1 OUT= SRC=10.0.0.66 DST=10.0.0.1 ...
Comme on le voit, bien que les log de Netfilter soient isol駸 dans un fichiers ? part (/var/log/warnings), ce fichier n'en est pas moins partag? avec d'autres modules du Kernel, qui utilisent eux aussi le log Kernel de niveau 4 <=> Warning. Dans le pr馗馘ent log, on voit notamment des logs de "MSDOS FS" et "i2c-amd756.0" qui n'ont rien ? voir avec Netfilter.

On pourrait s'imaginer utiliser une autre entr馥 du syslog, afin de vraiment s駱arer ces log. Le seul probl鑪e, c'est que les log de Netfilter sont des log du Kernel, et qu'? ce titre, on sera toujours oblig? de les d馗larer en temps que "kern." dans le "/etc/syslog.conf".

Alors ? Stocker ces logs ? part est vraiment une chose impossible sous Linux ? Non, heureusement que non ! La solution s'appelle ULOG, et nous allons la voir tout de suite.

III-9-2 ULOG

ULOG est module du Kernel dont le d騅eloppement a 騁? fait par http://www.gnumonks.org/projects/. Il a 騁? sp馗ialement con輹 pour recevoir les log de Netfilter. Il y a certaines (petites) contraintes ? son utilisation : Une fois que tout ceci est mis en place : Tout comme la cible LOG, la cible ULOG a des options int駻essantes : Conclusion : si vous voulez avoir des logs bien exploitables de votre Netfilter, utilisez ULOG plut?t que LOG. Ce n'est finalement pas si compliqu? ? installer, et c'est tr鑚 pratique. Enfin, pour les maniaques de la s馗urit? qui ont plein de place disque et du CPU ? revendre, vous pouvez sp馗ifier au demon "ulogd" de stocker les paquets non pas dans un fichier, mais dans une base de donn駸 MySQL ou PostgreSQL.

Table des mati鑽es Page pr馗馘ente Page suivante
olivieraj タ free POINT fr
Valid XHTML 1.0! Valid CSS!
Site de r馭駻ence : http://olivieraj.free.fr/ Last modified: Wed Jul 23 01:08:58 CEST 2003

AltStyle によって変換されたページ (->オリジナル) /