Вы находитесь на странице: 1из 9

Como configurar un Firewall con Shorewall en dos Interfaces de Red con polticas DROP en CentOS y Debian.

Autor: David Rosado Correo electrnico: bleycklinx@gmail.com

En este tutorial indicare como se configura un Firewall con Shorewall con polticas DROP en dos interfaces de red para CentOS y para Debian.

Shorewall
Shorewall (Shoreline Firewall) es una robusta y extensible herramienta de alto nivel para la configuracin de muros cortafuego. Shorewall solo necesita se le proporcionen algunos datos en algunos ficheros de texto simple y ste crear las reglas de cortafuegos correspondientes a travs de iptables. Shorewall puede permitir utilizar un sistema como muro cortafuegos dedicado, sistema de mltiples funciones como puerta de enlace, dispositivo de encaminamiento y servidor. Shorewall no solo le permite configurar un firewall seguro, poderoso y robusto, tambin se puede lograr con este el control del AB (Ancho de Banda) ya que maneja el Traffic Shaping/QOS, Tambin podemos configurar en Shorewall algunas cosas como Dom0, Xen - Shorewall in Routed Xen, Xen Shorewall in a Bridged Xen DomU, VNP, IPP2P, Macros, MAC Verification, Mltiples conexiones de Intener o MultiISP y ms. A pesar de ser tan potente y flexible, Shorewall puede llegar a ser una herramienta demasiado complicada para el uso cotidiano del usuario principiante y que no tenga conocimientos sobre este, adems para muchos usuarios, Shorewall puede parecer una herramienta muy fcil de configurar, pero cabe recalcar que una ves dominada se puede lograr tener un firewall muy potente y seguro para servidores en produccin. Hay muchas herramientas para crear un Firewall bsico, y algunas de estas son para el entorno grfico o X, no se recomienda utilizar estas ya que consumen muchos recursos y lo que a muchos nos interesa es evitar esto.

Qu es un NAT?
NAT (acrnimo de Network Address Translation o Traduccin de Direccin de Red), tambin conocido como enmascaramiento de IP, es una tcnica mediante la cual las direcciones de origen y/o destino de paquetes IP son reescritas mientras pasan a travs de un dispositivo de encaminamiento (router) o muro cortafuegos. El NAT es un sistema que se utiliza para asignar una red completa (o varias redes) a una sola direccin IP.

Cmo Funciona el NAT Cuando un cliente en la red interna contacta con una mquina en Internet, enva paquetes IP destinados a esa mquina. Estos paquetes contienen toda la informacin de direccionamiento necesaria para que puedan ser llevados a su destino. NAT se encarga de estas piezas de informacin: Direccin IP de origen (por ejemplo, 192.168.1.35) Puerto TCP o UDP de origen (por ejemplo, 2132)

Cuando los paquetes pasan a travs de la pasarela de NAT, son modificados para que parezca que se han originado y provienen de la misma pasarela de NAT. La pasarela de NAT registra los cambios que realiza en su tabla de estado, para as poder: a) invertir los cambios en los paquetes devueltos, y b) asegurarse de que los paquetes devueltos pasen a travs del cortafuegos y no sean bloqueados. Por ejemplo, podran ocurrir los siguientes cambios: IP de origen: sustituida con la direccin externa de la pasarela (por ejemplo, 24.5.0.5) Puerto de origen: sustituido con un puerto no en uso de la pasarela, escogido aleatoriamente (por ejemplo, 2945) anfitrin de Internet se dan cuenta de estos pasos de interna, el sistema NAT es simplemente una pasarela a de Internet, los paquetes parecen venir directamente del da cuenta de que existe la estacin interna.

Ni la mquina interna ni el traduccin. Para la mquina Internet. Para el anfitrin sistema NAT; ni siquiera se

