miércoles, 18 de diciembre de 2013

Firewall para Linux en el entorno gráfico y como configurarlo (solo para los que usan entorno gráfico)


¿Si Windows tiene su firewall, Linux tendrá uno?
¿Cómo puedo Instalarlo y configurarlo?
¿Tiene interface gráfica?

Bueno leyendo por allí me encontré que existe un programa que se llama Firestarter, que simplemente lo que hace es crear reglas de iptables para proteger el equipo, tiene una interface grafica muy buena y simple, tan simple que hasta un niño puede con ella.

IPTABLES ¿Qué es eso?, tranquilo no se alarmen que eso no es lo importante ahorita, pues el programa se encargara de forma gráfica de hacer todo lo que le pidamos, tanto que hasta podemos compartir la conexión a Internet con otros equipos.

Lo primero que debemos hacer es instalar firestarter, luego desde aplicaciones buscamos el programa y lo ejecutamos, este nos pedirá la clave de root, al colocarla nos mostrara el asistente para configurarlo, allí establecemos las configuraciones que nos interesan, guardamos.

Cuando el sistema inicia este nos mostrara un mensaje de que fallo la carga o que no cargo, pero al ejecutar dmesg en una consola, nos mostrara que esta funcionando, al entrar al entorno gráfico tampoco lo vemos, pero al revisar en la consola con dmesg vemos que esta funcionando.

Esto esta bien, para eliminar el mensaje de error al iniciar el sistema instale rcconf, lo ejecute y elimine el script que hace el llamado al programa firestarter, esto también se puede hacer con update-rc, reinicie el equipo y revise, vi que no muestra ningún error al iniciar el sistema, claro ustedes dirán: pero no se esta ejecutando el programa y el equipo estará desprotegido, tranquilo.

Para que el programa se ejecute solo de forma gráfica y no te solicite contraseña de root y estés protegido al 100%, por allí ley que modificaban el script, que le comentaban, que le quitaban, que le ponían, que ejecutaban el no se que, pero realmente nada de eso hace falta, para que el programa se ejecute sin solicitar contraseña solo tenemos que entrar en una terminal y ejecutar visudo.

Agregaremos al archivo:  tu_nombre_de_usuario  ALL=(root) NOPASSWD:/usr/sbin/firestarter, luego nos vamos a aplicaciones y buscamos aplicaciones al inicio, allí agregamos el programa como muestra la imagen:
Guardamos y reiniciamos, al entrar al entorno gráfico vamos a ver que el programa se ejecuta sin pedir clave. OJO EL PROGRAMA FUNCIONA AUN SIN ENTRAR AL ENTORNO GRÁFICO, PUES INICIA AL INICIAR EL ENTORNO Y ES SOLO PARA LAS PERSONAS QUE USAN LINUX CON ENTORNO GRÁFICO

Mas fácil imposible.

Servicios del sistema: como controlarlos 'update-rc.d' 'rcconf' 'sysv-rc-conf'

Hoy me preguntaron: ¿cómo puedo modificar los script que se inician al encender o apagar el computador de forma gráfica?

La respuesta es mas simple de lo que esperaban, existen dos opciones:
1) Instalar rcconf.
ó 2) Instalar sysv-rc-conf

Al ejecutar el rcconf desde la consola te muestra una imagen como esta:
 Allí puedes seleccionar o no la opción que necesites para que se ejecute o no. En el caso de sysv-rc-conf te muestra una imagen como esta:

En este caso puedes hasta decirle en que nivel quieres que se ejecute el script al iniciar el sistema.

Listo, mas fácil imposible.

Decorando el inicio de Debian Whezeey

Siempre me han preguntado como reemplazar el arranque del equipo cuando le instalas Debian, o sea que no muestre ese poco de letras que al final de cuentas no sabemos  que son ni de que tratan y colocar una imagen animada en su lugar.

Yo hice lo siguiente:

Instale plymouth-x11y grub2-splashimages.

Modifique el /etc/default/grub:

Anterior grub:
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="initrd=/install/initrd.gz"

Nuevo grub:
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
#GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
#GRUB_CMDLINE_LINUX="initrd=/install/initrd.gz"
GRUB_CMDLINE_LINUX=""
GRUB_BACKGROUND="/usr/share/images/grub/Lake_mapourika_NZ.tga"

Luego ejecute: update-grub.

Listo ya disfrutamos de la imagen, yo definí la imagen de una vez en el archivo anteriror, pero tu también puedes una vez instalado plymouth-splash-theme, seleccionar el tema a utilizar:

1) Ejecutamos: plymouth-set-default-theme -l, y nos muestra los temas que están disponibles.
2) Ejecutas: plymouth-set-default-theme  -R nombre del tema.
3) ejecutas: update-initramfs.
4) Reinicias y ves como te funciona.

¿Por qué  tu definiste el tema de una vez en el archivo?
Pues porque use un tema del paquete grub2-splashimages.

Cuando plymouth es desinstalado, para completar la remoción del paquete debes hacer un:
  update-initramfs

Para que se remueva la imagen.


Listo mas fácil imposible.

viernes, 22 de noviembre de 2013

Solucionar el problema VERR_FILE_NOT_FOUND en VirtualBox

Muchas veces me han preguntado como solucionar el mensaje que envía el sistema de VirtualBox cuando esta instalado en Linux, que dice:

Fallo al acceder el subsistema USB.

No se puede cargar el servicio Host USB Proxy (VERR_FILE_NOT_FOUND). El servicio podría no estar instalado en la máquina anfitrión.


Muy facil solo debes ingresar como root las siguientes lineas en el archivo /etc/fstab:

#usbfs
none /proc/bus/usb usbfs devgid=46,devmode=664 0 0


Con la primera línea dejamos un comentario sobre las características del código usado. Después de editar el archivo hacemos un:

mount -a

Listo disfrute de todas las ventajas que tiene VirtualBox.

jueves, 19 de septiembre de 2013

Iptables activo tras reinicio del equipo configurando el archivo interface

¿Cómo hacer que iptables permanezca activo tras un reinicio? o ¿Cómo hacer iptables persistente después de un reboots o reinicio?

Partimos de la base de que tenemos un archivo con reglas de iptables en un sitio. Para volcar las reglas de iptables a un archivo, podemos usar iptables-save

iptables-save > /etc/iptables.rules

De igual modo, para recuperarlas de un archivo y ponerlas en funcionamiento, iptables-restore.
 

iptables-restore < /etc/iptables.rules

En el siguiente ejemplo, se asume que existe una configuración de red en /etc/network/interfaces y que tenemos las reglas salvadas en /etc/iptables.rules. Si tu configuración no es esta, adáptalo a lo que tengas.

En Ubuntu y Debian podemos editar el archivo /etc/network/interfaces y en la sección del interfaz pondremos la línea:

pre-up iptables-restore < /etc/iptables.rules.

Quedaría, por ejemplo:

auto eth0
iface eth0 inet static
address XXX.XXX.XXX.XXX
netmask YYY.YYY.YYY.YYY
gateway ZZZ.ZZZ.ZZZ.ZZZ
pre-up iptables-restore < /etc/iptables.rules

viernes, 19 de julio de 2013

Instalar y configurar Driver de vídeo de la tarjeta SIS modelo 671/771 en Linux y Windows 7

Uno de los problemas que me he encontrado con los sistemas Linux es la instalación y configuración de las tarjeta de vídeo, después de investigar y utilizar el Google para dar con la solución a mi problema de resolución de pantalla donde solo me reconocía 800x600, al fin conseguí la respuesta a mi problema.

Lo primero que hice fue descargar los ficheros:
Claro solo utilice el driver según la arquitectura instalada en el computador, despues de descargar el archivo los descomprimí y copie los archivos sis671_drv.la y sis671_drv.so de la carpeta XX-bit en el directorio: /usr/lib/xorg/modules/drivers y por ultimo copie el archivo xorg.conf en el directorio: /etc/X11/

Reinicie el equipo y al entrar al entorno gráfico solo fui a Sistema > Preferencias > Monitores y seleccione la resolución que mas se adapte a mi gusto.

En Windows 7 instale los drivers de windows update y luego instale: SiS VGA driver 3.78.00.zip, al reiniciar ya pude cambiar la resolución a 1280x800.

miércoles, 3 de julio de 2013

¿Cómo poner contraseña al Grub 2?

La contraseña que le pondremos al Grub 2 debe estar encriptada por lo tanto debemos utilizar un comando que nos proporciona una cadena de la contraseña que queremos utilizar, este comando es: grub-mkpasswd-pbkdf2

Pasos:
  1. Abrimos un terminal ejecutamos el comando: grub-mkpasswd-pbkdf2, al solicitarnos la contraseña colocamos una que sea fácil de recordar y difícil de adivinar por terceros.

  2. Una vez que tenemos la clave encriptada en otra terminal editamos el archivo: /boot/grub/grub.cfg.
  3. En el archivo debemos definir un usuario como mínimo y asignarle la contraseña generada, este contenido debe ir al empezar el fichero.
    set superusers=”nombre_del_usuario” - con esto creamos el usuario.
    password_pbkdf2 nombre_del_usuario la_clave_encriptada

  4. Guardamos los cambios y nuestro Grub 2 ya estará protegido contra la inserción de lineas de comando mediante el Grub.

Si queremos que nos pida el usuario y la contraseña para poder arrancar una de la opciones que nos da el menú de Grub 2, debemos indicárselo, añadiéndole: --users nombre_del_usuario, en la opciones de arranque, editando de nuevo el fichero abierto en el paso 2.



Ahora cada vez que intentemos entrar a una linea de comandos o a una opción de arranque que necesita usuario y contraseña nos saldrá la siguiente pantalla.

martes, 2 de julio de 2013

Solucion a problemas con las PUBKEY


Seguro que ha mas de uno nos ha pasado este error:

W: Error de GPG: http://nombre_del_servidor distribución_linux Release: Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY 07DC563D1F41B907

Solución:

Tomar el código hexadecimal que nos manda el error y ponerlo en el siguiente comando:

$ gpg --keyserver subkeys.pgp.net --recv-key llave && gpg -a --export $PUBKRY | sudo apt-key add -


Donde dice llave pondremos nuestra PUBKEY, en mi caso seria:

$ gpg --keyserver subkeys.pgp.net --recv-key 07DC563D1F41B907 && gpg -a --export $PUBKRY | sudo apt-key add -

domingo, 16 de junio de 2013

Repositorios de VitualBox, Canaima, Debian, Ubuntu, Kubuntu, Google, y otros con Approx

Situación típica en donde los recursos son limitados, tu jefe te dice haz tal cosa pero no tengo para darte un equipo o mas capacidad de almacenamiento, y administración como siempre se hace la de NO TENEMOS RECURSOS, no dispones mas que de ingeniartelas para que todo lo requerido al querer actualizar todas las computadoras que tienes con Debian, Ubuntu, Canaima u otro sabor sea rápido y eficiente, como sabrán cada vez que usamos el aptitude update, aptitude dist-upgrade o aptitude install, cada computador se conectara a Internet y comenzara a bajarse los paquetes usando el ancho de banda que tenemos y el tiempo que esto implica, así que es vital tratar de ahorrar lo más que se pueda.

Así que para esto esta Approx, el cual nos permitirá crear un servidor proxy, que funcionara como un servidor de repositorio de Debian, Ubuntu, Canaima, VirtualBox, Google, y todo lo que necesites para nuestra red local, la cual nos permitirá ahorrar tiempo y ancho de banda de la red, si necesitamos instalar o actualizar Debian para un numero de computadoras en una red. Cada paquete se descarga de un sitio una sola vez sin importar cuantos clientes locales lo instalen, además de que Approx nos facilita la administración ya que si queremos cambiar de repositorio lo hacemos en el archivo de configuración de Approx y no en el archivo /etc/apt/sources.list de cada cliente Approx puede ser usado como reemplazo de apt-proxy, sin necesidad de modificar los archivos /etc/apt/sources.list de los clientes, o como una alternativa a apt-cacher

Comencemos con la instalación:
# aptitude install approx

Editamos el archivo de configuración de Approx que esta es /etc/approx/approx.conf con nuestro editor favorito el cual nos quedara algo así:

# The following are the defaults, so there is no need
# to uncomment them unless you want a different value.
# See approx.conf(5) for details.

#$interface     any
#$port          9999
#$interval      720
#$max_wait      10
#$max_rate      unlimited
#$user          approx
#$group         approx
#$syslog        daemon
#$verbose       false
#$debug         false

# Here are some examples of remote repository mappings.
# See http://www.debian.org/mirror/list for mirror sites.

#debian         http://ftp.debian.org/debian
#security       http://security.debian.org

#Ponemos el mirror que queremos usar, eso depende de cada uno
debian-us     http://ftp.us.debian.org/debian

#El repositorio de las actualizaciones de seguridad de Debian
security       http://security.debian.org

#El repositorio de multimedia de Marillat
debian-multimedia       http://debian-multimedia.dfoell.org
Una vez configurado reiniciamos approx
# /etc/init.d/approx restart

Después necesitamos que nuestro source.list apunte a Approx y no directamente a Internet, así que tenemos que poner la dirección IP o nombre de nuestro servidor de repositorio local, y editamos en las estaciones de trabajo:

vim /etc/apt/sorces.list

Supongamos que mi servidor local esta en 192.168.2.106, entonces no debe quedar algo así:
deb http://192.168.2.106:9999/debian-us lenny main non-free contrib
#deb-src http://ftp.debian.org/debian/ lenny main non-free contrib

