viernes, 18 de octubre de 2013

Gestión de volúmenes lógicos

LVM es una implementación que consiste en un administrador de volúmenes lógicos para el núcleo de Linux. Fue originalmente escrito en 1998 por Heinz Mauelshagen, quien se basó sobre el administrador de volúmenes de Veritas, el cual solía ser utilizado en en sistemas HP-UX.
Básicamente, LVM2 permite hacer lo siguiente:
  • Cambio de tamaño de grupos de volúmenes.
  • Cambio de tamaño de volúmenes lógicos.
  • Instantáneas de lectura y escritura (a partir de LVM2).
  • RAID0 de volúmenes lógicos.
LVM carece de soporte para implementar RAID1 o RAID5, por lo que se recomienda configurar este tipo de arreglos RAID, trabajando con volúmenes lógicos por encima de los arreglos RAID.
LVM se compone de tres partes:
  1. Volúmenes físicos (pv, physical volume). Son particiones en el disco duro, con la bandera 8e. Se pueden dividir en extensiones físicas (pe o physical extents).
  2. Volúmenes lógico (lv o logical volume). Se componen de volúmenes físicos. Se pueden dividir en extensiones lógicas (le, logical extents).
  3. Grupos de volúmenes (vg o volume group). Se componen de uno o más volúmenes lógicos utilizados y volúmenes físicos sin utilizar. Son unidades administrativas donde se agrupan los recursos.

Procedimientos.

Crear un volumen lógico a partir de un disco duro nuevo.

Ejecute el mandato parted para crear una nueva etiqueta en el disco duro nuevo.
parted /dev/sdb mklabel msdos
Utilice nuevamente el mandato parted para crear una partición primaria tipo ext4, que tendrá 10240 GB (inicio en 1, fin en 10240):
parted /dev/sdb mkpart primary ext4 1 10480
Cambie el tipo de partición a LVM:
parted /dev/sdb set 1 lvm on
Para visualizar la tabla de particiones y verificar que se ha creado una partición primaria de 10240 MB, tipo LVM, ejecute lo siguiente:
parted /dev/sdb print
Lo anterior debe devolver una salida similar al al siguiente:
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Numero  Inicio  Fin     Tamaño  Typo     Sistema de ficheros  Banderas
 1      1049kB  10.5GB  10.5GB  primary                       lvm
Para presentar la nueva partición ante el núcleo del sistema, ejecute el mandato partprobe del siguiente modo:
partprobe /dev/sdb1
Nota.
Si lo anterior falla, ejecute el mandato hdaparm del siguiente modo:
hdparm -z /dev/sdb
Para crear un volumen físico, ejecute el mandato pvcreate del siguiente modo:
pvcreate /dev/sdb1
Ejecute el mandato pvscan para verificar el procedimiento anterior:
pvscan
Lo anterior deberá devolver una salida similar a la siguiente:
  PV /dev/sda2   VG VolGroup00 lvm2 [53.80 GiB / 0    free]
  PV /dev/sda3   VG VolGroup01 lvm2 [8.00 GiB / 0    free]
  PV /dev/sdb1                  lvm2 [9.76 GiB]
  Total: 3 [71.55 GiB] / in use: 2 [61.79 GiB] / in no VG: 1 [9.76 GiB]
Para crear el grupo de volúmenes denominado VolDatos, ejecute el mandato vgcreate del siguiente modo:
vgcreate VolDatos00 /dev/sdb1
Ejecute el mandato vgscan para verificar el procedimiento anterior:
vgscan
Lo anterior deberá devolver una salida similar a la siguiente:
  Reading all physical volumes.  This may take a while...
  Found volume group "VolDatos00" using metadata type lvm2
  Found volume group "VolGroup00" using metadata type lvm2
  Found volume group "VolGroup01" using metadata type lvm2
Para crear un volumen lógico, denominado Datos00, perteneciente al grupo de volúmenes denominado VolDatos, asignando el 100% de las extensiones lógicas libres, ejecute el mandato lvcreate del siguiente modo:
lvcreate -l 100%FREE VolDatos00 -n Datos00
Ejecute el mandato lvscan para verificar el procedimiento anterior:
lvscan
Lo anterior deberá devolver una salida similar a la siguiente:
  ACTIVE            '/dev/VolDatos00/Datos00' [9.76 GiB] inherit
  ACTIVE            '/dev/LogVol00/LogVol01' [53.80 GiB] inherit
  ACTIVE            '/dev/LogVol01/LogVol00' [8.00 GiB] inherit
Para dar formato al nuevo volumen lógico, ejecute el mandato mkfs.ext4 del siguiente modo:
mkfs.ext4 /dev/VolDatos00/Datos00
Ejecute el mandato mkdir para crear el punto de montaje /datos:
mkdir /datos
Para montar el volumen lógico en el directorio /datos, ejecute lo siguiente:
mount /dev/VolDatos00/Datos00 /datos
Ejecute el mandato df para verificar el procedimiento anterior:
df
Lo anterior deberá devolver una salida similar a la siguiente:
S.ficheros         Bloques de 1K   Usado    Dispon Uso% Montado en
/dev/mapper/VolGroup00-LogVol00
                      26351440    221008  26130432   1% /
tmpfs                   319096        88    319008   1% /dev/shm
/dev/sda1               198337     24376    163721  13% /boot
/
/dev/mapper/VolDatos00-Datos00
                      10071208    153560   9406060   2% /datos
Para que el volumen lógico se monte automáticamente al iniciar el sistema, edite el archivo /etc/fstab:
vim /etc/fstab
Añada el siguiente contenido:
/dev/mapper/VolDatos00-Datos00   /datos   ext4   defaults,noatime,nodiratime   1 2
Desmonte y monte de nuevo el volumen lógico para verificar que todo trabaje correctamente.
umount /datos
mount /datos

Mover contenidos desde un volumen físico a otro en un nuevo disco duro.

