20 abr 2011

Implementación de Shorewall y MRTG con RRDTool en Linux Debian Squeeze 6.0


Trafico de Server FTP en la DMZSiempre he deseado registrar el tráfico que pasa por las interfaces de red, de un gateway o un firewall de una red, para saber que IP consume más y cuánto tiempo se queda consumiendo el ancho de banda y compararlo con semanas y meses pasados. Para hacer un estudio de mi tráfico.

El escenario que voy a usar es de mi post anterior sobre Shorewall en Linux Debian Squeeze 6.0, ya que sería muy idóneo graficar por vía web, el control de ancho de banda, que antes realice en ese post. Bueno manos a la obra.

Nuestro escenario va hacer tres interfaces de red.
Interface 0 = eth0 = Internet (IP: 88.66.77.99 = int)
Interface 1 = eth1 = DMZ (IP: 10.0.0.1 = dmz)
Interface 2 = eth2 = Red Interna (IP: 172.16.0.1 = lan)

Copiamos el fichero accounting para la raiz del shorewall
root@firewall:~# cp /usr/share/doc/shorewall/default-config/accounting /etc/shorewall/

Hacemos una tarea técnica, de los servicios que queremos graficar y como lo vamos hacer server dns en la dmz, cabe destacar que hay que tener en cuenta que los paquetes provenientes de otras ips, debemos descartarlos para no graficar un tráfico no deseado, solo de ip-origen a ip-destino, así también con los puertos.

server proxy en la dmz: ip 10.0.0.34 = cadena srvproxy
dmz:10.0.0.34 int tcp 80,20,21,443

server dns en la dmz: ip 10.0.0.35 = cadena srvdns
dmz:10.0.0.35 int tcp 53
dmz:10.0.0.35 int udp 53
int dmz:10.10.10.35 tcp 53
int dmz:10.10.10.35 udp 53

server jabber en la dmz: ip 10.0.0.36 = cadena srvjabber
int dmz:10.10.10.36 tcp 5269
dmz:10.10.10.36 int tcp 5269

server de correo en la dmz: ip 10.0.0.37 = cadena srvcorreo
dmz:10.0.0.37 int tcp 25,80
int dmz:10.0.0.37 tcp 25

server ftp en la dmz: ip 10.0.0.38 = cadena srvftp
int dmz:10.10.10.38 tcp 20,21

server web en la dmz: ip 10.0.0.39 = cadena srvweb
int dmz:10.10.10.39 tcp 80,443,20,21

ip director para que acceda un server en internet: ip 172.16.0.5 = cadena jefe1
lan:172.16.0.5 int:4.4.8.8 tcp 25,80,110,143

ips de los admin de la red, enmascaradas: ip 172.16.0.6 = cadena admin1, ip 172.16.0.7 = cadena admin2
lan:172.16.0.6 int all
lan:172.16.0.7 int all

Editamos el fichero accounting, para ir agregando nuestras reglas y crear nuestras cadenas y así iptables de linux iría filtrando todo el tráfico nuestro byte por byte, para luego procesarlo con otra aplicación.

root@firewall:~# nano /etc/shorewall/accounting

#
# Shorewall version 4 - Accounting File
#
# For information about entries in this file, type "man shorewall-accounting"
#
# Please see http://shorewall.net/Accounting.html for examples and
# additional information about how to use this file.
#
#####################################################################################
#ACTION CHAIN SOURCE DESTINATION PROTO DEST SOURCE USER/ MARK
# PORT(S) PORT(S) GROUP

#server proxy en la dmz
srvproxy:COUNT - eth1:10.0.0.34 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 80,20,21,443
srvproxy:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.0.0.34 tcp 80,20,21,443
DONE srvproxy

#server dns en la dmz
srvdns:COUNT - eth1:10.0.0.35 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 53
srvdns:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.0.0.35 tcp 53
srvdns:COUNT - eth1:10.0.0.35 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 udp - 53
srvdns:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.0.0.35 udp 53
DONE srvdns

#server jabber en la dmz
srvjabber:COUNT - eth1:10.10.10.36 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 5269
srvjabber:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.10.10.36 tcp 5269
DONE srvjabber

