You are on page 1of 42

MONTAR

ROUTER LINUX
SERVIDOR
PROXY, BALANCEO, MONITORIZACIÓN, QOS Y FIREWALL

lunes, 05 de febrero de 2007


mod. viernes, 27 de abril de 2007
v.1.2
INDÍCE

Instalación Debian (básica) ...............................................................................................1


Antes de Empezar a Instalar paquetes ...............................................................................1
Descargar kernel ........................................................................................................... 2
Desempaquetar kernel .................................................................................................. 2
Configurar el kernel...................................................................................................... 2
Compilar kernel ............................................................................................................ 3
Instalar el kernel ........................................................................................................... 3
Configuración Routers ADSL ...................................................................................... 4
Apendice....................................................................................................................... 4
Configuración del Proxy-Server........................................................................................5
Topologia...................................................................................................................... 7
Configuración Balanceo ....................................................................................................8
Failover......................................................................................................................... 9
Configuración Monitorización (SNMP y MRTG) ..........................................................11
SNMP ......................................................................................................................... 12
MRTG......................................................................................................................... 13
Squid................................................................................................................................15
Masquerade y Redireccionamiento .................................................................................17
Quality of Service............................................................................................................18
Firewall............................................................................................................................19
Antivirus y Antispam ......................................................................................................21
Modificar Fecha y Hora del Servidor para la Monitorización y otros casos...................32
Bibliografía y otras páginas de interés ............................................................................33
Iptables ................................................................................................................... 33
Crontab ................................................................................................................... 33
Scripts ..................................................................................................................... 33
MRTG..................................................................................................................... 33
SNMP ..................................................................................................................... 33
Apache2 .................................................................................................................. 33
QOS ........................................................................................................................ 33
Squid....................................................................................................................... 33
Balanceo ................................................................................................................. 34
Masquerading y NAT ............................................................................................. 34
Anexo I – Scripts Creados y su Path ...............................................................................35
1

Para empezar ha desarrollar esta tarea de configurar un dispositivo que permita hacer
Balanceo, Servidor Proxy, Monitorización, Firewall, Quality of Service y Failover, se
ha decantando por un sistema Linux (PC), ya que a parte de realizar cada una de las
tareas que se indican anteriormente, nos permite realizar otras de nuevas, con la
finalidad de no necesitar varios dispositivos hardware para cada una de las funciones a
desarrollar (router, firewall, servidor Proxy, etc.)

El sistema Linux escogido ha sido Debian, ya que es un sistema estable, ampliable, y


con muchas fuentes de información por Internet, tanto paquetes como documentos.

Instalación Debian (básica)


Primero de todo nos hemos descargado de la página oficial de Debian
http://www.us.debian.org/CD/ el primer CD de la versión 3.1 (estable). Una vez
grabada la imagen en un CD hemos cogido la máquina que vamos a utilizar como
servidor-proxy (con varias tarjetas ethernet) y hemos instalado Debian en ella. Después
de instalar el sistema operativo tendremos que actualizar los paquetes y mirar si hay
versiones más recientes a través de la comanda:

#apt-get update

#apt-get upgrade

Si queremos volver a configurar alguna opción (como las fuentes de descarga de


paquetes) en la shell, deberemos introducir el siguiente comando:

#base-config

E iremos a la opción de configuración de Debian.

Antes de Empezar a Instalar paquetes


Como este apartado indica, antes de proceder a la instalación y configuración de
paquetes como iproute, iptraf, tcpdump, mrtg, apache2, squid, etc. Debemos mirar
que versión del kernel de Linux tenemos instalada. Para saber la versión del kernel se
utiliza el siguiente comando:

#uname -r

Y la shell nos mostrará la versión del kernel. En nuestro caso, la versión inicial era la
2.4.27-2-386 (versión antigua). Con que para poder desarrollar las tareas encomendadas,
especialmente para el balanceo y el QoS entre otras cosas, se tuvo que descargar un
nuevo kernel y configurarlo.
2

Descargar kernel
Para descargar el nuevo kernel en la maquina Linux, debemos ir a la página
http://www.kernel.org/ y allí copiar el enlace de descarga, para a continuación
descargarlo. Para descargarlo en Debian, se utiliza el siguiente comando:

#wget [enlace]

A día de hoy está disponible la versión 2.6.19.1 (versión estable).

Desempaquetar kernel
Una vez descargado el nuevo kernel (normalmente esta comprimido en alguno de estos
formatos: .tar.bz2 o .tar.gz) se va a descomprimir en la carpeta /usr/src (donde está toda
la información sobre los kernels). Para descomprimirlo utilizamos los comandos:

• Para .tar.gz :
#tar xvzf linux-2.6.15.tar.gz

• Para .tar.bz2:
#tar xvjf linux-2.6.15.tar.bz2

Una vez descomprimido, entramos en la carpeta que se ha creado dentro de /usr/src con
nombre al futuro nuevo kernel

/usr/src#cd linux-2.6.19.1

Y se limpia la configuración que tenga (la primera vez que se instala el kernel no hace
falta)

/usr/src/linux-2.6.19.1#make mrproper

Configurar el kernel
Este procedimiento, es el más importante hasta ahora, ya que es en este momento
cuando vamos a configurar el kernel para que se puedan cumplir los objetivos iniciales
(Balanceo. QoS, Firewall, etc.)

Para configurar el kernel, hay varias maneras de hacerlo:

- A partir de la shell (muy pesado)


- A partir de una pequeña interfaz gráfica
3

Vamos a explicar la configuración a partir de la shell ya que es la forma como se ha


hecho, aunque mirando este enlace, podemos configurarlo a partir de la forma gráfica:
http://www.howtoforge.com/kernel_compilation_debian.

Para configurar el kernel introducimos el comando:

/usr/src/linux-2.6.19.1#make config

Y a continuación nos irán apareciendo módulos los cuales queremos instalar o no,
dependiendo de nuestros objetivos.

SE RECOMIENDA INSTALAR LOS MÓDULOS: - IP avanced router


- Networking Options
- NetFilter configuration

Todo lo que sea IP equal cost, SFQ, HTB, balancing, etc.

Compilar kernel
Una vez configurado el kernel, hay que compilarlo, para proceder a la compilación,
primeramente es necesario tener instalado el paquete “kernel-package”.

/usr/src/linux-2.6.19.1#aptitude install kernel-package

Para proceder a la compilación del kernel, tenemos que estar en el directorio donde se
encuentran el código fuente del kernel y se ejecuta:

/usr/src/linux-2.6.19.1#make-kpkg clean

/usr/src/linux-2.6.19.1#make-kpkg –initrd kernel_image kernel_headers

Con la opción “--initrd” crearemos una imagen de la configuración y compilación del


kernel. En este caso concreto tendremos dos paquetes con extensión .deb (kernel y
kernel-headers).

Instalar el kernel
Cuando la compilación ha terminado, como se ha dicho anteriormente, veremos dos
paquetes (en el directorio superior), y se procederá a la instalación de dichos paquetes
estando en el directorio superior.