Asumiendo que se ha realizado todo el procedimiento anterior y que el contenido actual del volumen lógico es menor al tamaño del nuevo volumen físico añadido al volumen lógico, sólo se requiere utilizar el mandato pvmove para mover el contenido de un volumen físico a otro.
pvmove /dev/sda1 /dev/sdb1
Una vez terminado el movimiento, asumiendo que el tamaño del volumen físico en /dev/sdb1, es igual o mayor al del volumen físico en /dev/sda1, sólo resta eliminar /dev/sda1 del volumen lógico.
vgreduce VolGroup00 /dev/sda1

Añadir un volumen físico a un volumen lógico existente, a partir de espacio libre sin particionar en un disco duro.

Se asume un escenario donde:
  • Se utilizará el mismo disco duro del procedimiento anterior y que corresponde al dispositivo /dev/sdb
  • El grupo de LVM al cual se añadirá el disco es VolGroup00
  • Que el volumen lógico que se hará crecer con un nuevo volumen físicos, será LogVol00.
Determine el espacio disponible del disco duro, ejecutando el mandato parted del siguiente modo:
parted /dev/sdb unit MB print free
Determine en qué MB comienza el espacio libre.
Para crear una nueva partición de aproximadamente 5120 MB, ejecute el mandato parted del siguiente modo:
parted /dev/sdb mkpart primary ext4 10481 15600
Nota.
Es posible que el sistema devuelva una advertencia que indica que se necesita reiniciar para que el núcleo de Linux pueda leer la nueva tabla de particiones:
Aviso: WARNING: the kernel failed to re-read the partition table on /dev/sdb (Dispositivo o recurso ocupado). As a result, it may not reflect all of your changes until after reboot.
Ignore la advertencia y continúe trabajando. De ser necesario, reinicie el sistema más adelante o bien ejecute el mandato partprobe del siguiente modo:
partprobe /dev/sdb2
Si lo anterior falla, ejecute el mandato hdaparm del siguiente modo:
hdparm -z /dev/sdb
Cambie el tipo de partición a LVM:
parted /dev/sdb set 2 lvm on
Para visualizar la tabla de particiones y verificar que se ha creado una partición primaria de 5120 MB, tipo LVM, ejecute lo siguiente:
parted /dev/sdb print
Lo anterior deberá devolver una salida similar a la siguiente:
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Numero  Inicio  Fin     Tamaño  Typo     Sistema de ficheros  Banderas
 1      1049kB  10.5GB  10.5GB  primary                       lvm
 2      10.5GB  15.6GB  5119MB  primary                       lvm
Para crear un volumen físico, ejecute el mandato pvcreate del siguiente modo:
pvcreate /dev/sdb2
Ejecute el mandato pvscan para verificar el procedimiento anterior:
pvscan
Lo anterior deberá devolver una salida similar a la siguiente:
  PV /dev/sda2   VG VolGroup00 lvm2 [53.80 GiB / 0    free]
  PV /dev/sda3   VG VolGroup01 lvm2 [8.00 GiB / 0    free]
  PV /dev/sdb2                 lvm2 [4.77 GiB]
  Total: 4 [76.32 GiB] / in use: 3 [71.55 GiB] / in no VG: 1 [4.77 GiB]
Para añadir este volumen físico, que corresponde a la partición /dev/sdb2, al grupo de volúmenes denominado VolGroup00, ejecute el mandato vgextend del siguiente modo:
vgextend VolGroup00 /dev/sdb2
Lo anterior debe devolver una salida similar a la siguiente:
  Volume group "VolGroup00" successfully extended
Para asignar el 100% nuevo espacio libre disponible, provisto por el nuevo volumen físico añadido al grupo de volúmenes denominado VolGroup00, al volumen lógico LogVol00, ejecute el mandato lvextend del siguiente modo:
lvextend -l +100%FREE /dev/VolGroup00/LogVol00
Lo anterior debe devolver una salida similar a la siguiente:
  Extending logical volume LogVol00 to 31.66 GiB
  Logical volume LogVol00 successfully resized
Para cambia el tamaño del sistema de archivos y que éste utiliza el nuevo espacio libre recién asignado al volumen lógico, ejecute el mandato resize2fs del siguiente modo:
resize2fs /dev/VolGroup00/LogVol00
Lo anterior debe devolver una salida similar a la siguiente:
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/Datos/LogVol00 is mounted on /home; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 2
Performing an on-line resize of /dev/Datos/LogVol00 to 8300544 (4k) blocks.
El sistema de ficheros en /dev/VolGroup00/LogVol00 tiene ahora 8300544 bloques.
Ejecute df, con la opción -h, para ver el nuevo tamaño de del sistema de archivos alojado en /dev/VolGroup00/LogVol00:
df -h
Lo anterior debe devolver una salida similar a la siguiente:
S.ficheros            Size  Used Avail Use% Montado en
/dev/mapper/VolGroup00-LogVol00
                       32G  216M   30G   1% /
/dev/sda1             194M   24M  160M  13% /boot
/dev/mapper/VolDatos00-Datos00
                      9.7G  229M  8.9G   3% /datos

Quitar una unidad física a un volumen lógico.