deb http://192.168.2.106:9999/security lenny/updates main contrib non-free
#deb-src http://security.debian.org/ lenny/updates main contrib non-free

deb http://192.168.2.106:9999/debian-multimedia testing main
#deb-src http://debian-multimedia.dfoell.org testing main

Ahora necesitamos actualizar y lo hacemos con:
#aptitude update

Listo, ahora solo se bajara de Internet una sola vez los paquetes ahorrando nuestro preciado ancho de banda, almacenamiento y tiempo.

Repositorios Locales para Debian y Canaima

Repositorios Locales para Debian y Canaima
Instalar debmirror y apache2

aptitude install debmirror apache2
script repositorio.sh
debmirror --debug --progress --verbose --nosource --host=debian.unesr.edu.ve --section=main,contrib,non-free --method=rsync --root=:debian --dist=etch,lenny --arch=i386,amd64 --ignore-release-gpg --rsync-options=-aIL /home/debian
script seguridad.sh

debmirror --debug --progress --verbose --nosource --host=security.debian.org --section=main,contrib,non-free --method=rsync --root=:debian-security --dist=etch/updates,stable/updates,lenny/updates --arch=i386,amd64 --ignore-release-gpg --rsync-options=-aIL /home/seguridad
script multimedia.sh

debmirror --debug --progress --verbose --nosource --host=www.debian-multimedia.org --section=main --method=rsync --root=:debian --dist=lenny --arch=i386,amd64 --ignore-release-gpg --rsync-options=-aIL /home/debian-multimedia
Se deberan crear los directorios
/home/debian
/home/debian-multimedia
/home/seguridad
/home/canaima-repo
/home/canaima-seguridad
/home/universo
Luego realizar los enlaces simbolicos para apache desde la raiz www hasta donde se encuentren los repositorios

cd /var/www
ln -s debian /home/debian/
ln -s seguridad /home/seguridad/
ln -s multimedia /home/debian-multimedia/
ln -s canaima-repo /home/canaima-repo/
ln -s canaima-seguridad /home/canaima-seguridad/
ln -s canaima-universo /home/universo/
Repositorios para Canaima

debmirror --debug --progress --verbose --nosource --host=universo.canaima.softwarelibre.gob.ve --section=usuarios,servidores --method=rsync --root=:canaima --dist=estable --arch=i386 --ignore-release-gpg --rsync-options=-aIL /home/universo

debmirror --debug --progress --verbose --nosource --host=seguridad.canaima.softwarelibre.gob.ve --section=usuarios,servidores --method=rsync --root=:canaima --dist=estable --arch=i386 --ignore-release-gpg --rsync-options=-aIL /home/canaima-seguridad

debmirror --debug --progress --verbose --nosource --host=repositorio.canaima.softwarelibre.gob.ve --section=usuarios,servidores --method=rsync --root=:canaima --dist=estable --arch=i386 --ignore-release-gpg --rsync-options=-aIL /home/canaima-repo
Listo!!, solo faltaria reiniciar apache y colocar en /etc/apt/sources.list lo siguiente:

deb http://localhost/debian lenny main contrib non-free
deb http://localhost/seguridad lenny/updates main contrib non-free
deb http://localhost/multimedia lenny/updates main contrib non-free
Para los demas equipos de la red bastaria con cambiar localhost por la IP o el nombre DNS del servidor, asi mismo, se deben instalar en los equipos de la red los paquetes: debian-archive-keyring y debian-multimedia-keyring, que son la sllaves publicas de los repositorios oficiales. Por ultimo, no olviden crear un crontab para que el servidor se actualice. Se puede cambiar la linea "lenny" por stable o el que se halla colocado para la descarga Espero les sirva
Cron

30 20 * * * /etc/webmin/cron/tempdelete.pl
00 20 * * * /root/repo/multimedia
00 18 * * * /root/repo/seguridad
00 21 * * * /root/repo/repos
00 22 * * * /root/repo/canaima-seguridad
00 23 * * * /root/repo/canaima-repo
10 20 * * * /root/repo/canaima-universo
Por ultimo, si quieren que su repositorio actualice a otros repositorios o quisieran llevarselo en un laptop. deberan instalar rsync y configurarlo de la forma siguiente:

:~# vim /etc/rsyncd.conf

use chroot = yes
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid
[debian]
path = /home/mirror/ #### Ruta donde este el repositorio
comment = Archivos para compartir
read only = no
list = yes
#auth users =
#secrets file = /etc/rsyncd.secrets
#list = yes
uid = nobody
gid = nogroup

~# vim /etc/rsyncd.secrets
nobody:nobody

Tambien se puede usar para la descarga la opcion http en ves de rsync, eso solo si el servidor desde donde se esta descargando no soporta rsync. Ha!!! importante, se debera abrir en puerto 873 en el firewall para que el servidor se actualice, ya que es ese el puerto que utiliza rsync
Si no quieres escribir tanto, haces un solo script con el nombre actualizar-canaima:
#!/bin/sh
# Autor: Engerbert Escalona
# Este script genera y/o actualiza los mirrors de Canaima
echo "Script de actualización automática de MIRRORs"
echo "Verificando..."
# Comprobamos si debmirror ya se está ejecutando
st=`ps cax |grep -c "debmirror"`
echo "Analizando Ejecución..."
if [ $st -eq 0 ];then
echo "Ejecutando Actualización...."
debmirror --debug --progress --verbose --nosource --host=repositorio.canaima.softwarelibre.gob.ve --section=usuarios --method=rsync --root=:canaima --dist=estable --arch=i386,amd64 --ignore-release-gpg --rsync-options=-aIL /var/www/canaima
debmirror --debug --progress --verbose --nosource --host=seguridad.canaima.softwarelibre.gob.ve --section=usuarios --method=http --root=: --dist=seguridad --arch=i386,amd64 --ignore-release-gpg --rsync-options=-aIL /var/www/canaima-seguridad
debmirror --debug --progress --verbose --nosource --host=universo.canaima.softwarelibre.gob.ve --section=main,contrib,non-free --method=rsync --root=:universo --dist=stable --arch=i386,amd64 --ignore-release-gpg --rsync-options=-aIL /var/www/universo
else
echo "Debmirror ya se está ejecutando"
echo "La Actualización esta en proceso..."
fi
Otra cosa uners ya no acepta conexiones rsync, saludos.

¿Cómo crear zonas horarias en Windows?

Uno de los problemas que se les presenta a muchas personas es que no tienen configurado la zona horaria correspondiente a su país, o como es el caso de muchos esta no esta definida en el sistema operativo por X razón, para ello Microsoft a colocado una herramienta a la disposición de muchos de nombre tzedit, super sencilla de utilizar, solo debes seguir estos pasos:

1. Descargar tzedit.exe de la página de Microsoft.
2. Ejecutar el programa para descomprimirlo (por defecto a C:\Program Files).
3. Ejecutar C:\Program Files\TZEDIT.EXE.
4. Oprimir el botón New (Nueva) y agregar la zona horaria que desea según sus características.

Hecho esto, te vas al panel de control, doble clic en fecha y hora, seleccionas la nueva zona horaria, ajustas la hora y listo..

Mas fácil imposible.

También puede interesarte:
 ¿Cómo actualizar zonas horaria en Debian, Ubuntu, Kubuntu y Canaima?
¿Cómo sincronizar la fecha y hora desde la consola (terminal), usando Network Time Protocol (NTP)?

viernes, 14 de junio de 2013

¿Cómo puede evitar que terceros se adueñen de su información?

Actualmente existe la posibilidad de adquirir muchos tipos de equipos tecnológicos que ponen a nuestra disposición muchas bondades, pero estas bondades vienen acompañadas de grandes responsabilidades, ¿Cómo es eso?, fácil, si usted utiliza un equipo celular debe conocer todas las características del cual puede disponer y a su vez, cuales son las ventajas y desventajas que le puede ofrecer.

Sabia que si usted pierde su teléfono celular Nokia, Android y/o BlackBerry puede localizarlo si instalas una aplicación como: Simple Trax para BlackBerry aplicación que por cierto es gratuita, también puedes usar GPS Blip para BlackBerry quien te dirá si el equipo esta en movimiento y a que velocidad va ademas de su ubicación, en tiempo real, otra opción es Nimbuzz que sirve para BlackBerry, Android y Nokia y es gratis, también esta PREY quien te avisara a través de correo electrónico o mediante sms la ubicación del dispositivo, para Nokia esta Phone Locator o Periodic Phone Locator, hay muchas lo importante es indagar un poco y colocar la protección que puedes necesitar en el caso de perdida o robo.

Hay otras aplicaciones que te ayudan a proteger tu información, a bloquear el celular de forma tal que no pueda ser usado con otro chip o sim card, no solo es importante informar a la compañía que presta el servicio para informar la perdida del celular, debes solicitar el bloqueo del IMEI del teléfono a la compañía que te presta el servicio, también debes cifrar tu información usando algún software que evite que terceros puedan leer o ver la información contenida en la tarjeta SD o MicroSd del teléfono.

F-Secure Anti-Thef es un programa que al detectar que le cambiaron el sim card o chip solicita una contraseña para poder prender el equipo, si el equipo estaba encendido cuando lo perdiste, con solo enviarle un mensaje sms podrás bloquearlo de forma tal que otros no lo podrán usar, hay otros programas que al enviar un sms al celular puede hasta formatear el teléfono y dejarlo inservible para terceros.

Hewlett Packard o HP, pone a la disposición de sus clientes la posibilidad de rastrear y proteger la información de su computadores la empresa Eset aparte de dar un servicio de protección de Antivirus, Firewaall y Malware también hacen el rastreo de tu equipo extraviado o hurtado, hay otras empresas del mercado que están cada día realizando lo mismo para que usted tenga la posibilidad de proteger y recuperar su inversión, esto también es aplicable a computadores, servidores, equipos portátiles y table, existen múltiples formas y muchos programas pagos y gratuitos que te pueden ayudar a evitar que otros lean o vean su información y sus fotografías, es cuestión de dedicarle un poquito de tiempo para brindarse así mismo la seguridad que necesita, recuerda: es de ti saber y disponer como y cuando, y mantener la seguridad de tus datos. No todo es 100% seguro, pero podemos evitar cualquier tipo de eventualidades.

miércoles, 12 de junio de 2013

Los software gratuitos, las redes sociales, los teléfonos y la seguridad de datos

¿En el mundo tecnológico actual realmente esta segura tu información? ¿? ¿Cuántas veces decimos o recomendamos un Software por el simple hecho de que es gratis? ¿Cuántas veces rehusamos pagar por un producto si tenemos otro parecido gratis? ¿Realmente es 100% gratis? ¿Eso gratis me ofrece la seguridad que necesito?.

Con el uso de estos nuevos teléfonos inteligentes, lamentablemente corremos riesgos de activar y/o tener activos una función que muy fácilmente puede hacer que otra persona disponga usando o no alguna artimaña para sustraer tu información, como por ejemplo las citas medicas, la reunión escolar, o simplemente el día que te abonaron tu salario, ¿Cómo es esto? usando software en tus dispositivos electrónicos que pueden y hacen sustracción de tus actividades, como: con quien hablas mas, a quien le escribes mas mensajes, con quien realizas chat, a quienes tienes de amigos.

¿Te parece exagerado? ¿Eres cómo yo que no le importa revelar tu información a cualquiera y/o simplemente no te importa? Bueno déjeme decirle que eso pensaba hasta que de mi cuenta de ahorros me sustrajeron una gran cantidad de dolares hasta con céntimos, ¿sorprendido?, yo también quede extremadamente sorprendido cuando me di cuenta que mis ahorros los estaba disfrutando otra persona, y mas aun cuando el banco me dice: Sr. usted es el único responsable de los manejos y/o transacciones que a bien haga y/o deje de hacer con su cuenta, ¿increíble verdad?.

Inocente de como sucedieron las cosas y sin darle mucha importancia a la situación, tratándome de armar de valor para recuperarme de aquel devastador golpe financiero, unos días después ... ¡zas!, otro golpe mas, recibo una llamada de otro banco para decirme que acaban de sustraer de mi cuenta tres veces mas que en el caso anterior, lo primero que dije: ¡Como es la vaina!, seguido de ¿Quien es usted y de que diablos esta hablando?, la persona se identifico y me explico lo sucedido, mi reacción en el momento fue decirle: mire yo no se quien es y de que demonios me habla, y tranque el teléfono. Preocupado por la situación me dirijí a un computador personal, el cual era de ni propiedad y de uso continuo, accedo al servicio web del banco y veo todas las transacciones que habían realizado, y los montos, sume los gastos, y efectivamente era la cantidad que la persona me había dicho por teléfono, el dolor, la rabia, y las preguntas comenzaron a surgir ¿increíble verdad?.

Muchas compañías ofrecen sus productos de forma gratuita por un tiempo determinado y en otros casos indefinido, pero con menores características que su mismo producto en versión paga. Hay otras empresas que dan su producto de forma gratuita y no tienen versiones pagas, pero dentro de esos programas lo que hacen es habilitar códigos que pueden y hacen sustracción de su información personal, preferencias de navegación, conteo de uso de programas, usuarios y claves de acceso, horas en que usas el teléfono, el computador y table, es por ello que por mas simple que tu vida sea, y por mas simple que tu pienses que seas, debes tener en cuenta que cualquier información sobre tu vida vale millones para otros.

