Hasta hora estamos haciendo siempre las pruebas usando las IPs, pero una IP es poco cómoda para que un humano lo recuerde. Por ello se creo el nombre de dominio de un Host, que no es mas que un nombre de recordar sencillo para un ser humano. Y que asocia un nombre de dominio a una IP.
Ejemplos de nombre de dominio son:
Un nombre de dominio solo puede tener una IP ya que si tuviera varias , no sabríamos cual usar pero la misma IP puede tener varios dominios. Es decir que un mismo Host puede tener varios nombre de dominio. Eso es normal ya que en un mismo Ordenador se ponen páginas de distintos dominios para ahorrar costes económicos.
A consecuencia de ello se crearon los "procesos" 1) servidores de DNS. Un servidor DNS es un servidor al que le enviamos el nombre de dominio y nos devuelve su IP.
Mas información:
El protocolo DNS es muy sencillo, se envía por UDP al puerto 53 de nuestro servidor DNS un nombre de dominio y el nos retorna la la IP. No vamos a entrar en el formato del protocolo DNS. Un detalle es que lo primero que necesitamos a saber la IP de nuestro servidor de DNS. Así que hay que establecerla manualmente 2) al igual que hacíamos con la puerta de enlace.
Para saber los servidores DNS que está usando Linux debemos lanzar la orden systemd-resolve --status
:
logongas@beren:~$ systemd-resolve --status Global DNSSEC NTA: 10.in-addr.arpa 16.172.in-addr.arpa 168.192.in-addr.arpa 17.172.in-addr.arpa 18.172.in-addr.arpa 19.172.in-addr.arpa 20.172.in-addr.arpa 21.172.in-addr.arpa 22.172.in-addr.arpa 23.172.in-addr.arpa 24.172.in-addr.arpa 25.172.in-addr.arpa 26.172.in-addr.arpa 27.172.in-addr.arpa 28.172.in-addr.arpa 29.172.in-addr.arpa 30.172.in-addr.arpa 31.172.in-addr.arpa corp d.f.ip6.arpa home internal intranet lan local private test Link 3 (docker0) Current Scopes: none LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no Link 2 (enp2s0) Current Scopes: DNS LLMNR setting: yes MulticastDNS setting: no DNSSEC setting: no DNSSEC supported: no DNS Servers: 8.8.8.8 8.8.4.4 DNS Domain: ~.
Vemos que en las últimas lineas aparece "DNS Servers" y vemos que hay dos DNS cuyas IPs son "8.8.8.8" y "8.8.4.4".
No vamos a ver como establecer los servidores DNS en Ubuntu pero si alguna ver os hace falta, recordar que se usa una herramienta llamada netplan
Para nosotros hacer una petición DNS se usa la orden "dig" con el nombre de dominio.
logongas@beren:~$ dig www.fpmislata.com +short 87.98.231.18
Podemos pensar que no es muy útil la orden "dig" pero a veces hay problemas de red y para saber si funcionan los DNS podemos usar esta orden.
A veces nos interesa tener un servidor DNS en nuestro ordenador si por ejemplo nos conectamos a la IP de nuestra XBox , o la SmartTV, etc. De esa forma en vez de acceder por IP podríamos acceder por el nombre. Montar todo un servidor DNS, aunque no es complejo está mas allá del objetivo de la asignatura. Pero hay una forma muy sencilla de asociar una IP con un nombre de dominio. Es simplemente rellenar un fichero llamado "/etc/hosts" con la IP y el nombre de dominio.
logongas@beren:~$ cat /etc/hosts 127.0.0.1 localhost 192.168.1.110 beren # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Ahí vemos que en vez de usar "127.0.0.1" se puede usar el nombre de domino "localhost" y también el nombre de domino de "beren" asociado a la IP 192.168.1.106.
Así que si que por ejemplo si nuestra XBox tiene la IP 192.168.1.67 no habría mas que añadir lo siguiente al fichero "/etc/hosts"
192.168.1.67 xbox
Y ya podríamos usar el nombre xbox. Lo malo de ésta técnica es que solo funciona desde le ordenador en el que hemos modificado el fichero "/etc/hosts", por lo que desde un movil no podríamos usar el nombre "xbox". Así que no es una maravilla pero para salir de algún problema , puede valer.
Por último decir que una nueva nueva forma de conectarse a un servidor DNS, que no es por UDP al puerto 53 , sino que es por HTTPS. Es decir usando el puerto 443 3) por TCP. ¿Y para que usarlo? Pues por privacidad. Para que nadie pueda saber que nombre dominio estamos resolviendo, ya que si resolvemos por ejemplo el dominio "www.podemos.info" o "www.pp.es" se puede empezar a saber información privada nuestra. Además que si por ejemplo un país ordena bloquear un nombre de dominio por razones políticas, con DNS sobre https ya no podría.
Mas información:
Para poder comunicarnos por internet hemos visto que necesitamos de la siguiente información 4):
Obviamente poner todo ésto manualmente es inviable, así que se creo el protocolo DHCP que permite obtener toda esa información al iniciarse el sistema operativo. Para ello debe haber un servidor de DHCP en nuestra red. En nuestras casa ese servidor se encuentra dentro de nuestro router. El protocolo DHCP funciona sobre Ethernet y no sobre IP ni sobre TCP o UDP ya que es justamente lo que queremos configurar.
Mas información:
¿Porque es importante el servidor de DHCP? Porque podemos entrar en el router de nuestra casa y cambiar la configuración.
En las siguiente pantalla se ve la configuración de la IP de la red interna de un router:
La configuración de la LAN indica como será la red interna del router , datos que luego limitarán el rango de IPs que puede dar el servidor de DHCP.
Aquí indicamos los valores de los datos que va a retornar el servidor de DHCP
Un servidor DHCP intentará dar siempre la misma IP al mismo Host (sabe que es el mismo Hosts por su dirección MAC) pero no tiene obligación de ello.Por ello se dice que los host por DHCP tiene una IP dinámica , ya que puede cambiar en cualquier momento.Por otro lado si en un Host establecemos la IP de forma manual se dice que tiene una IP estática ya que no cambiará a no ser que el usuario la modifique.
En la siguiente imagen de un router se ve la tabla que tiene el servidor de DHCP con las MAC y las IPs que ha dado a cada MAC, de esa forma puede intentar dar la misma IP a la misma MAC la próxima vez que el ordenador arranque y pida una IP.
Por último tenemos la cuadratura del círculo, que es poder tener una IP fija con DHCP. ¿Como se hace? Pues es muy sencillo , reservamos la IP diciendo que esa IP solo se la demos a cierta MAC. En la siguiente imagen de un router , podemos ver como la IP 192.168.1.110 siempre se dará a la MAC 38-2C-4A-E7-D7-BB.
Despues de ver como funciona DHCP,¿Que utilidad tiene poder modificar todo ésto? Las utilidades son varias.
Mas información:
Pasemos ahora a explicar lo que es un cortafuegos. Hemos visto que cualquier proceso puede abrir un puerto 7) y ponerse a escuchar. Esta acción que parece tan inocua realmente tiene mucho peligro. Es un hecho que los programas de ordenador acaban teniendo problemas de seguridad , así que abrir un puerto para que cualquier Host de internet nos pueda enviar datos es un agujero por el que nos pueden hackear el ordenador.
Puede pasar por ejemplo que un programa lector de PDFs abriera un puerto para que se le envíe un documento Word y este programa retorne un PDF. Algo tan inofensivo como eso y hecho de buena fe, puede significar tener un agujero de seguridad. Aunque el ejemplo puede parecer un poco absurdo , el servidor de Windows que permitía compartir carpetas , durante mucho tiempo, tuvo fallos de seguridad.
Por ello los usuarios deberíamos poder decidir en que puertos se escucha y en cuales no. Para ello los sistemas operativos crearon los cortafuegos. Un cortafuego es un programa del sistema operativo que
Obviamente lo mas peligro son las conexiones de entrada pero también podemos desear impedir alguna conexión de salida.
Pasemos ahora a ver como usar el cortafuegos de Linux. El comando a usar es ufw, que significa "Uncomplicated Firewall". No voy a explicar como hacerlo ya que está perfectamente explicado en los siguientes tutoriales, por lo que deberéis leerlos:
Ahora que ya sabemos como usar el cortafuegos de Linux, resulta que tiene un problema.El problema es que en cada ordenador de nuestra red, debemos tener un cortafuego. Y puede pasar que:
Por lo tanto lo que se hace es poner una cortafuego en el router de entrada a nuestra red. De esa forma solo tenemos que preocuparnos de un único cortafuegos en toda nuestra casa o empresa. Así que en nuestra casa, el router tambien hace de cortafuegos.
En la imagen el dibujo del muro significa el router que hace de cortafuegos. De esa forma con un único cortafuegos evitamos conexiones entrantes a todos los ordenadores de nuestra red de nuestra empresa o de nuestra casa.
Los cortafuego de los routers por defecto están configurados de la siguiente forma:
Por lo tanto los ordenadores de la red interna se pueden conectar a servidores de Internet pero nadie se puede conectar a servidores internos de nuestra red, evitando así lo problemas de seguridad.
Después de ver los cortafuegos en los router, resulta que ahora los routers tiene una parte interna (la que queremos proteger) y una parte externa. Estas dos redes tienen también los siguientes nombres
Ya hemos visto el ejemplo del smart TV, que tiene abierto un puerto para permitir que lo controlemos desde el móvil pero no queremos que cualquiera lo pueda hacer desde "china". Y lo mismo con nuestra XBox, etc, etc etc. Es decir , ahora casi todos los cacharros tienen una dirección IP y están esperando a que les enviemos ordenes para manejarlos , así que son potenciales agujeros de seguridad.
Seguimos con los cortafuegos pero ahora vamos a ver el caso en el que queramos que desde Internet se puedan conectar a algún servidor nuestro. El caso mas común es que en nuestra empresa queramos tener un servidor Web. El problema de permitir conexiones a nuestro servidor Web es que hay posibilidad de que sea Hackeado. Y una vez hayan entrado en el servidor Web , desde ahí pueden entrar al resto de ordenadores de nuestra red. Para evitar eso, la red se organiza creando la Zona desmilitarizada o DMZ.
Mas información:
Para explicar la DMZ, veamos los ordenadores que tenemos en nuestra empresa:
Servidor | Uso | Acceso desde |
---|---|---|
Servidor web público | Es un servidor donde está alojada la información pública de nuestra empresa. Es el típica página web de cualquier emrpesa. | Internet |
Servidor web privado | Es un servidor donde está alojada la información privada de nuestra empresa. Es una web donde están todos los cliente, ventas, comprar ,contabilidad ,etc de nuestra emrpesa | Interior de la empresa |
Ordenadores de la propia empresa | Son los ordenadores que usan los trabajadores | Interior de la empresa |
¿Como organizamos la red para que se cumpla lo que hemos puesto en la anterior tabla? Pues en la siguiente imagen se ve como queda todo:
Lo importante es que ahora hay dos cortafuegos:
Es decir, que el cortafuegos interno , no permite ninguna conexión de fuera. Por lo que lo pueden hackear desde el exterior ni a los ordenadores de la empresa ni al servidor web privado. Pero como todos ellos están en la misma red, pueden comunicarse entre ellos sin ningún problema. Por otro lado el cortafuegos externo solo permite las conexiones para el servidor web público. Esto hace que el servidor web público si que pueda ser hackeado pero si eso ocurriera, no pondría en peligro ni al servidor web privado ni a los ordenadores de la empresa. Por otro lado , desde los ordenadores de la empresa , siempre es posible acceder a el servidor público (y obviamente también a internet) ya que el cortafuegos interno permite las conexiones de salida.
Por lo tanto la DMZ es simplemente una red en la que hay uno o mas servidores en las cuales el cortafuegos permite las conexiones de entrada desde Internet pero que en caso de ser hackeada no compromete el resto de los ordenadores de la empresa. Ya que éstos últimos están protegidos con otro cortafuegos.
NAT se creo debido a que con $2^{32}$ direcciones IPs no son suficientes para todos los Host del mundo. Así que hicieron un "truco" para tener mas Hosts conectados a Internet que IP existen. Es decir que actualmente hay muchos mas de 4.294.967.296 Hosts en Internet.
Mas información:
Para explicar todo ésto vamos a usar como ejemplo nuestras casa. Cuando contratamos internet el operador le asigna a nuestra casa una única IP. Hace 20 años eso no era un problema ya que no había móviles con internet ni las consolas se contactaban a internet, etc. etc. Así que solo había un único ordenador que necesitaba acceso a internet. En aquella época, esa IP que nos asignaba nuestro operador de telecomunicaciones era la que tenía nuestro ordenador y no había un router ya que no tenía sentido al haber un único ordenador en nuestra casa.
Pero pasó el tiempo y empezamos a tener mas de un Host en nuestra casa conectado a Internet, pero debido a la escasez de IPs, nuestro operador de telecomunicaciones seguía dándonos una única IP. Esa IP es la que ahora llamamos la IP Pública. Podemos decir que es una IP "normal y corriente".
Pero entonces, ¿Que IPs tenían el resto de aparatos de nuestra casa?. En ese caso se hizo la siguiente transformación:
¿Que significa una IP Privada? Es una IP con la que no se puede navegar por internet ya que no es única. Cualquiera es su propia casa puede tener la misma IP que nosotros. Las IP privadas son las siguientes:
Normalmente en nuestra casa la red que tenemos es del tipo 192.168.1.0/24. Lo que significa que por ejemplo la IP 192.168.1.100 la pueden tener miles y miles de personas en sus ordenadores de casa. Así que si algún router enviara por error un datagrama con esa IP, el resto de routers no sabrían a cual de las miles y miles de casas habría que enviarlo , así que simplemente se descartan siempre esos datagramas.
Pero, ¿entonces como podemos navegar por internet todos los días aun teniendo una IP Privada?. Pues gracias a NAT. NAT es un truco que pusieron en los routers para permitir que un Host con una IP privada pueda navegar por internet.
Vamos a explicarlo con un ejemplo en el que el Host A inicia una conexión con el servidor del Host B pasando por el router.
En las siguientes imágenes veremos los segmentos que se envían desde el Host A hacia el Host B y luego al revés.
Al enviar los datos el Host A, podemos ver que el segmento TCP que envía el Host A es "normal" con las IPs y puertos que esperaríamos en el segmento TCP pero si vemos el segmento TCP que envía el router hacía el Host B, vemos que la IP origen ha cambiado, es la IP pública del router y el puerto tampoco es el mismo es otro distinto. ¿Porque ha ocurrido ésto? Era obvio que la IP privada de 192.168.100 no podía salir por el router, así que había que poner otra IP y la única posible es la IP pública del router. Vemos también que el puerto cambia ya que como hemos comentado no es importante el puerto origen.
Veamos ahora la respuesta desde el Host B. El segmento TCP que envía el Host B, es el que esperaríamos para lo que sabe el Host B. Es decir que el host B piensa que la respuesta va para la IP pública del Router, aunque realmente vaya para el Host A.
Pero ahora viene lo interesante, cuando le llega el segmento TCP al router , aunque la IP de destino sea la IP pública del propio router, él sabe que no es para él ese segmento sino que es para el Host A. Por lo tanto cuando reeenvía el segmento TCP al Host A , el router cambia la IP destino para que sea la del Host A.
Es decir que un router con NAT hace lo siguiente con las IPs 8):
Los cambios no parecen muy complicados, pero el problema está en los segmentos de entrada. ¿Como sabe el router a que ordenador de la casa va ese segmento si la IP destino es la pública del router? Este es el quid de la cuestión. Volvamos a explicar el problema. Cuando el Host B envía datos de vuelta, la IP destino es la IP pública del router. ¿Como sabe el router que no va para el propio router? ¿Y como sabe a cual de todos los ordenadores de su red interna va ese segmento?
La respuesta es sencilla, lo sabe porque primero ya envió un segmento hacia el Host B, que venía desde el Host A. Así que cuando vuelven datos, sabe que es para el Host A. Por lo tanto ésto es lo importante. El Host A , debe iniciar la conexión ya que de esa forma el router sabrá cuando lleguen los datos que van hacía el Host A. Esa información de quien inicia la petición para saber luego cuando se envían datos desde el Host destino a que Host entregarla de la red interna se guarda en lo que se llama "Tabla NAT".
Pero eso nos crea un problema, ¿Que pasa si alguien de fuera quiere conectarse a un servidor de nuestra red interna? Es decir si ahora la conexión se inicia desde el Host B hacía el Host A. ¡Pues por defecto no puede! y eso es bueno ya que no queríamos que dese cualquier punto de internet alguien se pueda conectar a nuestros servidores. Así que al tener NAT , hemos creado indirectamente un cortafuegos. Veamos un ejemplo de porque es un indirectamente cortafuegos.
Si llega una petición de conexión al router por el puerto 80, éste no puedo redirigirla a ningún ordenador de nuestra red ya que no sabe a cual de todos ellos debería redirigirla ,en el peor de los casos podría ir para el propio router pero éste no tiene abierto el puerto 80 en la red externa así que el router no hace nada y por lo tanto hemos creado un cortafuegos ya que no puede conectarse nadie desde fuera a un ordenador de la red interna.
Mas información:
Hasta aquí lo que es el NAT pero….
Acabamos de contar que si nuestro router hace NAT, nadie se puede conectar a un servidor que haya en la red interna, pero eso aunque es una ventaja , realmente podemos querer montar un servidor Web y permitir que desde cualquier ordenador podamos conectarnos a él. Es justamente lo que hicimos con el cortafuegos de la DMZ.
Así que los router con NAT tienen una solución para permitir que en nuestra red interna aceptemos conexiones desde fuera. ¡¡Esto es lo que llamamos abrir puertos!!. En el router aparece con el nombre de "Virtual Server".
Vamos a ver como hacer en el router lo siguiente: Queremos que cuando llegue una conexión desde internet a la IP pública de nuestro router al puerto 80 por TCP, se redirija todo al puerto 80 del Host 192.168.1.210.
La siguiente imagen muestra como abrir un puerto
Los datos son:
En la siguiente tabla se ven los puerto que tiene abierto el router (que son el 80,443,8080 y 1234):
Podemos ver que:
Por último decir que los routers que tenemos en casa realmente no implementan un cortafuegos sino que simplemente implementan NAT que implícitamente funciona similar a un cortafuegos. Y que lo que en un cortafuegos era "Permitir conexiones de entrada" es lo que en el router se llama "Virtual Server" o como nosotros lo llamamos "abrir puertos".
Usando comandos de Linux, indica las direcciones IP de los siguientes dominios:
¿Hay algo extraño en alguna de las IPs?
Muestra los servidores DNS que usa tu Linux
Modifica tu linux de forma que si haces ping a los siguientes nombres de dominio se haga ping a las siguientes IPs
Nombre de Dominio | IP |
---|---|
dns1.google.com | 8.8.8.8 |
dns2.google.com | 8.8.4.4 |
router | La IP de tu puerta de enlace , es decir del router de tu casa |
Y luego prueba que funciona:
logongas@beren:~$ ping dns1.google.com logongas@beren:~$ ping dns2.google.com logongas@beren:~$ ping router
Haz capturas de pantalla de tu router para mostar:
Configura el cortafuego de tu linux para:
Si tienes la siguiente red:
Indica como organizarías para ello rellena las siguientes tablas:
Nombre Host | Dirección IP | Mascara de red | Puerta de enlace |
---|---|---|---|
Ordenador de empresa 1 | |||
Ordenador de empresa 2 | |||
Servidor Web Privado | |||
Servidor Web Publico |
Ordenes en Linux del cortafuego para configuralo en las siguientes ordenadores (suponemos que todos son linux)
Nombre Router | Dirección IP Publica | Mascara de red Publica | Dirección IP Privada | Mascara de red Privada | Puerta de enlace | Rango DHCP |
---|---|---|---|---|---|---|
Externo | ||||||
Interno |
Desde internet solo queremos que se pueda acceder por el puerto 80 y 443 al servidor de la DMZ ,así que rellena la siguiente tabla para ver como se abren los puertos.
Nombre Router | Service Port | Internal Port | IP Adress | Protocol |
---|---|---|---|---|
Nombre Host | Dirección IP | Mascara de red | Puerta de enlace |
---|---|---|---|
Ordenador de empresa 1 | 192.168.1.100 | 255.255.255.0 | 192.168.1.1 |
Ordenador de empresa 2 | 192.168.1.101 | 255.255.255.0 | 192.168.1.1 |
Servidor Web Privado | 192.168.1.10 | 255.255.255.0 | 192.168.1.1 |
Servidor Web Publico | 192.168.2.15 | 255.255.255.0 | 192.168.2.1 |
Nombre Router | Dirección IP Publica | Mascara de red Publica | Dirección IP Privada | Mascara de red Privada | Puerta de enlace | Rango DHCP |
---|---|---|---|---|---|---|
Externo | 158.42.4.23 | 255.255.0.0 | 192.168.2.1 | 255.255.255.0 | 158.42.4.1 | 192.168.2.100-192.168.2.200 |
Interno | 192.168.2.10 | 255.255.255.0 | 192.168.1.1 | 255.255.255.0 | 192.168.2.1 | 192.168.1.100-192.168.1.200 |
Nombre Router | Service Port | Internal Port | IP Adress | Protocol |
---|---|---|---|---|
Externo | 80 | 8080 | 192.168.2.15 | TCP |
Externo | 443 | 8443 | 192.168.2.15 | TCP |
#En todos los ordenadores sudo ufw default allow outgoing sudo ufw default deny outgoint #Servidor web privado sudo ufw allow 80/tcp sudo ufw allow 443/tcp #Servidor web público sudo ufw allow 8080/tcp sudo ufw allow 8443/tcp sudo ufw allow from 192.168.2.10 to any port 22
NOTA: Este ejercicio es optativo
Indica como podrías hacer en tu router que a tu ordenador Linux se le de siempre la misma IP.
NOTA: Este ejercicio es optativo
En virtulabox , donde pusiste la opción de "Adaptador puente" , pincha en "Avanzadas" y verás la dirección MAC de tu Linux. A la derecha esta un icono azul que permite cambiar la MAC de tu tarjeta de red.
Al cambiar la MAC , ¿El router ahora te dará la misma IP que antes? Explica porqué