VPSs y mas.

Mostrando entradas con la etiqueta network. Mostrar todas las entradas
Mostrando entradas con la etiqueta network. Mostrar todas las entradas

martes, 6 de septiembre de 2016

Ejemplo: Linux y Network Prefix Translation (NPT)

Introducción:
En este post voy a intentar explicar brevemente que es NPT, por qué es útil y finalmente dejaré un pequeño ejemplo que espero sea de utilidad.


¿Qué es NPT?
NPT por sus siglas en Inglés significa Network Prefix Translation, algunos lo podrás comparar con NAT en IPv6.., y bueno,., es medianamente cierto. Siendo la palabra “medianamente” perfectamente utilizada en la oración previa.


En NPT básicamente lo que se busca es traducir la dirección origen en un datagrama IPv6, pero particularmente la sección del prefijo de red (NET ID) dejando la parte del IID (Host ID) sin modificación.


¿Por qué hacer NPT?
Existen varias razones. Voy a mencionar solo dos.


  1. Estoy en una red con dos proveedores de Internet (no tengo IPs propias ni ASN), pero necesito alguna redundancia para salir a Internet. El equipo de borde en vez de realizar un NAT con sobre de carga de puertos a una sola dirección IP (con todos los problemas y limitantes que esto ocasiona) solo modifica los primeros bits del la dirección (digamos, los primeros 64 bits solo como manera de ejemplo).
  2. Si necesitar hacer “renumbering” de tu red pero tienes IPs del tipo ULA (u otra propia quizas) tu vida será mucho más sencillo al solo tener que modificar el traductor NPT y no hacer re-enumeración de toda la red.


Diagrama ejemplo


Configurando un equipo Linux para hacer NPT:


Los pasos para configurar NPTv6 (o NPT) en Linux son muy sencillos. Debes hacerlo tanto de paquetes salientes como de paquetes entrantes.


#From internal network to external Network
ip6tables -t nat -A POSTROUTING -d 2000::/3 -s 2001:db8:AAAA:AAAA::/64 -j NETMAP
--to 2001:db8:CCCC:CCCC::/64;


#From external network to internal network
ip6tables -t nat -A PREROUTING -s 2000::/3 -d 2001:db8:CCCC:CCCC::/64 -j NETMAP
--to 2001:db8:AAAA:AAAA::/64;


Mas info:


Y por supuesto el RFC mismo:

martes, 9 de diciembre de 2014

Python Script: Probably useless but functional IPv6 Network scanner

Below is the code of what is probably useless but a functional IPv6 host scanner written in Python using threading.

To perform a regular (brute force) network scans in an IPv6 Network is almost impossible and it can take over 5.000 years to finish.

This project was purely academic and I just wanted to learn about threading in Python.

This software is not recommended for general usage.....

This  script  will call the OS to actually perform the ping

This software receives two parameters:
a) Prefix to scan in the format 2001:db8::/64 (subnet, not host)
b) Number of simultaneous processes it can run (MAXPINGS)

One more time it was purely academic stuff but hopefully it can make your day

Finally, AFAIK nmap does not yet support IPv6 network scan.

The code was written in python3:

--- cut here ---

#!/usr/bin/python3

import threading
import sys
import ipaddress
import subprocess
import time

CURRENTPINGS=0 # Number of simultaneous ping at a time

def DOPING6(IPv6ADDRESS):
  global MAXPINGS, CURRENTPINGS
  CURRENTPINGS+=1
  CMD="ping6 -c 3 "+str(IPv6ADDRESS) + " 2> /dev/null > /dev/null"
  return_code = subprocess.call(CMD, shell=True)
  if return_code == 0:  #If ping was succesful
    print (IPv6ADDRESS," is alive")

  CURRENTPINGS-=1