Cuando el anfitrin de Internet responde a los paquetes internos de la mquina, los direcciona a la IP externa de la pasarela de NAT (24.5.0.5) y a su puerto de traduccin (53136). La pasarela de NAT busca entonces en la tabla de estado para determinar si los paquetes de respuesta concuerdan con alguna conexin establecida. Entonces encontrar una nica concordancia basada en la combinacin de la direccin IP y el puerto, y esto indica a PF que los paquetes pertenecen a una conexin iniciada por la mquina interna 192.168.1.35. Acto seguido PF realiza los cambios opuestos a los que realiz para los paquetes salientes, y reenva los paquetes de respuesta a la mquina interna.

Que es DNAT?
DNAT son las siglas de Destination Network Address Translation o Traduccin de direccin de red de destino, el DNAT nos permite redirigir puertos hacia mquinas que se encuentran en una red interna o Red Privada. Procedemos a descargar Shorewall 3.4.6-2.noarch.rpm en formato RPM para CentOS 5 desde la pgina oficial desde la seccin de descargas en http://www.shorewall.net tambin directamente en http://www.invoca.ch Una vez descargado el shorewall antes mencionado pasamos a instalarlo: rpm -Uvh shorewall-3.4.6-2.noarch.rpm Para Debian simplemente lo podemos instalar con aptitude install shorewall el cual se instalar la versin 3.2.6-2. Una vez instalado, copiamos los archivos de configuracin desde /usr/share/doc/shorewall/default-config a /etc/shorewall. cp /usr/share/doc/shorewall/default-config /etc/shorewall Para activar Shorewall en Debian debemos editar /etc/default/shorewall, aqu encontraremos startup=0, solo hay que cambiar el 0 por 1 y lo dejamos as: startup=1

Hay que tener en cuenta que los ficheros que vamos a configurar se encuentran en el directorio "/etc/shorewall", los ficheros que vamos a configurar a continuacin son: zones, interfaces, policy, rules, routestopped En CentOS configuramos "shorewall.conf" en "/etc/shorewall/shorewall.conf Definimos principalmente en CentOS el parmetro STARTUP_ENABLED, este parmetro sirve para activar Shorewall, en el vamos a encontrar "NO" ya que de modo predefinido est desactivado, y para activar Shorewall debemos cambiar el No por Yes, y debemos dejarlo as: STARTUP_ENABLED=Yes De esta manera cuando queramos iniciar Shorewall con "shorewall start" o reiniciar con "shorewall restart", no nos dar problemas. Otro parmetro que hay que tener en cuenta CLAMPMSS, ya que si contamos con un enlace tipo PPP debemos cambiar el No por Yes, se utiliza en conexiones tipo PPP (PPTP o PPPoE) y sirve para limitar el MSS (acrnimo de Maximum Segment Size que significa Mximo Tamao de Segmento). CLAMPMSS=Yes En Debian ya no es necesario editar shorewall.conf ya que por defecto esta en Yes (STARTUP_ENABLED=Yes). Seguimos con la configuracin del resto de ficheros.

zones
En el fichero zones se definen las zonas que se administraran del firewall. La zona fw est definida en zones, por lo tanto ya no tendremos que ponerla ni borrarla, ahora procedemos a registrar las zonas de Internet (net) y Red Local (loc): #ZONE fw net loc #LAST LINE DISPLAY OPTIONS firewall ipv4 ipv4 -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