Antes de proceder, es importante contar con un respaldo de los datos almacenados en el volumen lógico al cual se le quitará la unidad física. Verifique que el respaldo es confiable.
Este procedimiento requiere que el volumen lógico esté sin montar. Si se trata de un volumen lógico cuyo sistema de archivos esté en uso, como /, /usr o /var, el procedimiento debe hacerse desde un disco vivo o bien utilizando el disco de instalación en modo de rescate.
Inicie el sistema con el disco de instalación en modo de rescate.
Ejecute el mandato df y desmonte todas las particiones que estén debajo del directorio /mnt/sysimage.
Ejecute el mandato fsck, con la opción -f, para verificar la partición a reducir.
fsck -f /dev/VolGroup00/LogVol00
Para determinar el tamaño al que debe reducirse el sistema de archivos, ejecute el mandato parted del siguiente modo:
parted /dev/sdb print
Ejecute el mandato resize2fs para reducir el tamaño del sistema de archivos, a una cantidad
Desmonte la partición
Ejecute el mandato pvdisplay para determinar el tamaño de las particiones /dev/sda2 y /dev/sdb2 y cuantas extensiones físicas contienen cada una.
pvdisplay /dev/sda2 /dev/sdb2
Lo anterior debe devolver una salida similar a la siguiente:
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VolGroup00
  PV Size               53.80 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              13772
  Free PE               0
  Allocated PE          13772
  PV UUID               jZCHg7-ub0R-kziP-hCy6-V12S-tXRm-2qXont
   
  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               VolGroup00
  PV Size               4.77 GiB / not usable 2.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              1220
  Free PE               0
  Allocated PE          1220
  PV UUID               lk6bMt-3vci-yw1p-Te2w-KPot-kpje-l18cAB
Primero hay que reducir el tamaño del sistema de archivos involucrado, de modo que el nuevo tamaño sea ligeramente menor al tamaño del volumen físico que se continuará utilizando en el volumen lógico, siempre y cuando el espacio utilizado del sistema de archivos sea menor al tamaño del volumen físico que se conservara. Si se reduce el tamaño del sistema de archivos, a uno menor al del espacio utilizado por el contenido actual, se perderán todos los datos.
Asumiendo un escenario como el del ejemplo de arriba, donde el tamaño del volumen físico que se conservará es de 53.80 GB, defina 52 GB.
resize2fs /dev/VolGroup00/LogVol00 52G
Lo anterior debe devolver una salida similar a la siguiente:
Resizing the filesystem on /dev/Datos/LogVol00 to 7077888 (4k) blocks.
El sistema de ficheros en /dev/Datos/LogVol00 tiene ahora 7077888 bloques.
Vuelva a verificar el volumen lógico con el mandato fsck, del siguiente modo:
fsck -f /dev/VolGroup00/LogVol00
Asumiendo un escenario donde el volumen físico que se eliminará del volumen lógico tiene 1220 extensiones, para restar del volumen lógico estas extensiones físicas, ejecute el mandato lvresize del siguiente modo:
lvresize -l -1220 /dev/VolGroup00/LogVol00
Lo anterior le mostrará una advertencia, la cual indica que tiene un alto riesgo reducir el tamaño del volumen lógico y que es posible se pierdan todos los datos. Es precisamente por ésto que se redujo primero el tamaño del sistema de archivos.
  WARNING: Reducing active logical volume to 26.90 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce LogVol00? [y/n]:
Si el tamaño del sistema de archivos es menor al tamaño que se asignará después de eliminar las extensiones, correspondientes al volumen físico que se eliminará, puede responder con una y sin temor a perder los datos contenidos en el volumen lógico.
  WARNING: Reducing active logical volume to 26.90 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce LogVol00? [y/n]:y
  Reducing logical volume LogVol00 to 26.90 GiB
  Logical volume LogVol00 successfully resized
Para eliminar el volumen físico del grupo de volúmenes denominado VolGroup00, ejecute lo siguiente:
vgreduce VolGroup00 /dev/sdb2
Lo anterior debe devolver una salida similar a la siguiente:
  Removed "/dev/sdb2" from volume group "Datos"
Como precaución, se redujo el tamaño del sistema de archivos a una cantidad menor a la disponible en el volumen físico que se conservó. Ésto deja espacio libre que probablemente se quiera utilizar. Para cambiar el tamaño del sistema de archivos y que tome todo el espacio disponible en el volumen lógico, ejecute el mandato resize2fs del siguiente modo:
resize2fs /dev/VolGroup00/LogVol00
Lo anterior debe devolver una salida similar a la siguiente:
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/Datos/LogVol00 is mounted on /home; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 2
Performing an on-line resize of /dev/Datos/LogVol00 to 7051264 (4k) blocks.
El sistema de ficheros en /dev/Datos/LogVol00 tiene ahora 7051264 bloques.
Vuelva a verificar la partición, ejecutando el mandato fsck del siguiente modo.
fdisk -f /dev/VolGroup00/LogVol00
Monte la partición en el directorio que le corresponda y verifique que contiene datos. Al terminar reinicie el sistema y retire el disco de rescate.

Fuente: http://www.alcancelibre.org/staticpages/index.php/gestion-volumenes-logicos?query=particionar

jueves, 17 de octubre de 2013

IPTABLES

Introducción.

Acerca de Iptables y Netfilter.

Netfilter es un conjunto de ganchos (Hooks, es decir, técnicas de programación que se emplean para crear cadenas de procedimientos como manejador) dentro del núcleo de GNU/Linux y que son utilizados para interceptar y manipular paquetes de red. El componente mejor conocido es el cortafuegos, el cual realiza procesos de filtración de paquetes. Los ganchos  son también utilizados por un componente que se encarga del NAT (acrónimo de Network Address Translation o Traducción de dirección de red). Estos componentes son cargados como módulos del núcleo.
Iptables  es el nombre de la herramienta de espacio de usuario (User Space, es decir, área de memoria donde todas las aplicaciones, en modo de usuario, pueden ser intercambiadas hacia memoria virtual cuando sea necesario) a través de la cual los administradores crean reglas para cada filtrado de paquetes y módulos de NAT. Iptables es la herramienta estándar de todas las distribuciones modernas de GNU/Linux.
URL: http://www.netfilter.org/

Equipamiento lógico necesario.

Instalación a través de yum.

Si utiliza CentOS 5 y 6, Red Hat Enterprise Linux 5 o 6, solo se necesita realizar lo siguiente para instalar o actualizar el equipamiento lógico necesario:
yum -y install iptables

Procedimientos.

Cadenas.

