Montar Router Linux Servidor

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

Transcript of Montar Router Linux Servidor

Page 1: Montar Router Linux Servidor

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

Page 2: Montar Router Linux Servidor

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

Page 3: Montar Router Linux Servidor

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: Si queremos volver a configurar alguna opción (como las fuentes de descarga de paquetes) en la shell, deberemos introducir el siguiente comando: 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: 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.

#base-config

#uname -r

#apt-get update #apt-get upgrade

Page 4: Montar Router Linux Servidor

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: 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: Una vez descomprimido, entramos en la carpeta que se ha creado dentro de /usr/src con nombre al futuro nuevo kernel Y se limpia la configuración que tenga (la primera vez que se instala el kernel no hace falta) 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

#wget [enlace]

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

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

/usr/src#cd linux-2.6.19.1

/usr/src/linux-2.6.19.1#make mrproper

Page 5: Montar Router Linux Servidor

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

/usr/src/linux-2.6.19.1#make config

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

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

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

Page 6: Montar Router Linux Servidor

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. Fuentes origen de información: http://www.esdebian.org/article.php?story=20060112225540316 http://www.howtoforge.com/kernel_compilation_debian

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

Page 7: Montar Router Linux Servidor

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: Y configuramos las interfaces: Las rutas del router, pero sin poner las de salida a internet: Conexión a Madrid: 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.

#apt-get install iproute

#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

#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

#chmod 744 Conf-interficies.sh

#ip route add proto static 192.168.2.0/24 via 192.168.1.1

Page 8: Montar Router Linux Servidor

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

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

Para verificar el funcionamiento del script hay que mirar los comandos: Otra opción que hay que configurar en el servirdor-proxy para que haga las funciones de router es lo siguiente: 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.

#vim /etc/inittab

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

#ifconfig #ip route

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

Page 9: Montar Router Linux Servidor

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

Page 10: Montar Router Linux Servidor

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

Para ver que las tablas han sido creadas:

2- Asignar una ruta para cada tabla

Para ver el contenido de las tablas:

3- Crear una ip rule para cada tabla Para ver el contenido de las ip rules: Finalmente configuramos las rutas de salida para que el router haga el balanceo

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

#more /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 show table [Nombre_tabla]

#ip rule

#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

Page 11: Montar Router Linux Servidor

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

#!/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

Page 12: Montar Router Linux Servidor

10

tiempo en Linux). Para poder programar el crontab hay que escribir lo siguiente en la shell: Seguidamente nos aparecerá una pantalla donde tendremos que escribir para poder programarlo y escribimos lo siguiente:

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: Y a continuación hay que poner en hora el reloj de la bios Fuentes origen de información: file:///C:/Juan/balancerar%20cargas%20con%20Debian.php.htm http://www.linuca.org/body.phtml?nIdNoticia=15

#crontab -e

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

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

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

Page 13: Montar Router Linux Servidor

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: 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. Una vez modificado el archivo apache2.conf se ejecuta apache por primera vez: Y finalmente se cambia la pagina de inicio en /etc/apache2/sites-available/default Y se cambia el path de la página de inicio

#apt-get install apache2

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

#apache2ctl start

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

RedirectMatch ^/$ /mrtg/ #RedirectMatch ^/$ /apache2-default/

Page 14: Montar Router Linux Servidor

12

SNMP Para la monitorización es necesario instalar el protocolo SNMP para el intercambio de información de la red. Para ello descargamos: 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: Una vez configurado snmp, se tiene que ejecutar o iniciar con el siguiente comando:

#apt-get install snmp snmpd

# 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 # -----------------------------------------------------------------------------

#/etc/init.d/snmpd start #/etc/init.d/snmpd reload

Page 15: Montar Router Linux Servidor

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. . MRTG Finalmente vamos a instalar el software que nos permitirá visualizar las estadísticas: 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. Por último y para que las estadísticas sean visibles, tenemos que ir a /var/www/martg y escribir: 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

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

#apt-get install mrtg mrtg-contrib mrtgutils

# to get bits instead of bytes and graphs growing to the right Language: spanish WriteExpires: Yes Options[_]: growright, bits

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

Page 16: Montar Router Linux Servidor

14

Figura 2 - Captura Trafico en las interfaces del proxy 36

Page 17: Montar Router Linux Servidor

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: 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:

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

#apt-get install squid

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

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

Page 18: Montar Router Linux Servidor

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. Por último deberemos activar squid para que empiece a funcionar 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

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

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

Page 19: Montar Router Linux Servidor

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: Para enmascarar y que las peticiones de Terminal Server o cualquier otra cosa lleguen a dentro de la LAN, habrá que en enmascarar: Y finalmente configurar el router ADSL para que redireccione las peticiones al inicio. Para borrar una entrada en iptables se hace lo siguiente: ATENCIÓN!: 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