interfaces
En este fichero se establecen las interfaces de las zonas a ser tomadas en cuenta por el firewall. Se establecen las interfaces que corresponden a la de Internet y Red Local. En el siguiente ejemplo, se cuenta con una interfaz eth1 para acceder hacia Internet, y una interfaz eth0 para acceder hacia la LAN y en todas se solicita se calcule automticamente la direccin de transmisin (Broadcast), adems se identifican ciertas propiedades respecto de la interpretacin de los paquetes que ingresan o salen por esa interfaz: #ZONE INTERFACE net eth1 loc eth0 #LAST LINE -- ADD BROADCAST OPTIONS GATEWAY detect tcpflags,blacklist,norfc1918,routefilter,nosmurfs,logmartians detect dhcp YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Ntese que en la interfaz de Internet (net) "eth1" se adhiere "blacklist", con esto tendremos la opcin de que si en algn momento observamos en los registros de nuestros logs del sistema que alguna ip est intentando ingresar sin nuestro permiso a nuestro servidor lo podemos bloquear por completo editando en el fichero "/etc/shorewall/blacklist" la ip correspondiente de dicho intruso, tambin si acaso hubiera un servicio de DHCP, sea como cliente, como servidor o como intermediario, en alguna de las interfaces, se debe aadir la opcin dhcp para permitir la comunicacin requerida para este servicio, en el ejemplo dado opera un servidor DHCP, el cual es utilizado en la red de rea local para asignar direcciones IP a los equipos de la LAN, en lo anterior se debe activar la opcin DHCP para la interfaz eth0, que corresponde a

la zona utilizada por el rea local, en caso de que el anfitrin donde opera el muro cortafuegos obtiene su direccin IP, para la interfaz eth1, a travs del servicio DHCP del ISP, ser necesario interpretarlo como el caso de la Red Local. En muchos casos norfc1918 da un error al momento de iniciar shorewall, si fuese este el caso solo lo borramos de interfaces, as shorewall iniciar normalmente.

policy
En este fichero se establecen las polticas por defecto para paquetes que viajan entre una zona hacia otra: #SOURCE DEST POLICY LOG LIMIT:BURST # LEVEL net all DROP info all all REJECT info #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE Lo anterior bloquea todo el trfico desde donde sea a donde sea. Si desean permitir al propio cortafuegos acceder hacia la zona de Internet lo pueden hacer aadiendo la respectiva regla: fw net ACCEPT

Si se desea dar una salida a los equipos de la LAN sin restriccn de puertos hacia el mundo o Internet simplemente ponemos esta regla: loc net ACCEPT

De tal modo que el fichero policy quede del siguiente modo: loc net all net all all ACCEPT DROP REJECT

info info

De este modo no especificamos ningn puerto, simplemente los equipos navegaran y podran salir a cualquier lado, caso contrario que no se desee esta poltica se podr configurar como est en el ejemplo dado ms abajo en el fichero "rules". Segn los requerimientos del usuario tambin podran utilizar otras como: * * * * * * ACCEPT: DROP: REJECT: QUEUE: CONTINUE: NONE: Se acepta la conexin. Se ignora la conexin. Se rechaza explcitamente la conexin. Envia el pedido a una aplicacin con la target QUEUE. Dejar que el pedido de conexin contine para ser procesado por otras reglas. Se asume que esta conexin no puede darse y no se generan reglas al respecto.

masq
Este fichero se lo utiliza para definir enmascaramiento (masquerading) o NAT, esto es til cuando tenemos una red privada con la cual queremos navegar a travs de un Proxy. En el siguiente ejemplo aplicaremos enmascaramiento para la interfaz eth0 (Red Lan) la cual sale por medio de la interfaz eth1 que es nuestra IP Pblica: #INTERFACE SUBNET ADDRESS PROTO PORT(S) IPSEC eth1 eth0 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Otro caso es si tenemos varias redes y queremos enmascarar a travs de una sola interfaz, no olviden en configurar correctamente su Proxy: #INTERFACE SUBNET ADDRESS PROTO PORT(S) IPSEC eth1 172.16.0.0/16 eth1 172.16.1.0/24 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE Tambin podemos hacer NAT a una sola IP y para solo un protocolo: #INTERFACE SUBNET ADDRESS PROTO PORT(S) IPSEC eth1 eth0 172.16.0.3 tcp 25,110 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

routestopped
En este fichero podemos definir que direcciones IP o redes podrn continuar accediendo cuando el cortafuegos es detenido o cuando este se encuentra en proceso de reinicio. Ser necesario definir nuestras interfaces de red o IP que deseamos que contine la comunicacin, podemos definir en formato separado por comas indicando la red o ip: #INTERFACE HOST(S) OPTIONS eth0 eth1 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE Otro ejemplo: #INTERFACE HOST(S) OPTIONS eth0 172.16.0.0/24 eth0 172.16.3.16,172.16.1.12 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