#server de correo en la dmz
srvcorreo:COUNT - eth1:10.10.10.37 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 25,80
srvcorreo:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.10.10.37 tcp 25
DONE srvcorreo

#server ftp en la dmz
srvftp:COUNT - eth1:10.10.10.38 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 20,21
srvftp:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.10.10.38 tcp 20,21
DONE srvftp

#server web en la dmz
srvweb:COUNT - eth1:10.10.10.39 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 20,21
srvweb:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.10.10.39 tcp 20,21
DONE srvweb

#ip director para que acceda un sitio en internet
lan:172.16.0.5 int:4.4.8.8 tcp 25,80,110,143
jefe1:COUNT - eth2:172.16.0.5 eth0:4.4.8.8!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 tcp - 25,80,110,143
jefe1:COUNT - eth0:4.4.8.8!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth2:172.16.0.5 tcp 25,80,110,143
DONE jefe1

#ips de los admin de la red, enmascaradas
lan:172.16.0.6 int all
admin1:COUNT - eth2:172.16.0.6 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 - all
admin1:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth2:172.16.0.6 all
DONE admin1
lan:172.16.0.7 int all
admin2:COUNT - eth2:172.16.0.7 eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 - all
admin2:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth2:172.16.0.7 all
DONE admin2

Nota: Una breve explicación de una de las líneas expuestas en el fichero accounting.
---------------------------------------------------------------------------------------------------------
srvproxy:COUNT - eth0:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8 eth1:10.0.0.34 tcp 80,20,21,443
DONE srvproxy
---------------------------------------------------------------------------------------------------------
(srvproxy) Nombre de cadena que el iptables va filtrar
(:COUNT) Significa que dicha cadena va almacenar datos
(-) Llevaría un guión si esta opción no se va usar
(eth0) Interface origen que se va analizar el conteo de paquetes
(:!192.168.0.0/16,172.16.0.0/16,10.0.0.0/8) Que se van excluir los paquetes de este grupo de IPs
(eth1) Interface destino que se va analizar el conteo de paquetes
(:10.0.0.34) Que se van incluir los paquetes de este grupo de IPs
(tcp) Protocolo que se va a filtrar, puede usarse UDP,ICMP,ETC.. o ALL (todos los tipos de protocolos)
(80,20,21,443) Puertos que se van analizar, para luego filtrar.
(DONE srvproxy) Indicándole al iptables que aquí termina el filtrado de esta cadena.
------------------------------------------------------------------------------------------------------
Luego chequeamos si todo está correcto, para luego reiniciar el shorewall.
root@firewall:~# shorewall check
root@firewall:~# shorewall restart

Ver que nuestras cadenas se están ejecutando correctamente.
root@firewall:~# shorewall show accounting

Ya estamos listos para procesar los datos filtrados por el iptables de linux.

Vamos a Instalar Apache2, MRTG, MRTG-RRD y RRDTool
root@firewall:~# aptitude install apache2 mrtg mrtg-rrd rrdtool

Apache2: Servidor web HTTP de código abierto.
RRDTool: Es el acrónimo de Round Robin Database tool. Se trata de una herramienta que trabaja con una base de datos que maneja planificación según Round-Robin. Esta técnica trabaja con una cantidad de datos fija, definida en el momento de crear la base de datos, y un puntero al elemento actual.
MRTG: Herramienta para supervisar la carga de tráfico de interfaces de red.
MRTG-RRD: Visualiza los gráficos para el MRTG a partir de los datos en el formato RRDtool.

Descargamos shorewall_stats.
-----------------------------------------------------------
root@firewall:~#cd /etc/shorewall/
root@firewall:~#wget http://www.nightbrawler.com/code/shorewall-stats/shorewall_stats.tgz
O este
http://www.shorewall.com.au/contrib/shorewall_stats.tar.gz
O estos, re subido por mí
http://www.mediafire.com/?j475j0hn9h5j9
http://www.megaupload.com/?d=YN0OZOI6