def main():
  global MAXPINGS, CURRENTPINGS
  if len(sys.argv) != 3: #Validate how many parameters we are receiving
    print("  Not enough or too many parameter")
    print("  Usage: ./scanipv6.py IPv6Prefix/lenght MAXPINGS")
    print("  Example: ./scanipv6.py 2001:db8::/64 20")
    print("  Prefix lenght can be between 64-128")
    print("  MAXPINGS corresponds to how many pings will be running at the same time")
    exit()

  SUBNET,MASK=sys.argv[1].split("/")
  MAXPINGS=int(sys.argv[2])

  for addr in ipaddress.IPv6Network(sys.argv[1]):  #Let's loop for each address in the Block
    ping_thread=threading.Thread(target=DOPING6,args=(addr,))

    while CURRENTPINGS >= MAXPINGS: # With this while we make it possible to run max simultaneous pings
      time.sleep(1)  # Let's wait one second before proceeding
      #print ("Interrumping...., CURRENTPINGS > MAXPINGS") #Uncomment this line just for debugging

    ping_thread.start()

main()

martes, 14 de octubre de 2014

La mala idea de bloquear Internet

Toda mi vida lo que siempre he querido es un Internet libre, sin bloqueos, rápido que ayude al mundo a comunicarse, a educarse, a estar informado. En mi humilde opinión el internauta tiene acceso a visitar la pagina que quiera y cuando quiera, sin importar el contenido lo que diga, lo que vea, lo
que escuche. No se nada de leyes pero creo que debe verse como un derecho del ciudadano a leer, ver y escuchar en Internet lo que la persona desee.

Bloquear paginas no es una solución, es mas un problema, no se llega a nada, la solución a los problemas esta en otra dirección muy lejana a bloquear las paginas y contenidos.

Supongamos un caso donde alguien realiza una publicación indicando que el cielo es rojo, las nubes anaranjadas o que esta lloviendo para arriba, ¿van a bloquear ese contenido?. ¿Tú no tienes derecho a poner esa información en una pagina Web?.

Ahora bien, imaginemos otro caso donde en la esquina de tu urbanización esta ocurriendo algo ilegal (y tu lo ves desde tu apartamento) ¿puedes o no publicar lo que esta ocurriendo en Internet?, ¿tomar fotos?, ¿realizar un artículo al respecto?. ¿Puedes ponerlas en Internet?, ¿te lo bloquean?, ¿tu pierdes la libertad de expresión y yo pierdo el acceso a tu informacion?. Peor aún, en segundos un familiar tuyo va a pasar por esa esquina..... gracias a la NO libertad de expresión y al NO acceso a
la información algo indeseado ocurrió que honestamente no quiero describir.

En los últimos meses (en realidad años) he visto como algunos países han decidido bloquear su acceso a Internet imposibilitando a sus habitantes a acceder a contenido legitimo a la información, pero peor aun dañando poco a poco la super autopista de la información.

Solo por mencionar algunos países con historial por bloquear -al menos un poco- su acceso a Internet (tomado de http://www.usatoday.com/story/news/world/2014/02/05/top-ten-internet-censors/5222385/  y http://en.wikipedia.org/wiki/Internet_censorship: ):
- Irán
- Egipto
- Coreo del Norte
- Venezuela
- Cuba
- China
- Turquía
Arabia Saudita
- Siria
- Vietman

Antes de proseguir, quiero indicar que por más de un año me he tomado la libertad de averiguar que manera utilizan para bloquear paginas Web u otros servicios a los usuarios, he recibido básicamente dos respuestas:

- Bloqueos por DNS
- Bloqueos por dirección IP destino

(claro, por detrás puede haber un montón de cosas que complican el escenario como firewalls, IDS, IDP, etc, etc)

Muchas personas, principalmente los técnicos dirán que ambos métodos son ineficientes y que se pueden evitar utilizando una VPN y/o cambiando los servidores DNS que utilizan los usuarios. Es muy cierto este pensamiento sin embargo en la realidad y en la practica son MUY pocas personas las que tienen conocimiento de DNS, muchos menos de VPN y a su vez este ultimo en algunas situaciones hay opciones pagas ($$) lo que reduce aun mas la poblacion dispuesta a realizar estos cambios. Por lo anterior pienso que bloquear contenido por DNS e/o IP destino es BASTANTE eficiente.

El objetivo de este post es indicar porque pienso que es mala idea bloquear Internet para un país:

1) Rompemos el Internet poco a poco y luego armarlo puede ser muy complicado
Esta razón es fatal para Internet y el país. Al estar constantemente creando y modificando rutas en los routers va a ir creando una especie de "agujeros parciales" a ciertas direcciones IP destino. Pero el problema no es solo este, sino la persecución de bloquear sitios trae consigo el bloqueo "actual" del destino sin nuevamente "permitir" el anterior. Esto ultimo conlleva a ir rompiendo poco a poco muchas direcciones IP legítimas en Internet que no pueden ser accedidas.
Multiplicando el efecto anterior, un caso similar ocurre en el mundo DNS.