rules
Este es el fichero de configuracin ms importante de Shorewall, ya que aqu se definen las reglas que permitirn o denegarn el acceso a servicios y puertos desde y hacia zonas o el firewall. Tambin se puede definir las reglas DNAT y registro de ciertos paquetes. Antes de configurarlo hay que tener en cuenta que las polticas por defecto son DROP, por lo tanto nada pasa a ningn lugar, no se podr navegar ni siquiera el mismo fw, por lo tanto tenemos que ir a abriendo y permitiendo el acceso a varios puertos segn como sean los requerimientos. En Shorewall no solo se puede configurar con las numeraciones de los puertos, Shorewall nos permite tambin configurar los puertos segn sea su nombre o servicio que ofrece (DNS, FTP, POP3, MySQL, SSH, VNC, Whois, Emule, BitTorrent, etc), dada esta facilidad en Shorewall podemos incluir y agregar de esta forma: DNS/ACCEPT loc fw

Lo que se estara haciendo con esta regla, es permitiendo que la red local haga consultas de DNS al fw, ntese que se a incluido DNS en ves de los puertos por su numeracin 53, con esta regla se abrir tanto en tcp como en udp por que con esta simple regla nos bastara para que se abra el puerto DNS. Si quisiramos permitir las consultas de DNS desde el Internet (net) hacia el Firewall (fw), lo tendramos que hacer as: DNS/ACCEPT net fw

Hay algunos ejemplos en el mismo sitio de Shorewall.

ACCEPT
Lo primero que aremos es permitir o aceptar que el mismo Firewall (fw) pueda navegar, sin restricciones, esto es indispensable ya que si contamos con un servidor que pertenece a un Caber caf o parecido, se necesitara que el servidor pueda navegar sin lmites, de esa forma ninguna pgina que sea tipo Chat no ser bloqueada, porque necesita de ciertos puertos para la autenticacin, lo mismo para algunos servicios necesarios, a los cuales necesitaremos ingresar y navegar con tranquilidad, abriremos los puertos del 1024 hasta el 65535: #ACTION SOURCE DEST PROTO DEST # PORT ACCEPT fw net tcp 20,21,22,43,53,80,443,1024:65535 ACCEPT fw net tcp 43,53,123,443,1024:65535 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE Tambin podemos definir una regla para que no tenga lmites de puertos: ACCEPT fw net all

Con esta regla lo que hemos hecho es que el Firewall (fw) tenga acceso hacia el Internet (net) sin restriccin alguna. Ahora aceptamos que nuestra red local (loc) se pueda conectar al Internet (net), aqu podemos definir si queremos los mismos puertos que el fw, ya que para mayor seguridad no le ponemos que todas puedan salir a puertos como el 22, 5800, 5900, 1-1023, ya que son puertos de riesgos, y para evitarnos problemas con los usuarios a que estn haciendo cosas sin control en la red preferible descomentamos estos: ACCEPT ACCEPT loc loc net net tcp udp 20,21,22,43,53,80,443,1024:65535 43,53,123,443,1024:65535

Ntese que de igual manera a la red local (loc) le permito hacer peticiones al Puerto 53 hacia el Internet, recuerden que es recomendable configurar un DNS cache para nuestra red local en nuestro servidor, pero al mismo tiempo los ISP nos dan otros DNS de gran ayuda para que podamos navegar, estos DNS hay que ponerlos en nuestro servidor y uno de los DNS del ISP en los equipos clientes, de esta forma si nuestro DNS local no puede resolver un dominio pasar a utilizar el DNS secundario que le hemos asignado. Procedemos a permitir la conexin de los equipos de la red local a limitados puertos del fw, si hemos configurado un DNS cache para nuestra red local (loc) y un Proxy para navegacin por medio de este procedemos a abrir solo los puertos necesarios, ya que no permitiremos a todos los equipos la conexin por medio de VNC al servidor, ni por SSH a menos que quieran los administradores de red permitir estos u otros accesos al servidor: ACCEPT ACCEPT loc loc fw fw tcp udp 53,3128 53