#dpkg –i [nombre_kernel.deb]

#dpkg –i [nombre_kernel-headers.deb]
4

Configuración Routers ADSL


Para que des de la LAN se pueda llegar a Internet, i viceversa, en los routers ADSL se
han tenido que introducir unas rutas estáticas en cada uno de ellos para decirles que para
ir a la ruta 192.168.1.0 se envía a través de 192.168.3.2 y 192.168.4.2.

Apendice
Una vez tengamos los paquetes .deb si necesitamos instalar otros Linux con la misma
configuración del kernel, solamente pasaremos las paquetes a la máquina destino e
instalamos el nuevo kernel.

#scp [path_origen] [IP_destino]:[Path_destino]

Fuentes origen de información:

http://www.esdebian.org/article.php?story=20060112225540316
http://www.howtoforge.com/kernel_compilation_debian
5

Configuración del Proxy-Server


Una vez configurado, compilado, instalado y reiniciado (reboot) el nuevo kernel, se
produce a la verificación que se ha instalado el nuevo kernel de forma correcta mediante
la instrucción descrita inicialmente (uname –r) y en principio debería aparecer la
nueva versión. Si es así, se procede a los siguientes pasos, si no entonces, habría que
revisar lo hecho, ya que en los enlaces arriba detallados funciona.

Cuando tengamos instalado el kernel, seguidamente, instalamos los paquetes: iproute,


vim y los que se crean convenientes:

#apt-get install iproute

Y configuramos las interfaces:

#ifconfig lo inet up 127.0.0.1 netmask 255.0.0.0


#ifconfig eth0 inet up 192.168.1.36 netmask 255.255.255.0 broadcast 192.168.1.255
#ifconfig eth1 inet up 192.168.3.2 netmask 255.255.255.0 broadcast 192.168.3.255
#ifconfig eth2 inet up 192.168.4.2 netmask 255.255.255.0 broadcast 192.168.4.255

Las rutas del router, pero sin poner las de salida a internet:

#ip route flush default


#ip route add proto static 192.168.1.0/24 dev eth0 src 192.168.1.36
#ip route add proto static 192.168.3.0/24 dev eth1 src 192.168.3.2
#ip route add proto static 192.168.4.0/24 dev eth2 src 192.168.4.2

Conexión a Madrid:

#ip route add proto static 192.168.2.0/24 via 192.168.1.1

Todo el tema de configuración, de la red, se ha hecho un pequeño script para que cada
vez que se reinicie, no se tenga que introducir todo otra vez. Este archivo lo
encontraremos con el nombre Conf-interifices.sh. Para que este archivo se cargue cada
vez que se reinicie el servidor, tenemos que enlazarlo con el fichero /etc/init.d/rc. La
manera para poder enlazarlo es la siguiente:

1- Una vez creado el archivo (Conf-interficies.sh) hay que cambiar los permisos
de ejecución.

#chmod 744 Conf-interficies.sh


6

2- Hay que mirar el fichero /etc/inittab, la línea que pone default (al principio del
archivo) ya que nos indica que línea se ejecuta (hay 7 líneas, des de la 0 hasta la
6).

#vim /etc/inittab

3- Enlazamos el fichero para que se cargue, si la línea por defecto que hemos visto
anteriormente es la 2, entonces esta, tendrá que estar dentro de start

#update-rc.d [Nombre_fichero] start 20 2 3 4 5 . stop 0 1 6 .

Para verificar el funcionamiento del script hay que mirar los comandos:

#ifconfig

#ip route

Otra opción que hay que configurar en el servirdor-proxy para que haga las funciones de
router es lo siguiente:

#echo "1" > /proc/sys/net/ipv4/ip_forward

Esto permite que el router haga el reenvío de paquetes a través de sus interfaces, para
que cada vez se ejecute esta opción de “ip_forward” hemos añadido esta línea de
comando en nuestro script (Conf-interficies.sh) inicial de ejecución.
7

Topologia

Figura 1- Dibujo Topologia Actual de la red

Fuentes origen de información:

http://www.redes-linux.com/rutas.php
http://www.escomposlinux.org/fserrano/index_164.html
8

Configuración Balanceo
Para configurar el balanceo, una vez configurado el kernel, hay que hacer lo siguiente:

1- Crear un numero de tablas equivalente al número de interfaces de salida para el


balanceo (si tenemos 2 salidas → 2 tablas, 3 salidas → 3 tablas, etc.)

#echo 230 adsl3 >> /etc/iproute2/rt_tables


#echo 240 adsl4 >> /etc/iproute2/rt_tables

Para ver que las tablas han sido creadas:


#more /etc/iproute2/rt_tables

2- Asignar una ruta para cada tabla

#ip route add 192.168.3.0 dev eth1 src 192.168.3.2 table adsl3
#ip route add default via 192.168.3.1 table adsl3

#ip route add 192.168.4.0 dev eth2 src 192.168.4.2 table adsl4
#ip route add default via 192.168.4.1 table adsl4

Para ver el contenido de las tablas:

#ip route show table [Nombre_tabla]

3- Crear una ip rule para cada tabla

#ip rule add from 192.168.3.2 table adsl3


#ip rule add from 192.168.4.2 table adsl4

Para ver el contenido de las ip rules:

#ip rule

Finalmente configuramos las rutas de salida para que el router haga el balanceo

#ip route add default equalize scope global nexthop via 192.168.3.1 dev eth1
weight 1 nexthop via 192.168.4.1 dev eth2 weight 1
9

Failover
Cuando el balanceo este configurado, si por casualidad 1 de las redes cae, habría un
problema, ya que algunos paquetes se enviarían por la ruta “muerta” y se perderían.
Para evitar esto, se ha creado un script que mira como están las rutas.
Este script llamado EstadoRutas.sh hace 10 ping a cada ruta y si un tanto por cierto de
estos ping llegan, entonces se considera que la ruta esta viva, si no, muerta.

#!/bin/sh

#EstadoLAN3=0 # 0-->no ha caido la interfaz


#EstadoLAN4=0 # 0-->no ha caido la interfaz

Red3=192.168.3.1
Red4=192.168.4.1

cont3=0
cont4=0
val3=0
val4=0
valEst3=`cat /usr/local/bin/EstadoLAN3.fl`
valEst4=`cat /usr/local/bin/EstadoLAN4.fl`
val3=$[$valEst3]
val4=$[$valEst4]

if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi


if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi

if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi


if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi

if [ $cont3 -ge 7 ]; then


if [ $cont4 -ge 7 ]; then
ip route chg default equalize scope global nexthop via 192.168.3.1 dev eth1 weight 1 nexthop via 192.168.4.1 dev eth2 weight 1
echo 0 > /usr/local/bin/EstadoLAN3.fl
echo 0 > /usr/local/bin/EstadoLAN4.fl
echo R3 y R4 UP
else
ip route chg default proto static nexthop via 192.168.3.1
echo 1 > /usr/local/bin/EstadoLAN4.fl
echo 0 > /usr/local/bin/EstadoLAN3.fl
echo R3 UP y R4 DOWN
fi
else
if [ $cont4 -ge 7 ]; then
ip route chg default proto static nexthop via 192.168.4.1
echo 0 > /usr/local/bin/EstadoLAN4.fl
echo 1 > /usr/local/bin/EstadoLAN3.fl
echo R3 DOWN y R4 UP
else
echo NO HAY INTERNET
echo 1 > /usr/local/bin/EstadoLAN3.fl
echo 1 > /usr/local/bin/EstadoLAN4.fl
echo R3 y R4 DOWN
fi
fi

