miércoles, 21 de diciembre de 2011

Firewall propio con iptables

Dirección del generador original: http://easyfwgen.morizot.net/gen/
Dirección del generador utilizado abajo, adaptado para Slackware Linux: http://connie.slackware.com/~alien/efg/
#!/bin/sh
################################
# Local Settings

SYSCTL="/sbin/sysctl -w"
IPT="/usr/sbin/iptables"
IPTS="/usr/sbin/iptables-save"
IPTR="/usr/sbin/iptables-restore"
# Internet Interface
INET_IFACE="eth0"
INET_ADDRESS="90.175.215.80" 
################################
# Flush Any Existing Rules or Chains

echo "Flushing Tables ..."
# Reset Default Policies
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT
# Flush all rules
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F

################################
# Set Policies 
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP 
################################
# User-Specified Chains

echo "Create and populate custom rule chains ..." 
$IPT -N bad_packets
$IPT -N bad_tcp_packets
$IPT -N icmp_packets
$IPT -N udp_inbound
$IPT -N udp_outbound
$IPT -N tcp_inbound
$IPT -N tcp_outbound 
################################
# Populate User Chains

$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 137 -j DROP
$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 138 -j DROP
$IPT -A udp_inbound -p UDP -s 0/0 --destination-port 113 -j REJECT

$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 113 -j REJECT

# Web Server
# HTTP & HTTPS
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 443 -j ACCEPT
# FTP Server (Control)
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 21 -j ACCEPT
$IPT -A tcp_inbound -p TCP -s 0/0 --source-port 20 -j ACCEPT
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 2200:2300 -j ACCEPT
# sshd
$IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 22 -j ACCEPT

################################
# INPUT Chain

echo "Process INPUT chain ..."
# Allow all on localhost interface
$IPT -A INPUT -p ALL -i $LO_IFACE -j ACCEPT

################################
# OUTPUT Chain

echo "Process OUTPUT chain ..."
$IPT -A OUTPUT -m state -p icmp --state INVALID -j DROP
# Localhost
$IPT -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT
# To internet
$IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT

Firewalls con iptables

Firewall en questión (1): 
#!/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 a Aceptar
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## Empezamos a filtrar
# El localhost se deja (por ejemplo conexiones locales a mysql)
/sbin/iptables -A INPUT -i lo -j ACCEPT
# A nuestra IP le dejamos todo, por lo que podrá mandar los paquetes respuesta a las peticiones FTP y MySQL que generan el colega y el diseñador de las reglas siguientes
iptables -A INPUT -s 195.65.34.234 -j ACCEPT
# A un colega le dejamos entrar al mysql para que mantenga la BBDD
iptables -A INPUT -s 231.45.134.23 -p tcp --dport 3306 -j ACCEPT
# A un diseñador le dejamos usar el FTP
iptables -A INPUT -s 80.37.45.194 -p tcp -dport 20:21 -j ACCEPT
# El puerto 80 de www debe estar abierto, es un servidor web (http).
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Y el resto, lo cerramos, el FTP cerrado, el MySQL cerrado, el telnet cerrado...
iptables -A INPUT -p tcp --dport 20:21 -j DROP
iptables -A INPUT -p tcp --dport 3306 -j DROP
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp --dport 10000 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script



===================================================
Firewall en questión (2): 
#!/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
## Empezamos a filtrar
# El localhost se deja (por ejemplo conexiones locales a mysql)

/sbin/iptables -A INPUT -i lo -j ACCEPT
# A nuestra IP le dejamos todo
iptables -A INPUT -s 195.65.34.234 -j ACCEPT
# A un colega le dejamos entrar al mysql (puerto 3306) para que mantenga la BBDD
iptables -A INPUT -s 231.45.134.23 -p tcp --dport 3306 -j ACCEPT
# A un diseñador le dejamos usar el FTPiptables -A INPUT -s 80.37.45.194 -p tcp -dport 20:21 -j ACCEPT
# El puerto 80 de www debe estar abierto, es un servidor web.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Cerramos rango de los puertos privilegiados. Cuidado con este tipo de
# barreras, antes hay que abrir a los que si tienen acceso.

iptables -A INPUT -p tcp --dport 1:1024 -j DROP
iptables -A INPUT -p udp --dport 1:1024 -j DROP
# Cerramos otros puertos que estan abiertos (3306 mysql)
iptables -A INPUT -p tcp --dport 3306 -j DROP
iptables -A INPUT -p tcp --dport 10000 -j DROP
iptables -A INPUT -p udp --dport 10000 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script



===================================================

Firewall en questión (3): 

#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para proteger la propia máquina con DROP por defecto 
## 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: DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
## Empezamos a filtrar? no! empezamos a abrir! porque ahora esta TODO denegado.
## Debemos decir de manera explicita qué es lo que queremos abrir
# Operar en localhost sin limitaciones

