martes, 22 de abril de 2014

IPTABLES

¿Qué es iptables?

iptables es un cortafuegos por defecto que viene preinstalado en la práctica mayoría de las distribuciones Linux a partir de la versión 2.4 del núcleo. Es una herramienta que gestiona las conexiones que entran, vienen o pasan por el sistema operativo. Por tanto, es considerado un firewall muy versátil que puede ser utilizado para gestionar todas las conexiones que se hagan en el ordenador.

iptables tiene soporte tanto para el protocolo IPv4 como para el protocolo IPv6. Para diferenciar cuál es cual, IPv4 usa el comando iptables y IPv6 utiliza el comando ip6tables.

¿Qué puede hacer iptables?

Para definir correctamente todas las reglas de las que nos provee iptables, haremos una pequeña introducción sobre los tipos de órdenes que maneja el cortafuegos. (Entre paréntesis viene la opción que usa cada tipo)

Tipo de paquetes de datos (- A)
  • INPUT: Paquetes que llegan a nuestra máquina
  • OUTPUT: Paquetes que salen de nuestra máquina
  • FORWARD: Paquetes que pasan por nuestra máquina
Interfaces por las que entran o salen los paquetes (-i = input, -o = output)

- eth0, eth1, wlan0, ppp0... toda interfaz que tenga un sistema Linux

 IP origen y destino de los paquetes (-s = source, -d = destination)

Puede ser una IP concreta o un rango de direcciones IP acompañado de su CIDR. Ejemplos:

- 192.168.1.33 (concreta)
- 172.16.1.0/24 (rango de IP)

Protocolo de los paquetes (-p = protocol)
  • TCP,
  • UDP
  • ICMP
Haciendo enrutamiento con la tabla NAT (-t NAT)

- PREROUTING (Filtrar antes de enrutar)
- POSTROUTING (Filtrar después de enrutar)

 ¿Cómo se usa iptables? ¿Qué configuraciones puedo hacer en el mismo?

iptables es utilizado, en su amplia mayoría de casos, para filtrar las conexiones que se realizan en ordenadores Linux que son utilizados como servidores y routeres entre redes. iptables puede:
  • Denegar o aceptar conexiones:

    • Parcialmente, desactivando y activando algunos puertos o protocolos, el tráfico ICMP de ping.

    • Totalmente, habilitando o deshabilitando el acceso a equipos con una determinada dirección de red, subred, o dirección física MAC, y dando acceso total a todo, o quitándolo.
  • Utilizar tablas NAT de enrutamiento para enrutar entre dos interfaces de red enchufadas en el sistema Linux. (NOTA: debes activar el ipforward del sistema para conseguir que funcione)

  • Si se dispone de la aplicación de red Wireshark se puede monitorizar y listar aún mejor las entradas y salidas de iptables, además de que la propia aplicación dispone de tablas de listado.
iptables se utiliza mediante línea de comandos en su amplia mayoría. Como el compendio de ejecución de iptables es un poco extenso, voy a realizar la explicación de la mejor forma que se puede: Con ejemplos prácticos

  • Firewall de un ordenador o servidor.
  • Un modelo "global" de router y firewall. (O bien, podéis ir a la entrada de usar un CentOS como router y observar algunos ejemplos ya realizados para ver cómo se usa)

El modelo básico para hacer cualquier configuración es:
  • Borramos las anteriores reglas y ponemos todo el iptables a 0: Antes de realizar ninguna instrucción, lo recomendable es borrar toda la configuración anterior de iptables, para que no interfieran antiguas restricciones con las nuevas.

  • Si nuestro ordenador va a ser router entre redes, configurar la NAT: Configuraremos las tablas NAT de cero para que no haya ningún problema en la implementación.
  • Abrir o cerrar puertos y protocolos específicos: Para "rizar más el rizo" en la configuración, en caso de que necesitemos hacerlo.

Ejemplos de uso de iptables

-------------------------------------------------------------------------------------------------------------------------------------

Como Firewall en un solo ordenador/servidor:

El escenario será el siguiente:

Tenemos un servidor, por el cual debido a recientes implementaciones (Como un servidor FTP o un servicio HTTP) queremos que el resto de ordenadores se conecten al mismo. Sin embargo, queremos también que no se tenga libre albedrío y queremos cerrar y abrir una serie de puertos.

Para este ejemplo, tenemos implementado un servidor HTTP y un FTP, y queremos rechazar las conexiones por TELNET y aceptar solamente las que entran por SSH. La red será 192.168.1.0/24 y nuestro servidor tiene como IP la primera del rango.Además, no queremos que un determinado ordenador se conecte, y como va todo el rato cambiando direcciones IP para sortear el baneo, hay que cerrarlo directamente por su dirección física, que es 01:23:45:ab:cd:ef

Para configurar correctamente el iptables, haremos los dos primeros pasos del modelo: Borrado de las reglas anteriores e implementación de las que queramos poner:

1. Borrado de las reglas anteriores


Borra las anteriores reglas de iptables.

# iptables -F

Igual que la anterior, pero más rematada.

# iptables -X

Pone el contador de paquetes totales del iptables a cero.