Así es como la gente de Microsoft, Google, Facebook, Twitter, y otras redes sociales hacen dinero, suministrando tus preferencias, tus gustos, tus deseos, tus actividades, esa información para el mercado financiero vale muchísimo dinero, dinero que disfrutan otros a costillas tuyas. El día de ayer fui a un evento de IBM y salio a colación el tema de seguridad de la información y el como hay empresas o compañías de teléfonos que observan cuantas llamadas perdidas tienes y donde estabas ubicado en el momento que se realizo cada una de estas, ¿te parece común y/o no importante?, bueno, la empresa de telecomunicaciones llamó al suscriptor y le dice: sabemos que tiene tantas llamadas perdidas, lamentamos que no haya podido realizarlas, queremos ofrecerles nuestras mas sinceras disculpas y para compensarlo le daremos un vale de CINCUENTA DOLARES (50,00 $) para que pueda comprar en cualquiera de nuestras tiendas cualquier accesorio para su Iphone 5, ¿genial verdad?.

La verdad no creo que sea tan genial, pues veo que la empresa acaba de vender CINCUENTA DOLARES (50,00 $) y si le sumamos los gastos de publicidad que le da el de boca en boca (cuando le recomiendas a un amigo la compañía de celular que usas, o le cuentas lo sucedido y este sale corriendo a contarlo y a realzar el cambio de compañía de telecomunicaciones). Cada día la vida de todos depende de grandes conglomerados empresariales, ¿Se escucha de izquierda? si pero es la verdad, realizar un producto, un software, un sistema x, siempre tiene costos, costos que alguien al final del tunel debe pagar, y ese pago somos nosotros, los usuarios finales.

Ahora bien, al pasar del tiempo he recibido llamadas de colegas y clientes que me hacen mención de diferentes tipos de situación: mi computador esta lento; mi computador se apaga o prende solo; me salen cuadros de dialogo en la pantalla; no puedo acceder a x pagina web. Al hacer la revisión de los equipos me pude percatar de que utilizan muchas barras de herramientas y otros software gratuitos que tienen códigos maliciosos, pero eso no es todo haciendo un análisis de los otros programas también me pude dar cuenta que existen software propietarios (pagos) que realizan las mismas actividades, pero con la pantalla de que ellos son 100% seguros.

Todos los dispositivos electrónicos e inalámbricos son capaces de realizar un seguimiento de sus propietarios, y algunas empresas consideran que no es necesario ocultar sus intenciones de espiar a sus clientes. Por ejemplo, Comcast, Google TV, Microsoft y Verizon ya han solicitado una patente sobre el diseño de televisores y grabadoras de vídeo digital capaces de ver lo que hacen los espectadores durante su uso. La moneda Bitcoin, que no tiene un centro emisor ni regulador formal para influir en su curso, no encaja en el esquema de la economía mundial moderna. Es por eso que deliberadamente se ve desacreditada por los propietarios reales del sistema financiero internacional, lo que socava al Bitcoin.

Es de ti saber y disponer como y cuando lo vas a pagar, y mantener la seguridad de tus datos. No todo lo que brilla es oro y como suelo decir no todo es 100% seguro, pero podemos evitar cualquier tipo de eventualidades. ¿Es o no es bueno la ley sopa? ¿Hasta donde esa ley me puede proteger?

lunes, 10 de junio de 2013

Eliminando Malware (malicious software), badware (código maligno), software malicioso y/o software malintencionado de mi equipo Linux o Windows

Malware (del inglés malicious software), también llamado badware (código maligno), software malicioso y/o software malintencionado, es un tipo de software que tiene como objetivo infiltrarse o dañar una computadora y/o Sistema de información sin el consentimiento de su propietario.
El término malware es muy utilizado por profesionales de la informática para referirse a una variedad de software hostil, intrusivo o molesto. El término virus informático suele aplicarse de forma incorrecta para referirse a todos los tipos de malware, incluidos los virus verdaderos.
El software se considera malware en función de los efectos que, pensados por el creador, provoque un comportamiento irregular y/o expiatorio dentro del computador y/o Sistema de información. El término incluye virus, gusanos, troyanos, la mayor parte de los rootkits, spyware, adware intrusivo, crimeware y otros software maliciosos y/o indeseables.
El siguiente procedimiento debe realizarse en los perfiles de cada usuario que contenga el sistema operativo desconectado de la red local y/o Internet.
  1. En el caso de que los usuarios estén solo en el grupo usuarios, deben agregarlo al grupo administradores, y una vez terminado revertirlo, dejando al usuario solo en en el grupo usuarios.
    Si el usuario tenía privilegios de administrador al comenzar las tareas, entonces serán eliminados esos privilegios al finalizar este procedimiento, quitándolo del grupo administradores y dejándolo solo el grupo usuarios. En Linux no haremos estos cambios.
  2. Nos vamos a complementos de Firefox e Internet Explorer, y eliminamos todas las barras y complementos desconocidos, y que producen trafico de red, como: Flipora, Conduit, Moxilnet, Ask, Avg Safe Search, Search.Alot.com, Alot.com, Alothome.com, MyWebSearch, ScorecardResearch, etc. En algunos casos para eliminarlos debemos ir al panel de control, y en agregar y quitar programas eliminaremos los software maliciosos instalados.

  3. Eliminamos todos los archivos temporales, historiales, configuraciones, cache, etc... en cada navegador.



  4. En Firefox modificamos las configuraciones del sistema, colocamos en la barra de direcciones about:config y aceptamos, en el cuadro de dialogo que nos sale le damos: tendré cuidado, luego ordenamos la búsqueda para que nos una todas las opciones establecidas por el usuario, por ultimo las restableceremos a predeterminado dándole click derecho a cada uno y seleccionando restaurar.

  5. En Internet Explorer, revisamos que todas las opciones podamos modificarlas y restaurarlas a predeterminado de configuración del navegador, si al seleccionar restaurar este nos coloca una pagina de inicio diferente a MSN o Microsoft, entonces tenemos que tomar toda esa dirección y anotarla puesto que la buscaremos en el regedit y eliminaremos todas esas configuraciones.



  6. Cerramos todo los navegadores, abrimos el regedit, buscamos todas las claves que contengan el nombre Flipora, Conduit, Moxilnet, Ask.com, Avg Safe Search, Alot.com, scorecardresearch, etc y por ultimo la de la pagina de inicio establecida en Internet Explorer, que es la que tomamos previamente en el paso anterior (es diferente a la de MSN o Microsoft), y procedemos a eliminarlas todas.
  7. En el panel de control revisamos que estén activas las actualizaciones automáticas y configuradas para descargar e instalar a una hora definida.
  8. Descargamos, actualizamos y ejecutamos el programa Antimalware malwarebytes de la pagina http://es.malwarebytes.orgy realizamos un scan y/o revisión de todos los archivos y carpetas del disco y eliminamos cualquier amenaza encontrada.
  9. Descargamos, y ejecutamos el programa ccleaner de la pagina http://www.piriform.com/ccleaner, analizamos y eliminamos todos los archivos temporales, buscamos y reparamos las claves del registro, hacemos una nueva revisión del registro y reparamos, luego nos vamos a la configuración del inicio del equipo y eliminamos todas las claves desconocidas y asociadas a los software que desinstalamos.



  10. Instalamos, actualizamos y configuramos el antivirus que usted desee, para que realice las tareas de búsqueda, limpieza y protección de virus todos los días o una vez a la semana a todos los archivos y carpetas, tenga protección en tiempo real de todas las unidades.
    Si tu antivirus no ofrece y/o dispone de una protección de red (Firewall), debes activar el que trae el Sistema.
  11. Reiniciamos el computador y revisamos que las configuraciones están como se establecieron, y descargamos las actualizaciones del sistema operativo y las instalamos, por ultimo eliminamos el acceso de administrador a los usuarios cosa que no haremos en Linux.
Cualquier cosa: si no sabes y/o no te atreves, pues comunícate conmigo que gustosamente podre ayudarte.

Recuperar memoria USB inservible, usando DEBIAN

Si tienes una de esas memorias USB que están tan dañadas que tu Linux ya ni las reconoce, intenta hacer lo siguiente antes de tirarla y quizás te dure algún tiempo más.

En mi caso el problema era que la memoria tenía la estructura lógica tan corrupta que no había forma de que el sistema se aclarara con lo que había dentro.

El dmesg suele mostrar algo similar a lo siguiente en este caso:
sdb: rw=0, want=39712621, limit=2009088
attempt to access beyond end of device
sdb: rw=0, want=39712622, limit=2009088
attempt to access beyond end of device
sdb: rw=0, want=39712623, limit=2009088
attempt to access beyond end of device
sdb: rw=0, want=39712664, limit=2009088
attempt to access beyond end of device
sdb: rw=0, want=39712665, limit=2009088
attempt to access beyond end of device


En estas circunstancias el fdisk es incapaz de reorganizar la memoria de manera adecuada:

# fdisk /dev/sdb
No se puede buscar en /dev/sdb



Así que lo primero es poner a cero nuestro dispositivo:
# dd if=/dev/zero of=/dev/sdb

Después de esto ya podemos usar el fdisk y el mkfs:
# fdisk /dev/sdb

# mkfs.tipo_de_partición /dev/sdb1

Y ya tenemos nuestra memoria lista para ser usada.

jueves, 4 de abril de 2013

Activar NFS, TZDATA y TARJETA DE RED en un equipo virtualizado con openvz en Proxmox 2.1-1

Estaba realizando pruebas de creación de equipos virtuales en PROXMOX, al crear los equipos usando openvz me encontré con varios inconvenientes:
  1. La tarjeta de red no aparece configurada.
  2. Al instalar nfs-kernel-server o nfs-client, el equipo no funcionaba correctamente, no compartía el directorio o no montar un directorio NFS compartido.
  3. La actualización de la hora del equipo no se realizaba automáticamente.
Para que esto se pudiese hacer sin ningún tipo de problema hice lo siguiente:
  1. Apague la maquina virtual creada con  openvz.
  2. Ejecute: vzctl set numero_de_la_maquina_virtual --features "nfs:on" --save, para activar el uso de nfs en el equipo.
  3. Luego modifique el archivo: /etc/pve/openvz/numero_de_la_maquina_virtual.conf, y donde están los parámetros de configuración de "CPU fair scheduler parameter" agregue al final "CAPABILITY="SYS_TIME:on"".
  4. Inicie la maquina virtual y realice la reconfiguración del paquete TZDATA con dpkg-reconfigure.
  5. Para activar la tarjeta de red, simplemente modificamos el archivo /etc/network/interfaces y agregamos "auto eth0" y "iface eth0 inet dhcp" y reiniciamos el servicio de red.

Nota: también puedes solo modificar el archivo del equipo virtual y agregarle:
CAPABILITY="SYS_TIME:on" y FEATURES="nfs:on "

Listo, ya tenemos todo activo, mas fácil imposible.

jueves, 14 de marzo de 2013

Haciendo un cluster con Proxmox 2.1-1

Después de hacer la instalación del sistema operativo, debes hacer lo siguiente:
  1. Configurar y actualizar la lista de paquetes con los repositorios de Debian.
  2. Instalar y configurar: ntp y ntpdate.
  3. Actualizar la hora y reiniciar los servicios de ntp.
  4. Ejecutar en la maquina master: pvecm create nombre_del_closter.
  5. Ejecutar en las maquinas clientes: pvecm add ip_del_maestro.
  6. Ejecutas en cada maquina: pvecm node y verificas cuales maquinas están agregadas.

Si al ejecutar: pvecm node en unos de los equipos encuentras una diferencia, si al tratar de agregar al cluster o después de reiniciar el equipo, falla el apache de uno de los nodos, debes hacer lo siguiente:
  1. Reiniciar el equipo.
  2. Parar el  servicio de apache.
  3. Ejecutar: pvecm updatecerts.
  4. Iniciar el servicio de apache.

Con: pvecm status verificas que todas tengan el quorum y estén conectadas.

Nota: si no quieres configurar los equipos como servidor de hora, tranquilamente puedes dejar de hacerlo.

miércoles, 13 de marzo de 2013

Respaldo de las bases de datos de MySql

Este es un script para hacer respaldo de todas y varias bases de datos MySql, las cuales se guardan en archivos separados y ordenados por fechas, creamos un directorio donde guardaremos la información, se comprime la información, movemos el archivo de ultimo de mes a otro directorio, y borramos todos los respaldos mayores a 8 días.

#!/bin/sh

usuario='bck'
clave='clave'
fecha=$(date +%d-%m-%Y)
directorio=/home/soporte/backups/bck_$fecha
comprimido=/home/soporte/backups/bck.tar.gz

rm $comprimido

mkdir $directorio

#/usr/bin/mysqldump --user="$usuario" --password="$clave" --all-databases | gzip -9 > $directorio/all_$fecha.sql.gz

/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases vanguardia | gzip -9 > $directorio/vanguardia_$fecha.sql.gz

#/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases prueba | gzip -9 > $directorio/prueba_$fecha.sql.gz

/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases alba | gzip -9 > $directorio/alba_$fecha.sql.gz

/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases estatus | gzip -9 > $directorio/estatus_$fecha.sql.gz

#/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases portal | gzip -9 > $directorio/portal_$fecha.sql.gz

/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases pro | gzip -9 > $directorio/pro_$fecha.sql.gz

/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases pro2010 | gzip -9 > $directorio/pro2010_$fecha.sql.gz