Las cadenas pueden ser para tráfico entrante (INPUT), tráfico saliente (OUTPUT) o tráfico reenviado (FORWARD).

Reglas de destino.

Las reglas de destino pueden ser aceptar conexiones (ACCEPT), descartar conexiones (DROP), rechazar conexiones (REJECT), encaminamiento posterior (POSTROUTING), encaminamiento previo (PREROUTING), SNAT, NAT, entre otras.

Políticas por defecto.

Establecen cual es la acción a tomar por defecto ante cualquier tipo de conexión. La opción -P cambia una política para una cadena. En el siguiente ejemplo se descartan (DROP) todas las conexiones que ingresen (INPUT), todas las conexiones que se reenvíen (FORWARD) y todas las conexiones que salgan (OUTPUT), es decir, se descarta todo el tráfico que entre desde una red pública y el que trate de salir desde la red local.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Limpieza de reglas específicas.

A fin de poder crear nuevas reglas, se deben borrar las existentes, para el tráfico entrante, tráfico reenviado y tráfico saliente así como el NAT.
iptables -F INPUT 
iptables -F FORWARD 
iptables -F OUTPUT 
iptables -F -t nat

Reglas específicas.

Las opciones más comunes son:
  • -A añade una cadena, la opción -i define una interfaz de tráfico entrante
  • -o define una interfaz para trafico saliente
  • -j establece una regla de  destino del tráfico, que puede ser ACCEPT, DROP o REJECT. La
  • -m define que se aplica la regla si hay una coincidencia específica
  • --state define una lista separada por comas de distinto tipos de estados de las conexiones (INVALID, ESTABLISHED, NEW, RELATED).
  • --to-source define que IP reportar al tráfico externo
  • -s define trafico de origen
  • -d define tráfico de destino
  • --source-port define el puerto desde el que se origina la conexión
  • --destination-port define el puerto hacia el que se dirige la conexión
  • -t tabla a utilizar, pueden ser nat, filter, mangle o raw.

Ejemplos de reglas.

Reenvío de paquetes desde una interfaz  de red local (eth1) hacia una interfaz de red pública (eth0):
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
Aceptar reenviar los paquetes que son parte de conexiones existentes (ESTABLISHED) o relacionadas de tráfico entrante desde la interfaz eth1 para tráfico saliente por la interfaz eth0:
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
Permitir paquetes en el propio muro cortafuegos para tráfico saliente a través de la interfaz eth0 que son parte de conexiones existentes o relacionadas:
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
Permitir (ACCEPT) todo el tráfico entrante (INPUT) desde (-s) cualquier dirección (0/0) la red local (eth1) y desde el retorno del sistema (lo) hacia (-d) cualquier destino (0/0):
iptables -A INPUT -i eth1 -s 0/0 -d 0/0 -j ACCEPT
iptables -A INPUT -i lo -s 0/0 -d 0/0 -j ACCEPT
Hacer (-j) SNAT para el tráfico saliente (-o) a tráves de la interfaz eth0 proveniente desde (-s) la red local (192.168.0.0/24) utilizando (--to-source) la dirección IP w.x.y.z.
iptables -A POSTROUTING -t nat -s 192.168.0.0/24 -o eth0 -j SNAT --to-source x.y.z.c
Descartar (DROP) todo el tráfico entrante (-i) desde la interfaz eth0 que trate de utilizar la dirección IP pública del servidor (w.x.y.z), alguna dirección IP de la red local (192.168.0.0/24) o la dirección IP del retorno del sistema (127.0.01)
iptables -A INPUT -i eth0 -s w.x.y.x/32 -j DROP
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP
Aceptar (ACCEPT) todos los paquetes SYN (--syn) del protocolo TCP (-p tcp) para los puertos (--destination-port) de los protocolos SMTP (25), HTTP(80), HTTPS (443) y SSH (22):
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 25 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 80 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 443 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 22 --syn -j ACCEPT
Aceptar (ACCEPT) todos los paquetes SYN (--syn) del protocolo TCP (-tcp) para los puertos (--destination-port) del protocolos SMTP (25) en el servidor (w.x.y.z/32), desde (-s) cualquier lugar (0/0) hacia (-d) cualquier lugar (0/0).
iptables -A INPUT -p tcp -s 0/0 -d w.x.y.z/32 --destination-port 25 --syn -j ACCEPT
Aceptar (ACCEPT) todos los paquetes SYN (--syn) del protocolo TCP (-p tcp) para los puertos (--destination-port) de los protocolos POP3 (110), POP3S (995), IMAP (143) y IMAPS (993):
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 110 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 995 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 143 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 993 --syn -j ACCEPT
Aceptar (ACCEPT) el tráfico entrante (-i) proveniente desde la interfaz eth1 cuando las conexiones se establezcan desde el puerto  (--sport) 67 por protocolos (-p) TCP y UDP.
iptables -A INPUT -i eth1 -p tcp --sport 68 --dport 67 -j ACCEPT
iptables -A INPUT -i eth1 -p udp --sport 68 --dport 67 -j ACCEPT
Aceptar (ACCEPT) conexiones de tráfico entrante (INPUT) por protocolo (-p) UDP cuando se establezcan desde (-s) el servidor DNS 200.33.145.217 desde el puerto (--source-port) 53 hacia (-d) cualquier destino (0/0):
iptables -A INPUT -p udp -s 200.33.146.217/32 --source-port 53 -d 0/0 -j ACCEPT

Cerrar accesos.

Descartar (DROP) el tráfico entrante (INPUT) para el protocolo (-p) TCP hacia los puerto (--destination-port) de SSH (22) y Telnet (23):
iptables -A INPUT -p tcp --destination-port 22 -j DROP
iptables -A INPUT -p tcp --destination-port 23 -j DROP
Descartar (DROP) todo tipo de conexiones de tráfico entrante (INPUT) desde (-s) la dirección IP a.b.c.d:
iptables -A INPUT -s a.b.c.d -j DROP
Rechazar (REJECT) conexiones hacia (OUTPUT) la dirección IP a.b.c.d desde la red local:
iptables -A OUTPUT -d a.b.c.d -s 192.168.0.0/24 -j REJECT