# iptables -Z

2. Establecemos las políticas de denegación y aceptación de puertos y servicios.

Comenzamos con aceptar los tipos de paquetes que manejará el firewall, que son de entrada y de salida.

# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT

Aceptamos la entrada de localhost.

# iptables -A INPUT -i lo -j ACCEPT

Comenzamos primeramente cerrando todos los puertos establecidos (Del 1 al 1024)

# iptables -A INPUT -i eth0 -p tcp --dport 1:1024 -j DROP
# iptables -A INPUT -i eth0 -p udp --dport 1:1024 -j DROP

 Ahora establecemos las políticas de entrada.

# iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 20 -j ACCEPT
# iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 21 -j ACCEPT
# iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT

De forma auxiliar, también aceptamos los puertos esenciales para la conexión (DHCP y DNS)


DNS:

# iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 53 -j ACCEPT
# iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 53 -j ACCEPT

DHCP:

# iptables -A OUTPUT -s 192.168.1.0/24 -p udp --dport 67 -j ACCEPT

# iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 68 -j ACCEPT 

Rechazamos el puerto de Telnet.

# iptables -A INPUT -i eth0 -p udp --dport 23 -j ACCEPT

Y para acabar, rechazamos la dirección física de ordenador tan molesto:

# iptables -A INPUT -m mac --mac-address 01:23:45:ab:cd:ef -j DROP

Por último, guardamos la configuración:


# iptables-save

-------------------------------------------------------------------------------------------------------------------------------------

Como Firewall principal entre dos redes.

El escenario actual será siguiente:

Tenemos un ordenador con un sistema Linux que sirve de firewall. El mismo sistema tiene 3 interfaces referentes a:
  • eth0: Internet, salida directa.
  • eth1: Una red que contenga X ordenadores y que necesita Internet.
    Dirección de red: 192.168.0.0/24
    Dirección IP en la interfaz: 192.168.0.1/24
  • eth2: Un DMZ (Red desmilitarizada, con acceso total)
    Dirección de red: 192.168.1.0/24
    Dirección IP en la interfaz: 192.168.1.1/24
Queremos que en la interfaz eth1 se acepte el tráfico HTTP y HTTPS, además de otros como el puerto de Telnet y SSH. Rechazaremos el puerto 6680 en la misma red.

En eth2 queremos que se tenga acceso total, debido a su forma de ser una red desmilitarizada.

Para configurar correctamente el iptables, seguiremos un orden concreto: Borramos anteriores reglas, iniciamos la NAT y filtramos todo.

1. Borrado de las reglas definidas.

Borra las anteriores reglas de iptables.

# iptables -F

Igual que la anterior, pero más rematada.

# iptables -X

Borra las reglas establecidas en la tabla NAT.

# iptables -t NAT -F

 Pone el contador de paquetes totales del iptables a cero.

# iptables -Z

2. Inicializamos las políticas de filtrado

# iptables -P INPUT ACCEPT
# iptables -P FORWARD ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P PREROUTING ACCEPT

# iptables -P POSTROUTING ACCEPT 

Aceptamos el tráfico de localhost, para que no nos dé error.


# iptables -A input -i lo -j ACCEPT 


3. Iniciamos NAT

Después de poner el ip forward a 1, debemos implementar la siguiente regla:

# iptables -t NAT -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
# iptables -t NAT -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

(A partir de aquí no tocaremos más la red 192.168.1.0/24, ya que lo que quería era acceso total)

4. Establecemos el resto de reglas de filtrado y denegación.

Primeramente rechazamos el tráfico de ambas redes al mismo firewall (para evitar que alguien toquetee)

# iptables -A INPUT -s 192.168.0.0/24 -i eth1 -j REJECT
# iptables -A INPUT -s 192.168.1.0/24 -i eth2 -j REJECT

En la red 192.168.0.0:

Aceptar el tráfico de HTTP y HTTPS.

# iptables -A FORWARD -s 192.168.1.0/4 -p tcp --dport 80 -j ACCEPT

# iptables -A FORWARD -s 192.168.1.0/4 -p tcp --dport 443 -j ACCEPT


Aceptar el tráfico de Telnet y SSH.


# iptables -A FORWARD -s 192.168.1.0/4 -p tcp --dport 22 -j ACCEPT
# iptables -A FORWARD -s 192.168.1.0/4 -p udp --dport 23 -j ACCEPT

Rechazamos el tráfico del puerto 6680.

# iptables -A FORWARD -s 192.168.1.0/4 -p tcp --dport 6680 -j DROP
# iptables -A FORWARD -s 192.168.1.0/4 -p udp --dport 6680 -j DROP  

Después de realizar todas estas reglas, salvamos.

# iptables-save
-------------------------------------------------------------------------------------------------------------------------------------


Fuentes:
Experiencia propia.
Redes de Área local, aplicaciones y servicios Linux. Ministerio de Educación (Material docente)
Diversas entradas ya hechas de aquí manejando iptables.

viernes, 18 de abril de 2014

Reseteo de la contraseña de Windows usando Hiren's Boot

"¡Oh, dios, el blog sigue vivo! ¡Vivo!"