Permitimos que una sola mquina ingrese a nuestro servidor sin lmite alguno, esta mquina o ip sera la del administrador de la red: ACCEPT loc:172.16.0.20 fw all

Con este ejemplo tambin lo podemos definir desde la zona de Internet (net) al Firewall (fw) para permitir el acceso a una ip fuera de nuestra red, la cual puede ser de algn amigo, administrador, etc. ACCEPT net:202.15.19.18 fw all

Tambin podemos definir que solo se conecte desde el exterior a limitado nmeros de puertos: ACCEPT net:202.15.19.18 fw 21,22,80

Tambin podemos definir la mac de dicho equipo, lo recomendable es definir la mac desde la red local, ya que desde el exterior puede haber la posibilidad de falsear dicha mac y de esa forma tener acceso al servidor: ACCEPT loc:~00-10-8D-27-03-76 fw all

REDIRECT
El REDIRECT permite redirigir peticiones hacia un puerto en particular. Muy til cuando se quieren redirigir peticiones para HTTP (puerto 80) y se quiere que estas pasen a travs de un Servidor Intermediario (Proxy) como Squid. Las peticiones hechas desde la red local sern redirigidas hacia el puerto 8080 del cortafuegos, en donde hay un Servidor Intermediario (Proxy) configurado en modo transparente: #ACTION SOURCE DEST PROTO DEST # PORT REDIRECT loc 8080 tcp 80 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE Podemos tambin limitar las peticiones hechas desde la red local (LAN) al puerto 3128 del Proxy, limitando la taza de conexiones a veinte por segundo con rfagas de hasta cinco conexiones. Esto es muy til para evitar ataques de DoS (acrnimo de Denial of Service que se traduce como Denegacin de Servicio) desde la red local (LAN). #ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE # PORT PORT(S) DEST LIMIT REDIRECT loc 3128 tcp 80 20/sec:5 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

DNAT
El DNAT se utiliza para reenviar peticiones desde un puerto del cortafuegos hacia una IP y puerto en particular tanto en la red local como en la DMZ. Cabe destacar que para que el DNAT funcion se necesita que: Est habilitado el reenvo de paquetes en /etc/sysctl.cfg en la opcin net.ipv4.ip_forward = 1 Los equipos hacia los que se est haciendo DNAT utilicen como puerta de enlace al cortafuegos.

Si tenemos un servidor DNS (53), HTTP (80) dentro de nuestra red local y queremos permitir accesos a este, reenviamos con el DNAT editando las siguientes reglas: #ACTION SOURCE DEST PROTO DEST # PORT DNAT net loc:172.16.0.3 tcp 53,80 DNAT net loc:172.16.0.3 udp 53 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE Si tenemos dos servidores de correo, uno que recibe la mensajera (como pasarela) y otro que enva y este necesita conectarse al servidor principal (pasarela) para poder enviar los correos, para poder permitir esto solo tenemos que abrir los puertos necesarios: ACCEPT loc fw tcp 25

Si hemos puesto que se permita la conexin a ciertos servicios o puertos es recomendable permitir tanto el Ping como el Traceroute al servidor, para realizar pruebas de diagnstico desde el cortafuegos hacia Internet y red local para probar conectividad y acceso hacia diversos protocolos, se puede utilizar lo siguiente: Ping/ACCEPT Ping/ACCEPT Trcrt/ACCEPT fw fw fw loc net net

En el siguiente ejemplo permitimos a una mquina de la red local hacer Ping y Traceroute hacia la zona de Internet: Ping/ACCEPT Trcrt/ACCEPT loc:172.16.0.20 loc:172.16.0.20 net net

