#!/bin/sh


## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para proteger la propia máquina
## Pello Xabier Altadill Izura
## www.pello.info - pello@pello.info

echo -n Aplicando Reglas de Firewall...

## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT


# hacemos enmascaramiento de la red local
# y activamos el BIT DE FORWARDING (imprescindible!!!!!)

# se sustituyen las 2 siguientes reglas
#/sbin/iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.200.0/24 -d \! 192.168.0.0/24 -j MASQUERADE
#/sbin/iptables -t nat -A POSTROUTING -o ppp0 -d 192.168.0.0/24 -s \! 192.168.200.0/24 -j MASQUERADE

# las direcciones de todas las vpn deben de quedar excluidas
#con infinitum
#/sbin/iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.200.0/24 -d \! 192.168.0.0/16 -j MASQUERADE
#/sbin/iptables -t nat -A POSTROUTING -o ppp0 -d 192.168.0.0/16 -s \! 192.168.200.0/24 -j MASQUERADE
# sin infinitum

#intranets de los clientes

#/sbin/iptables -t nat -A POSTROUTING -o ppp0 -s 176.16.200.0/24 -d \! 192.168.0.0/16 -j MASQUERADE
#/sbin/iptables -t nat -A POSTROUTING -o ppp0 -d 192.168.0.0/16 -s \! 176.16.200.0/24 -j MASQUERADE

/sbin/iptables -t nat -A POSTROUTING -o eth2 -s 176.16.200.0/24 -d \! 192.168.0.0/16 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o eth2 -d 192.168.0.0/16 -s \! 176.16.200.0/24 -j MASQUERADE

/sbin/iptables -t nat -A POSTROUTING -o ppp0 -s 176.16.200.0/24 -d \! 192.168.0.0/16 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -d 192.168.0.0/16 -s \! 176.16.200.0/24 -j MASQUERADE


#/sbin/iptables -t nat -A POSTROUTING -o rausb0 -j MASQUERADE

# direcciones de Seguridad y Control
#/sbin/iptables -t nat -A POSTROUTING -o eth2 -s 192.168.200.0/24 -d \! 100.1.1.0/24  -j MASQUERADE
#/sbin/iptables -t nat -A POSTROUTING -o eth2 -d 100.1.1.0/24 -s \! 192.168.200.0/24 -j MASQUERADE



# el destino ( -d) esta excluyendo las ip de las vpn (\! 192.168.0.0/24 )

# Con esto permitimos hacer forward de paquetes en el firewall, o sea
# que otras máquinas puedan salir a traves del firewall.

echo 1 > /proc/sys/net/ipv4/ip_forward


## Empezamos a filtrar
## Nota: ppp0 es el interfaz conectado al internet y eth1 a la LAN

# El localhost se deja (por ejemplo conexiones locales) -i lo (local host)
/sbin/iptables -A INPUT -i lo -j ACCEPT

# Al firewall tenemos acceso desde la red local

#/sbin/iptables -A INPUT -s 192.168.200.0/24 -i eth1 -j ACCEPT
# DHCP
/sbin/iptables -I INPUT -i eth1 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
/sbin/iptables -I INPUT -i eth1 -p tcp --dport 1433:1434 --sport 1433:1434 -j ACCEPT
/sbin/iptables -A INPUT -s 176.16.200.0/24 -i eth1 -j ACCEPT

#/sbin/iptables -A INPUT -s 192.168.200.0/24 -i eth1 -j ACCEPT
#/sbin/iptables -A INPUT -s 176.16.200.0/24 -i eth1 -j ACCEPT


## Ahora con regla FORWARD filtramos el acceso de la red local al internet
## al exterior. Como se explica antes, a los paquetes que no van dirigidos al
## propio firewall se les aplican reglas de FORWARD

# Aceptamos que vayan a puertos 80
#   iptables -A FORWARD -s 192.168.200.0/24 -i eth1 -p tcp --dport 80 -j ACCEPT

# Aceptamos que vayan a puertos https
#   iptables -A FORWARD -s 192.168.200.0/24 -i eth1 -p tcp --dport 443 -j ACCEPT

# Aceptamos que consulten los DNS
#   iptables -A FORWARD -s 192.168.200.0/24 -i eth1 -p tcp --dport 53 -j ACCEPT
#   iptables -A FORWARD -s 192.168.200.0/24 -i eth1 -p udp --dport 53 -j ACCEPT


# Y denegamos el resto. Si se necesita alguno, ya avisaran
#  iptables -A FORWARD -s 192.168.200.0/24 -i eth1 -j DROP
#-----------------------------------------------------------------------------------


# port forwarding (net bios 335 y 445 para los hackers)
#con infinitum
#/sbin/iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 335 -j DNAT --to 192.168.200.254:335