Para que este script se ejecute de forma automática cada X período de tiempo, tenemos
que programar el crontab (la herramienta encargada de ejecutar cosas cada cierto
10

tiempo en Linux). Para poder programar el crontab hay que escribir lo siguiente en la
shell:

#crontab -e

Seguidamente nos aparecerá una pantalla donde tendremos que escribir para poder
programarlo y escribimos lo siguiente:

* * * * * /usr/local/bin/EstadoRutas.sh
* * * * * [Path_fichero]

Con esto, hemos dicho al crontab que ejecute cada minuto el fichero EstadoRuras.sh.

Antes de poner en marcha crontab, se recomienda poner a hora el sistema operativo,


para que luego no haya problemas de sincronización. Para poner la hora y fecha del PC
se utiliza el comando:

#date --set “2007-02-02 11:45”

Y a continuación hay que poner en hora el reloj de la bios

#hwclock --set --date=”2007-02-02 11:45”

Fuentes origen de información:

file:///C:/Juan/balancerar%20cargas%20con%20Debian.php.htm
http://www.linuca.org/body.phtml?nIdNoticia=15
11

Configuración Monitorización (SNMP y MRTG)


Una vez configurado y sincronizado el reloj del servidor, se puede empezar a
monitorizar, ya que así no habrá ningún problema de horarios.
Para la monitorización del ancho de banda que se usa en cada interfaz de salida, se ha
decidido por utilizar un software de libre distribución llamado MRTG muy utilizado en
sistemas Linux. Uno de los requisitos para poder ver las estadísticas es la necesidad de
tener un servidor web, como por ejemplo Apache, con lo cual, antes de proceder a la
monitorización, se ha instalado apache y se ha configurado.
Para instalar Apache se ha apoyado en el sistema apt-get como en otros casos:

#apt-get install apache2

Una vez descargado el software ubicado en /etc/apache2/ se ha procedido a la


configuración de este, mediante el fichero apache2.conf también ubicado dentro del
path anterior.

ServerRoot "/var/www/mrtg/" Ubicacion archivos a visualizar


#ServerRoot "/etc/apache2"
Servername "proxy-server"

- Se han quitado los comentarios


AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Una vez modificado el archivo apache2.conf se ejecuta apache por primera vez:

#apache2ctl start

Y finalmente se cambia la pagina de inicio en /etc/apache2/sites-available/default

#vim /etc/apache2/sites-available/default

Y se cambia el path de la página de inicio

RedirectMatch ^/$ /mrtg/


#RedirectMatch ^/$ /apache2-default/
12

SNMP
Para la monitorización es necesario instalar el protocolo SNMP para el intercambio de
información de la red. Para ello descargamos:

#apt-get install snmp snmpd

Y vamos a la ubicación donde se encuentra instalado el protocolo, para la configuración


del archivo /etc/snmp/snmpd.conf y añadimos lo siguiente:

# First, map the community name (COMMUNITY) into a security name


# (local and mynetwork, depending on where the request is coming
# from):

# sec.name source community


com2sec local 127.0.0.1/32 alg
com2sec miredlocal 192.168.1.0/24 alg

rocommunity alg

####
# Second, map the security names into group names:

# sec.model sec.name
#Grupo local de lectura y escritura
group MyRWGroup v1 local
group MyRWGroup v2c local
group MyRWGroup usm local

#Grupo local de solo lectura


group MyROGroup v1 miredlocal
group MyROGroup v2c miredlocal
group MyROGroup usm miredlocal

####
# Third, create a view for us to let the groups have rights to:

# incl/excl subtree mask


view all included .1 80
view system included .iso.org.dod.internet.mgmt.mib-2.system

####
# Finally, grant the 2 groups access to the 1 view with different
# write permissions:

# context sec.model sec.level match read write notif


access MyROGroup "" any noauth exact all none none
access MyRWGroup "" any noauth exact all all all

# -----------------------------------------------------------------------------

Una vez configurado snmp, se tiene que ejecutar o iniciar con el siguiente comando:

#/etc/init.d/snmpd start

#/etc/init.d/snmpd reload
13

Para que el protocolo snmp nos genere el archivo de monitorización de las interfaces
que tiene el servidor hay que introducir el siguiente comando y redirigirlo al archivo
mrtg.cfg que más adelante se explica.

.
#/cfgmaker [Nombre_community]@[IP_máquina] > /etc/mrtg.cfg

#cfgmaker alg@192.168.1.36 > /etc/mrtg.cfg

MRTG
Finalmente vamos a instalar el software que nos permitirá visualizar las estadísticas:

#apt-get install mrtg mrtg-contrib mrtgutils

Pero antes hay que configurar el fichero /etc/mrtg.cfg, en este caso solamente habrá que
poner lo siguiente, ya que todo lo demás lo genera el protocolo snmp de forma
automática.

# to get bits instead of bytes and graphs growing to the right


Language: spanish
WriteExpires: Yes
Options[_]: growright, bits

Por último y para que las estadísticas sean visibles, tenemos que ir a /var/www/martg y
escribir:

/var/www/martg #indexmaker /etc/mrtg.cfg > index.html

Para indexar todas las imágenes y archivos de información en un solo archivo .html.
Finalmente poniendo la IP del servidor en el navegador web (Firefox, Explorer o
Netscape) visualizaremos lo siguiente:

Fuentes origen de información:

http://www.neozero.net/linux/manuales/mrtg/
http://oss.oetiker.ch/mrtg/index.en.html
http://www.linuxparatodos.net/geeklog/article.php?story=1375&query=MRTG
http://www.diariolinux.com/tiki-read_article.php?articleId=6
14

Figura 2 - Captura Trafico en las interfaces del proxy 36


15

Squid
Para montar el servidor Proxy-cache, se ha decantado por el software libre Squid y que
podemos encontrar en la página http://www.squid-cache.org/.
Para su instalación hemos usado la utilidad de Debian apt-get:

#apt-get install squid

Una vez instalado, deberemos ir al archivo de configuración de Squid ubicado en


/etc/squid/squid.conf y añadimos (“descomentamos”) las siguientes opciones que se
encuentran a lo largo del archivo:
http_port 3128
icp_port 3130
cache_dir ufs /var/spool/squid 100 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
emulate_httpd_log on
client_netmask 255.255.255.0

acl all src 0.0.0.0/0.0.0.0


acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl lared src 192.168.1.0/255.255.255.0

#http_access allow all


# http_access deny all
#
#Recommended minimum configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Only allow purge requests from localhost
http_access allow purge localhost
#http_access deny purge
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports

#http_access allow our_networks


http_access allow localhost
http_access allow lared
# And finally deny all other access to this proxy
http_access deny all

http_reply_access allow all

icp_access allow all

Una vez configurado Squid, hay que configurarlo también de forma transparente, es
decir que cualquier persona que se conecte a la red y quiera navegar no tenga que
configurar su navegador habitual. Para hacer Squid transparente hay que poner
(descomentar) las siguientes líneas que se encuentran en el archivo de configuración de
Squid.

offline_mode off 80
httpd_accel_port
httpd_accel_host virtual
httpd_accel_single_host off
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
offline_mode off
16

Después de configurar el archivo squid.conf para que el Proxy sea transparente,


deberemos redireccionar todas las peticiones que se hagan al puerto 80 (http) hacia el
puerto 3128, que es el puerto por el cual trabaja Squid de la forma siguiente.

#iptables -t nat -A PREROUTING -p tcp --dport 80 –j REDIRECT --to-port 3128

Por último deberemos activar squid para que empiece a funcionar

#squid –k reconfigure
#/etc/init.d/squid start

Para ver que Squid está funcionando de forma correcta, deberemos ir al path
/var/log/squid/ y allí visualizar el contenido de los ficheros access.log y store.log.

Fuentes origen de información:

http://www.gfc.edu.co/manuales/configuracionProxy/
http://www2.fices.unsl.edu.ar/~gulfi/squid.htm
http://bulma.net/body.phtml?nIdNoticia=441
http://es.tldp.org/Tutoriales/doc-servir-web-escuela/doc-servir-web-escuela-
html/x518.html
17

Masquerade y Redireccionamiento
Para hacer peticiones a una máquina de dentro de nuestra red des de fuera (Internet),
deberemos hacer el enmascaramiento en nuestro Servidor y además redireccionar las
peticiones hacia nuestra LAN.
Para redireccionar una petición de Terminal Server hacia una máquina se tiene que
escribir lo siguiente:

#iptables -t nat -A PREROUTING –i eth1 –p tcp –dport [num_puerto] –j DNAT –


to [IP_máquina]:[num_puerto]

#iptables -t nat -A PREROUTING –i eth1 –p tcp --dport 3389 –j DNAT--to


192.168.1.169:3389

Para enmascarar y que las peticiones de Terminal Server o cualquier otra cosa lleguen a
dentro de la LAN, habrá que en enmascarar:

#iptables -t nat -A POSTROUTING –o eth0 –j MASQUERADE

#iptables -t nat -A POSTROUTING –o eth1 –j MASQUERADE

Y finalmente configurar el router ADSL para que redireccione las peticiones al inicio.

Para borrar una entrada en iptables se hace lo siguiente:

#iptables -t nat -D [chain] [rule (1-N)]


#iptables -t nat -D PREROUTING 1

ATENCIÓN!:

En nuestro caso, una vez configurado el Proxy de la forma que se indica, para
hacer las peticiones hay que indicar la otra ruta de entrada (el otro router ADSL)

Fuentes origen de información:

http://www.elrincondelprogramador.com/default.asp?pag=articulos%2Fleer.asp&id=40
http://www.osmosislatina.com/linux/nat.jsp
http://bulma.net/body.phtml?nIdNoticia=1615&nIdPage=2
http://130.206.130.95/body.phtml?nIdNoticia=2145
http://bulma.net/body.phtml?nIdNoticia=1522
18

Quality of Service

http://bulma.net/body.phtml?nIdNoticia=1727
http://bulma.net/body.phtml?nIdNoticia=2084
http://usuarios.lycos.es/ccd_illusions/QoS-3.pdf
http://linuca.org/body.phtml?nIdNoticia=201
http://es.tldp.org/Presentaciones/200103hispalinux/eric/html/banda.html
http://lartc.org/howto/lartc.qdisc.filters.html
http://www.monografias.com/trabajos17/ancho-de-banda/ancho-de-banda.shtml
19

Firewall
Para empezar con el tema de configurar nuestro servidor como Firewall, primero de
todo hay que tener una serie de conocimientos básicos sobre iptables ya esta aplicación
es la que se usará para implantar el Firewall.

Sobre iptables hay que decir que existen 3 tablas, las cuales son: tabla iptables, tabla
NAT i tabla mangle. En la primera aparece todo lo relacionado con Firewall, ACL, etc.
En la segunda aparece todo lo relacionado con el NAT, masquerade, etc. Finalmente en
la última tabla aparece todo sobre el marcaje de paquetes.

#iptables -L
#iptables -t nat -L
#iptables -t mangle -L

Además de tener estos conocimientos sobre iptables también se tendrá en cuenta una
serie de factores i/o políticas que se tendrán que llevar a cabo para implantar el Firewall
en nuestro servidor. Estas políticas son muy sencillas y fáciles de entender y son:
- Si nuestro Firewall va a ACEPTAR (ACCEPT) todo por defecto y luego
aplicamos las listas para descartar.
- Si nuestro Firewall va a DESCARTAR (DROP) todo por defecto y luego
aplicamos las listas para aceptar.

Decantarse por una política u otra es cosa que depende del Administrador (por defecto
Linux tiene configurada la primera, es decir se acepta todo y luego se van aplicando las
listas).

Para poder cambiar la política (pasar de aceptar a denegar), se utiliza el siguiente


comando:

#iptables –P INPUT DROP

Para volver a la política de aceptar seria de la forma inversa:


#iptables –P INPUT ACCEPT

Una vez seleccionada la política que se va a aplicar, entonces se empezará ha aplicar las
“listas” que se van ha aplicar. Un ejemplo sería el siguiente:
20

Si estamos con una política de aceptar y queremos que el host 192.168.1.225 no pueda
ver a la máquina 192.168.1.36, mediante el protocolo icmp introduciremos el siguiente
comando en nuestro firewall:

#iptables --append INPUT --protocol icmp --source 192.168.1.225 --jump DROP


#iptables -A INPUT –p icmp –s 192.168.1.225 –j DROP

Para denegar cualquier petición del host 192.168.1.225 (por ej. El puerto 21 – FTP) se
aplica lo siguiente:

#iptables -A INPUT –p tcp –s 192.168.1.225 --dport 21 –j DROP

Otro ejemplo seria denegar las peticiones ssh del host 192.168.1.169

#iptables -A INPUT –p tcp –s 192.168.1.169 --dport 22 –j DROP

En el caso que tuviéramos aplicada la política de denegar todo, entonces lo que


tendríamos que hacer es ir aceptando peticiones. Para el caso de aceptar las peticiones
de la máquina 169, seria de la siguiente forma:

#iptables -A INPUT –p tcp –s 192.168.1.169 --dport 22 –j ACCEPT

ATENCIÓN!:

Este comando hay que introducirlo antes de cambiar la política a DROP, ya que si
no todo se descartará, debido a que no se acepta nada (conexiones remotas, pings,
etc.).

http://www.pello.info/filez/firewall/iptables.html

