En este tutorial se va a instalar Shorewall que es un potente Firewall (o mejor dicho interfaz para configurar el netfilter) para Linux, no solo funciona para Debian y Ubuntu sino para cualquier linux, solo que en este tutorial solo se va a instalar para estas 2 distribuciones. El ambiente que se necesita es para [...]
En este tutorial se va a instalar Shorewall que es un potente Firewall (o mejor dicho interfaz para configurar el netfilter) para Linux, no solo funciona para Debian y Ubuntu sino para cualquier linux, solo que en este tutorial solo se va a instalar para estas 2 distribuciones.
El ambiente que se necesita es para una computadora con una sola interfaz de red, despues publicare como debe de ser la configuracion para 2 y 3 interfaces. La configuración que voy a presentar es para el caso de una computadora con una sola interfaz de red .
Esta instalación está dirigida a Debian y Ubuntu tanto las versiones de Desktop como de Server.
Instalación de Shorewall 4.0
Primero se actualiza la lista de repositorios para que así se instale la última versión de Shorewall.
Modificaremos el archivo sources.list que se encuentra en /etc/apt/sources.list
Se deben de tener privilegios de root o en Ubuntu emplear sudo
#cp /etc/apt/sources.list /etc/apt/sources.list.backupSiempre se debe de hacer un respaldo antes de modificar cualquier archivo de configuracion.
#vim /etc/apt/sources.listTambien pueden utilizar gedit, nano o el editor de tu preferencia. Agregamos estas líneas al final del archivo:
############# Para Debian Estable ######################## # Main deb http://http.us.debian.org/debian/ stable main non-free contrib # Source deb-src http://http.us.debian.org/debian/ stable main non-free contrib # Security deb http://security.debian.org/ stable/updates main contrib non-free
Guardamos el archivo y luego agregamos la GnuPG key a nuestra lista de llaves para decir que confiamos en esta fuente y comprobar que estan firmados por su autor. Ejecutamos:
#gpg --keyserver keyring.debian.org --recv-key B2B97BB1#gpg --export -a B2B97BB1 | sudo apt-key add -Por último actualizamos la lista de paquetes:
#apt-get updateListo ya tenemos los paquetes de la última versión de Shorewall listo para instalarlos. Ahora ejecutamos:
#apt-get install shorewall shorewall-perlConfiguración de Shorewall para una Sola Interfaz
Una vez finalizada la instalación procedemos a cambiar la configuración.
Shorewall trae unos ejemplos para 1,2 y hasta 3 interfaces de configuración en /usr/share/doc/shorewall-common/examples/ que debemos copiar a la carpeta /etc/shorewall para esto ejecutamos los siguientes comandos (en este tutorial solo copiaremos los de una sola interfaz):
#cd /usr/share/doc/shorewall-common/examples/one-interface#cp -p interfaces rules zones policy /etc/shorewallNota: Utilizamos la opción -p de copy para que se mantengan todos los privilegios de los archivos para más información consulta man cp.
Ahora que ya tenemos nuestros archivos de configuración base vamos a modificarlos:
Shorewall Zones
El primer archivo de configuración que vamos a modificar es el de zones (/etc/shorewall/zones).
Shorewall ve la red donde se encuentra como un conjunto de zonas, para el caso de una sola interfaz de red que estamos haciendo solo vamos a tener dos zonas. Primero ejecutamos el siguiente comando:
#vim /etc/shorewall/zonesSe verificara el archivo que tiene la linea de net ipv4 red ipv4 justo despues de fw firewall debe verse como el archivo que a continuacion se muestra, ya los ejemplos lo traen por eso solo se va a verificar:
# Shorewall version 4 - Zones File # # For information about this file, type "man shorewall-zones" # # The manpage is also online at # http://www.shorewall.net/manpages/shorewall-zones.html # Tutorial de Shorewall Vensign http://www.vensign.com ############################################################################### #ZONE TYPE OPTIONS IN OUT # OPTIONS OPTIONS fw firewall net ipv4 #LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
La zona fw firewall siempre debe existir ya que es la zona que reconoce Shorewall como suya, además será definida como una variable $FW en el shell una vez que ejecutemos el Shorewall y será referida durante toda la configuración.
Para más información de las zonas puedes ejecutar man shorewall-zones o ir a la dirección
http://www.shorewall.net/manpages/shorewall-zones.html
Shorewall Interfaces
Ahora vamos a obtener el nombre de la interfaz externa (la que se conecte hacia internet) ejecutando el siguiente comando:
ip route lsy obtendrás algo como esto:
10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.101
default via 10.0.1.254 dev eth0
Por supuesto que la dirección IP de tu computadora puede ser distinta al igual que el nombre de la interfaz en este caso eth0. Fijense que la interfaz externa viene dado por la línea default via 10.0.1.254 dev eth0. Esto es importante si se tiene más de una interfaz de red.
Con esta información procederemos a modificar el archivo /etc/shorewall/interfaces, ejecutamos el siguiente comando:
#vim /etc/shorewall/interfacesY agregamos la siguiente línea
red eth0 detect dhcp,tcpflags,logmartians,nosmurfs,blacklist,routebackPara que el archivo quede algo parecido a esto:
# Shorewall version 4.0 - Sample Interfaces File for one-interface configuration. # Copyright (C) 2006 by the Shorewall Team # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # See the file README.txt for further details. #------------------------------------------------------------------------------ # For information about entries in this file, type "man shorewall-interfaces" # # The manpage is also online at # http://shorewall.net/manpages/shorewall-interfaces.html # ############################################################################### #ZONE INTERFACE BROADCAST OPTIONS net eth0 detect dhcp,tcpflags,logmartians,nosmurfs,blacklist,routeback #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
- ZONE: Aquí definimos la zona a la cual va a pertenecer la interfaz que vamos a definir, en este caso la zona es net que ya definimos anteriormente
- INTERFACE: El nombre de la interfaz
- BROADCAST: Es opcional. Aquí definimos que queremos que haga el Shorewall con los paquetes de Broadcast en este caso con la opción detect le decimos que detecte las direcciones de broadcast por nosotros. Tambien podríamos colocar aquí la dirección IP de broadcast de nuestra red.
- OPTIONS: Esta es la parte más extensa, así que explicaré las opciones utilizadas aquí.
- dhcp: Esta opción se debe colocar si tu computadora obtiene su dirección IP vía DHCP, o si tu firewall está instalado en un servidor DHCP.
- tcpflags: Esta opción hace que Shorewall revise los paquetes por combinaciones ilegales de FLAGS (o banderas) TCP. Nunca está de más tenerlo.
- logmartians: Esta opción hace que Shorewall registre paquetes con direcciones de origen imposibles, para esto tenemos que tener habilitado el routefilter en la interfaz lo cual veremos más adelante como hacerlo.
- nosmurfs: Filtra paquetes smurfs (paquetes que tienen como dirección de origen una dirección de broadcast)
- blacklist: Analiza los paquetes contra la lista negra que definiremos más adelante en el archivo blacklist del shorewall
- routeback:Permite que Shorewall filtre paquetes que se devuelven a esta misma interfaz
Con esto el archivo de interfaces esta listo, lo guardamos y seguimos con la configuración.
Nota: Para más información del archivo de interfaces y sus opciones pueden ejecutar man shorewall-interfaces
Shorewall Policy
Aqui vamos a definir una política que determina como Shorewall maneja la conexión entre las distintas zonas. Es de destacar que las instrucciones se ejecutan de arriba a abajo por lo que es importante mantener el orden para que se ejecuten adecuadamente.
Vamos a modificar el archivo de politicas que se encuentra /etc/shorewall/policy ejecutando el siguiente comando:
vim /etc/shorewall/policy
Y lo modificamos para que quede así:
# Shorewall version 4.0 - Sample Policy File for one-interface configuration. # Copyright (C) 2006 by the Shorewall Team # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # See the file README.txt for further details. #----------------------------------------------------------------------------- # For information about entries in this file, type "man shorewall-policy" # # The manpage is also online at # http://shorewall.net/manpages/shorewall-policy.html # ############################################################################### #SOURCE DEST POLICY LOG LEVEL LIMIT:BURST $FW net ACCEPT net $FW DROP info net all DROP info # The FOLLOWING POLICY MUST BE LAST all all REJECT info #LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE
Lo que estamos diciendo aquí es que todo lo que venga de $FW que lo definimos anteriormente es la zona de Firewall de Shorewall sea aceptado y que todo lo demás sea rechazado para que pase por las reglas que crearemos a continuación.
Para más información pueden buscar las páginas de manual ejecutando man shorewall-policy.
Shorewall Rules
Las reglas sirven para agregar excepciones a las politicas que declaramos anteriormente, si dejamos las politicas como están sin agregar ninguna regla pues no podremos ni siquiera navegar asi que vamos a modificar el archivo de rules ejecutando:
# Shorewall version 4.0 - Sample Rules File for one-interface configuration. # Copyright (C) 2006 by the Shorewall Team # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # See the file README.txt for further details. #------------------------------------------------------------------------------------------------------------ # For information on entries in this file, type "man shorewall-rules" # # The manpage is also online at # http://shorewall.net/manpages/shorewall-rules.html # ############################################################################################################# #ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK # PORT PORT(S) DEST LIMIT GROUP # Drop Ping from the "bad" net zone.. and prevent your log from being flooded.. ##################### PERMISOS ENTRANTES #################### Ping/ACCEPT net $FW SSH/ACCEPT net $FW ACCEPT net $FW tcp 443 #################### PERMISOS SALIENTES #################### # Permit all ICMP traffic FROM the firewall TO the net zone ACCEPT $FW net icmp SSH/ACCEPT $FW net #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
nombre como Ping, SSH, etc nos describe el protocolo sobre el que vamos a efectuar la acción que puede ser ACCEPT. REJECT, DROP entre otras. Shorewall cuenta con varios MACROS, los MACROS no son más que reglas prehechas que estamos utilizando aquí como Ping, SSH, DNS, etc. Para ver una lista completa de los macros puedes ejecutar shorewall show macros.
Luego de colocar el macro y la Acción pasamos a colocar el destino que en este caso es la zona red que declaramos al principio y luego colocamos el destino que es la zona Firewall en el caso de las conexiones entrantes (net—>firewall) e invertido para las conexiones salientes (firewall–>net).
Si quisieramos aplicar una regla sobre un puerto y protocolo específico la declaramos de la siguiente forma:
ACCEPT $FW net tcp 873 REJECT $FW net udp 443
Esto son ejemplos, con lo anterior solo tiene permitido que le hagan ping, ssh y https (entrada) y de salida solo tiene habilitado el puerto de ssh y el ping, todo lo demas esta cerrado. Lo debes adecuar a tus necesidades.
Para una lista detallada de los puertos y sus respectivos protocolos puedes ir aquí
En los logs, si tiene algun puerto que este bloqueado y necesitas saber cual es, lo puedes encontrar en los logs /var/log/messages, con el siguiente comando lo ves en el momento.
tail -f /var/log/messages
Para más información acerca de las reglas puedes leer man shorewall-rules.
Ultimos Pasos
Ahora los últimos toques, vamos a modificar el archivo de configuración de Shorewall:
#vim /etc/shorewall/shorewall.confAsegurense que los siguientes valores están correctos:
STARTUP_ENABLED=YesROUTE_FILTER=YesCon STARTUP_ENABLED le decimos al Shorewall que inicie con el sistema, y con ROUTE_FILTER del cual hablamos ya arriba en la parte de Interfaces
y por ultimo, que fue un problema que me sucedio y que no lo dicen en todos los tutoriales de Debian o Ubuntu
cambiar la linea startup=0 por startup=1 del archivo /etc/default/shorewall
#vim /etc/default/shorewallquedando de la siguiente manera
# prevent startup with default configuration # set the following varible to 1 in order to allow Shorewall to start startup=1 # if your Shorewall configuration requires detection of the ip address of a ppp # interface, you must list such interfaces in "wait_interface" to get Shorewall to # wait until the interface is configured. Otherwise the script will fail because # it won't be able to detect the IP address. # # Example: # wait_interface="ppp0" # or # wait_interface="ppp0 ppp1" # or, if you have defined in /etc/shorewall/params # wait_interface= # # Startup options # OPTIONS="" # EOF
Para iniciar manualmente a Shorewall y probar nuestra configuración ejecutamos:
#shorewall startCon esto nos dará algo parecido a esto:
Compiling... Initializing... Determining Zones... IPv4 Zones: net Firewall Zone: fw Validating interfaces file... Validating hosts file... Pre-processing Actions... Pre-processing /usr/share/shorewall/action.Drop... Pre-processing /usr/share/shorewall/action.Reject... Validating Policy file... Determining Hosts in Zones... net Zone: eth0:0.0.0.0/0 Deleting user chains... Compiling /etc/shorewall/routestopped ... Creating Interface Chains... Compiling Common Rules Adding Anti-smurf Rules Adding rules for DHCP Compiling TCP Flags checking... Compiling Kernel Route Filtering... Compiling Martian Logging... Compiling /etc/shorewall/rules... Compiling Actions... Compiling /usr/share/shorewall/action.Drop for Chain Drop... Compiling /usr/share/shorewall/action.Reject for Chain Reject... Compiling /etc/shorewall/policy... Compiling Traffic Control Rules... Compiling Rule Activation... Compiling IP Forwarding... Shorewall configuration compiled to /var/lib/shorewall/.start Starting Shorewall.... Initializing... Clearing Traffic Control/QOS Deleting user chains... Enabling Loopback and DNS Lookups Creating Interface Chains... Setting up SMURF control... Setting up Black List... Adding Anti-smurf Jumps... Setting up rules for DHCP... Setting up TCP Flags checking... Setting up ARP filtering... Setting up Route Filtering... Setting up Martian Logging... Setting up Accept Source Routing... Setting up SYN Flood Protection... Setting up Rules... Setting up Actions... Creating action chain Drop Creating action chain Reject Creating action chain dropBcast Creating action chain dropInvalid Creating action chain dropNotSyn Applying Policies... Activating Rules... done.
Si dice done al final todo quedo bien y si nos da algun error debemos leer que nos indica y tratar de corregirlo.
Shorewall registra todo a través del log del sistema para ver los logs podemos ejecutar los siguientes comandos:
- shorewall show log (Muestra los últimos 20 mensajes de netfilter)
- shorewall logwatch (Verifica los logs a un tiempo determinado)
- shorewall dump (Nos da un amplio reporte de los problemas encontrados por Shorewall)
Entradas Relacionadas
Related posts:
- HowTo: VirtualBox con soporte para USB en Ubuntu 9.04 Jaunty Antes de empezar debemos de tener instalado VirtualBox en Ubuntu...
- Instalar Openfire 3.6.3 & Spark 2.5.8 & SparkWeb 0.9.0 en Debian 5.0 Lenny Para poder aplicar este tutorial se necesita tener instalado Debian...
- HowTo: Instalar Openfire 3.6.3 & Spark 2.5.8 & SparkWeb 0.9.0 en Debian 5.0 Lenny Para poder aplicar este tutorial se necesita tener instalado Debian...
- HowTo: Instalar apache2 con SSL en Debian 5.0 Lenny #apt-get install apache2 Instalar openssl ssl-cert #apt-get install openssl ssl-cert...
- HowTo: Crear un live-usb de Ubuntu desde Ubuntu Actualmente tengo instalado Ubuntu 8.10 Intrepid Ibex pero voy a...
Related posts brought to you by Yet Another Related Posts Plugin.





4 Responses
[...] Fuente 3 AKPC_IDS += "2892,"; Si te gusto la entrada, compartela!!! [...]
saludos
tengo un server debian con un firewall shorewall, cada vez que reinicio mi server el shorewall no carga las reglas definidas en mi iptable, que solucion debo darle a este problema. Para solucionarlo lo que estoy haciendo es dandole un comando
shorewall clear y otro restart
Corre desde el inicio el shorewall?, ya revisaste tu archivo de configuracion /etc/shorewall/shorewall.conf ?
[...] amplio reporte de los problemas encontrados por Shorewall) Ya antes habia realizado un tutorial How To: Instalar Shorewall Firewall para debian y Ubuntu para 1 interfaz Este tutorial esta probado para un Ubuntu Jaunty y Debian [...]