Hiren's boot es una herramienta demasiado completa que nos puede sacar a cualquiera de un aprieto. Tiene muchísimas herramientas, tales como defragmentador, testeo de unidades de disco o de RAM, recuperación de archivos vitales del sistema y antivirus.

En esta entrada usaré una aplicación que trae, muy útil para cuando olvidamos (u otra gente se olvida) las contraseñas de nuestros sistemas Windows.

La herramienta que vamos a usar se llama Offline NT/2000/XP/Vista/7 Password Changer. Dicha aplicación se encuentra en el mismo inicio del disco de rescate.


El uso de esta aplicación tiende a ser un poco "complicada" debido a que no se ajusta demasiado bien a la pantalla (sea cualesquiera, lo he probado tanto en VM como en ordenador real y se ve un poco mal, así que intentaré explicarlo de la mejor forma que pueda con el material que he recopilado de mi sistema).

Una vez iniciada la aplicación, empezará a iniciarse. Primeramente, inicializará los discos duros y nos los mostrará en pantalla para seleccionar el que queramos administrar.

El proceso consta de tres pasos: Seleccionar disco, Seleccionar el directorio de Windows y del Registro de Windows y Edición de la tabla de usuarios. También está el paso 4, que es el de guardar los cambios realizados en los usuarios.



Paso 1: Selección de disco.


En la imagen hay dos discos: Uno de 8178 MB y otro de 508 MB. En este caso, el sistema operativo que puse esta en el /dev/sda1. Por defecto, te selecciona el primer disco, así que seleccionamos el que sea (pulsando de 1 a X, donde X representa el número máximo) y le damos a Enter.

PD: El resto de opciones representadas en la imagen hace referencia a los drivers de los discos duros.Como no procede, ya que en el 99% de los casos inicializa los drivers si o si, no me centraré en ello.

Paso 2: Selección del directorio de Windows y del registro de Windows.

Una vez seleccionado el disco, el programa buscará el directorio por defecto donde suele estar instalado Windows.

Si no modificamos los directorios ni rutas por defecto, debería salir algo tal que así:


Si la ruta del directorio es correcta, aparecerá marcada debajo. Le damos a Enter y seguimos.

Una vez ejecutado, el programa nos "destripará" el registro y nos dará unas opciones.



Ahora nos dará dos opciones: Resetear contraseñas o parámetros de la consola de recuperación. Como solo nos interesa el reseteo, le damos a Reset Password, que es la opción 1 (El programa la marca como la por defecto).


Paso 3: Edición de la tabla de usuarios.

Una vez lo seleccionamos, el programa copia la tabla del SAM (que es, por así decirlo, el módulo que controla los usuarios y contraseñas del sistema) en un fichero temporal /tmp, para no machacarlo todo del tirón en el sistema.

Una vez copia todo, ofrece dos opciones: Edición de usuarios y contraseñas o edición del registro. También nos marca la q, para salir guardando datos en caso de que hayamos modificado alguna cosa. Como solo nos interesa la edición de usuarios, le damos al 1 (El programa la marcará por defecto).

Una vez ejecutado, saldrá lo siguiente.
PD: En la siguiente captura ya seleccioné el nombre de usuario a machacar, pero ustedes lo pueden seleccionar. Únicamente, una vez le den al Enter, saldrá la lista y marcará al Administrador como por defecto. Ponen el nombre del usuario que quieran editar o ponen 0xRID (con el RID que muestra el usuario)



Ahora nos mostrará las opciones de edición del usuario:

  1. Quitar contraseña.
  2. Editar la contraseña del usuario (no funciona bien en XP o superior, así que no funcionará)
  3. Promocionar usuario (Subir su rango a Administrador)
  4. Desbloquear y habilitar usuario (En caso de que esté bloqueado. Si no lo está, aparecerá entre paréntesis)
Por defecto nos muestra la "q" como opción siguiente. Como lo que queremos es quitarla, pulsamos 1 y le damos a Enter.



Una vez introducido, nos volverá a pedir el nombre de usuario que queramos editar. Como ya no queremos editar (¿O si? en ese caso, repite los pasos anteriores y listo), le damos al signo de exclamación (aquí no es la q, si no !).

Después, nos vuelve a sacar a la edición de usuarios y de recuperación de la consola. Le damos a la q para salir del menú y guardar los datos.


Paso 4: Guardar los cambios realizados.

Ahora nos salta directamente al paso 4, que es el de guardar los datos. Nos mostrará por defecto la opción n, que no guarda los datos. Le damos a la y para que guarde.


Una vez le damos a guardado, nos dice si queremos ejecutar un nuevo arranque del programa. Por defecto marca la n, así que si queremos ejecutarlo de nuevo pulsamos la y.


Una vez acabe, le damos al botón de reset del ordenador o escribimos reboot para reinciar.

Si lo hemos hecho bien, habremos conseguido resetear la contraseña.

Fuentes:
Experiencia propia (Reciclaje de apuntes del módulo)

PD: Si consigo utilizar bien el OPHCrack, publicaré como recuperarlas y no resetearlas como hacemos aquí.

Última revisión: Abril de 2014
Razón: Formato