/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
# A nuestra IP le dejamos todo
iptables -A INPUT -s 195.65.34.234 -j ACCEPT
iptables -A OUTPUT -d 195.65.34.234 -j ACCEPT
# Este es el servicio que DA la maquina a internet, por tanto todo paquete entrante se acepta para
# ese puerto y los salientes vinculados se aceptan.

/sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Permitimos que la maquina pueda salir a la web
/sbin/iptables -A INPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
# Ya tambien a webs seguras (https en el puerto 443)
/sbin/iptables -A INPUT -p tcp -m tcp --sport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
# Reglas necesarias para FTP pasivo y activo. Se permiten conexiones entrantes YA establecidas
/sbin/iptables -A INPUT -p tcp -m tcp --sport 20:21 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 20:21 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 1024:65535 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# Permitimos la consulta a un primer DNS
/sbin/iptables -A INPUT -s 211.95.64.39 -p udp -m udp --sport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -d 211.95.64.39 -p udp -m udp --dport 53 -j ACCEPT
# Permitimos la consulta a un segundo DNS
/sbin/iptables -A INPUT -s 211.95.79.109 -p udp -m udp --sport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -d 211.95.79.109 -p udp -m udp --dport 53 -j ACCEPT
# Permitimos consultar el reloj de hora.rediris.es (un pentium166) para sincronizarse
/sbin/iptables -A INPUT -s 130.206.3.166 -p udp -m udp --dport 123 -j ACCEPT
/sbin/iptables -A OUTPUT -d 130.206.3.166 -p udp -m udp --sport 123 -j ACCEPT
# Barrera de backup por si cambiamos a modo ACCEPT temporalmente# Con esto protegemos los puertos reservados y otros well-known
/sbin/iptables -A INPUT -p tcp -m tcp --dport 1:1024 -j DROP
/sbin/iptables -A INPUT -p udp -m udp --dport 1:1024 -j DROP/sbin/iptables -A INPUT -p tcp -m tcp --dport 1723 -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --dport 3306 -j DROP/sbin/iptables -A INPUT -p tcp -m tcp --dport 5432 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script

sábado, 19 de noviembre de 2011

Instalar Joomla y Wordpress en host remoto

Buenas, hoy instalaremos dos scripts de manejo de información llamados Joomla y Wordpress en un host remoto (gratuito).
En breves palabras, Joomla es el CMS (Content Managment System) de código abierto más popular en el mundo; WordPress es otro software de código abierto para crear blogs o simples páginas web.

* ¿Qué es un host?
Un lugar (o mejor dicho, servidores formados por varios ordenadores), que nos proporcione todo lo necesario, (almacenamiento de ficheros (FTP o SSH), base de datos (MySQL o PostgreSQL) y un servicio http (apache o nginx o lighttpd) - entre otros servicios) para depositar nuestra página web y que sea accesible desde cualquier lugar con conexión a internet.

En este ejemplo debíamos buscar un host gratuito por internet, el que nos ofrezca todo lo necesario para poder alojar nuestros proyectos. Al tener ya un host de pago que nos permita eso - nos hemos saltado el paso de buscar hosts gratuitos.
El host que hemos utilizado es de la compañía iPage la cuál tiene muy buenas prestaciones en cuanto a calidad/precio.

* Pasos que hemos seguido:
(paso cero) Primero ante todo, descargamos los códigos fuentes de los dos scripts, los descomprimimos y los subimos a nuestro host mediante algún manejador de servidores y ficheros por FTP - en nuestro caso hemos utilizado FileZilla.

Después de haber subido todos los archivos necesarios, procederemos a la instalación:

Joomla
1º. Accedemos a la URL correspondiente a la carpeta (en el FTP) donde hemos subido el Joomla y nos aparecerá la ventana de instalación en la cual debemos seleccionar el idioma deseado:

2º. Luego nos aparecerá una ventana donde debemos configurar la conexión a nuestra base de datos MySQL (o en este caso MySQLi). Normalmente en los servidores gratuitos, estos datos se nos indican en el panel de control correspondiente. En nuestro caso nos la hemos creado nosotros y la hemos llamado "umh".

3º. Si todo ha ido correctamente, Joomla se habrá comunicado con la base de datos sin problema y podremos acceder a la siguiente ventana la cual nos preguntará datos básicos de nuestra página, como título y poco más.

4º. Al haber introducido los datos a nuestro gusto, y al ser este el último paso, ya debemos tenerlo todo instalado y funcionando.

Resultado final:


WordPress
1º. Accedemos a la URL correspondiente a la carpeta (en el FTP) donde hemos subido el WordPress y nos aparecerá la ventana de instalación:

2º. Luego nos aparecerá una ventana donde debemos configurar la conexión a nuestra base de datos MySQL. Normalmente en los servidores gratuitos, estos datos se nos indican en el panel de control correspondiente. En nuestro caso nos la hemos creado nosotros y la hemos llamado "umh".

3º. Si todo ha ido correctamente, WordPress se habrá comunicado con la base de datos sin problema y podremos acceder a la siguiente ventana la cual nos preguntará datos básicos de nuestra página, como título y poco más.

4º. Al haber introducido los datos a nuestro gusto, y al ser este el último paso, ya debemos tenerlo todo instalado y podemos ya acceder a nuestro panel de administrador:

Resultado final:

Protocolo ARP y Wireshark

Buenas, hoy explicaremos de modo breve qué es el protocolo ARP, para qué sirve y daremos un ejemplo de cómo nuestro ordenador se las arregla para "coleccionar" dichos datos. Utilizaremos el programa Wireshark (utilizado en Linux) - de igual manera se puede utilizar Network Monitor en Windows.

* Definición: El Address Resolution Protocol (ARP) es un protocolo utilizado por el Internet Protocol (IP) [RFC826] , específicamente IPv4, para asignar direcciones IP de red a las direcciones de hardware utilizado. 

* Aplicación: Por ejemplo, cuando nuestro ordenador hace un ping a una máquina, manda una petición ARP al ordenador destino y mientras espera su respuesta, retiene el paquete ICMP hasta que recibe exitosamente la respuesta. Entonces es cuando se realiza el ping que vemos por pantalla.


*** Ejemplo con Wireshark:
1º. Borramos la cache ARP que tengamos en nuestro ordenador.
* Linux: # arp -d
* Windows: > arp -d
2º. Abrimos Wireshark y ejecutamos el modo monitor en la interfaz ethernet deseada.
(pincha en la imágen para un formato grande)

3º. Abrimos una consola y hacemos un ping a una dirección remota (por ejemplo google.com o youtube.com).
* Linux: # ping google.com
* Windows: > ping google.com

(pincha en la imágen para un formato grande)


En este ejemplo ocurre que el ordenador utilizado en el ejemplo (con dirección mac AsustekC_97:...) está detrás de un router (marca SMC con mac SmcNetwo_78:...) y el único ARP que recibe nuestra máquina es del router en sí y no de la máquina destino. Esto es por la razón de que es el router quién se encarga de gestionar y almacenar dicha tabla (de ARP), por eso cuando hacemos una llamada a un host remoto, (en nuestro ejemplo) es el router el encargado de proporcionarnosla.

________________________________________
Bibliografía: Electronics Research Group - University of Aberdeen

miércoles, 12 de octubre de 2011

Instalación de red de una pequeña oficina.

Buenos días, hoy nos encargaremos de la cuestión de cómo instalar internet en una paqueña oficina donde nos han contratado para hacer dicho servicio.

Antes de empezar, tenemos que fijar unos datos, a partir de los cuales se construirá este post:
* Tipo de conexión a internet: ADSL2+ y de modo Ethernet (sin Wifi)
* Número de ordenadores en la oficina: entre 8 y 16.
* Conexión de entrada/salida: 24Mbps/1.3Mbps (ITU G.992.5)
* Gastos de hardware: máx. 300€


Supongamos que tenemos una oficina de no más de 40 metros cuadrados y lo máximo que ha hecho nuestra compañía de internet es, dejarnos el cable telefónico en la puerta de la oficina. Lo primero que tenemos que hacer es planificar la posición de los componentes hardware de nuestra instalación:
Una simple configuración de red de una pequeña oficina.
De aquí surgen varias cuestiones, ¿qué es el cable telefónico, el router, el switch?
* El cable telefónico: Es mediante el cuál nos llega la señal de internet gracias la tecnología ADSL.
* El router: Será nuestra cara al exterior. Se encargará del direccionamiento y enrutamiento del tráfico de paquetes de datos. Es un dispositivo que trabaja en la capa 3 del modelo OSI.
* El switch: Se necesitará ya que la mayoría de los routers tienen 2 ó 4 puertos de salida, y el switch nos proporciona muchos más (8/16/32/48). Otra razón es una más rápida interconexión entre los ordenadores de la oficina, etc. Opera en la capa 2 del modelo OSI.