root@firewall:~#/etc/shorewall#tar zxvf shorewall_stats.tgz
root@firewall:~#/etc/shorewall#cd shorewall_stats
root@firewall:~#/etc/shorewall/shorewall_stats#ls -l
-rw-r--r-- 1 root root 1028 Jan 19 16:52 accounting
-rw-r--r-- 1 root root 995 Jan 19 16:52 INSTALL
-rw-r--r-- 1 root root 859 Apr 18 11:46 mrtg.cfg
-rwxr-xr-x 1 root root 1935 Jan 19 16:52 shorewall_stats.pl
-----------------------------------------------------------

Editamos el fichero mrtg.cfg del shorewall_stats y agregamos lo siguiente
root@firewall:~#/etc/shorewall/shorewall_stats/#nano mrtg.cfg

WorkDir: /var/www/mrtg
Options[_]: growright, bits
Language: spanish
WriteExpires: Yes
LogFormat: rrdtool
EnableIPv6: no

###################################################
# MRTG con el Accounting del Shorewall
###################################################

# srvproxy
Target[srvproxy]:`perl /etc/shorewall/shorewall_stats.pl srvproxy`
MaxBytes[srvproxy]:12500000
Title[srvproxy]:Trafico de Server Proxy en la DMZ
PageTop[srvproxy]:<H1>Trafico de Server Proxy en la DMZ</H1>

# srvdns
Target[srvdns]:`perl /etc/shorewall/shorewall_stats.pl srvdns`
MaxBytes[srvdns]:12500000
Title[srvdns]:Trafico de Server DNS en la DMZ
PageTop[srvdns]:<H1>Trafico de Server DNS en la DMZ</H1>

# srvjabber
Target[srvjabber]:`perl /etc/shorewall/shorewall_stats.pl srvjabber`
MaxBytes[srvjabber]:12500000
Title[srvjabber]:Trafico de Server Jabber en la DMZ
PageTop[srvjabber]:<H1>Trafico de Server Jabber en la DMZ</H1>

# srvcorreo
Target[srvcorreo]:`perl /etc/shorewall/shorewall_stats.pl srvcorreo`
MaxBytes[srvcorreo]:12500000
Title[srvcorreo]:Trafico de Server Correo en la DMZ
PageTop[srvcorreo]:<H1>Trafico de Server Correo en la DMZ</H1>

# srvftp
Target[srvftp]:`perl /etc/shorewall/shorewall_stats.pl srvftp`
MaxBytes[srvftp]:12500000
Title[srvftp]:Trafico de Server FTP en la DMZ
PageTop[srvftp]:<H1>Trafico de Server FTP en la DMZ</H1>

# srvweb
Target[srvweb]:`perl /etc/shorewall/shorewall_stats.pl srvweb`
MaxBytes[srvweb]:12500000
Title[srvweb]:Trafico de Server Web en la DMZ
PageTop[srvweb]:<H1>Trafico de Server Web en la DMZ</H1>

# jefe1
Target[jefe1]:`perl /etc/shorewall/shorewall_stats.pl jefe1`
MaxBytes[jefe1]:12500000
Title[jefe1]:Trafico del Director
PageTop[jefe1]:<H1>Trafico del Director</H1>

# admin1
Target[admin1]:`perl /etc/shorewall/shorewall_stats.pl admin1`
MaxBytes[admin1]:12500000
Title[admin1]:Trafico del admin1
PageTop[admin1]:<H1>Trafico del admin1</H1>

# admin2
Target[admin2]:`perl /etc/shorewall/shorewall_stats.pl admin2`
MaxBytes[admin2]:12500000
Title[admin2]:Trafico del admin2
PageTop[admin2]:<H1>Trafico del admin2</H1>

Copiamos el mrtg.cfg editado para la carpeta ETC.
root@firewall:~# cp /etc/shorewall/shorewall_stats/mrtg.cfg /etc/

Creamos la carpeta mrtg en /var/www/ y le cambiamos el user a dicha carpeta, por el user www-data(apache2)
-----------------------------------------------------------
root@firewall:~# mkdir /var/www/mrtg
root@firewall:~# chown -R www-data /var/www/mrtg