#sin infinitum
/sbin/iptables -t nat -A PREROUTING -p tcp -i eth2 --dport 335 -j DNAT --to 192.168.200.254:335
/sbin/iptables -A FORWARD -p tcp -i eth2 -d 192.168.200.254 --dport 335 -j ACCEPT


#con infinitum
#/sbin/iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 445 -j DNAT --to 192.168.200.254:445

#sin infinitum
/sbin/iptables -t nat -A PREROUTING -p tcp -i eth2 --dport 445 -j DNAT --to 192.168.200.254:445
/sbin/iptables -A FORWARD -p tcp -i eth2 -d 192.168.200.254 --dport 445 -j ACCEPT


# MSSQL (muchos ataques por 1433) 
#sin infinitum

#/sbin/iptables -t nat -A PREROUTING -p tcp -i eth2 --dport 1433 -j DNAT --to 176.16.30.14:1433
#/sbin/iptables -A FORWARD -p tcp -i eth2 -d 176.16.200.14 --dport 1433 -j ACCEPT

# reglas para las vpn's
# IKE
/sbin/iptables -I INPUT  -p udp --sport 500 --dport 500 -j ACCEPT
/sbin/iptables -I OUTPUT -p udp --sport 500 --dport 500 -j ACCEPT
# ESP encryption and authentication
/sbin/iptables -I INPUT  -p ESP -j ACCEPT
/sbin/iptables -I OUTPUT -p ESP -j ACCEPT
# Hash
#iptables -I INPUT  -p AH -j ACCEPT
#iptables -I OUTPUT -p AH -j ACCEPT


#puertos para el dhcp
#/sbin/iptables -A INPUT -i ${INSIDE_DEVICE} -j ACCEPT
#/sbin/iptables -A OUTPUT -o ${INSIDE_DEVICE} -j ACCEPT
#/sbin/iptables -I INPUT  -p udp --sport 67 --dport 67 -j ACCEPT
#/sbin/iptables -I INPUT  -p udp --sport 68 --dport 68 -j ACCEPT
#/sbin/iptables -I OUTPUT -p udp --sport 67 --dport 67 -j ACCEPT
#/sbin/iptables -I OUTPUT -p udp --sport 68 --dport 68 -j ACCEPT

#reglas para telefonia IP

/sbin/iptables -I INPUT -p udp --sport 5000:5062 --dport 5000:5062 -j ACCEPT
# iptables -I OUTPUT -p udp --sport 5000:5062 --dport 5000:5062 -j ACCEPT

/sbin/iptables -I INPUT -p tcp --sport 5060:5062 --dport 5060:5062 -j ACCEPT
# iptables -I OUTPUT -p tcp --sport 5060:5062 --dport 5060:5062 -j ACCEPT

/sbin/iptables -I INPUT -p udp --sport 4569 --dport 4569 -j ACCEPT
#iptables -I OUTPUT -p udp --sport 4569 --dport 4569 -j ACCEPT

#reglas para VNC
/sbin/iptables -I INPUT  -p tcp --sport 5950:5951 --dport 5950:5951 -j ACCEPT
# iptables -I OUTPUT -p tcp --sport 5950:5951 --dport 5950:5051 -j ACCEPT

#reglas para putyy
/sbin/iptables -I INPUT  -p tcp --sport 22 --dport 22 -j ACCEPT


#reglas para HTTP

# Abrimos el puerto 80, hay que configurar bien el relay del servidor SMTP
/sbin/iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 80 -j ACCEPT


#reglas para correo

# Abrimos el puerto 25, hay que configurar bien el relay del servidor SMTP
/sbin/iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 25 -j ACCEPT
# Abrimos el pop3
/sbin/iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 110 -j ACCEPT

# Y abrimos el puerto pptpd para la ip del adsl de casa del jefe
   #iptables -A INPUT -s 211.45.176.24 -p tcp --dport 1723 -j ACCEPT 

## las reglas de output no se utilizan ya que este servidor debe de poder salir cualquier trafico


## Y ahora cerramos los accesos indeseados del exterior:
# Nota: 0.0.0.0/0 significa: cualquier red

# Cerramos el rango de puerto bien conocido
/sbin/iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 1:1024 -j DROP
/sbin/iptables -A INPUT -s 0.0.0.0/0 -p udp --dport 1:1024 -j DROP

# Cerramos un puerto de gestión: webmin
/sbin/iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 10000 -j DROP
# Cerramos demas puertos 
/sbin/iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 5900:5919 -j DROP
/sbin/iptables -A INPUT -s 0.0.0.0/0 -p udp --dport 5900:5919 -j DROP



echo " OK . Verifique que lo que se aplica con: iptables -L -n"

# Fin del script