La instalación se dividirá en las siguientes etapas:
1ª. Conectaremos el cable telefónico al router y lo configuraremos para que obtenga una IP externa y cree el dominio de IPs internas (de manera típica éste es desde 192.168.X.ABC hasta 192.168.X.DEF) - una de estas IPs, será concedida al switch.
2º. Al router conectaremos el switch. Utilizaremos un cable de categoría 5 (cat 5 ethernet cable). Lo siguiente será configurarlo para que cree también sus dominios de IP internas (las cuales estarán en el intervalo típico de 10.0.Y.FG - 10.0.Y.HI) - de estas IPs es de las cuales se concederán a los distintos ordenadores de nuestra red.
3º. Todos los ordenadores de la oficina, los conectaremos al switch, también con cables cat 5 ya que al ser nuestra conexión menor de 100Mbps y nuestra oficina de una longitud menor de 40m, son cables idóneos para este propósito (características del cable: <100m, <100Mbps), y los configuraremos para que obtengan sus IPs internas correspondientes, bien de manera estática o bien de manera dinámica (DHCP).

Una vez terminado el cableado, nuestros equipos deberían estar listos para funcionar y navegar por internet de manera individual sin ningún problema.



Datos económicos:
(presupuesto limitado):
* Cable de red de 20m (entre router y switch) = ~16€
* Cable de red de 7m (entre switch y ordenadores) x 12 ordenadores = 6€ * 16 = ~72€
* Router (Conceptronic C54APRA2+) = ~22€
* Switch (OvisLink  EVOFSH16) = ~51€
TOTAL: ~159€


(presupuesto normal):
Cable de red de 20m (entre router y switch) = ~16€
Cable de red de 7m (entre switch y ordenadores) x 16 ordenadores = 4€ * 16 = ~72€
Router (SMC7904WBRA-N) = ~60€
Switch (Cisco SR2016 16) = ~150€
TOTAL: ~296€

jueves, 29 de septiembre de 2011

Google Apps Standard - Review

Buenas a todos los radio-oyentes! Hoy haremos una breve revisión de los servicios gratuitos ofrecidos por Google Apps y en qué consiste cada uno.

Google Apps, es un método alternativo de escritorio office, y al ser online, no hay necesidad de instalar ningún programa en tu ordenador (y como ya sabemos, muchos de estos programas son de pago, como Microsoft Office).

Para obtener una cuenta en Google Apps, ya sea en la versión gratuita, o de pago, necesitas tener un dominio con el cual registrar dicha cuenta. Una vez registrada la cuenta con el dominio, Google te da acceso a unos cuantos servicios, de los cuales, los mas importantes son: Calendar (Calendario), Docs (Documentos), Email y Sites (Páginas web). También puedes personalizar los enlaces a estos servicios para que concuerden con tu dominio, por ejemplo, en vez de docs.google.com/a/tu-dominio.com puedes usar docs.tu-dominio.com, lo cual demuestra una mayor profesionalidad.

Imágen del tablón de Google Apps de uno de mis dominios. A la izquierda (Email) se puede ver 
un enlace customizado y a la derecha (Docs) un enlace normal al servicio en cuestión.

  • Google Calendar: Es un servicio en el cuál puedes añadir fechas importantes o tareas a realizar, y compartirlo con más gente. Como con un grupo de amigos, o simplemente las demás personas que tienen cuenta en tu dominio de Google Apps (como los empleados de tu empresa).
  • Google Docs: Tal y como su nombre indica, es el sitio donde puedes manejar tus documentos, ya sean documentos de texto, hojas de cálculo, presentaciones, etc. Cualquier archivo, igual que con Google Calendar, puedes compartirlo con más personas, como simples lectores, o también como editores. Como editores de un documento, los usuarios (y también varios usuarios a la vez) lo podrán guardar y editar en cualquier momento. Por ahora Google nos da sólo 1GB para almacenar nuestros archivos.
  • Google Email (Gmail Apps): Sin duda es el servicio más utilizado por los usuarios de Google Apps. Igual que el email normal de Google, todo aquel que utilice este servicio, podrá manejar el correo correspondiente a su dominio (*@tu-dominio.com). La cuota de almacenamiento por el momento es de unos 7.4GB por usuario.
  • Google Sites: Es uno de los servicios más interesantes que presenta Google. Con Sites, cualquiera puede crear páginas web en cuestión de minutos con la ayuda de plantillas ya hechas, y opciones para customizar a gusto, que se proporcionan a la hora de crear/editar la página.
Hace poco más de un año, Google Apps Standard tenía límite de 100 usuarios por dominio registrado. Pero como vieron que se les iba de las manos la generosidad, pusieron un límite de 50 usuarios por cuenta, a todas las cuentas Standard registradas hasta el 10 de Mayo de 2011. A partir de esa fecha, todas las cuentas gratis registradas, serían aún más reducidas con una capacidad de 10 usuarios por dominio.
Si se quiere más capacidad, no hay más remedio que recurrir a Google Apps Business, lo cuál es el servicio de pago de Google Apps.