/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases cierre | gzip -9 > $directorio/cierre_$fecha.sql.gz

/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases home | gzip -9 > $directorio/home_$fecha.sql.gz

/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases alemania | gzip -9 > $directorio/alemania_$fecha.sql.gz

/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases rusia | gzip -9 > $directorio/rusia_$fecha.sql.gz

/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases Internacionales | gzip -9 > $directorio/internacionales_$fecha.sql.gz

/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases pro2011 | gzip -9 > $directorio/pro2011_$fecha.sql.gz

/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases pro2012 | gzip -9 > $directorio/pro2012_$fecha.sql.gz

/usr/bin/mysqldump --user="$usuario" --password="$clave" --databases pro2013 | gzip -9 > $directorio/pro2013_$fecha.sql.gz

chmod -R 777 $directorio

tar -czf $comprimido $directorio

find /home/soporte/backups/* -name "bck_30*" -exec mv {} /home/soporte/historico \;

find /home/soporte/backups/* -mtime +8 -exec rm -r -f {} \;

exit 0

Guía rápida de XEN

La instalación está basada en Debian Lenny 5.0 (AMD 64 bits)
Este post es una versión reducida del Author: Falko Timme, la versión original está en inglés y pueden consultarla en el siguiente link:
http://www.howtoforge.com/virtualization-with-xen-on-debian-lenny-amd64

Instalamos paquetes necesarios
# apt-get install xen-hypervisor-3.2-1-amd64 xen-linux-system-2.6.26-1-xen-amd64 xen-utils-3.2-1 xenstore-utils xenwatch xen-shell xen-tools

Editamos /etc/modules modificamos la entrada loop y la dejamos de la siguiente forma:
# vi /etc/modules

loop max_loop=64

Editamos /etc/xen/xend-config.sxp
# vi /etc/xen/xend-config.sxp

Descomentamos la entrada (network-script network-bridge) y comentamos (network-script network-dummy). También comprobamos que (vif-script vif-bridge) está habilitado.

(network-script network-bridge)

#(network-script network-dummy)

(vif-script vif-bridge)

Ahora reiniciamos el equipo.
# reboot

Comprobamos que tenemos el kernel adecuado.
# uname -r

Debería de mostrar algo como:
server1:~# uname -r
2.6.26-1-xen-amd64
server1:~#


Configuración de Xen utilizando imagenes de disco (Xen ya está instalado) ver instalación.

Editamos /etc/xen-tools/xen-tools.conf, este es el archivo de configuración que se emplea al ejecutar xen-create-image (opciones por defecto para las nuevas máquinas).

#vi /etc/xen-tools/xen-tools.conf

dir = /home/xen # Directorio donde se crearán las nuevas máquinas
dist = lenny # Distribuición que se instalará por defecto
gateway = 192.168.0.254
netmask = 255.255.255.0
broadcast = 192.168.0.255
passwd = 1 # nos permite elegir un passowrd para la nueva máquina.
mirror = http://ftp.de.debian.org/debian/
serial_device = hvc0
disk_device = xvda

Una vez configuradas las opciones por defecto, crearemos el directorio para las nuevas máquinas.
# mkdir /home/xen

Ahora creamos el host con el siguiente comando, podemos cambiar las opciones según nuestras necesidades.
# xen-create-image –hostname=nombre.example.com –size=5Gb –swap=512Mb –ip=192.168.0.100 –memory=256Mb –arch=amd64 –role=udev

Si queremos ver más opciones, consultamos el manual.
# man xen-create-image

Para arrancar nuestro nuevo host, ejecutamos el siguiente comando.
# xm create /etc/xen/nombre.example.com.cfg

Ya podemos acceder a la nueva máquina de la siguiente manera.
# xm console nombre.example.com
para salir de la consola debes utilizar lo siguiente: control+altgr+]

Si queremos que la máquina se arranque automaticamente en el próximo reinicio.
# ln -s /etc/xen/nombre.example.com.cfg /etc/xen/auto

Comandos utiles:

Muestra las máquinas que están ejecutandose
# xm list

Apaga la máquina
# xm shutdown nombre.example.com

Fuerza el apagado de la máquina virtual
# xm destroy nombre.example.com

Muestra todos los comandos disponibles.
# xm help

Respaldar y restaurar la base de datos postgres

Para hacer respaldo de la base de datos postgres:
1) iniciar sesión como postgres
2) realizar un psql con el usuario postgres para hacer un "checkpoint;"
3) ejecutar el comando para marcar cuando se comienza a realizar el backup de la base de datos: psql -c "select pg_start_backup('esto es un comentario y puedes colocar lo que tu quieras');"
4) hacer un tar.gz del cluster con el comando: tar-cf nombre_del_archivo.tar ubicación_del_cluster
5) ejecutar el comando para marcar cuando se termino de realizar el backup de la base de datos: psql -c "select pg_stop_backup();"

para hacer un recovery de la base de datos postgres:
1) para el servicio o el closter con el comando: pg_ctl stop
2) realizar un respaldo del momento de la falla en caso de ocurrir un error en la restauración
3) borrar el cluster
4) revisar
4) restaurar el archivo .tar que se realizo en el paso cuatro de como hacer respaldo (el respaldo viejo) con el comando: tar -xf nombre_del_archivo
5) borrar el pg_xlog del cluster que se restauro
6) restaurar el pg_xlog del respaldo que se realizo en el paso dos de restauración
7) configurar el archivo recovery.conf donde le indicamos donde se estan archivando los wal y le indicamos hasta donde vas a recuperar 8 el archivo recovery.conf se obtiene de /usr/share/postgres/8.3/recovery.com.sample
8) iniciar el servicio o el cluster con pg_ctl start

martes, 12 de marzo de 2013

Como recuperar archivos borrados en Linux y Windows usando Linux

¿A quién no le ha pasado de perder un archivo accidentalmente del Pen Drive, Disco Duro, etc?. En estos casos existe una llamada photorec. Para utilizarla primero hacemos (en terminal):
Instalar la aplicación testdisk
Luego para recuperar los archivos simplemente tecleamos:
    photorec
  • El programa se ejecuta desde consola, pero es muy intuitivo.
  • Posteriormente nos pedirá que le indiquemos desde que unidad queremos recuperar los datos, y nos saldrá la lista de las unidades que tengamos montadas.
  • Luego el programa detectara los diferentes tipos de particiones bien sean FAT, EXT, etc … y seleccionaremos la correcta.
  • Después tendremos que seleccionar una carpeta o ruta donde el programa depositara os ficheros borrados que vaya detectado. Por ultimo pulsando “Y” (YES), empezara el proceso.
El programa organiza en carpetas todo lo que vaya detectando. Listo, ya solo queda ver el contenido de las carpetas.

jueves, 7 de marzo de 2013

Manual de Iptables

En este manual se muestran las habituales arquitecturas de redes con firewall y la forma de montar iptables para cada caso, con distintas opciones para cada ejemplo.
1.2 Revision: añadidos los mismos casos pero con DROP por defecto.

Por Pello Xabier Altadill Izura
Ingeniero Informático por la UPV-EHU
http://www.pello.info/forum/iptables
(Actualizaciones y ejemplos en http://www.pello.info - VERSIÓN PDF)
1. Qué es un firewall
2. Qué es iptables
3. Al grano: creando un firewall con iptables
3.1 Proteger la propia máquina
3.2 Firewall de una LAN con salida a internet
3.3 Firewall de una LAN con salida a internet con DMZ
3.4 Firewall de una LAN con salida a internet y VPNS
3.5 Firewall puro y duro entre redes
3.6 Firewall con política por defecto DROP
4. Cómo depurar el funcionamiento del firewall
Enlaces, notas, autor




1. Qué es un firewall
Un firewall es un dispositivo que filtra el tráfico entre redes, como mínimo dos. El firewall puede ser un dispositivo físico o un software sobre un sistema operativo. En general debemos verlo como una caja con DOS o mas interfaces de red en la que se establecen una reglas de filtrado con las que se decide si una conexión determinada puede establecerse o no. Incluso puede ir más allá y realizar modificaciones sobre las comunicaciones, como el NAT.
Esa sería la definición genérica, hoy en dia un firewall es un hardware especifico con un sistema operativo o una IOS que filtra el tráfico TCP/UDP/ICMP/../IP y decide si un paquete pasa, se modifica, se convierte o se descarta. Para que un firewall entre redes funcione como tal debe tener al menos dos tarjetas de red. Esta sería la tipología clásica de un firewall:

Figura 1: esquema de firewall típico entre red local e internet

Esquema típico de firewall para proteger una red local conectada a internet a través de un router. El firewall debe colocarse entre el router (con un único cable) y la red local (conectado al switch o al hub de la LAN)
Dependiendo de las necesidades de cada red, puede ponerse uno o más firewalls para establecer distintos perímetros de seguridad en torno a un sistema. Es frecuente también que se necesite exponer algún servidor a internet (como es el caso de un servidor web, un servidor de correo, etc..), y en esos casos obviamente en principio se debe aceptar cualquier conexión a ellos. Lo que se recomienda en esa situación es situar ese servidor en lugar aparte de la red, el que denominamos DMZ o zona desmilitarizada. El firewall tiene entonces tres entradas:

Figura 2: esquema de firewall entre red local e internet con zona DMZ para servidores expuestos

En la zona desmilitarizada se pueden poner tantos servidores como se necesiten. Con esta arquitectura, permitimos que el servidor sea accesible desde internet de tal forma que si es atacado y se gana acceso a él, la red local sigue protegida por el firewall. Esta estructura de DMZ puede hacerse también con un doble firewall (aunque como se ve se puede usar un único dispositivo con al menos tres interfaces de red). Sería un esquema como este:

Figura 3: esquema de firewall entre red local e internet con zona DMZ para servidores expuestos creado con doble firewall(perímetro)


Los firewalls se pueden usar en cualquier red. Es habitual tenerlos como protección de internet en las empresas, aunque ahí también suelen tener una doble función: controlar los accesos externos hacia dentro y también los internos hacia el exterior; esto último se hace con el firewall o frecuentemente con un proxy (que también utilizan reglas, aunque de más alto nivel).
También, en empresas de hosting con muchos servidores alojados lo normal es encontrarnos uno o más firewalls ya sea filtrando toda la instalación o parte de ella:

Figura 4: esquema de firewall entre redes, en la que solo se filtra y no se hace NAT



Sea el tipo de firewall que sea, generalmente no tendrá mas que un conjunto de reglas en las que se examina el origen y destino de los paquetes del protocolo tcp/ip. En cuanto a protocolos es probable que sean capaces de filtrar muchos tipos de ellos, no solo los tcp, también los udp, los icmp, los gre y otros protocolos vinculados a vpns. Este podría ser (en pseudo-lenguaje) un el conjunto de reglas de un firewall del primer gráfico:
Politica por defecto ACEPTAR.
Todo lo que venga de la red local al firewall ACEPTAR
Todo lo que venga de la ip de mi casa al puerto tcp 22 ACEPTAR
Todo lo que venga de la ip de casa del jefe al puerto tcp 1723 ACEPTAR
Todo lo que venga de hora.rediris.es al puerto udo 123 ACEPTAR
Todo lo que venga de la red local y vaya al exterior ENMASCARAR
Todo lo que venga del exterior al puerto tcp 1 al 1024 DENEGAR
Todo lo que venga del exterior al puerto tcp 3389 DENEGAR
Todo lo que venga del exterior al puerto udp 1 al 1024 DENEGAR
En definitiva lo que se hace es:
- Habilita el acceso a puertos de administración a determinadas IPs privilegiadas
- Enmascara el trafico de la red local hacia el exterior (NAT, una petición de un pc de la LAN sale al exterior con la ip pública), para poder salir a internet
- Deniega el acceso desde el exterior a puertos de administración y a todo lo que este entre 1 y 1024.
Hay dos maneras de implementar un firewall:
1) Política por defecto ACEPTAR: en principio todo lo que entra y sale por el firewall se acepta y solo se denegará lo que se diga explícitamente.
2) Política por defecto DENEGAR: todo esta denegado, y solo se permitirá pasar por el firewall aquellos que se permita explícitamente.
Como es obvio imaginar, la primera política facilita mucho la gestión del firewall, ya que simplemente nos tenemos que preocupar de proteger aquellos puertos o direcciones que sabemos que nos interesa; el resto no importa tanto y se deja pasar. Por ejemplo, si queremos proteger una máquina linux, podemos hacer un netstat -ln (o netstat -an, o netstat -puta | grep LISTEN), saber que puertos están abiertos, poner reglas para proteger esos puertos y ya está. ¿Para qué vamos a proteger un puerto que realmente nunca se va a abrir?
El único problema que podemos tener es que no controlemos que es lo que esta abierto, o que en un momento dado se instale un software nuevo que abra un puerto determinado, o que no sepamos que determinados paquetes ICMP son peligrosos. Si la política por defecto es ACEPTAR y no se protege explícitamente, nos la estamos jugando un poco.
En cambio, si la política por defecto es DENEGAR, a no ser que lo permitamos explícitamente, el firewall se convierte en un auténtico MURO infranqueable. El problema es que es mucho más difícil preparar un firewall así, y hay que tener muy claro como funciona el sistema (sea iptables o el que sea) y que es lo que se tiene que abrir sin caer en la tentación de empezar a meter reglas super-permisivas.
Esta configuración de firewall es la recomendada, aunque no es aconsejable usarla si no se domina mínimamente el sistema. Uno de los objetos principales de este documento es mostrar la forma de crear este tipo de firewalls.
IMPORTANTE
El orden en el que se ponen las reglas de firewall es determinante. Normalmente cuando hay que decidir que se hace con un paquete se va comparando con cada regla del firewall hasta que se encuentra una que le afecta (match), y se hace lo que dicte esta regla (aceptar o denegar); después de eso NO SE MIRARÁN MÁS REGLAS para ese paquete. ¿Cuál es el peligro? Si ponemos reglas muy permisivas entre las primeras del firewall, puede que las siguientes no se apliquen y no sirvan de nada.

 
2. Qué es iptables
IPtables es un sistema de firewall vinculado al kernel de linux que se ha extendido enormemente a partir del kernel 2.4 de este sistema operativo. Al igual que el anterior sistema ipchains, un firewall de iptables no es como un servidor que lo iniciamos o detenemos o que se pueda caer por un error de programación(esto es una pequeña mentira, ha tenido alguna vulnerabilidad que permite DoS, pero nunca tendrá tanto peligro como las aplicaciones que escuchan en determinado puerto TCP): iptables esta integrado con el kernel, es parte del sistema operativo. ¿Cómo se pone en marcha? Realmente lo que se hace es aplicar reglas. Para ellos se ejecuta el comando iptables, con el que añadimos, borramos, o creamos reglas. Por ello un firewall de iptables no es sino un simple script de shell en el que se van ejecutando las reglas de firewall.
Notas: bueno, para los más geeks y tocapelotas. Vale, se puede implementar un script de inicio en /etc/rc.d/INIT.d (o /etc/INIT.d ) con el que hagamos que iptables se "inicie o pare" como un servidor más. Lo podemos hacer nosotros o es probable que venga en la distribución (como en redhat por ejemplo). También se pueden salvar las reglas aplicadas con el comando iptables-save en un fichero y gestionar ese fichero con una aplicación o front-end desde la X o desde webmin.
Vale, tenemos una máquina linux con soporte para iptables, tiene reglas aplicadas y empiezan a llegar/salir/pasar paquetes. No nos liemos: olvidemos cuantas tarjetas de red hay, que direcciones ip tiene la máquina y olvidemos si el paquete entra o sale. Las reglas de firewall están a nivel de kernel, y al kernel lo que le llega es un paquete (digamos, un marrón ;) ) y tiene que decidir que hacer con él. El kernel lo que hace es, dependiendo si el paquete es para la propia maquina o para otra maquina, consultar las reglas de firewall y decidir que hacer con el paquete según mande el firewall. Este es el camino que seguiría un paquete en el kernel:

Figura 5: cuando un paquete u otra comunicación llega al kernel con iptables se sigue este camino


Como se ve en el gráfico, básicamente se mira si el paquete esta destinado a la propia maquina o si va a otra. Para los paquetes (o datagramas, según el protocolo) que van a la propia maquina se aplican las reglas INPUT y OUTPUT, y para filtrar paquetes que van a otras redes o maquinas se aplican simplemente reglas FORWARD.
INPUT,OUTPUT y FORWARD son los tres tipos de reglas de filtrado. Pero antes de aplicar esas reglas es posible aplicar reglas de NAT: estas se usan para hacer redirecciones de puertos o cambios en las IPs de origen y destino. Veremos ejemplos.
E incluso antes de las reglas de NAT se pueden meter reglas de tipo MANGLE, destinadas a modificar los paquetes; son reglas poco conocidas y es probable que no las usen.
Por tanto tenemos tres tipos de reglas en iptables:
- MANGLE
- NAT: reglas PREROUTING, POSTROUTING
- FILTER: reglas INPUT, OUTPUT, FORWARD.



3. Al grano: creando un firewall con iptables
En este tutorial se ha intentado dar una breve introducción sobre lo que es un firewall, sus tipologías básicas y en concreto se presenta el sistema iptables. Pero vamos al grano y empezamos a ver configuraciones de firewall con iptables, empezando desde la más básica a las más complejas, en las que se establece la denegación como política por defecto.
Nota: se recomienda encarecidamente ir practicando estas reglas en alguna maquina linux disponible, y especialmente hacer uso de la herramienta iptraf para depurar y comprobar el funcionamiento de iptables. Con iptraf podemos comprobar si las conexiones TCP/IP se llegan a establecer o no. Una conexión tcp/ip empieza con el three-way-handshake:
- La maquina que desea conectarse a otra envia un paquete con flan SYN
- Si la otra maquina acepta, envia un SYN/ACK
- Entonces la máquina establece la conexión.
Si el firewall esta denegando la conexión, con iptraf veremos que la maquina origen solo manda paquetes con el flan S (de SYN), y que del otro lado no sale nada. Saber usar iptraf nos ayudará mucho.


3.1 Proteger la propia máquina
Muy bien, tenemos una máquina linux pinchada en internet y queremos protegerla con su propio firewall. Lo único que tenemos que hacer es crear un script de shell en el que se van aplicando las reglas.
Los scripts de iptables pueden tener este aspecto:
Saludo a la afición (echo)
Borrado de las reglas aplicadas actualmente (flush)
Aplicación de políticas por defecto para INPUT, OUPUT, FORWARD
Listado de reglas iptables.
Ojo con el orden de las reglas!
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para proteger la propia máquina
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## Empezamos a filtrar
# El localhost se deja (por ejemplo conexiones locales a mysql)
/sbin/iptables -A INPUT -i lo -j ACCEPT
# A nuestra IP le dejamos todo
iptables -A INPUT -s 195.65.34.234 -j ACCEPT
# A un colega le dejamos entrar al mysql para que mantenga la BBDD
iptables -A INPUT -s 231.45.134.23 -p tcp --dport 3306 -j ACCEPT
# A un diseñador le dejamos usar el FTP
iptables -A INPUT -s 80.37.45.194 -p tcp -dport 20:21 -j ACCEPT
# El puerto 80 de www debe estar abierto, es un servidor web.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Y el resto, lo cerramos
iptables -A INPUT -p tcp --dport 20:21 -j DROP
iptables -A INPUT -p tcp --dport 3306 -j DROP
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp --dport 10000 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script

Nota para freaks y geeks: siiii, que ya lo se, se puede mejorar este script usando variables, se puede poner el comando con el path completo, pero limítense a hacer copy-paste. Para el resto de mortales, no olvidarse de ponerle flags de ejecución: chmod +x firewall1.sh o chmod 750 firewall1.sh
En fin, ya se ve, un script de los más simple, con unas pocas reglas con las que cerramos puertos al público a los que no tienen porque tener acceso, salvo el 80. Pero cualquiera con algo de ojo se habrá dado cuenta de que ni se filtra el UDP ni el ICMP. Apostaría cualquier cosa a que el sistema tiene algún puerto udp abierto, y además peligroso como el SNMP. Como he dicho anteriormente, en este tipo de firewall es recordable hacer un netstat para ver que puertos están en estado de escucha (abiertos), y salve que un rootkit nos haya modificado los binarios, netstat nos dará la información precisa que necesitamos. Hay gente que se decanta por hacerse un nmap así mismos. Cuidado: dependiendo de cómo lo ejecutemos quizá no nos muestre todos los puertos, ya que suele mirar los bien conocidos.
Imaginemos que hemos dado un repaso a nuestro sistema, y ahora si que tenemos mejor identificados los puertos tcp y udp abiertos. Pero por si acaso nos curamos en salud y al final del script cerraremos el rango de puertos del 1 al 1024, los reservados tanto para tcp como udp.
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para proteger la propia máquina
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## Empezamos a filtrar
# El localhost se deja (por ejemplo conexiones locales a mysql)
/sbin/iptables -A INPUT -i lo -j ACCEPT
# A nuestra IP le dejamos todo
iptables -A INPUT -s 195.65.34.234 -j ACCEPT
# A un colega le dejamos entrar al mysql para que mantenga la BBDD
iptables -A INPUT -s 231.45.134.23 -p tcp --dport 3306 -j ACCEPT
# A un diseñador le dejamos usar el FTP
iptables -A INPUT -s 80.37.45.194 -p tcp -dport 20:21 -j ACCEPT
# El puerto 80 de www debe estar abierto, es un servidor web.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Cerramos rango de los puertos privilegiados. Cuidado con este tipo de
# barreras, antes hay que abrir a los que si tienen acceso.
iptables -A INPUT -p tcp --dport 1:1024 -j DROP
iptables -A INPUT -p udp --dport 1:1024 -j DROP
# Cerramos otros puertos que estan abiertos
iptables -A INPUT -p tcp --dport 3306 -j DROP
iptables -A INPUT -p tcp --dport 10000 -j DROP
iptables -A INPUT -p udp --dport 10000 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script
¿Sencillo, no? Ahora basta con hacer copy-paste de estas reglas y aplicarlas y ajustarlas en su sistema (quizás uses PostgreSQL). Si tiene miedo de perder el control de una máquina remota, pruebe el script en una máquina local y asegúrese de que aplica lo que usted quiere. Funcionar va a funcionar seguro.
- Versión con DROP por defecto
Vale, queremos que nuestra maquina sea inexcrutable y que solo tenga abierto un puerto imprescindible para dar determinado servicio. Con DROP por defecto se protege la maquina perfectamente, aunque hay que añadir algunas reglas para que la propia máquina sea capaz de salir a internet.¿ Para qué? hombre, porque la maquina necesita actualizaciones, consultar DNS por udp, sacar correo etc.
Veamos un posible script:

#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para proteger la propia máquina con DROP por defecto
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto: DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
## Empezamos a filtrar? no! empezamos a abrir! porque ahora esta TODO denegado.
## Debemos decir de manera explicita qué es lo que queremos abrir
# Operar en localhost sin limitaciones
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
# A nuestra IP le dejamos todo
iptables -A INPUT -s 195.65.34.234 -j ACCEPT
iptables -A OUTPUT -d 195.65.34.234 -j ACCEPT
# Este es el servicio que DA la maquina a internet, por tanto todo paquete entrante se acepta para
# ese puerto y los salientes vinculados se aceptan.
/sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Permitimos que la maquina pueda salir a la web
/sbin/iptables -A INPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
# Ya tambien a webs seguras
/sbin/iptables -A INPUT -p tcp -m tcp --sport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
# Reglas necesarias para FTP pasivo y activo. Se permiten conexiones entrantes YA establecidas
/sbin/iptables -A INPUT -p tcp -m tcp --sport 20:21 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 20:21 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 1024:65535 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# Permitimos la consulta a un primer DNS
/sbin/iptables -A INPUT -s 211.95.64.39 -p udp -m udp --sport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -d 211.95.64.39 -p udp -m udp --dport 53 -j ACCEPT
# Permitimos la consulta a un segundo DNS
/sbin/iptables -A INPUT -s 211.95.79.109 -p udp -m udp --sport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -d 211.95.79.109 -p udp -m udp --dport 53 -j ACCEPT
# Permitimos consultar el reloj de hora.rediris.es (un pentium166) para sincronizarse
/sbin/iptables -A INPUT -s 130.206.3.166 -p udp -m udp --dport 123 -j ACCEPT
/sbin/iptables -A OUTPUT -d 130.206.3.166 -p udp -m udp --sport 123 -j ACCEPT
# Barrera de backup por si cambiamos a modo ACCEPT temporalmente
# Con esto protegemos los puertos reservados y otros well-known
/sbin/iptables -A INPUT -p tcp -m tcp --dport 1:1024 -j DROP
/sbin/iptables -A INPUT -p udp -m udp --dport 1:1024 -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --dport 1723 -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --dport 3306 -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --dport 5432 -j DROP


echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script


3.2 Firewall de una LAN con salida a internet
Ahora vamos a ver una configuración de firewall iptables para el típico caso de red local que necesita salida a internet.

Figura 6: esquema de firewall típico entre red local e internet

¿Qué es lo que hace falta? Obviamente, una regla que haga NAT hacia fuera (enmascaramiento en iptables), con lo que se haría dos veces NAT en el firewall y en el router. Entre el router y el firewall lo normal es que haya una red privada (192.168.1.1 y 192.168.1.2 por ejemplo), aunque dependiendo de las necesidades puede que los dos tengan IP pública. El router se supone que hace un NAT completo hacia dentro (quizá salvo puerto 23), o sea que desde el exterior no se llega al router si no que de forma transparente se "choca" contra el firewall. Lo normal en este tipo de firewalls es poner la política por defecto de FORWARD en denegar (DROP), pero eso lo vemos más adelante.
Veamos como sería este firewall-gateway:
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para firewall entre red-local e internet
##
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## Empezamos a filtrar
## Nota: eth0 es el interfaz conectado al router y eth1 a la LAN
# El localhost se deja (por ejemplo conexiones locales a mysql)
/sbin/iptables -A INPUT -i lo -j ACCEPT
# Al firewall tenemos acceso desde la red local
iptables -A INPUT -s 192.168.10.0/24 -i eth1 -j ACCEPT
# Ahora hacemos enmascaramiento de la red local
# y activamos el BIT DE FORWARDING (imprescindible!!!!!)
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
# Con esto permitimos hacer forward de paquetes en el firewall, o sea
# que otras máquinas puedan salir a traves del firewall.
echo 1 > /proc/sys/net/ipv4/ip_forward
## Y ahora cerramos los accesos indeseados del exterior:
# Nota: 0.0.0.0/0 significa: cualquier red
# Cerramos el rango de puerto bien conocido
iptables -A INPUT -s 0.0.0.0/0 -p tcp -dport 1:1024 -j DROP
iptables -A INPUT -s 0.0.0.0/0 -p udp -dport 1:1024 -j DROP
# Cerramos un puerto de gestión: webmin
iptables -A INPUT -s 0.0.0.0/0 -p tcp -dport 10000 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script

Pero como somos muy malvados queremos que los empleados solamente puedan navegar por internet, denegando el acceso a Kazaa o edonkey. Esta sería una configuración simple pero efectiva.
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para firewall entre red-local e internet
## con filtro para que solo se pueda navegar.
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## Empezamos a filtrar
## Nota: eth0 es el interfaz conectado al router y eth1 a la LAN
# El localhost se deja (por ejemplo conexiones locales a mysql)
/sbin/iptables -A INPUT -i lo -j ACCEPT
# Al firewall tenemos acceso desde la red local
iptables -A INPUT -s 192.168.10.0/24 -i eth1 -j ACCEPT
## Ahora con regla FORWARD filtramos el acceso de la red local
## al exterior. Como se explica antes, a los paquetes que no van dirigidos al
## propio firewall se les aplican reglas de FORWARD
# Aceptamos que vayan a puertos 80
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -p tcp --dport 80 -j ACCEPT
# Aceptamos que vayan a puertos https
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -p tcp --dport 443 -j ACCEPT
# Aceptamos que consulten los DNS
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -p udp --dport 53 -j ACCEPT
# Y denegamos el resto. Si se necesita alguno, ya avisaran
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -j DROP
# Ahora hacemos enmascaramiento de la red local
# y activamos el BIT DE FORWARDING (imprescindible!!!!!)
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
# Con esto permitimos hacer forward de paquetes en el firewall, o sea
# que otras máquinas puedan salir a traves del firewall.
echo 1 > /proc/sys/net/ipv4/ip_forward
## Y ahora cerramos los accesos indeseados del exterior:
# Nota: 0.0.0.0/0 significa: cualquier red
# Cerramos el rango de puerto bien conocido
iptables -A INPUT -s 0.0.0.0/0 -p tcp -dport 1:1024 -j DROP
iptables -A INPUT -s 0.0.0.0/0 -p udp -dport 1:1024 -j DROP
# Cerramos un puerto de gestión: webmin
iptables -A INPUT -s 0.0.0.0/0 -p tcp -dport 10000 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script
Supongamos que este firewall tiene alguna función adicional: es un servidor proxy y además es un servidor de correo. Darle funcionalidades de este tipo a un firewall no es recomendable, porque si no se protegen bien esos puertos o si no está actualizado el software pueden entrar en el firewall a base de xploits comprometiendo TODA la red local. De todas formas muchas empresas no se pueden permitir o no quieren tener una máquina para cada cosa, bastante les cuesta a muchas poner un firewall. Por tanto: si se añaden servicios que deben estar abiertos al público en el propio firewall, nos la estamos jugando, y se recomienda pasar el servicio a otra máquina y ponerla en la DMZ.
Supongamos también que la empresa tiene comerciales en ruta y que se conectan a internet desde su portátil y con una ip dinámica. Supongamos también que el jefe de la empresa quiere acceder a la red local desde casa con una conexión ADSL. Ahora en el firewall debieramos tener instalado un servidor SMTP, pop3, y un PPTPD.
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para firewall entre red-local e internet
## con servicios abiertos de puerto 25, 110, y 1723
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## Empezamos a filtrar
## Nota: eth0 es el interfaz conectado al router y eth1 a la LAN
# El localhost se deja (por ejemplo conexiones locales a mysql)
iptables -A INPUT -i lo -j ACCEPT
# Al firewall tenemos acceso desde la red local
iptables -A INPUT -s 192.168.10.0/24 -i eth1 -j ACCEPT
## Abrimos el acceso a puertos de correo
# Abrimos el puerto 25, hay que configurar bien el relay del servidor SMTP
iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 25 -j ACCEPT
# Abrimos el pop3
iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 110 -j ACCEPT
# Y abrimos el puerto pptpd para la ip del adsl de casa del jefe
iptables -A INPUT -s 211.45.176.24 -p tcp --dport 1723 -j ACCEPT
## Ahora con regla FORWARD filtramos el acceso de la red local
## al exterior. Como se explica antes, a los paquetes que no van dirigidos al
## propio firewall se les aplican reglas de FORWARD
# Aceptamos que vayan a puertos 80
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -p tcp --dport 80 -j ACCEPT
# Aceptamos que vayan a puertos https
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -p tcp --dport 443 -j ACCEPT
# Aceptamos que consulten los DNS
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -p udp --dport 53 -j ACCEPT
# Y denegamos el resto. Si se necesita alguno, ya avisaran
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -j DROP
# Ahora hacemos enmascaramiento de la red local
# y activamos el BIT DE FORWARDING (imprescindible!!!!!)
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
# Con esto permitimos hacer forward de paquetes en el firewall, o sea
# que otras máquinas puedan salir a traves del firewall.
echo 1 > /proc/sys/net/ipv4/ip_forward
## Y ahora cerramos los accesos indeseados del exterior:
# Nota: 0.0.0.0/0 significa: cualquier red
# Cerramos el rango de puerto bien conocido
iptables -A INPUT -s 0.0.0.0/0 -i eth0 -p tcp -dport 1:1024 -j DROP
iptables -A INPUT -s 0.0.0.0/0 -i eth0 -p udp -dport 1:1024 -j DROP
# Cerramos un puerto de gestión: webmin
iptables -A INPUT -s 0.0.0.0/0 -i eth0 -p tcp --dport 10000 -j DROP
# Y cerramos el puerto del servicio PPTPD, solo abierto para el jefe.
iptables -A INPUT -s 0.0.0.0/0 -i eth0 -p tcp --dport 1723 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script

¡Más difícil todavía!
Ahora queremos compartir algún servicio pero de un servidor que tenemos dentro de la red local, por ejemplo el IIS de un servidor windows2000, y además permitir la gestión remota por terminal server para esta máquina para una empresa externa. En este caso lo que hay que hacer es un redirección de puerto. Antes de iptables esto se podía hacer fácilmente con un servidor como rinet. Rinet lo que hace es simplemente abrir un puerto en el firewall y al conectarse a él te lleva hasta el puerto de otra máquina, como una tubería. Con Iptables podemos hacer redirecciones con una ventaja: no perdemos la información de IP origen, cosa que con rinet sí ocurría. En fin, veamos la configuración, con las nuevas reglas de DNAT:
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para firewall entre red-local e internet
## con servicios abiertos de puerto 25, 110, y 1723
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## Empezamos a filtrar
## REDIRECCIONES
# Todo lo que venga por el exterior y vaya al puerto 80 lo redirigimos
# a una maquina interna
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.10.12:80
# Los accesos de un ip determinada a Terminal server se redirigen e esa
# maquina
iptables -t nat -A PREROUTING -s 221.23.124.181 -i eth0 -p tcp --dport 3389 -j DNAT --to 192.168.10.12:3389

## Nota: eth0 es el interfaz conectado al router y eth1 a la LAN
# El localhost se deja (por ejemplo conexiones locales a mysql)
iptables -A INPUT -i lo -j ACCEPT
# Al firewall tenemos acceso desde la red local
iptables -A INPUT -s 192.168.10.0/24 -i eth1 -j ACCEPT
## Abrimos el acceso a puertos de correo
# Abrimos el puerto 25, hay que configurar bien el relay del servidor SMTP
iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 25 -j ACCEPT
# Abrimos el pop3
iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 110 -j ACCEPT
# Y abrimos el puerto pptpd para la ip del adsl de casa del jefe
iptables -A INPUT -s 211.45.176.24 -p tcp --dport 1723 -j ACCEPT
## Ahora con regla FORWARD filtramos el acceso de la red local
## al exterior. Como se explica antes, a los paquetes que no van dirigidos al
## propio firewall se les aplican reglas de FORWARD
# Aceptamos que vayan a puertos 80
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -p tcp --dport 80 -j ACCEPT
# Aceptamos que vayan a puertos https
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -p tcp --dport 443 -j ACCEPT
# Aceptamos que consulten los DNS
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -p udp --dport 53 -j ACCEPT
# Y denegamos el resto. Si se necesita alguno, ya avisaran
iptables -A FORWARD -s 192.168.10.0/24 -i eth1 -j DROP
# Ahora hacemos enmascaramiento de la red local
# y activamos el BIT DE FORWARDING (imprescindible!!!!!)
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
# Con esto permitimos hacer forward de paquetes en el firewall, o sea
# que otras máquinas puedan salir a traves del firewall.
echo 1 > /proc/sys/net/ipv4/ip_forward
## Y ahora cerramos los accesos indeseados del exterior:
# Nota: 0.0.0.0/0 significa: cualquier red
# Cerramos el rango de puerto bien conocido
iptables -A INPUT -s 0.0.0.0/0 -i eth0 -p tcp -dport 1:1024 -j DROP
iptables -A INPUT -s 0.0.0.0/0 -i eth0 -p udp -dport 1:1024 -j DROP
# Cerramos un puerto de gestión: webmin
iptables -A INPUT -s 0.0.0.0/0 -i eth0 -p tcp --dport 10000 -j DROP
# Y cerramos el puerto del servicio PPTPD, solo abierto para el jefe.
iptables -A INPUT -s 0.0.0.0/0 -i eth0 -p tcp --dport 1723 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script
Bueno ya tenemos montada la red, pero conviene insistir en que esta última configuración, con las redirecciones y los servicios de correo funcionando en el firewall es bastante insegura. ¿Qué ocurre si hackean el servidor IIS de la red local? Pues que el firewall no sirve de gran cosa, lo poco que podría hacer una vez se ha entrado en la red local es evitar escaneos hacia el exterior desde la máquina atacada, aunque para ello el firewall debiera tener una buena configuración con denegación por defecto. Si necesitamos ese servidor IIS, basta con comprar una tarjeta de red por 6€ o dolares y crear una DMZ.



3.3 Firewall de una LAN con salida a internet con DMZ
Bueno, esto se va complicando. Imaginemos que tenemos una red parecida a la anterior pero ahora hacemos las cosas bien y colocamos ese servidor IIS en una DMZ:

Figura 7: esquema de firewall entre red local e internet con zona DMZ para servidores expuestos

En este tipo de firewall hay que permitir:
- Acceso de la red local a internet.
- Acceso público al puerto tcp/80 y tcp/443 del servidor de la DMZ
- Acceso del servidor de la DMZ a una BBDD de la LAN
- Obviamente bloquear el resto de acceso de la DMZ hacia la LAN.
¿Qué tipo de reglas son las que hay que usar para filtrar el tráfico entre la DMZ y la LAN? Solo pueden ser las FORWARD, ya que estamos filtrando entre distintas redes, no son paquetes destinados al propio firewall.
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para firewall entre red-local e internet con DMZ
##
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## Empezamos a filtrar
## Nota: eth0 es el interfaz conectado al router y eth1 a la LAN
# Todo lo que venga por el exterior y vaya al puerto 80 lo redirigimos
# a una maquina interna
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.3.2:80
# Los accesos de un ip determinada HTTPS se redirigen e esa
# maquina
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to 192.168.3.2:443
# El localhost se deja (por ejemplo conexiones locales a mysql)
/sbin/iptables -A INPUT -i lo -j ACCEPT
# Al firewall tenemos acceso desde la red local
iptables -A INPUT -s 192.168.10.0/24 -i eth1 -j ACCEPT
# Ahora hacemos enmascaramiento de la red local y de la DMZ
# para que puedan salir haca fuera
# y activamos el BIT DE FORWARDING (imprescindible!!!!!)
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o eth0 -j MASQUERADE
# Con esto permitimos hacer forward de paquetes en el firewall, o sea
# que otras máquinas puedan salir a traves del firewall.
echo 1 > /proc/sys/net/ipv4/ip_forward
## Permitimos el paso de la DMZ a una BBDD de la LAN:
iptables -A FORWARD -s 192.168.3.2 -d 192.168.10.5 -p tcp --dport 5432 -j ACCEPT
iptables -A FORWARD -s 192.168.10.5 -d 192.168.3.2 -p tcp --sport 5432 -j ACCEPT
## permitimos abrir el Terminal server de la DMZ desde la LAN
iptables -A FORWARD -s 192.168.10.0/24 -d 192.168.3.2 -p tcp --sport 1024:65535 --dport 3389 -j ACCEPT
# … hay que hacerlo en uno y otro sentido …
iptables -A FORWARD -s 192.168.3.2 -d 192.168.10.0/24 -p tcp --sport 3389 --dport 1024:65535 -j ACCEPT
# … por que luego:
# Cerramos el acceso de la DMZ a la LAN
iptables -A FORWARD -s 192.168.3.0/24 -d 192.168.10.0/24 -j DROP
## Cerramos el acceso de la DMZ al propio firewall
iptables -A INPUT -s 192.168.3.0/24 -i eth2 -j DROP
## Y ahora cerramos los accesos indeseados del exterior:
# Nota: 0.0.0.0/0 significa: cualquier red
# Cerramos el rango de puerto bien conocido
iptables -A INPUT -s 0.0.0.0/0 -p tcp -dport 1:1024 -j DROP
iptables -A INPUT -s 0.0.0.0/0 -p udp -dport 1:1024 -j DROP
# Cerramos un puerto de gestión: webmin
iptables -A INPUT -s 0.0.0.0/0 -p tcp -dport 10000 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script
Vamos a ver: si las máquinas de la DMZ tienen una ip pública hay que tener muchísimo cuidado de no permitir el FORWARD por defecto. Si en la DMZ hay ip pública NO ES NECESARIO HACER REDIRECCIONES de puerto, sino que basta con rutar los paquetes para llegar hasta la DMZ. Este tipo de necesidades surgen cuando por ejemplo tenemos dos máquinas con servidor web (un apache y un IIS); ¿A cuál de las dos le redirigimos el puerto 80? No hay manera de saberlo (No, con servidores virtuales tampoco, piénsalo), por eso se deben asignar IPs públicas o en su defecto usar puertos distintos.
Por tanto hay que proteger convenientemente toda la DMZ. Tampoco haría falta enmascarar la salida hacia el exterior de la DMZ, si tiene una ip pública ya tiene una pata puesta en internet; obviamente hay que decirle al router como llegar hasta esa ip pública. Así podría ser esta red:

Figura 8: esquema de firewall entre red local e internet con zona DMZ para servidores expuestos usando IPs públicas
 
Y este podría ser un firewall adecuado:
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para firewall entre red-local e internet con DMZ
## pero con IPs públicas.
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## Empezamos a filtrar
## Nota: eth0 es el interfaz conectado al router y eth1 a la LAN
# El localhost se deja (por ejemplo conexiones locales a mysql)
/sbin/iptables -A INPUT -i lo -j ACCEPT
# Al firewall tenemos acceso desde la red local
iptables -A INPUT -s 192.168.10.0/24 -i eth1 -j ACCEPT
# Ahora hacemos enmascaramiento de la red local y de la DMZ
# para que puedan salir haca fuera
# y activamos el BIT DE FORWARDING (imprescindible!!!!!)
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
# Con esto permitimos hacer forward de paquetes en el firewall, o sea
# que otras máquinas puedan salir a traves del firewall.
echo 1 > /proc/sys/net/ipv4/ip_forward
## Permitimos el acceso desde el exterior a los puertos 80 y 443 de DMZ
iptables -A FORWARD -d 212.194.89.152 -p tcp -dport 80 -j ACCEPT
iptables -A FORWARD -d 212.194.89.152 -p tcp -dport 443 -j ACCEPT
iptables -A FORWARD -d 212.194.89.150/30 -j DROP

## Permitimos el paso de la DMZ a una BBDD de la LAN:
iptables -A FORWARD -s 212.194.89.152 -d 192.168.10.5 -p tcp --dport 5432 -j ACCEPT
# en el otro sentido lo mismo
iptables -A FORWARD -s 192.168.10.5 -d 212.194.89.152 -p tcp --sport 5432 -j ACCEPT
## permitimos abrir el Terminal server de la DMZ desde la LAN
iptables -A FORWARD -s 192.168.10.0/24 -d 212.194.89.152 -p tcp --sport 1024:65535 --dport 3389 -j ACCEPT
# … hay que hacerlo en uno y otro sentido …
iptables -A FORWARD -s 212.194.89.152 -d 192.168.10.0/24 -p tcp --sport 3389 --dport 1024:65535 -j ACCEPT
# … por que luego:
# Cerramos el acceso de la DMZ a la LAN
iptables -A FORWARD -s 212.194.89.152 -d 192.168.10.0/24 -j DROP
## Cerramos el acceso de la DMZ al propio firewall
iptables -A INPUT -s 212.194.89.152 -i eth2 -j DROP
## Y ahora cerramos los accesos indeseados del exterior:
# Nota: 0.0.0.0/0 significa: cualquier red
# Cerramos el rango de puerto bien conocido
iptables -A INPUT -s 0.0.0.0/0 -p tcp -dport 1:1024 -j DROP
iptables -A INPUT -s 0.0.0.0/0 -p udp -dport 1:1024 -j DROP
# Cerramos un puerto de gestión: webmin
iptables -A INPUT -s 0.0.0.0/0 -p tcp -dport 10000 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script
ATENCIÓN
Merece la pena pararse a explicar esta parte del firewall:
## permitimos abrir el Terminal server de la DMZ desde la LAN
iptables -A FORWARD -s 192.168.10.0/24 -d 212.194.89.152 -p tcp -sport 1024:65535 --dport 3389 -j ACCEPT
# … hay que hacerlo en uno y otro sentido …
iptables -A FORWARD -s 212.194.89.152 -d 192.168.10.0/24 -p tcp --sport 3389 --dport 1024:65535 -j ACCEPT
# … por que luego:
# Cerramos el acceso de la DMZ a la LAN
iptables -A FORWARD -s 212.194.89.152 -d 192.168.10.0/24 -j DROP
Lo que nos lleva a dos cuestiones:
¿Por qué hay que explicitar la abertura en uno y otro sentido? Porque la tercera regla cierra todo lo que va de la DMZ a la red local. Para abrir el puerto 3389 de tcp es imprescindible que un paquete de ida sea capaz de llegar hasta la DMZ y que a su vez pueda volver a la LAN. Esto de tener que especificar la abertura en uno y otro sentido será el pan de cada día en un iptables con política DROP por defecto: mejor protección pero más trabajo.
¿Por qué se explicita el puerto de origen/destino 1024:65535 en la primera y segunda regla? Imaginemos que un hacker logra acceso a la máquina de la DMZ. Si no especificamos el puerto de destino en esas dos reglas, el hacker puede abrir CUALQUIER puerto de la LAN siempre que pueda establecer como puerto origen suyo el tcp/3389, cosa fácil para un hacker que sepa algo de C o que tenga el programa pertinente a mano. De todas formas el hacker tendría que saber que existe ese tipo de reglas, si es listo probara con puertos de gestión o con puertos netbios. El problema es que se deja un vínculo con la LAN bien para administrarlo remotamente o para establecer relaciones de confianza y ahí es donde reside el peligro.
En las conexiones "legales" no se usa como puerto origen nada por debajo del 1024; cuando alguien se conecta a otro puerto en su extremo abre un puerto por encima del 1024. Especificándolo en la regla de firewall protegeremos un poco mejor la LAN, aunque los puertos por encima de 1024 estarán en peligro.

3.4 Firewall de una LAN con salida a internet y VPNS
En principio este caso no nos tendría que dar mayor problema, aunque la primera vez que lo montemos, el enmascaramiento nos jugará una mala pasada. Por eso conviene echar un vistazo en este caso.

Figura 9: esquema de firewall entre red local e internet con zona DMZ y delegaciones que acceden a DMZ
Supongamos que entre los routers ya se ha establecido un tunel (con Ciscos se haria creando un interfaz Tunnel), y que si el firewall nos deja podríamos llegar de la central a las delegaciones y viceversa usando las IPs privadas. Vaya que se puede hacer un ping desde la central a 192.168.30.x y nos responde. Para ello es imprescindible que el router de la central tenga una ruta metida para llegar a 192.168.10.0/24 y por supuesto cada una ruta para cada delegación. Antes de meterse en el firewall hay que asegurar la visibilidad entre los routers y poder llegar a sus IPs privadas haciendo ping.
Supongamos también que en la central esta el servidor de correo que lógicamente debe tener el puerto 25 accesible desde internet, y debe ser accesible desde las delegaciones para puerto 25, 110 (pop3) o 143(imap). La salida a internet (web, ftp, etc..) cada uno la hace por su lado.
Veamos una posible configuración para este caso.

#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para firewall entre red-local e internet con DMZ
## y delegaciones. Las delegaciones deben tener acceso al correo de la DMZ
##
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info

echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## Empezamos a filtrar
## Nota: eth0 es el interfaz conectado al router y eth1 a la LAN
# Todo lo que venga por el exterior y vaya al puerto 25 lo redirigimos
# a la maquina de la DMZ
iptables -t nat -A PREROUTING -i eth0 \
-p tcp --dport 25 -j DNAT --to 192.168.3.2:25
# Todo lo que venga por el interfaz del router(eth0) y vaya al 110
# siempre que sea una delegacion se acepta y redirije
iptables -t nat -A PREROUTING -s 192.168.20.0/24 -i eth0 \
-p tcp --dport 110 -j DNAT --to 192.168.3.2:110
iptables -t nat -A PREROUTING -s 192.168.30.0/24 -i eth0 \
-p tcp --dport 110 -j DNAT --to 192.168.3.2:110
# Todo lo que venga por el interfaz del router(eth0) y vaya al 110
# siempre que sea una delegacion se acepta y redirije
iptables -t nat -A PREROUTING -s 192.168.20.0/24 -i eth0 \
-p tcp --dport 143 -j DNAT --to 192.168.3.2:143
iptables -t nat -A PREROUTING -s 192.168.30.0/24 -i eth0 \
-p tcp --dport 143 -j DNAT --to 192.168.3.2:143

# El localhost se deja (por ejemplo conexiones locales a mysql)
iptables -A INPUT -i lo -j ACCEPT
# Al firewall tenemos acceso desde la red local
iptables -A INPUT -s 192.168.10.0/24 -i eth1 -j ACCEPT
# Ahora hacemos enmascaramiento de la red local y de la DMZ
# para que puedan salir haca fuera
# y activamos el BIT DE FORWARDING (imprescindible!!!!!)
# Cuidado con este enmascaramiento.
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -o eth0 -j MASQUERADE
# Con esto permitimos hacer forward de paquetes en el firewall, o sea
# que otras máquinas puedan salir a traves del firewall.
echo 1 > /proc/sys/net/ipv4/ip_forward
# Para que desde la red local se salga hacia fuera hay que ENMASCARAR
# pero que pasa con las delegaciones tambien estan fuera Y NO HAY QUE
# ENMASCARAR, debemos meter una regla FORWARD explicita para que no enmascare
# porque si no una petición de la LAN a otra delegacion no se meteria
# en el tunel.
iptables -A FORWARD -s 192.168.10.0/24 -d 192.168.20.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.20.0/24 -d 192.168.10.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.10.0/24 -d 192.168.30.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.30.0/24 -d 192.168.10.0/24 -j ACCEPT

# Abrimos el acceso para que se pueda aceder a la DMZ desde la LAN
# a puertos de correo
# En principio lo que va de LAN -> DMZ se acepta
iptables -A FORWARD -s 192.168.10.0/24 -d 192.168.3.0/24 -j ACCEPT
# Luedo desde la DMZ a la LAN solo se acepta 25,110,143
iptables -A FORWARD -s 192.168.3.0/24 -p tcp --sport 25 \
-d 192.168.10.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.3.0/24 -p tcp --sport 143 \
-d 192.168.10.0/24 -j ACCEPT
iptables -A FORWARD -s 192.168.3.0/24 -p tcp --sport 143 \
-d 192.168.10.0/24 -j ACCEPT
# Cerramos el acceso de la DMZ a la LAN
iptables -A FORWARD -s 192.168.3.0/24 -d 192.168.10.0/24 -j DROP
## Cerramos el acceso de la DMZ al propio firewall
iptables -A INPUT -s 192.168.3.0/24 -i eth2 -j DROP
## Y ahora cerramos los accesos indeseados del exterior:
# Nota: 0.0.0.0/0 significa: cualquier red
# Cerramos el rango de puerto bien conocido
iptables -A INPUT -s 0.0.0.0/0 -p tcp -dport 1:1024 -j DROP
iptables -A INPUT -s 0.0.0.0/0 -p udp -dport 1:1024 -j DROP
# Cerramos un puerto de gestión: webmin
iptables -A INPUT -s 0.0.0.0/0 -p tcp -dport 10000 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script
Se han remarcado en negrita las reglas FORWARD entre IPs privadas de delegaciones, ya que sin esas reglas y con el enmascaramiento de por medio no se podría acceder a las delegaciones. Cabe resaltar que entre delegaciones no hay visibilidad total, solamente la central vería a todas las demás, y las delegaciones solamente la central.
La delegaciones accederían al servidor de correo con una redirección, o sea que ellos se configurarían el servidor de correo como 192.168.10.1, mientras que desde la LAN se accedería directamente. Se puede hacer de distintas maneras.
Lo interesante sería poner ese firewall con DROP por defecto, se tratará de mostrar esa configuración al final.


3.5 Firewall puro y duro entre redes
En este caso olvidémonos de redes locales y de NAT. Aquí solo tendremos reglas de filtrado INPUT y FORWARD. Pongamos que tenemos el siguiente escenario:

Figura 10: esquema de firewall entre redes, en la que solo se filtra y no se hace NAT

En el firewall debemos indicar una serie de reglas para proteger los equipos que están al otro lado de este dispositivo, todos ellos de la red 211.34.149.0/24
Cada uno de ellos da un servicio determinado, y puede estar gestionado desde distintas IPs, lo que significa que habrá que dar acceso a determinados puertos de gestión (22, 3389, etc..).
Este podría ser el aspecto del script del firewall:
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para firewall entre redes.
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
## Empezamos a filtrar
## Nota: eth0 es el interfaz conectado al router y eth1 a la LAN
# A nuestro firewall tenemos acceso total desde la nuestra IP
iptables -A INPUT -s 210.195.55.15 -j ACCEPT
# Para el resto no hay acceso al firewall
iptables -A INPUT -s 0.0.0.0/0 -j DROP
## Ahora podemos ir metiendo las reglas para cada servidor
## Como serán paquetes con destino a otras máquinas se aplica FORWARD
## Servidor WEB 211.34.149.2
# Acceso a puerto 80
iptables -A FORWARD -d 211.34.149.2 -p tcp --dport 80 -j ACCEPT
# Acceso a nuestra ip para gestionarlo
iptables -A FORWARD -s 210.195.55.15 -d 211.34.149.2 -p tcp --dport 22 -j ACCEPT
# El resto, cerrar
iptables -A FORWARD -d 211.34.149.2 -j DROP

## Servidor MAIL 211.34.149.3
# Acceso a puerto 25, 110 y 143
iptables -A FORWARD -d 211.34.149.3 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -d 211.34.149.3 -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -d 211.34.149.3 -p tcp --dport 143 -j ACCEPT
# Acceso a gestion SNMP
iptables -A FORWARD -s 210.195.55.15 -d 211.34.149.3 -p udp --dport 169 -j ACCEPT
# Acceso a nuestra ip para gestionarlo
iptables -A FORWARD -s 210.195.55.15 -d 211.34.149.3 -p tcp --dport 22 -j ACCEPT
# El resto, cerrar
iptables -A FORWARD -d 211.34.149.3 -j DROP

## Servidor IRC 211.34.149.4
# Acceso a puertos IRC
iptables -A FORWARD -d 211.34.149.4 -p tcp --dport 6666:6668 -j ACCEPT
# Acceso a nuestra ip para gestionarlo
iptables -A FORWARD -s 210.195.55.15 -d 211.34.149.4 -p tcp --dport 22 -j ACCEPT
# El resto, cerrar
iptables -A FORWARD -d 211.34.149.4 -j DROP

## Servidor NEWS 211.34.149.5
# Acceso a puerto news
iptables -A FORWARD -d 211.34.149.5 -p tcp --dport news -j ACCEPT
# Acceso a nuestra ip para gestionarlo
iptables -A FORWARD -s 213.194.68.115 -d 211.34.149.5 -p tcp --dport 22 -j ACCEPT
# El resto, cerrar
iptables -A FORWARD -d 211.34.149.5 -j DROP

## Servidor B2B 211.34.149.6
# Acceso a puerto 443
iptables -A FORWARD -d 211.34.149.6 -p tcp --dport 443 -j ACCEPT
# Acceso a una ip para gestionarlo
iptables -A FORWARD -s 81.34.129.56 -d 211.34.149.6 -p tcp --dport 3389 -j ACCEPT
# El resto, cerrar
iptables -A FORWARD -d 211.34.149.6 -j DROP

## Servidor CITRIX 211.34.149.7
# Acceso a puerto 1494
iptables -A FORWARD -d 211.34.149.7 -p tcp --dport 1494 -j ACCEPT
# Acceso a una ip para gestionarlo
iptables -A FORWARD -s 195.55.234.2 -d 211.34.149.7 -p tcp --dport 3389 -j ACCEPT
# acceso a otro puerto quiza de BBDD
iptables -A FORWARD -s 195.55.234.2 -d 211.34.149.7 -p tcp --dport 1434 -j ACCEPT
# acceso a otro puerto quiza de BBDD
iptables -A FORWARD -s 195.55.234.2 -d 211.34.149.7 -p udp --dport 1433 -j ACCEPT
# El resto, cerrar
iptables -A FORWARD -d 211.34.149.7 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script

Con esta firewall y sobretodo gracias a las reglas de DROP que metemos tras especificar lo que dejamos abiertos, protegeremos de manera eficaz todos lo puertos abiertos de las máquinas.


3.6 Firewall con política por defecto DROP
Aquí llega la sección para los auténticos administradores de pelo en pecho.
¿Qué supone el hecho de establecer como política por defecto la denegación?
" Se debe explicitar cada conexión permitida en los dos sentidos.
" Se debe conocer perfectamente qué debe estar abierto y qué no.
" Es muchos más difícil de mantener y si se hace conviene hacerlo desde el principio.
" No todo es más trabajo: también supone un firewall mucho más seguro.
En el ejemplo de la DMZ ya se presentaba esta situación en las reglas forward de una a otra red. Para ilustrar el DROP por defecto, vamos a mostrar la configuración del ejemplo anterior de firewall entre redes pero con política por defecto DROP.
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para firewall entre redes con DROP por defecto
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto: DROP!!!
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
## Empezamos a filtrar
## Nota: eth0 es el interfaz conectado al router y eth1 a la LAN
# A nuestro firewall tenemos acceso total desde la nuestra IP
iptables -A INPUT -s 210.195.55.15 -j ACCEPT
iptables -A OUTPUT -d 210.195.55.15 -j ACCEPT
# Para el resto no hay acceso al firewall
# En principio esta de más, pero si rebajamos los permisos temporalmente
# nos cubre las espaldas
iptables -A INPUT -s 0.0.0.0/0 -j DROP
## Ahora podemos ir metiendo las reglas para cada servidor
## Como serán paquetes con destino a otras máquinas se aplica FORWARD
## Servidor WEB 211.34.149.2
# Acceso a puerto 80
iptables -A FORWARD -d 211.34.149.2 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -s 211.34.149.2 -p tcp --sport 80 -j ACCEPT
# Acceso a nuestra ip para gestionarlo
iptables -A FORWARD -s 210.195.55.15 -d 211.34.149.2 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -s 211.34.149.2 -d 210.195.55.15 -p tcp --sport 22 -j ACCEPT
## Servidor MAIL 211.34.149.3
# Acceso a puerto 25, 110 y 143
iptables -A FORWARD -d 211.34.149.3 -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -s 211.34.149.3 -p tcp --sport 25 -j ACCEPT
iptables -A FORWARD -d 211.34.149.3 -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -s 211.34.149.3 -p tcp --sport 110 -j ACCEPT
iptables -A FORWARD -d 211.34.149.3 -p tcp --dport 143 -j ACCEPT
iptables -A FORWARD -s 211.34.149.3 -p tcp --sport 143 -j ACCEPT
# Acceso a gestion SNMP
iptables -A FORWARD -s 210.195.55.15 -d 211.34.149.3 -p udp --dport 169 -j ACCEPT
iptables -A FORWARD -s 211.34.149.3 -d 210.195.55.15 -p udp --sport 169 -j ACCEPT
# Acceso a nuestra ip para gestionarlo
iptables -A FORWARD -s 210.195.55.15 -d 211.34.149.3 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -s 211.34.149.3 -d 210.195.55.15 -p tcp --sport 22 -j ACCEPT

## Servidor IRC 211.34.149.4
# Acceso a puertos IRC
iptables -A FORWARD -d 211.34.149.4 -p tcp --dport 6666:6668 -j ACCEPT
iptables -A FORWARD -s 211.34.149.4 -p tcp --sport 6666:6668 -j ACCEPT
# Acceso a nuestra ip para gestionarlo
iptables -A FORWARD -s 210.195.55.15 -d 211.34.149.4 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -s 211.34.149.4 -d 210.195.55.15 -p tcp --sport 22 -j ACCEPT

## Servidor NEWS 211.34.149.5
# Acceso a puerto news
iptables -A FORWARD -d 211.34.149.5 -p tcp --dport news -j ACCEPT
iptables -A FORWARD -s 211.34.149.5 -p tcp --sport news -j ACCEPT
# Acceso a nuestra ip para gestionarlo
iptables -A FORWARD -s 213.194.68.115 -d 211.34.149.5 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -s 211.34.149.5 -d 213.194.68.115 -p tcp --sport 22 -j ACCEPT
# El resto, cerrar
iptables -A FORWARD -d 211.34.149.5 -j DROP

## Servidor B2B 211.34.149.6
# Acceso a puerto 443
iptables -A FORWARD -d 211.34.149.6 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -s 211.34.149.6 -p tcp --sport 443 -j ACCEPT
# Acceso a una ip para gestionarlo
iptables -A FORWARD -s 81.34.129.56 -d 211.34.149.6 -p tcp --dport 3389 -j ACCEPT
iptables -A FORWARD -s 211.34.149.6 -d 81.34.129.56 -p tcp --sport 3389 -j ACCEPT

## Servidor CITRIX 211.34.149.7
# Acceso a puerto 1494
iptables -A FORWARD -d 211.34.149.7 -p tcp --dport 1494 -j ACCEPT
iptables -A FORWARD -s 211.34.149.7 -p tcp --sport 1494 -j ACCEPT
# Acceso a una ip para gestionarlo
iptables -A FORWARD -s 195.55.234.2 -d 211.34.149.7 -p tcp --dport 3389 -j ACCEPT
iptables -A FORWARD -s 211.34.149.7 -d 195.55.234.2 -p tcp --sport 3389 -j ACCEPT
# acceso a otro puerto quiza de BBDD
iptables -A FORWARD -s 195.55.234.2 -d 211.34.149.7 -p tcp --dport 1434 -j ACCEPT
iptables -A FORWARD -s 211.34.149.7 -d 195.55.234.2 -p tcp --sport 1434 -j ACCEPT
# acceso a otro puerto quiza de BBDD
iptables -A FORWARD -s 195.55.234.2 -d 211.34.149.7 -p udp --dport 1433 -j ACCEPT
iptables -A FORWARD -s 211.34.149.7 -d 195.55.234.2 -p udp --sport 1433 -j ACCEPT
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script
Ya esta, hemos levantado un verdadero muro entre internet y el conjunto de servidores que esta
Tras el firewall. No se puede ni hacer un ping a las máquinas, salvo que se haya dado acceso total a una ip. Si quisieramos dar acceso al ping, pondríamos algo así:

Es más llevadero aplicar el DROP por defecto cuando el firewall es para la propia máquina. El primer escenario de esta manual trataba sobre este caso, ahora lo revisamos con la política por defecto drop.
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para proteger la propia máquina
## con política por defecto DROP
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
## Empezamos a filtrar
# El localhost se deja (por ejemplo conexiones locales a mysql)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# A nuestra IP le dejamos todo
iptables -A INPUT -s 195.65.34.234 -j ACCEPT
iptables -A OUTPUT -d 195.65.34.234 -j ACCEPT
# A un colega le dejamos entrar al mysql para que mantenga la BBDD
iptables -A INPUT -s 231.45.134.23 -p tcp --dport 3306 -j ACCEPT
iptables -A OUTPUT -d 231.45.134.23 -p tcp --sport 3306 -j ACCEPT
# A un diseñador le dejamos usar el FTP
iptables -A INPUT -s 80.37.45.194 -p tcp --dport 20:21 -j ACCEPT
iptables -A OUTPUT -d 80.37.45.194 -p tcp --sport 20:21 -j ACCEPT
# El puerto 80 de www debe estar abierto, es un servidor web.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

# Aquí están las reglas de cerrar. Como hemos comentado en la configuración
# anterior conviene tener esto escrito por si en algún momento se relaja el
# firewall y s cambia a de DROP a ACCEPT por defecto
# Cerramos rango de los puertos privilegiados. Cuidado con este tipo de
# barreras, antes hay que abrir a los que si tienen acceso.
iptables -A INPUT -p tcp --dport 1:1024
iptables -A INPUT -p udp --dport 1:1024
# Cerramos otros puertos que estan abiertos
iptables -A INPUT -p tcp --dport 3306 -j DROP
iptables -A INPUT -p tcp --dport 10000 -j DROP
iptables -A INPUT -p udp --dport 10000 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script


4. Cómo depurar el funcionamiento del firewall
Programas útiles
IPTRAF. Sin duda alguna uno de los programas más prácticos para depurar el firewall es iptables, ya que con el podemos observar si la conexiones se establecen o no; es un programa de consola que es aconsejable controlar ya que muestra en tiempo real el tráfico que atraviesa nuestra máquina con todo lujo de detalles: origen/destino de ips y puertos, tráfico total o tráfico total según el interfaz de red, etc… Si vemos muchas conexiones simultaneas y nos perdemos, existe la posibilidad de aplicar filtros para captar solo aquello que nos interesa.
NMAP. La herramienta para escanear puertos por excelencia, rechace imitaciones. Es una herramienta de consola rápida, efectiva y con multitud de opciones. Podemos usarla desde máquinas ajenas a nuestra red para comprobar si realmente el firewall esta filtrando correctamente y en cierta manera para hacernos una idea de que "visión" pueden tener los hackers de nuestro sistema.
SHELL. En el propio script del firewall podemos añadir algunas opciones para descubrir fallos de sintaxis en las reglas. Claro, imaginemos que tenemos un firewall de 40 lineas y una de ellas falla cuando ejecutamos el script. ¿Cuál es? Es probable que el mensaje de error no aclare lo suficiente, por eso se puede añadir algo así al final de cada regla:
...
iptables -A INPUT -s 195.55.234.2 -j ACCEPT && echo " regla-21 ok"
iptables -A INPUT -s 213.62.89.145 -j ACCEPT && echo " regla-22 ok"
...
Si la regla se ejecuta bien mostrará el mensajito de ok.
Otra opción algo mas cutre sería ir eliminando o comentando reglas hasta dar con la regla que tiene la sintaxis incorrecta. Cabe reseñar que puede fallar una regla, pero a partir de ella el resto se ejecutan con normalidad.



Enlaces:
-Página oficial: http://www.netfilter.org
-Bibliografía
Building internet firewalls: todo un clásico
-Otros tutoriales:
En la propia web de netfilter-iptables tenemos el enlace a otros tutoriales, aunque todos ellos están en perfecto inglés.
Ejem, iptables en 21 segundos, del mismo autor que este.