Eliminar reglas.

En general se utiliza la misma regla, pero en lugar de utilizar -A (append), se utiliza -D (delete).
Eliminar la regla que descarta (DROP) todo tipo de conexiones de tráfico entrante (INPUT) desde (-s) la dirección IP a.b.c.d:
iptables -D INPUT -s a.b.c.d -j DROP

Mostrar la lista de cadenas y reglas.

Una vez cargadas todas las cadenas y reglas de iptables es posible visualizar éstas utilizando el mandato iptables con las opciones -n, para ver las listas en formato numérico y -L, para solicitar la lista de éstas cadenas.
iptables -nL
Cuando no hay reglas ni cadenas cargadas, la salida debe devolver lo siguiente:
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
Cuando hay cadenas presentes, la salida, suponiendo que se utilizarón los ejemplos de este documento, debe devolver algo similar a lo siguiente:
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
DROP       all  --  192.168.1.64         0.0.0.0/0           
DROP       all  --  172.16.0.0/24        0.0.0.0/0           
DROP       all  --  127.0.0.0/8          0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:25 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            192.168.1.64        tcp dpt:25 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:110 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:995 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:143 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:993 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:68 dpt:67
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp spt:68 dpt:67
ACCEPT     udp  --  200.33.146.217       0.0.0.0/0           udp spt:53

Chain FORWARD (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@m064 ~]# iptables -nL
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
DROP       all  --  192.168.1.64         0.0.0.0/0           
DROP       all  --  172.16.0.0/24        0.0.0.0/0           
DROP       all  --  127.0.0.0/8          0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:25 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            192.168.1.64        tcp dpt:25 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:110 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:995 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:143 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:993 flags:0x17/0x02
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:68 dpt:67
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp spt:68 dpt:67
ACCEPT     udp  --  200.33.146.217       0.0.0.0/0           udp spt:53