Si deseamos podemos permitir a toda la red local hacer Ping y Traceroute hacia la zona de Internet: Ping/ACCEPT Trcrt/ACCEPT loc loc net net

Si queremos permitir la consulta de Ping desde el Internet tenemos que permitir el servicio: Ping/ACCEPT net fw

Ejemplos de algunas reglas tiles:


En este ejemplo se hace DNAT desde la zona de la Internet para los servicios de HTTP (puerto 80), SMTP (puerto 25), POP3 (puerto 110) y DNS (puerto 53) hacia diversos servidores localizados en Loc: #ACTION SOURCE DEST PROTO DEST # PORT DNAT net loc:172.16.0.3 tcp 80 DNAT net loc:172.16.0.3 tcp 25,110 DNAT net loc:172.16.0.2 tcp 53 DNAT net loc:172.16.0.2 udp 53 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE En el siguiente ejemplo se hace DNAT desde la zona de Internet para los servicios de HTTP (puerto 80), SMTP (puerto 25), POP3 (puerto 110) y DNS (puerto 53) hacia diversos servidores localizados en Loc y limitar la taza de conexiones a diez por segundo con rfagas de hasta cinco conexiones para cada servicio: #ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE # PORT PORT(S) DEST LIMIT DNAT net loc:10.10.10.1 tcp 80 10/sec:5 DNAT net loc:10.10.10.2 tcp 25,110 10/sec:5 DNAT net loc:10.10.10.3 tcp 53 10/sec:5 DNAT net dmz:10.10.10.3 udp 53 10/sec:5 #LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Nota: Por opciones de seguridad se podra poner en rules que ciertas ips peligrosas no tengan ningn tipo de acceso a nuestro servidor con: DROP DROP DROP DROP DROP DROP DROP DROP DROP net:192.168.0.0/16 net:10.0.0.0/8 net:172.16.0.0/12 net:224.0.0.0/4 net:240.0.0.0/5 net:127.0.0.0/8 net:0.0.0.0/8 net:169.254.0.0/16 net:255.255.255.255 fw fw fw fw fw fw fw fw fw

Con esto bloqueamos totalmente a estas ips, sin permitirles ningn tipo de accin en nuestro equipo.

Otros Ejemplos:
FTP/ACCEPT MySQL/ACCEPT MySQL/ACCEPT SSH/ACCEPT HTTP/ACCEPT Edonkey/DNAT net fw loc fw loc net loc:172.16.0.5 fw net fw net loc:172.16.0.3

Si queremos permitir paquetes icmp con limitaciones para evitar ataques DoS, lo podemos hacer del siguiente modo:
#Permitimos paquetes ICMP (ping,pong,...) #con limites para evitar ataques de DoS. ##Aceptamos ping ACCEPT net fw icmp echo-request 2/sec:3 #Aceptamos pong ACCEPT net fw icmp echo-reply 2/sec:3 #Aceptamos redirecciones ACCEPT net fw icmp redirect 2/sec:3 #Aceptamos tiempo excedido ACCEPT net fw icmp time-exceeded 2/sec:3 #Aceptamos destino inalcanzable ACCEPT net fw icmp destination-unreachable - -

2/sec:3

Revisamos posibles errores en la configuracin con "shorewall check" antes de iniciarlo. Iniciar Shorewall y aadirlo a los servicios de arranque del sistema en CentOS.

Si Shorewall va a ser ejecutado por primera vez, utilice: shorewall start Si actualizo a la versin mencionada en este Tutorial, o instalo directamente la versin utilizada aqu, utilice: shorewall restart Aadimos a Shorewall al arranque del sistema: chkconfig shorewall on En Debian una vez concluido esto solo debemos iniciarlo shorewall start o reiniciar shorewall restart y para poner en los procesos del inicio simplemente instalamos el "rcconf". Y con iptables -L -n y tambin iptables -t nat -L se podr ver las reglas generadas por Shorewall.