Monitoritzar els clients amb iptables
Anem a suposar que utilitzem un ordinador o contenidor amb Ubuntu per a fer de porta d'enllaç per a clients d'una LAN. Aquesta porta d'enllaç té configurat els IPtables per fer forward amb nat.
Preparació de l'entorn
Primer de tot, vaig a enumerar els comandaments auxiliars que necessitem per anar comprovant que tot va bé:
# iptables -L -n -v -x
Per veure totes les regles i els comptadors
# iptables -L -t nat
Per a veure totes les regles del nat
# iptables -N CADENA
Per crear una nova cadena
El que cal fer és crear dos chain o cadenes noves per a les connexions entrats i les d'eixida, connectar-les amb la cadena de FORWARD per a que tot el tràfic que passe a través de la màquina, passe també per les cadenes d'entrada i d'eixida. Després, cal especificar tots els clients i fer una regla per a cadascun.
Amb aquestes premisses creem un script:
#!/bin/bash
iptables -N TRAFFIC_ACCT_IN
iptables -N TRAFFIC_ACCT_OUT
iptables -I FORWARD -i eth0 -j TRAFFIC_ACCT_IN
iptables -I FORWARD -o eth0 -j TRAFFIC_ACCT_OUT
iptables -I FORWARD -i eth2 -j TRAFFIC_ACCT_IN
iptables -I FORWARD -o eth2 -j TRAFFIC_ACCT_OUT
for i in {1..200}; do iptables -A TRAFFIC_ACCT_IN --dst 192.168.9.$i; iptables -A TRAFFIC_ACCT_OUT --src 192.168.9.$i; done
iptables -L -n -v -x
Resultat en la terminal:
root@gw:~ # iptables -L -x -v -n Chain INPUT (policy ACCEPT 2518 packets, 3506441 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 1763 packets, 148429 bytes) pkts bytes target prot opt in out source destination root@gw:~ # ./scriptiptables.sh Chain INPUT (policy DROP 12379 packets, 1997510 bytes) pkts bytes target prot opt in out source destination 46059 5331656 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED 6 360 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8000 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3000 14 840 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 1414 84720 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 31377 3960158 TRAFFIC_ACCT_OUT all -- * eth2 0.0.0.0/0 0.0.0.0/0 22324 23647451 TRAFFIC_ACCT_IN all -- eth2 * 0.0.0.0/0 0.0.0.0/0 9140306 911473308 TRAFFIC_ACCT_OUT all -- * eth0 0.0.0.0/0 0.0.0.0/0 10015277 18261036886 TRAFFIC_ACCT_IN all -- eth0 * 0.0.0.0/0 0.0.0.0/0 10051316 18329598636 ACCEPT all -- eth0 eth1 0.0.0.0/0 0.0.0.0/0 9175803 914415878 ACCEPT all -- eth1 eth0 0.0.0.0/0 0.0.0.0/0 22324 23647451 ACCEPT all -- eth2 eth1 0.0.0.0/0 0.0.0.0/0 31377 3960158 ACCEPT all -- eth1 eth2 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 30953 packets, 7171093 bytes) pkts bytes target prot opt in out source destination Chain TRAFFIC_ACCT_IN (2 references) pkts bytes target prot opt in out source destination 0 0 all -- * * 0.0.0.0/0 192.168.9.1 0 0 all -- * * 0.0.0.0/0 192.168.9.2 0 0 all -- * * 0.0.0.0/0 192.168.9.3 0 0 all -- * * 0.0.0.0/0 192.168.9.4 0 0 all -- * * 0.0.0.0/0 192.168.9.5 0 0 all -- * * 0.0.0.0/0 192.168.9.6 0 0 all -- * * 0.0.0.0/0 192.168.9.7 0 0 all -- * * 0.0.0.0/0 192.168.9.8 0 0 all -- * * 0.0.0.0/0 192.168.9.9 782 540552 all -- * * 0.0.0.0/0 192.168.9.10 70995 111303403 all -- * * 0.0.0.0/0 192.168.9.11 58504 135692413 all -- * * 0.0.0.0/0 192.168.9.12 0 0 all -- * * 0.0.0.0/0 192.168.9.13 [...] Chain TRAFFIC_ACCT_OUT (2 references) pkts bytes target prot opt in out source destination 0 0 all -- * * 192.168.9.1 0.0.0.0/0 0 0 all -- * * 192.168.9.2 0.0.0.0/0 0 0 all -- * * 192.168.9.3 0.0.0.0/0 0 0 all -- * * 192.168.9.4 0.0.0.0/0 0 0 all -- * * 192.168.9.5 0.0.0.0/0 0 0 all -- * * 192.168.9.6 0.0.0.0/0 0 0 all -- * * 192.168.9.7 0.0.0.0/0 0 0 all -- * * 192.168.9.8 0.0.0.0/0 0 0 all -- * * 192.168.9.9 0.0.0.0/0 899 108097 all -- * * 192.168.9.10 0.0.0.0/0 53371 3267207 all -- * * 192.168.9.11 0.0.0.0/0 57092 4362316 all -- * * 192.168.9.12 0.0.0.0/0 0 0 all -- * * 192.168.9.13 0.0.0.0/0 240 20312 all -- * * 192.168.9.14 0.0.0.0/0 240 11217 all -- * * 192.168.9.15 0.0.0.0/0 0 0 all -- * * 192.168.9.16 0.0.0.0/0 2416 181280 all -- * * 192.168.9.17 0.0.0.0/0 [...]
Amb això ja tenim un mètode per a comptabilitzar tots els paquets i bytes que entren o eixen per tots els clients de la xarxa.
Enllaços
http://blog.osusnet.com/2009/11/10/monitorizando-aplicaciones-web-con-rrdtool/