http://intranet.df.gob.mx/dpi/encuentro/presentaciones/ladrillo.pdf
http://www.elrincondelprogramador.com/default.asp?pag=articulos%2Fleer.asp&id=14
http://bulma.net/body.phtml?nIdNoticia=861
http://www.todo-linux.com/modules.php?name=News&file=article&sid=526
21

Antivirus y Antispam
A la hora de instalar un antivirus en nuestro proxy, para que analice todo tipo de
archivos que se descargan de internet, mire si las paginas web, las cuales visitamos,
correo, etc. Nos hemos decantando por el antivirus Clamav ya que es un antivirus
bastante bueno y al mismo momento freeware.
Para proceder a su instalación en la ultima versión hay dos manera de hacerlo, una es
mediante la página web principal http://www.clamav.net/ y la otra alternativa (la que
hemos utilizado) es descargarla mediante el gestor que tiene Debian apt. Para ello se ha
tenido que añadir una fuente de descarga al archivo /etc/apt/sources.list

deb http://ftp2.de.debian.org/debian-volatile sarge/volatile main

Una vez añadida la fuente actualizamos apt-get

#apt-get update
#apt-get upgrade

I finalmente instalamos clamav con todos los paquetes necesarios


#apt-get install clamav clamav-base clamav-daemon clamav-freshclam libclamav1
libcurl3 libgmp3 arj unzoo

De todos estos paquetes instalados con clamav hay 2 los cuales tiene relativa
importancia en comparación con los demás. Estos son: clamav que es el antivirus en si,
y clamav-freshclam que es el demonio encargado de las actualizaciones de nuestro
antivirus. Una vez instalados y configurados, hay que fijarse (durante la instalación) si
ha habido algún error parecido a este:

Configurando clamav-freshclam (0.90.1-0volatile1) ...


* Starting ClamAV virus database updater freshclam
ERROR: Parse error at line 20: Option NotifyClamd requires string argument.

El cual nos indica que la opción de notificar de freshclam no esta completada. Para ello
tenemos que ir al archivo de configuración de freshclam (freshclam.conf) ubicado en
/etc/clamav/freshclam.conf y añadir en este caso un string yes

# Automatically created by the clamav-freshclam postinst


# Comments will get lost when you reconfigure the clamav-freshclam package

DatabaseOwner clamav
UpdateLogFile /var/log/clamav/freshclam.log
LogVerbose false
LogSyslog false
LogFacility LOG_LOCAL6
LogFileMaxSize 0
Foreground false
Debug false
MaxAttempts 5
22

DatabaseDirectory /var/lib/clamav/
DNSDatabaseInfo current.cvd.clamav.net
AllowSupplementaryGroups false
PidFile /var/run/clamav/freshclam.pid
ConnectTimeout 30
ReceiveTimeout 30
ScriptedUpdates yes
NotifyClamd yes
# Check for new database 24 times a day
Checks 24
DatabaseMirror db.local.clamav.net
DatabaseMirror database.clamav.net

Una vez hecho esto, tenemos que reiniciar freshclam con la opción:

#/etc/init.d/clamav-freshclam restart

I procedemos entonces a la actualización de la base de datos, para ello introducimos el


comando:

#freshclam

Para hacer un seguimiento de freshclam y clamav hay unos logs de estos que nos darán
información sobretodo de las actualizaciones de freshclam. Estos logs se encuentran en
/var/log/clamav/.

Para hacer una prueba de que el antivirus clamav funciona correctamente crearemos un
archivo con el siguiente contenido
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Y ejecutaremos nuestro antivirus

#clamscan

Y nos debe aparecer un resultado como el siguiente


23

Para redireccionar nuestro antivirus a squid (es decir analizará las páginas que
visitemos para saber si contienen virus o no) tenemos que hacer lo siguiente, una vez
que clamav este instalado:

- Primero procederemos a la instalación de python-clamav_0.3.0-1 si tenemos una


versión anterior de libc6_2.3.6-6. Para saber los paquetes necesarios para instalar
python-clamav en la página http://packages.debian.org i
http://packages.debian.org/testing lo encontraremos. Para saber la versión de nuestro
libc6 que tenemos instalado, utilizando la siguiente comanda lo sabremos:

#dpkg –l libc6

Para descomprimir el archivo que nos hemos descargado si esta en .deb, deberemos
utilizar el comando:

#dpkg -i python-clamav_0.3.0-1_i386.deb

Seguidamente instalaremos Scavr que es el encargado de direccionar las peticiones


hechas con squid a través del antivirus. Nos descargamos la ultima versión de Scavr de
la página del autor http://www.jackal-net.at/tiki-list_file_gallery.php?galleryId=3 i lo
descomprimimos, al estar en formato .tar.gz, para descomprimir el archivo utilizaremos:

#tar –xvzf archive.tar.gz


24

Y seguidamente nos descomprimirá el archivo y hacemos lo siguiente:

#cp SquidClamAV_Redirector.py /usr/local/bin


#chmod +x /usr/local/bin/SquidClamAV_Redirector.py
#cp SquidClamAV_Redirector.conf /etc/squid/
#chown proxy:proxy /etc/squid/SquidClamAV_Redirector.conf

A continuación creamos el archivo infeccion.php en /var/www/ con el siguiente


contenido:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"