Después de tener la carpeta mrtg en /var/www con los permisos para el apache2, reiniciamos el shorewall.
shorewall restart
Debemos ejecutar MRTG
root@firewall:~# mrtg
Si sale un error como este debemos, ejecutar este comando env LANG=C /usr/bin/mrtg

-----------------------------------------------------------------------
ERROR: Mrtg will most likely not work properly when the environment
variable LANG is set to UTF-8. Please run mrtg in an environment
where this is not the case. Try the following command to start:

env LANG=C /usr/bin/mrtg
-----------------------------------------------------------------------
root@firewall:~# env LANG=C /usr/bin/mrtg

Ya se pueden ver los ficheros generados .rrd en la carpeta /var/www/mrtg/
root@firewall:~#ls -l /var/www/mrtg/
-----------------------------------------------------------
srvproxy.rdd
srvdns.rdd
srvjabber.rdd
srvcorreo.rdd
srvftp.rdd
srvweb.rdd
jefe1.rdd
admin1.rdd
admin2.rdd

Y asimos irán apareciendo gradualmente los .png del Día.
-----------------------------------------------------------
srvproxy-day.png
srvdns-day.png
srvjabber-day.png
srvcorreo-day.png
srvftp-day.png
srvweb-day.png
jefe1-day.png
admin1-day.png
admin2-day.png

Nota: Para que aparezcan los .png de la Semana, Mes y Año
Se debe acceder a la URL http://localhost/cgi-bin/mrtg-rrd.cgi/ o http://ip-servidor/cgi-bin/mrtg-rrd.cgi/ y estos irán apareciendo, cada vez que accedas a dichos gráficos del Día.
-----------------------------------------------------------
srvproxy-week.png
srvproxy-month.png
srvproxy-year.png

Como:
Ver los logs del mrtg
-----------------------------------------------------------
tailf /var/log/mrtg/mrtg.log

Reiniciar mrtg
-----------------------------------------------------------
env LANG=C /usr/bin/mrtg

Hacer debuguear el mrtg
-----------------------------------------------------------
env LANG=C /usr/bin/mrtg /etc/mrtg.cfg --logging /var/log/mrtg/mrtg.log --debug=snpo,cfg

Asegúrese que la librería mrtg-rrd.cgi y fichero /etc/mrtg.cfg tiene los permisos siguientes.

Nota: Esta librería mrtg-rrd.cgi se encuentra dentro del paquete ya instalado MRTG-RRD
-----------------------------------------------------------
chown www-data.www-data /usr/lib/cgi-bin/mrtg-rrd.cgi
chmod 755 /usr/lib/cgi-bin/mrtg-rrd.cgi
chmod 755 /etc/mrtg.cfg

-rwxr-xr-x 1 www-data www-data 28304 Apr 21 2009/usr/lib/cgi-bin/mrtg-rrd.cgi
-rwxr-xr-x 1 root root 3004 Apr 21 2009/etc/mrtg.cfg
Crear un virtual host, habilitar virtual host y reiniciar apache2
-----------------------------------------------------------
root@firewall:~#nano /etc/apache2/sites-available/traficointernet.hosting.org
root@firewall:~#a2ensite traficointernet.hosting.org
root@firewall:~#invoke-rc.d apache2 restart

Así debe verse nuestro virtual host, si es que quieres tener uno.
------------------------------------------------------------------------------------------------------------------
<VirtualHost*:80>  
ServerName trafico.hosting.org
ServerAdmin serviciotecnicos@hosting.org  
DocumentRoot /var/www/mrtg  
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/  
AddHandler cgi-script .cgi  
AllowOverride None  
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch  
Order allow,deny  
Allow from all  
ErrorLog /var/log/apache2/trafico.hosting.org-error.log  
LogLevel warn  
CustomLog /var/log/apache2/trafico.hosting.org-access.log combined  
ServerSignature On
</VirtualHost>
------------------------------------------------------------------------------------------------------------------

"Las obras de conocimiento deben ser libres, no hay excusas para que no sea así".
Richard Stallman – Fundador del software libre.


No hay comentarios:

Publicar un comentario