2) Los inocentes pagan como pecadores
Siguiendo un poco con lo anterior supongamos el siguiente escenario de ejemplo: Un ciudadano común tiene un blog de cocina. Por cosas del destino su página web esta alojada en un virtualhosting bajo la misma dirección IP que una pagina que quiere ser bloqueada. ¿Qué va a ocurrir?. No puede ser accedida la pagina del blog de cocina. Para el ciudadano común y para el proveedor del virtualhosting identificar esta situación y solventar el caso seria muy complicado.

3) Teletrabajo
Hoy en día es normal trabajar, compartir y jugar de manera remota con diferentes personas en el mundo. Lamentablemente el bloqueo de IPs y de nombres DNSs obstaculiza el Teletrabajo; un ejemplo es que la persona con la que nos encontramos laborando remotamente quisiera compartir información/contenido utilizando medios que se encuentren bloqueados en uno de los países. Lo anterior es un entorpecimiento explícito que siendo antagónico me atrevo a decir que convierte al ciudadano en una persona menos productiva.

4) Dudas a los ciudadanos
Caso a) En el supuesto que una persona en el país bloqueado no pueda acceder a un sitio ¿qué va a pasa?: Quizás llame a su proveedor de servicio (perdiendo tiempo, dinero, creando molestias). Es muy probable que la persona que atienda el teléfono sencillamente no sepa revisar los DNS y rutas en los enrutadores, haya que escalar el caso y mucho mas. Para los proveedores esto es un costo que tiene que ser trasladado a alguien, por supuesto que al cliente. Es decir, el servicio de Internet se encarece.
Caso b) El ciudadano probablemente llame directamente a un amigo con conocimientos en informática, una vez mas: perdiendo tiempo, dinero y creando molestias
Caso c) Las dos anteriores

5) Perspectiva ante un bloqueo _nuevo_ del ciudadano:
Cuando un ciudadano no puede entrar a un sitio Web (o servicio) no sabe si fue bloqueado por el gobierno, por el ISP, el sitio web caído o si es algo temporal. Esto conlleva a una serie de molestias directas e indirectas que a su vez más trae problemas colaterales.

6) El error humano
Los administradores de red son personas como cualquiera, son propensos a cometer errores al igual que todos nosotros.
Es bien sabido que ____ % de errores en red son causados por errores humanos, ahora traslademos esta estadística a los administradores red que deben estar manipulando los servidores DNS y los routers creando rutas frecuentemente con el objetivo de bloquear algunos sitios y contenidos. Lastimosamente el resultado es un peor Internet para el ciudadano.

7) Históricos + falsos positivos (negativos?)
Este punto lo describiré con un ejemplo: Un proveedor de Internet contrata a un nuevo administrador de red; este último observa gran cantidad de direcciones IPs bloqueadas en los routers, es muy complicado que el nuevo administrador NO sepa si estos IPs fueron bloqueados momentáneamente por defenderse de un ataque de red anterior o corresponde a un bloqueo solicitado por el regulador del país (o el ente respectivo)