"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>!!! Pagina INFECTADA ¡¡¡</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.Estilo1 {font-family: Verdana, Arial, Helvetica, sans-serif}
.Estilo2 {
color: #FF0000;
font-weight: bold;
}
.Estilo3 {color: #FF0000}
-->
</style>
</head>

<body>
<div align="center">
<p><img src="http://virus.jackal-net.at/clam.png" width="200" height="200"><br>
<br>
<span class="Estilo2">¡¡¡ RESTRINGIDO !!!</span></span></p>
<p class="Estilo1">Esta URL<span class="Estilo3"> <?php
if ($_GET) { print $_GET['url']; } ?>
</span>esta infectada con este virus:<span class="Estilo3"> <?php
if ($_GET) { print $_GET['virus']; } ?>
</span></p>
<p class="Estilo1">Ponte en contacto conmigo: <a
href="mailto:administrador@tusitio.com">Administrador</a> </p>
</div>
</body>
</html>

Finalmente le tenemos que decir a squid que redireccione las páginas al antivirus, para
ello habrá que modificar el archivo squid.conf que se encuentra en /etc/squid/. A este,
habrá que añadirle las siguientes líneas justo debajo de acl localhost
25

redirect_program /usr/local/bin/SquidClamAV_Redirector.py -c
/etc/squid/SquidClamAV_Redirector.conf
redirect_children 5
redirector_access deny localhost
http_reply_access allow all

Y reiniciamos squid

#/etc/init.d/squid restart

Por ultimo modificaremos el archivo de configuración de logs (syslog.conf) ubicado en


/etc/syslog.conf para que nos genere un log de Scavr, para ello añadiremos la siguiente
línea justo debajo de la instrucción mail,news.none -/var/log/messages.

local6.=info /var/log/squid/SquidClamAV_redirector.log

Y reiniciamos el servició para la creación de logs

#/etc/init.d/sysklogd restart

Para comprobar el funcionamiento si accedemos a la siguiente pagina web,


http://heanet.dl.sourceforge.net/sourceforge/bo2k/bo2k_1_0.zip clamav nos mostrara
un mensaje de alerta, parecido a este

Y en el archivo log que se ha creado en /var/log/squid/SquidClamAV_redirector.log


veremos como ha sido el análisis a las páginas que se han visitado des de el Proxy.
26

Para el uso del antispam se han utilizado un software P3scan para descargar el correo,
ya que en nuestra topologia inicial no tenemos ningun servidor de correo interno, si no
que este servicio lo gestiona una empresa externa, con lo cual. Cuando nos bajemos el
correo mediante Outlook, Mozilla, Thunderbird, etc. El correo será analizado por el
Proxy y este lo marcará o no, como spam dependiendo de unos factores inicialmente
configurados. Las versiones de los paquetes i/o software que se han utilizado son:

- P3scan 2.1
- Spamassassin 3.0.3
- Spampd

Inicialmente instalaremos y configuraremos el paquete spampd, este software es un


filtro antispam que utiliza el software spamassassin.

#apt-get install spampd

Seguidamente configuramos el archivo de configuración de spampd ubicado en


/etc/default/spampd para que utilize el mismo usuario que el antivirus

USERID=clamav
GRPID=clamav

A continuación activamos spamassassin en el archivo /etc/default/spamassassin

ENABLED=1

Y configuramos el archivo de configuración de spamassassin ubicado en


/etc/spamassassin/local.cf para cuando llegue un mail de spam, este sea marcado.

# This is the right place to customize your installation of SpamAssassin.


#
# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
# tweaked.
#
###########################################################################
#
# rewrite_header Subject *****SPAM*****
# report_safe 1
# trusted_networks 212.17.35.
# lock_method flock
###########################LINEAS AÑADIDAS#######################################
##Indicamos en la cabecera del mensaje que es SPAM
rewrite_header Subject *****SPAM*****

##El mensaje original se incluye como anexo en MIME


report_safe 1

#razor
razor_config /etc/razor/razor-agent.conf
27

#puntuaciones
required_hits 15
check_mx_delay 5
rbl_timeout 15
report_contact root@localhost
skip_rbl_checks 0
report_safe 0
dns_available test
use_razor2 1
use_pyzor 0
use_dcc 0

#lenguajes
ok_languages all
ok_locales all

#Bayes
use_bayes 1

#Test
score DCC_CHECK 3.000
score RAZOR"_CHECK 2.500
score BAYES_99 4.300
score BAYES_80 3.000

#BlackLists
#blacklist_from

Después de configurar el archivo local.cf, creamos un script llamado


actualiza_spamassassin para actualizar las reglas de spamassassin y lo ubicaremos en
/usr/local/bin/ , a continuación vemos el script:

#!/bin/bash
#
# Script para actualizar las reglas de SpamAssassin
#
# Guimi - http://guimi.net
# 2007-01
#

# Cambiamos al directorio adecuado


cd /etc/spamassassin/

# Actualizamos las reglas


wget http://mywebpages.comcast.net/mkettler/sa/antidrug.cf
wget http://www.nospamtoday.com/download/mime_validate.cf
wget http://www.rulesemporium.com/rules/70_sare_adult.cf
wget http://www.rulesemporium.com/rules/70_sare_bayes_poison_nxm.cf
wget http://www.rulesemporium.com/rules/70_sare_evilnum0.cf
wget http://www.rulesemporium.com/rules/70_sare_genlsubj0.cf
wget http://www.rulesemporium.com/rules/70_sare_genlsubj_eng.cf
wget http://www.rulesemporium.com/rules/70_sare_header0.cf
wget http://www.rulesemporium.com/rules/70_sare_header_eng.cf
wget http://www.rulesemporium.com/rules/70_sare_html0.cf
wget http://www.rulesemporium.com/rules/70_sare_html_eng.cf
wget http://www.rulesemporium.com/rules/70_sare_obfu0.cf
wget http://www.rulesemporium.com/rules/70_sare_oem.cf
28

wget http://www.rulesemporium.com/rules/70_sare_random.cf
wget http://www.rulesemporium.com/rules/70_sare_specific.cf
wget http://www.rulesemporium.com/rules/70_sare_spoof.cf
wget http://www.rulesemporium.com/rules/70_sare_stocks.cf
wget http://www.rulesemporium.com/rules/70_sare_unsub.cf
wget http://www.rulesemporium.com/rules/70_sare_uri0.cf
wget http://www.rulesemporium.com/rules/72_sare_bml_post25x.cf
wget http://www.rulesemporium.com/rules/72_sare_redirect_post3.0.0.cf
wget http://www.rulesemporium.com/rules/88_FVGT_body.cf
wget http://www.rulesemporium.com/rules/88_FVGT_headers.cf
wget http://www.rulesemporium.com/rules/88_FVGT_rawbody.cf
wget http://www.rulesemporium.com/rules/88_FVGT_subject.cf
wget http://www.rulesemporium.com/rules/88_FVGT_uri.cf
wget http://www.rulesemporium.com/rules/99_FVGT_DomainDigits.cf
wget http://www.rulesemporium.com/rules/99_FVGT_meta.cf
wget http://www.rulesemporium.com/rules/99_FVGT_Tripwire.cf
wget http://www.rulesemporium.com/rules/99_sare_fraud_post25x.cf
wget http://www.stearns.org/sa-blacklist/random.current.cf
wget http://www.timj.co.uk/linux/bogus-virus-warnings.cf
wget http://www.yackley.org/sa-rules/evilnumbers.cf

# Reiniciamos los servicios


/etc/init.d/spamassassin restart
/etc/init.d/spampd restart

Y programamos el script para que se ejecute una vez a la semana con crontab

# Ejecucion script FailOver para las dos rutas de salida a internet 192.168.3.1 y
192.168.4.1
# min hor dia mes dia_sem
* * * * * /usr/local/bin/EstadoRutas.sh
00 05 * * 1 /usr/local/bin/actualiza_spamassassin.sh

Una vez configurado el anti-spam, tendremos que descargarnos el paquete p3scan que
será el encargado de coger el correo que llega a nuestro servidor (fuera de la LAN, en
Internet).

#apt-get install p3scan

Una vez instalado, redireccionamos el correo a nuestro antivirus clamav para que nos
avise con el mensaje de clamav si algún mail contiene algún virus

#cd /etc/p3scan
#rm p3scan.mail
# ln –s p3scan-sp.mail p3scan.mail

Y configuramos el archivo de configuración de p3scan ubicado en


/etc/p3scan/p3scan.conf
29

targetip = 0.0.0.0
targetport = 8110
user = clamav
scannertype = basic
scanner = /usr/bin/clamscan --no-summary
virusregexp = .*: (.*) FOUND
demime
checkspam
spamcheck = /usr/bin/spamc

-------------------------------------------------------------------------------------------------------------------------------
pidfile = /var/run/p3scan/p3scan.pid
maxchilds = 10

#esto es para hacerlo transparente


ip = 0.0.0.0

port = 8110
user = p3scan
notifydir = /var/spool/p3scan/notify

#directorio donde se guardaran los virus encontrados


virusdir = /var/spool/p3scan

scannertype = Basic

#elegimos calav como antivirus


scanner = /usr/bin/clamdscan --no-summary
demime
viruscode = 1

#esta es la regexp para clamav


virusregexp = .*: (.*) FOUND

#esta es muy importante si los clientes son Outlook y Outlook Express acelera mucho el proceso de
filtrado y evita errores de conexión en los clientes
broken

#habilitar chequeo de spam


checkspam
spamcheck = /usr/bin/spamc

#esta es muy importante indicar el témplate que se mandará al detectar virus no dejar el #default
template = /etc/p3scan/p3scan.mail

Finalmente procedemos al redireccionamiento de todo lo que entre por el puerto 110, se


redireccione al puerto que esta escuchando p3scan, en este caso 8110.

#iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 110 –j REDIRECT –to-port 8110
30

Para saber que puertos estan escuchando podemos utilizar el siguiente comando:

#lsof –i | grep LISTEN

O
#nmap localhost

Para ver el correcto funcionamiento de spamassassin, p3scan, etc. No enviamos un


correo des de otra cuenta a la cuenta de correo de la empresa con el siguiente línea:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Y al descargarnos el correo con thunderbird, mozilla, Outlook, etc. nuestro servidor nos
añade en el asunto un marcaje (******SPAM*******) conforme que el correo recibido
es spam.

Viendo las cabeceras vemos la configuración de spamassassin y como el correo ha


pasado por p3scan.
31

http://guimi.net/index.php?pag_id=tec-docs/firewall/fw-instalacion.html
http://www.improvisa.com/index.php?name=News&file=article&sid=13
http://alfredo.soy-geek.com/index.php?gadget=blog&action=ShowCategory&id=3

http://www.clamav.net/download/lang-pref/es/
http://bulma.net/body.phtml?nIdNoticia=1311

http://es.tldp.org/Manuales-LuCAS/doc-tutorial-postfix-ldap-courier-spamassassin-
amavis-squirrelmail/html-multiple/filtrado-parte.html
http://www.ernestoperez.com/servicios/sistemas_antivirus_y_antispam_para_linux.html
32

Modificar Fecha y Hora del Servidor para la


Monitorización y otros casos
Para modificar y ajustar nuestro servidor a la hora y fecha actual, ya que nos será mucho
más fácil a la hora de monitorizar, ver los ficheros logs, etc. Hay que hacer lo siguiente.

Primero de todo miraremos si nuestro servidor ya tiene la hora y la fecha actualizada,


para ello usaremos el comando:

#date

Y a continuación nos aparecerá la fecha día_semana/mm/dd /hora/año

Para modificar la hora y la fecha, primero de todo hay que tener en cuenta que hay que
modificar la del ordenador y la de la bios. Para modificar la del ordenador se hace de la
siguiente manera:

#date --set “2007-12-28 13:34”

Para modificar la de la bios hacemos lo siguiente:

#hwclock --set --date=“2007-12-28 13:34”


33

Bibliografía y otras páginas de interés


http://lartc.org/
http://www.redes-linux.com/
http://www.escomposlinux.org/fserrano/index.html
http://es.tldp.org/Presentaciones/200103hispalinux/eric/html/rutas.html

Iptables
http://www.pello.info/filez/firewall/iptables.html

Crontab
http://es.wikipedia.org/wiki/Cron_(unix)

Scripts
http://www.linux-es.org/node/70
http://www.linux-es.org/node/107
http://www.linux-es.org/node/147
http://www.linux-es.org/node/238

MRTG
http://www.neozero.net/linux/manuales/mrtg/*
http://oss.oetiker.ch/mrtg/index.en.html*

SNMP
http://www.linuxparatodos.net/geeklog/article.php?story=1375&query=MRTG*
http://www.diariolinux.com/tiki-read_article.php?articleId=6*

Apache2
http://www.osmosislatina.com/apache2/configuracion.htm
http://unadebravas.acuerdate.net/index.php/2006/05/05/apache-2-con-virtualhost/
http://bulma.net/body.phtml?nIdNoticia=2126

QOS
http://bulma.net/body.phtml?nIdNoticia=1727*
http://bulma.net/body.phtml?nIdNoticia=2084*
http://usuarios.lycos.es/ccd_illusions/QoS-3.pdf*
http://linuca.org/body.phtml?nIdNoticia=201*
http://es.tldp.org/Presentaciones/200103hispalinux/eric/html/banda.html*
http://lartc.org/howto/lartc.qdisc.filters.html*
http://www.monografias.com/trabajos17/ancho-de-banda/ancho-de-banda.shtml*

Squid
http://www.gfc.edu.co/manuales/configuracionProxy/*
http://www2.fices.unsl.edu.ar/~gulfi/squid.htm*
http://bulma.net/body.phtml?nIdNoticia=441*
http://es.tldp.org/Tutoriales/doc-servir-web-escuela/doc-servir-web-escuela-
html/x518.html*
34

Balanceo
file:///C:/Juan/balancerar%20cargas%20con%20Debian.php.htm*
http://bulma.net/body.phtml?nIdNoticia=1759

Masquerading y NAT
http://www.elrincondelprogramador.com/default.asp?pag=articulos%2Fleer.asp&id=40
http://www.osmosislatina.com/linux/nat.jsp*
http://bulma.net/body.phtml?nIdNoticia=1615&nIdPage=2*
http://130.206.130.95/body.phtml?nIdNoticia=2145*
http://bulma.net/body.phtml?nIdNoticia=1522*
35

Anexo I – Scripts Creados y su Path

En este anexo, indicaremos los archivos (Scripts) creados para la configuración del
Proxy, juntamente con su ubicación, por si algún día es necesario.

NOMBRE ARCHIVO CONTENIDO UBICACIÓN (PATH)


Conf-interficies.sh Configuración Proxy /etc/init.d/Conf-interficies.sh
EstadoRutas.sh Script rutas muertas /usr/local/bin/EstadoRutas.sh
0 ruta viva
EstadoLAN3.fl /usr/local/bin/EstadoLAN3.fl
1ruta muerta
0 ruta viva
EstadoLAN4.fl /usr/local/bin/EstadoLAN4.fl
1ruta muerta

Conf-interficies.sh

#!/bin/sh

# Configurar interficies

ip route flush default


iptables -F
iptables -t nat -F
iptables -t mangle -F
##------------------------------------------------------------------------------------------------------------------
##------------------------------------------------------------------------------------------------------------------
echo "Configurando Interficies..."

ifconfig lo inet up 127.0.0.1 netmask 255.0.0.0


ifconfig eth0 inet up 192.168.1.36 netmask 255.255.255.0 broadcast 192.168.1.255
ifconfig eth1 inet up 192.168.3.2 netmask 255.255.255.0 broadcast 192.168.3.255
ifconfig eth2 inet up 192.168.4.2 netmask 255.255.255.0 broadcast 192.168.4.255

# Activar de forma manual las rutas en el server


ip route flush default
ip route add proto static 192.168.1.0/24 dev eth0 src 192.168.1.36
ip route add proto static 192.168.3.0/24 dev eth1 src 192.168.3.2
ip route add proto static 192.168.4.0/24 dev eth2 src 192.168.4.2
ip route add proto static 192.168.2.0/24 via 192.168.1.1

#Por defecto se sale por la ruta 192.168.3.1


ip route add default proto static via 192.168.3.1 dev eth1

# Activar reenvio de paquetes (ip_forward)


echo "1" > /proc/sys/net/ipv4/ip_forward

# Desactivar filtros ethernets


echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter
##-----------------------------------------------------------------------------------------------------------------
##-----------------------------------------------------------------------------------------------------------------
36

Conf-interficies.sh

# Activamos los timers


echo 30 > /proc/sys/net/ipv4/route/gc_elasticity # tiempo antes de que el nucleo salte a otra ruta
(1 ha muerto)
echo 15 > /proc/sys/net/ipv4/route/gc_interval # tiempo para volver a intentar enviar por una
ruta que esta caida
echo 30 > /proc/sys/net/ipv4/route/gc_timeout # tiempo para declarar una ruta como muerta
echo 5 > /proc/sys/net/ipv4/route/max_delay # tiempo de retraso para vaciar la cache
echo 5 > /proc/sys/net/ipv4/route/flush # tiempo para borrar la cache

# Ponemos a "0" los flags de las interficies 0 --> indican que funcionan
echo 0 > /usr/local/bin/EstadoLAN3.fl
echo 0 > /usr/local/bin/EstadoLAN4.fl
##-----------------------------------------------------------------------------------------------------------------------
##-----------------------------------------------------------------------------------------------------------------------

# Redireccionamiento Squid para trabajr de forma Transparente


iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
##--------------------------------------------------------------------------------------------------------------------------
##--------------------------------------------------------------------------------------------------------------------------

# Configurar Balanceo
echo "Configurando Balanceo..."
#echo 230 adsl3 >> /etc/iproute2/rt_tables
#echo 240 adsl3 >> /etc/iproute2/rt_tables
ip route add 192.168.3.0 dev eth1 src 192.168.3.2 table adsl3
ip route add default via 192.168.3.1 table adsl3
ip route add 192.168.4.0 dev eth2 src 192.168.4.2 table adsl4
ip route add default via 192.168.4.1 table adsl4
ip rule add from 192.168.3.2 table adsl3
ip rule add from 192.168.4.2 table adsl4
ip route chg default equalize scope global nexthop via 192.168.3.1 dev eth1 weight 1 nexthop via
192.168.4.1 dev eth2 weight 1
##--------------------------------------------------------------------------------------------------------------------------
##--------------------------------------------------------------------------------------------------------------------------

#Hacemos NAT en las interficies


iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
##--------------------------------------------------------------------------------------------------------------------------
##--------------------------------------------------------------------------------------------------------------------------

#Ejemplo Terminal Server Remotamente (Internet)


#iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3389 -j DNAT--to 192.168.1.169:3389
##--------------------------------------------------------------------------------------------------------------------------
##--------------------------------------------------------------------------------------------------------------------------
37

EstadoRutas.sh

#!/bin/sh

#EstadoLAN3=0 # 0-->no ha caido la interfaz


#EstadoLAN4=0 # 0-->no ha caido la interfaz
#cont3=0
#cont4=0
#valEst3=`more /usr/local/bin/EstadoLAN3.fl`
#valEst4=`more /usr/local/bin/EstadoLAN4.fl`
#val3=0
#val4=0
valEst3=`cat /usr/local/bin/EstadoLAN3.fl`
valEst4=`cat /usr/local/bin/EstadoLAN4.fl`

Red3=192.168.3.1
Red4=192.168.4.1

cont3=0
cont4=0
val3=0
val4=0
valEst3=`cat /usr/local/bin/EstadoLAN3.fl`
valEst4=`cat /usr/local/bin/EstadoLAN4.fl`
val3=$[$valEst3]
val4=$[$valEst4]

if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi


if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi
if `ping -c 1 $Red3> /dev/null` ;then cont3=$[$cont3+1]; fi

if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi


if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
if `ping -c 1 $Red4> /dev/null` ;then cont4=$[$cont4+1]; fi
38

EstadoRutas.sh

if [ $cont3 -ge 7 ]; then


if [ $cont4 -ge 7 ]; then
ip route chg default equalize scope global nexthop via 192.168.3.1 dev eth1 weight 1
nexthop via 192.168.4.1 dev eth2 weight 1
echo 0 > /usr/local/bin/EstadoLAN3.fl
echo 0 > /usr/local/bin/EstadoLAN4.fl
echo R3 y R4 UP
else
ip route chg default proto static nexthop via 192.168.3.1
echo 1 > /usr/local/bin/EstadoLAN4.fl
echo 0 > /usr/local/bin/EstadoLAN3.fl
echo R3 UP y R4 DOWN
fi
else
if [ $cont4 -ge 7 ]; then
ip route chg default proto static nexthop via 192.168.4.1
echo 0 > /usr/local/bin/EstadoLAN4.fl
echo 1 > /usr/local/bin/EstadoLAN3.fl
echo R3 DOWN y R4 UP
else
echo NO HAY INTERNET
echo 1 > /usr/local/bin/EstadoLAN3.fl
echo 1 > /usr/local/bin/EstadoLAN4.fl
echo R3 y R4 DOWN
fi
fi
39

Anexo II – Comandos interesantes y útiles

En este anexo se detallarán algunos comandos útiles que nos ayudaran a obtener
información de nuestro sistema Linux, para cuando aparezcan algunas incidencias o por
pura rutina de información.

- Con el siguiente comando podemos saber que puertos están escuchado:

#lsof –i|grep LISTEN

- Saber como esta en concreto un puerto:


#netstat –na|grep LISTEN|grep 8110

Si muestra algo de información, indica que dicho puerto está abierto, si no indica
nada, dicho puerto esta cerrado.

- Muestra más información del puerto (PID, estado, protocolo, IP)


#lsof –i|grep “8110”

- PID de un proceso a partir de su nombre:


#pidof [nombre_proceso]
#pidof p3scan

- Listado de los procesos activos e información detallada de cada uno de ellos:


#ps aux
#ps ax

- Mostrar puerto asignado a protocolo activo a partir de un rango

#nmap localhost –p 20-100

- Matar un proceso a partir del PID de este:

#kill -9 [PID_proceso]
40

Con el comando arriba escrito ps ax la primera columna que aparece se refiere al PID,
la segunda a la consola virtual donde se ejecuta. La tercera al estado del proceso:

S Dormido
R Running
Z Zombie
T Detenido

http://hwagm.elhacker.net/guia-linux/guia-linux2.htm
http://catux.org/programaci-/quin-programa-ha-obert-un-port-2.html

You might also like