hoy vamos a configurar un Firewall o Cortafuegos básico con Shorewall, el cual es una herramienta que nos facilita la configuración de Iptables, la idea de este articulo es introducirlo a un nivel en el que puedan entender el funcionamiento de shorewall, sus principales archivos de configuración, entre otras cosas básicas.
Shorewall se encuentra en la mayoría de las distribuciones de GNU/Linux, puedo asegurar su disponibilidad Fedora/CentOS/Debian, así que simplemente lo instalan desde los repositorios, el paquete se llama “shorewall”, si no esta en sus repositorios pueden descargarlo desde www.shorewall.net, a continuación la guia”.
Cuando lo tengamos nos dirigimos a /etc/shorewall, y verificamos si estan todos los archivos de configuración de ejemplo (En CentOS/Fedora estaban por defecto, en Debian tuve que copiarlos de la ruta /usr/share/doc/shorewall/default-config), para una configuración básica nos limitaremos a modificar 5 archivos:
1) shorewall.conf: archivo de configuración general.
2) zones: Donde declararemos las zonas y su tipo.
3) interfaces: Donde le asignaremos las interfaces a la zonas.
4) policy: Donde declaremos la políticas.
5) rules: Donde declararemos las reglas.
Abrimos con nuestro editor de textos preferido el archivo /etc/shorewall/shorewall.conf y modificamos el siguiente parametro y guardamos:
STARTUP_ENABLED=Yes
Editamos el archivo /etc/shorewall/zones, y aqui declararemos las zonas como dije anteriormente, en nuestro caso tenemos dos interfaces de red eth0 y eth1, la eth0 se conecta a internet a través de un router (le llamaremos net), y la eth1 se conecta a un switch, al cual están conectadas las otras maquinas de la red (la llamaremos loc), por lo tanto en nuestro caso el archivo se veria asi:
#ZONE TYPE OPTIONS IN OUT
# OPTIONS OPTIONS
fw firewall
net ipv4
loc ipv4
Aqui ya hemos agregado las dos zonas, y por defecto tenemos la zona fw, la cual es nuestro firewall, osea nuestra maquina, guardamos y abrimos el archivo /etc/shoreall/interfaces, en este le asignaremos las interfaces a las zonas creadas previamente, el archivo de configuración se vería así:
#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect
loc eth1 detect
Aqui le asignamos las interfaces a las zonas, y en BROADCAST escribimos detect, para que detecte automaticamente el broadcast, el siguiente archivo es policy, como su nombre lo indica aquí declararemos las políticas de seguridad, en mi caso el archivo quedo así:
#SOURCE DEST POLICY LOG LIMIT: CONNLIMIT:
fw net ACCEPT
fw loc ACCEPT
net fw REJECT
net loc REJECT
loc fw REJECT
loc net REJECT
Aqui hemos definido 6 políticas, la primera acepta todas las conexiones desde el firewall a la zona net, la cual es el Internet, la segunda acepta todas las conexiones desde el firewall hasta la red local, la tercera evita la conexión desde el Internet hasta el firewall, la cuarta evita la conexión desde el Internet hasta la red local, la quinta evita la conexión desde la red local al firewall, y la ultima evita la conexión desde la red local a el Internet.
Con esto ya tendremos nuestro pequeña red bien segura, pero no podremos hacer nada, ya que solamente tenemos acceso a la red desde el firewall, todo esta bloqueado, por eso necesitaremos editar el archivo rules, para agregar reglas en las cuales definiremos lo que vamos a aceptar, editamos el archivo de configuración /etc/shorewall/rules.
Agregaremos debajo de la linea SECTION NEW las reglas que queramos por ejemplo las siguiente permitirá la conexion al puerto 22 (SSH), 80, 8080, desde la red a nuestro firewall.
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE
#SECTION ESTABLISHED
#SECTION RELATED
SECTION NEW
ACCEPT loc fw tcp 22
ACCEPT loc fw tcp 80,8080
Claro esto es un simple ejemplo, en su caso deben conocer cuales son los puertos que estan usando sus servicios, ya para finalizar vamos a enmascarar, y para ello utilizaremos el fichero /etc/shorewall/masq, en este definiremos el enmascaramiento para la red local (Interfaz eth1, zona loc), la cual sale por medio de la interfaz eth0 (Zona net).
#INTERFACE SUBNET ADDRESS PROTO PORT(S) IPSEC
eth0 eth1
Y listo, solo basta reiniciar el servicio de shorewall con el comando /etc/init.d/shorewall restart, y tambien tengan en cuenta que el servicio de iptables debe estar arriba.