8) Daños colaterales:
Es común que muchas organizaciones realicen eventos 1,2 ó 3 veces al año y roten su sede en diferentes países. Es bien sabido que estas organizaciones evitaran los países con bloqueos a Internet.



9) Se rompe el acceso a sitios legítimos:
Un caso que he visto en varias oportunidades es el bloqueo por DNS apuntando a direcciones IP, quizás www.example.com a 1.1.1.1. Luego: supongamos que por asegurar el bloqueo a nivel de routing se enruta 1.1.1.1 a un hoyo negro (null 0) el ciudadano no podrá entrar ni al sitio que se bloqueo ni al sitio legítimo que se encuentre en la dirección IP bloqueada


Iba a colocar otras razones y puntos negativos de pasar a través de una VPN y cambiar los DNS en las máquinas tales como enlentecimiento de Internet, lentitud en la VPN y problemas de geolocalizacion  pero lo dejaré para otra oportunidad.


Mi conclusión:
Si existe algo que yo quisiera y pudiera bloquear en Internet seria: pornografía infantil y ventas ilegales de armas (algo realizado por un pais en Latino América). He llegado a ver países que bloquean contenido de sus propios ciudadanos, esto a mi parecer deja mucho que desear.

Lo he dicho mil veces, un Internet 100% libre tendrá unas MUY pocas cosas malas pero tiene MUCHAS mas ventajas que desventajas. Ir bloqueando poco a poco Internet en los países a la larga trae desventajas competitivas, subdesarrollo, imagen ante el mundo poco amigable y muchas otras cosas. Lo anterior repercute entre otros en los ámbitos económico y social. Internet debe ser utilizado como una herramienta para el desarrollo.

Antes de terminar; un Internet debe ser sin bloqueos, Internet debe ser con banda ancha de buena velocidad, acceso a nivel nacional, decirle NO al throttling y lógicamente seguro y con privacidad.


Reciban un saludo,

lunes, 14 de marzo de 2011

Historico de tablas BGP. ¿Hijack de mi red?

Descripcion:
Si eres un administrador de routers que manejen tablas BGP (probablemente un ISP) quizás publicas tus propios prefijos/subredes a tu upstream provider desde tu Sistema Autonomo (AS).
Ahora bien, debes saber que tu mismo prefijo o uno muy similar (quizás un prefijo más grande o chico) puede ser -por algún error o ataque- publicado desde otro AS en otra parte del mundo. Lamentablemente esto es algo que ocurre y hay que estar preparado.

Problema:
Pienso haber sufrido un hijack de mis prefijos IP (publicadas desde un AS diferente al mio) y necesito verificarlo.
Para este inconveniente te recomiendo utilizar un routeview especificamente la herramienta BGPlay. BGPplay me permito decir que es una herramienta excelente y gratuita realizada en Java que permite buscar un prefijo y el te indicará cualquier cambio en los ultimos 10 días.
Para utilizar BGPPlay:
1) Dirigete a la pagina http://bgplay.routeviews.org/
2) Haz click sobre el boton "Start BGPlay"
3) Luego se cargará el applet de Java, allí indicas cual es tu prefijo un rango de fecha donde deseas consultar
4) Hacer click sobre Ok
5) Analizar los resultados


Recomendación:
Tener Alarmas!; para ello deseo sugerirte el sitio web: http://www.bgpmon.net/ . BGPmon es un sitio gratis dedicado al monitoreo y analisis de tablas BGP. Lo más significativo que tiene es que puedes indicar cuales son tus prefijos, tu AS y en caso de existir algún cambio ellos te envian un correo. Por ejemplo puedes configurar las siguientes alarmas:
- En caso de existir algún otro AS que comienza a publicar algún prefijo tuyo te enviaran un correo
- Redes nuevas
- Cambios significativos de path
- Redes subneteadas
- Retiro/withdraw de redes

Suerte, espero sea de tu utilidad,

miércoles, 1 de abril de 2009

Networking Tips

Gracias por entrar en acostanetwork.blogspot.com.
Aquí se publicaran tips semanales en el area de networking