#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

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

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)

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

Page 20: Montar Router Linux Servidor

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

Page 21: Montar Router Linux Servidor

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. 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: Para volver a la política de aceptar seria de la forma inversa: 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:

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

#iptables –P INPUT DROP

#iptables –P INPUT ACCEPT

Page 22: Montar Router Linux Servidor

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: Para denegar cualquier petición del host 192.168.1.225 (por ej. El puerto 21 – FTP) se aplica lo siguiente: Otro ejemplo seria denegar las peticiones ssh del host 192.168.1.169 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: ATENCIÓN!: 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

#iptables --append INPUT --protocol icmp --source 192.168.1.225 --jump DROP #iptables -A INPUT –p icmp –s 192.168.1.225 –j DROP

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

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

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

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

Page 23: Montar Router Linux Servidor

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 Una vez añadida la fuente actualizamos apt-get I finalmente instalamos clamav con todos los paquetes necesarios 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

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

#apt-get update #apt-get upgrade

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

# 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

Page 24: Montar Router Linux Servidor

22

Una vez hecho esto, tenemos que reiniciar freshclam con la opción: I procedemos entonces a la actualización de la base de datos, para ello introducimos el comando: 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 Y ejecutaremos nuestro antivirus Y nos debe aparecer un resultado como el siguiente

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

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

#freshclam

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

#clamscan

Page 25: Montar Router Linux Servidor

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: Para descomprimir el archivo que nos hemos descargado si esta en .deb, deberemos utilizar el comando: 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:

#dpkg –l libc6

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

#tar –xvzf archive.tar.gz

Page 26: Montar Router Linux Servidor

24

Y seguidamente nos descomprimirá el archivo y hacemos lo siguiente: A continuación creamos el archivo infeccion.php en /var/www/ con el siguiente contenido: 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

#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

<!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:[email protected]">Administrador</a> </p> </div> </body> </html>

Page 27: Montar Router Linux Servidor

25

Y reiniciamos squid 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. Y reiniciamos el servició para la creación de logs 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.

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

#/etc/init.d/squid restart

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

#/etc/init.d/sysklogd restart

Page 28: Montar Router Linux Servidor

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. Seguidamente configuramos el archivo de configuración de spampd ubicado en /etc/default/spampd para que utilize el mismo usuario que el antivirus A continuación activamos spamassassin en el archivo /etc/default/spamassassin 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.

#apt-get install spampd

USERID=clamav GRPID=clamav

ENABLED=1

# 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

Page 29: Montar Router Linux Servidor

27

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:

#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

#!/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

Page 30: Montar Router Linux Servidor

28

Y programamos el script para que se ejecute una vez a la semana con crontab 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). 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 Y configuramos el archivo de configuración de p3scan ubicado en /etc/p3scan/p3scan.conf

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

# 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

#apt-get install p3scan

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

Page 31: Montar Router Linux Servidor

29

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.

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

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

Page 32: Montar Router Linux Servidor

30

Para saber que puertos estan escuchando podemos utilizar el siguiente comando: O 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: 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.

#lsof –i | grep LISTEN

#nmap localhost

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

Page 33: Montar Router Linux Servidor

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

Page 34: Montar Router Linux Servidor

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: 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: Para modificar la de la bios hacemos lo siguiente:

#date

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

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

Page 35: Montar Router Linux Servidor

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*

Page 36: Montar Router Linux Servidor

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*

Page 37: Montar Router Linux Servidor

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

EstadoLAN3.fl 0� ruta viva

1�ruta muerta /usr/local/bin/EstadoLAN3.fl

EstadoLAN4.fl 0� ruta viva

1�ruta muerta /usr/local/bin/EstadoLAN4.fl

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 ##----------------------------------------------------------------------------------------------------------------- ##-----------------------------------------------------------------------------------------------------------------

Page 38: Montar Router Linux Servidor

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 ##-------------------------------------------------------------------------------------------------------------------------- ##--------------------------------------------------------------------------------------------------------------------------

Page 39: Montar Router Linux Servidor

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

Page 40: Montar Router Linux Servidor

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

Page 41: Montar Router Linux Servidor

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: - Saber como esta en concreto un puerto:

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) - PID de un proceso a partir de su nombre: - Listado de los procesos activos e información detallada de cada uno de ellos: - Mostrar puerto asignado a protocolo activo a partir de un rango - Matar un proceso a partir del PID de este:

#lsof –i|grep LISTEN

#netstat –na|grep LISTEN|grep 8110

#lsof –i|grep “8110”

#pidof [nombre_proceso] #pidof p3scan

#ps aux #ps ax

#nmap localhost –p 20-100

#kill -9 [PID_proceso]

Page 42: Montar Router Linux Servidor

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