Chain FORWARD (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Iniciar, detener y reiniciar el servicio iptables.

Si está de acuerdo con las reglas generadas de iptables, utilice el siguiente mandato para guardar éstas:
service iptables save
Las reglas quedarán almacenadas en el archivo /etc/sysconfig/iptables.
Para ejecutar por primera vez el servicio iptables, utilice:
service iptables start
Para hacer que los cambios hechos tras modificar la configuración surtan efecto, utilice:
service iptables restart
Para detener el servicio iptables y borrar todas las reglas utilice:
service iptables stop

Agregar el servicio iptables al arranque del sistema.

Para hacer que el servicio de iptables esté activo con el siguiente inicio del sistema, en todos los niveles de ejecución (2, 3, 4 y 5), se utiliza lo siguiente:
chkconfig iptables on
 
FUente: http://www.alcancelibre.org/staticpages/index.php/introduccion-iptables 

miércoles, 16 de octubre de 2013

Cómo configurar un muro cortafuegos con Shorewall y tres interfaces de red.


Introducción.

Acerca de Shorewall.

Shorewall (Shoreline Firewall) es una robusta y extensible herramienta de alto nivel para la configuración de muros cortafuegoShorewall  solo necesita se le proporcionen algunos datos en algunos archivos de texto simple y éste creará las reglas de cortafuegos correspondientes a través de iptablesShorewall  puede permitir utilizar un sistema como muro cortafuegos dedicado, sistema de múltiples funciones como puerta de enlace, dispositivo de encaminamiento y servidor.

Acerca de Iptables y Netfilter.

Netfilter es un conjunto de ganchos (Hooks, es decir, técnicas de programación que se emplean para crear cadenas de procedimientos como manejador) dentro del núcleo de GNU/Linux y que son utilizados para interceptar y manipular paquetes de red. El componente mejor conocido es el cortafuegos, el cual realiza procesos de filtración de paquetes. Los ganchos son también utilizados por un componente que se encarga del NAT (acrónimo de Network Address Translation o Traducción de dirección de red). Estos componentes son cargados como módulos del núcleo.
Iptables  es el nombre de la herramienta de espacio de usuario (User Space, es decir, área de memoria donde todas las aplicaciones, en modo de usuario, pueden ser intercambiadas hacia memoria virtual cuando sea necesario) a través de la cual los administradores crean reglas para cada filtrado de paquetes y módulos de NATIptables es la herramienta estándar de todas las distribuciones modernas de GNU/Linux.

Acerca de Iproute.

Iproute es una colección de herramientas (ifcfg, ip, rtmon y tc) para GNU/Linux que se utilizan para controlar el establecimiento de la red TCP/IP, así como también el control de tráfico. Aunque ifconfig sigue siendo la herramienta de configuración de red estándar en las distribuciones de GNU/Linux, iproute tiende a sustituirlo al proveer soporte para la mayoría de las tecnologías modernas de red (incluyendo IP versiones 4 y 6), permitiendo a los administradores configurar los parámetros de red y el control de tráfico.

Requisitos.

• Un sistema GNU/Linux con todos los parches de seguridad correspondientes instalados.
• Shorewall 3.0.8 o versiones posteriores.
• Tres interfaces de red:
• Interfaz para acceso hacia Internet.
• Interfaz para acceso hacia una DMZ, tras la cual se podrán colocar servidores.
• Interfaz para acceso hacia la LAN (acrónimo de Local Area Network o Área de Red Local).

Conceptos requeridos.

¿Qué es una zona desmilitarizada?

Una zona desmilitarizada (DMZ), es parte de una red que no está dentro de la red interna (LAN) pero tampoco está directamente conectada hacia Internet. Podría resumirse como una red que se localiza entre dos redes. En términos más técnicos se refiere a un área dentro del cortafuegos donde los sistemas que la componen tienen acceso hacia las redes interna y externa, sin embargo no tienen acceso completo hacia la red interna y tampoco acceso completamente abierto hacia la red externa. Los cortafuegos y dispositivos de encaminamiento (routers) protegen esta zona con funcionalidades de filtrado de tráfico de red.

Diagrama de una Zona Desmilitarizada.
Imagen de dominio público tomada de Wikipedia y modificada con el Gimp.

¿Que es una Red Privada?

Una Red Privada es aquella que utiliza direcciones IP establecidas en el RFC 1918. Es decir, direcciones IP reservadas paraRedes Privadas dentro de los rangos 10.0.0.0/8 (desde 10.0.0.0 hasta 10.255.255.255), 172.16.0.0/12 (desde 172.16.0.0 hasta 172.31.255.255) y 192.168.0.0/16 (desde 192.168.0.0 hasta 192.168.255.255).

¿Qué es un NAT?

NAT (acrónimo de Network Address Translation o Traducción de dirección de red), también conocido como enmascaramiento de IP, es una técnica mediante la cual las direcciones de origen y/o destino de paquetes IP son reescritas mientras pasan a través de un dispositivo de encaminamiento (router) o muro cortafuegos. Se utiliza para permitir a múltiples anfitriones en unaRed Privada con direcciones IP para Red Privada para acceder hacia una Internet utilizando una sola dirección IP pública.

¿Qué es un DNAT?

DNAT, (acrónimo de Destination Network Address Translation o traducción de dirección de red de destino) es una técnica mediante la cual se hace público un servicio desde una Red Privada. Es decir permite redirigir puertos hacia direcciones IP de Red Privada. El uso de esta técnica puede permitir a un usuario en Internet alcanzar un puerto en una Red Privada (dentro de una LAN) desde el exterior a través de un encaminador (router) o muro cortafuegos donde ha sido habilitado un NAT.

Equipamiento lógico necesario.

• iptables:Controla el código del núcleo de GNU/Linux para filtración de paquetes de red.
• iproute:Conjunto de utilidades diseñadas para utilizar las capacidades avanzadas de gestión de redes del núcleo de GNU/Linux.
• shorewall:Shoreline Firewall.
Shorewall puede descargarse en formato RPM desde http://www.shorewall.net/.
Si dispone de un servidor con CentOS 5 y 6 o Red Hat™ Enterprise Linux 5 o 6, puede utilizar el el almacén YUM deAlcance Libre para servidores en producción, descargando el archivo http://www.alcancelibre.org/al/server/AL-Server.repodentro del directorio /etc/yum.repos.d/:
cd /etc/yum.repos.d/
wget -N http://www.alcancelibre.org/al/server/AL-Server.repo
cd
Este archivo, que se guarda como /etc/yum.repos.d/AL-Server.repo, debe tener el siguiente contenido:
[AL-Server]
name=AL Server para Enterprise Linux $releasever
mirrorlist=http://www.alcancelibre.org/al/el$releasever/al-server
gpgcheck=1
gpgkey=http://www.alcancelibre.org/al/AL-RPM-KEY
La instalación a través del mandato yum requiere utilizar lo siguiente:
yum -y install shorewall

Procedimientos.

Configuración de SELinux.

Con las versiones más recientes del conjunto de políticas de SELinux, Shorewall es incapaz de iniciar debido a que SElinux impide a éste ejecutar componentes localizados en /usr/. El siguiente procedimiento detalla cómo crear una política en SELinux que permita a Shorewall operar de manera normal.

Procedimiento para crear política.

Crear el directorio /usr/share/selinux/packages/shorewall:
mkdir /usr/share/selinux/packages/shorewall
Cambiarse al directorio /usr/share/selinux/packages/shorewall:
cd /usr/share/selinux/packages/shorewall
Descargar desde Alcance Libre el archivo http://www.alcancelibre.org/linux/secrets/shorewall.te:
Editar el archivo shorewall.te:
vim shorewall.te
Verificar que el archivo shorewall.te tenga el siguiente contenido:
module shorewall 1.0;

require {
 type shorewall_t;
 type usr_t;
 class file { execute execute_no_trans };
}

#============= shorewall_t ==============
allow shorewall_t usr_t:file { execute execute_no_trans };
Crear el archivo de módulo shorewall.mod a partir del archivo shorewall.te:
checkmodule -M -m -o shorewall.mod shorewall.te
Crear el archivo de política shorewall.pp a partir del archivo shorewall.mod
semodule_package -o shorewall.pp -m shorewall.mod
Incluir la política al sistema:
semodule -i /usr/share/selinux/packages/shorewall/shorewall.pp

Archivo de configuración /etc/shorewall/shorewall.conf

En éste se definen, principalmente, dos parámetros. STARTUP_ENABLED y CLAMPMSS.
STARTUP_ENABLED se utiliza para activar Shorewall. De modo predefinido está desactivado, solo se necesita cambiar Nopor Yes.
STARTUP_ENABLED=Yes
CLAMPMSS se utiliza en conexiones tipo PPP (PPTP o PPPoE) y sirve para limitar el MSS (acrónimo de Maximum SegmentSize que significa Máximo Tamaño de Segmento). Cambiando el valor No por Yes, Shorewall calculará el MSS más apropiado para la conexión. Si se es osado, puede también especificarse un número en paquetes SYN. La recomendación es establecerYes si se cuenta con un enlace tipo PPP.
CLAMPMSS=Yes

Archivo de configuración /etc/shorewall/zones

Este archivo se utiliza para definir las zonas que se administrarán con Shorewall y el tipo de zona (firewall, ipv4 o ipsec). La zona fw está presente en el archivo /etc/shorewall.conf como configuración predefinida. En el siguiente ejemplo se registrarán las zonas de Internet (net), Red Local (loc) y Zona Desmilitarizada (dmz):
#ZONE   DISPLAY         OPTIONS
fw firewall
net ipv4
loc ipv4
dmz ipv4
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Archivo de configuración /etc/shorewall/interfaces

En éste se establecen cuales serán las interfaces para las tres diferentes zonas. Se establecen las interfaces que corresponden a la Internet, Zona Desmilitarizada DMZ y Red Local. En el siguiente ejemplo, se cuenta con una interfaz ppp0 para acceder hacia Internet, una interfaz eth0 para acceder hacia la LAN y una interfaz eth1 para acceder hacia la DMZ y en todas se solicita se calcule automáticamente la dirección de transmisión (Broadcast):
#ZONE INTERFACE BROADCAST OPTIONS  GATEWAY
net ppp0  detect
loc eth0  detect
dmz eth1  detect
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo, se cuenta con una interfaz eth0 para acceder hacia Internet, una interfaz eth1 para acceder hacia laLAN y una interfaz eth2 para acceder hacia la DMZ y en todas se solicita se calcule automáticamente la dirección de transmisión (Broadcast):
#ZONE INTERFACE BROADCAST OPTIONS  GATEWAY
net eth0  detect
loc eth1  detect
dmz eth2  detect
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Hay una cuarta zona implícita que corresponde al cortafuegos mismo y que se denomina fw.
Si acaso hubiera un servicio de DHCP, sea como cliente, como servidor o como intermediario, en alguna de las interfaces, se debe añadir la opción dhcp para permitir la comunicación requerida para este servicio. En el siguiente ejemplo el anfitrión donde opera el muro cortafuegos obtiene su dirección IP, para la interfaz ppp0, a través del servicio DHCP del ISP; en este mismo anfitrión opera simultáneamente un servidor DHCP, el cual es utilizado en la red de área local para asignar direcciones IP; por todo lo anterior se debe activar la opción DHCP para las interfaces ppp0 y eth1, que correspondientemente son utilizadas por la zona de Internet y la red de área local, pero no es necesario hacerlo para la interfaz eth2 que es utilizada para la zona de la DMZ:
#ZONE INTERFACE BROADCAST OPTIONS  GATEWAY
net ppp0  detect  dhcp
loc eth1  detect  dhcp
dmz eth2  detect
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Archivo de configuración /etc/shorewall/policy

En este archivo se establece como se accederá desde una zona hacia otra y hacia la zona de Internet.
#SOURCE  DEST POLICY LOG LIMIT:BURST
loc  net ACCEPT
dmz  net ACCEPT
fw  net ACCEPT
net  all DROP info
all  all REJECT info
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Lo anterior hace lo siguiente:
1.La zona de la red local puede acceder hacia la zona de Internet.
2.La zona de la DMZ puede acceder hacia la zona de Internet.
3.El cortafuegos mismo puede acceder hacia la zona de Internet.
4.Se impiden conexiones desde Internet hacia el resto de las zonas.
5.Se establece una política de rechazar conexiones para todo lo que se haya omitido.
Todo lo anterior permite el paso entre las diversas zonas hacia Internet, lo cual no es deseable si se quiere mantener una política estricta de seguridad. La recomendación es cerrar todo hacia todo e ir abriendo el tráfico de acuerdo a como se vaya requiriendo. Es decir, utilizar algo como lo siguiente:
#SOURCE  DEST POLICY LOG LIMIT:BURST
net  all DROP info
all  all REJECT info
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Lo anterior bloquea todo el tráfico desde donde sea a donde sea. Si es necesario realizar pruebas de diagnóstico desde el cortafuegos hacia Internet para probar conectividad y acceso hacia diversos protocolos, se puede utilizar lo siguiente:
#SOURCE  DEST POLICY LOG LIMIT:BURST
fw  net ACCEPT
net  all DROP info
all  all REJECT info
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Lo anterior permite al propio cortafuegos acceder hacia la zona de Internet. Esta sería la política más relajada que se pudiera recomendar para mantener un nivel de seguridad aceptable.

Archivo de configuración /etc/shorewall/masq

Se utiliza para definir que a través de que interfaz o interfaces se habilitará enmascaramiento o NAT y para que interfaz o interfaces o redes se aplicará dicho enmascaramiento. En el siguiente ejemplo, se realizará enmascaramiento a través de la interfaz ppp0 para las redes que acceden desde las interfaces eth0 y eth1:
#INTERFACE SUBNET ADDRESS  PROTO PORT(S)  IPSEC
ppp0  eth0
ppp0  eth1
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo, se realizará enmascaramiento a través de la interfaz eth0 para las redes 192.168.0.0/24 y 192.168.1.0/24:
#INTERFACE SUBNET ADDRESS  PROTO PORT(S)  IPSEC
eth0  192.168.0.0/24
eth0  192.168.1.0/24
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
También es posible hacer NAT solamente hacia una IP en particular y para un solo protocolo en particular. En el siguiente ejemplo se hace NAT a través de la interfaz ppp0 para la dirección 192.168.3.25 que accede desde la interfaz eth1 y solo se le permitirá hacer NAT de los protocolos smtp y pop3. Los nombres de los servicios se asignan de acuerdo a como estén listados en el archivo /etc/services.
#INTERFACE SUBNET ADDRESS  PROTO PORT(S)  IPSEC
ppp0  eth1 192.168.3.25 tcp 25,110
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Archivo de configuración /etc/shorewall/rules

Todos los puertos están cerrados de modo predefinido y es en este archivo donde se habilitan los puertos necesarios. Hay diversas funciones que pueden realizarse.

ACCEPT

La acción ACCEPT se hace para especificar si se permiten conexiones desde o hacia una(s) zona (s) un protocolo(s) y puerto(s) en particular. En el siguiente ejemplo se permiten conexiones desde Internet hacia el puerto 80 (www), 25 (smtp) y 110 (pop3). Los nombres de los servicios se asignan de acuerdo a como estén listados en el archivo /etc/services.
#ACTION SOURCE  DEST   PROTO DEST
#       PORT
ACCEPT net  fw   tcp 80,25,110
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

REDIRECT

La acción 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 través de un Servidor Intermediario (Proxy) como Squid. En el siguiente ejemplo las peticiones hechas desde la red local y desde la DMZ serán redirigidas hacia el puerto 8080 del cortafuegos, en donde hay un Servidor Intermediario (Proxy) configurado de modo transparente.
#ACTION  SOURCE  DEST  PROTO DEST
#       PORT
REDIRECT loc  8080  tcp 80
REDIRECT dmz  8080  tcp 80
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

DNAT

La acción 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 reenvío de paquetes en /etc/sysconfig/sysctl.cfg y /etc/shorewall/shorewall.conf
• Los equipos hacia los que se esté haciendo DNAT utilicen como puerta de enlace al cortafuegos desde sus correspondientes zonas.
En el siguiente ejemplo, se hace DNAT desde la zona de Internet para HTTP (puerto 80), SMTP (puerto 25) y POP3 (puerto 110) por TCP y DNS (puerto 53) por TCP y UDP hacia la IP 10.10.10.28 localizada en la zona de la Red Local.
#ACTION SOURCE   DEST  PROTO DEST
#       PORT
DNAT net   dmz:10.10.10.28 tcp 80,25,110,53
DNAT net   dmz:10.10.10.28 udp 53
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Ejemplos diversos de reglas.

En el siguiente ejemplo se permite a la zona de Red Local el acceso hacia el puerto 22 (SSH) de cualquier equipo dentro de laDMZ:
#ACTION SOURCE   DEST  PROTO DEST
#       PORT
ACCEPT loc   dmz  tcp 22
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo se permite solo a la dirección 192.168.2.34 de zona de Red Local el acceso hacia el puerto 22 (SSH) de cualquier equipo dentro de la DMZ:
#ACTION SOURCE   DEST  PROTO DEST
#       PORT
ACCEPT loc:192.168.2.34 dmz  tcp 22
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo se permite solo a la dirección 192.168.2.34 de zona de Red Local el acceso hacia el puerto 22 (ssh) de la dirección 10.10.10.5 que está dentro de la DMZ:
#ACTION SOURCE   DEST   PROTO DEST
#        PORT
ACCEPT loc:192.168.2.34 dmz:10.10.10.5  tcp 22
#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) yPOP3 (puerto 110) por TCP y DNS (puerto 53) por TCP y UDP hacia diversos servidores localizados DMZ:
#ACTION SOURCE   DEST   PROTO DEST
#        PORT
DNAT net   dmz:10.10.10.1  tcp 80
DNAT net   dmz:10.10.10.2  tcp 25,110
DNAT net   dmz:10.10.10.3  tcp 53
DNAT net   dmz:10.10.10.3  udp 53
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
En el siguiente ejemplo se hace DNAT desde la zona de la Red Local para los servicios de HTTP (puerto 80), SMTP (puerto 25), POP3 (puerto 110) y DNS (puerto 53) hacia diversos servidores localizados DMZ:
#ACTION SOURCE   DEST   PROTO DEST
#        PORT
DNAT loc   dmz:10.10.10.1  tcp 80
DNAT loc   dmz:10.10.10.2  tcp 25,110
DNAT loc   dmz:10.10.10.3  tcp 53
DNAT loc   dmz:10.10.10.3  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 DMZ y limitar la taza de conexiones a diez por segundo con ráfagas de hasta cinco conexiones para cada servicio:
#ACTION SOURCE DEST  PROTO DEST SOURCE ORIGINAL RATE
#     PORT PORT(S) DEST  LIMIT
DNAT net dmz:10.10.10.1 tcp 80 - -  10/sec:5
DNAT net dmz:10.10.10.2 tcp 25,110 - -  10/sec:5
DNAT net dmz: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
En el siguiente ejemplo las peticiones hechas desde la red local (LAN) serán redirigidas hacia el puerto 8080 del cortafuegos, en donde hay un Servidor Intermediario (Proxy) configurado de modo transparente, limitando la taza de conexiones a veintepor segundo con ráfagas de hasta cinco conexiones. Esto es muy útil para evitar ataques de DoS (acrónimo de Denial ofService que se traduce como Denegación de Servicio) desde la red local (LAN).
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE
#    PORT PORT(S) DEST  LIMIT
REDIRET loc 8080 tcp 80 - -  20/sec:5
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Iniciar el cortafuegos y añadirlo a los servicios de arranque del sistema

Para ejecutar por primera vez el servicio, utilice:
service shorewall start
Para hacer que los cambios hechos a la configuración surtan efecto, utilce:
service shorewall restart
Para detener el cortafuegos, utilice:
service shorewall stop
Cabe señalar que detener el cortafuegos también detiene todo tráfico de red, incluyendo el tráfico proveniente desde la LAN. Si se desea restaurar el tráfico de red, sin la protección de un cortafuegos, será necesario también utilizar el guión deiptables.
service iptables stop
Lo más conveniente, en caso de ser necesario detener el cortafuegos, es definir que direcciones IP o redes podrán continuar accediendo cuando el cortafuegos es detenido o cuando éste se encuentra en proceso de reinicio. Esto se define en el archivo/etc/shorewall/routestopped, definiendo la interfaz, a través de la cual se permitirá la comunicación y la dirección IP o red, en un formato de lista separada por comas, de los anfitriones que podrán acceder al cortafuegos. Ejemplo:
#INTERFACE HOST(S)    OPTIONS
eth0  192.168.1.0/24
eth0  192.168.2.30,192.168.2.31
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Para añadir Shorewall al arranque del sistema, utilice:
chkconfig shorewall on


Fuente: http://www.alcancelibre.org/staticpages/index.php/como-shorewall-3-interfaces-red?query=lamp