![GNU/Linux](assets/gnulinux.png) [![cc-by-sa](assets/cc-by-sa.png)](http://creativecommons.org/licenses/by-sa/4.0/) 2016 - IES Luis Vélez de Guevara - Écija - Spain La versión más actualizada de este documento se encuentra en [jamj2000.github.io](http://jamj2000.github.io/gnulinux/2/actividades) <hr> <a name="indice"></a> # Índice #### [Introducción](#introduccion) #### [Configuración](#configuracion) #### [Comandos de red](#comandos) #### [Servicios de red](#servicios) <pre> </pre> En este tema vamos a trabajar mediante el proyecto que se indica a continuación. El proyecto consiste en __implantar una red virtual__, haciendo uso de __VirtualBox__, siguiendo el esquema que se muestra a continuación: ![Red](assets/red.png) __Realizaremos la configuración del soporte de red e instalaremos/configuraremos algunos servicios como HTTP, SSH y SAMBA. Para el soporte de red haremos uso tanto de configuración dinámica como estática.__ #<a name="introduccion"></a> [Introducción](#indice) 1. Utilizando VirtualBox, instala una máquina virtual Linux llamada __servidor-linux__ que tenga 2 tarjetas de red: - una tarjeta NAT - una tarjeta de red interna <hr> 1. Utilizando VirtualBox, instala una máquina virtual Linux llamada __cliente-linux__ que tenga 1 tarjeta de red: - una tarjeta de red interna <hr> 1. Utilizando VirtualBox, instala una máquina virtual Linux llamada __cliente-windows__ que tenga 1 tarjeta de red: - una tarjeta de red interna <hr> 1. __Inicia cada una de las máquinas y comprueba/cambia el nombre que tienen por defecto__. A continuación se explica como hacerlo en Linux. Para Windows puedes utilizar la interfaz gráfica (Propiedades del Equipo). En Linux podemos ver el nombre actual con el comando: ```sh hostname ``` El nombre puede cambiarse de forma temporal con el mismo comando: ```sh hostname nuevo_nombre ``` No obstante, si deseamos que los cambios sean permanentes deberemos editar el archivo __/etc/hostname__. Después deberíamos reiniciar para aplicar los cambios, pero NO lo haremos puesto que aún vamos a configurar el listado de equipos de la LAN. El contenido del archivo `/etc/hostname` para servidor_linux sería ``` servidor_linux ``` <hr> 1. __Configura el listado de los equipos de la red local.__ Para ello deberás editar el archivo __/etc/hosts__ y añadir las siguientes líneas (igual para los 3 equipos): ``` 192.168.0.1 servidor-linux 192.168.0.10 cliente-windows 192.168.0.11 cliente-linux ``` En Windows 7 el archivo es `C:\Windows\System32\drivers\etc\hosts`. <hr> 1. Reiniciamos las máquinas virtuales. ``` NOTA: Algunos administradores siguen con el proceso de configuración hasta que alguna tarea les obliga a reiniciar o si no se da este caso entonces hacen un reinicio al final de todas las tareas de configuración. Así evitan los múltiples reinicios. ``` <hr> <pre> </pre> #<a name="configuracion"></a> [Configuración de red](#indice) 1. __ Archivo /etc/network/interfaces para servidor-linux. __ ``` auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto eth1 iface eth1 inet static address 192.168.0.1 netmask 255.255.255.0 network 192.168.0.0 # dns-nameservers 127.0.0.1 # dns-search velez.local ``` Reiniciamos servicio de red: ``` service networking restart ``` <hr> 1. __ Archivo /etc/network/interfaces para cliente-linux. __ ``` auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.0.11 netmask 255.255.255.0 network 192.168.0.0 gateway 192.168.0.1 # dns-nameservers 192.168.0.1 dns-nameservers 8.8.8.8 8.8.4.4 ``` Reiniciamos servicio de red: ``` service networking restart ``` <hr> 1. __ Para cliente-windows puedes utilizar el Centro de Redes para realizar la configuración de red. __ Los parámetros son: ``` IP: 192.168.0.10 MÁSCARA: 255.255.255.0 PUERTA DE ENLACE: 192.168.0.1 DNS1: 8.8.8.8 DNS2: 8.8.4.4 ``` <hr> <pre> </pre> #<a name="comandos"></a> [Comandos de red](#indice) 1. __ Prueba que hay comunicación entre los 3 equipos. __ Por ejemplo, desde servidor-linux realizamos: ``` ping 192.168.0.10 ping 192.168.0.11 ``` NOTA: El cortafuegos de Windows tiene desactivada la respuesta a los mensajes ICMP (ping). Deberás añadir una regla al cortafuegos de Windows para que responda a los mensajes ICMP. 1. __Ejecuta el siguiente comando para ver los puertos que tienes abiertos. __ ```sh netstat -lut ``` <hr> 1. __¿Para qué sirven las opciones -l, -u, -t, de netstat?__ Consulta el manual de netstat. <hr> <pre> </pre> #<a name="servicios"></a> [Servicios de red](#indice) 1. __ Nombra al menos 5 servicios de red.__ <hr> #### Servicio web 1. __ En servidor-linux instala los paquete apache2 mysql-server php5 php5-mysql. __ Para ello ejecuta ```sh apt-get install apache2 mysql-server php5 php5-mysql ``` NOTA: Para distribuciones ubuntu 16.04, que trabajan con PHP 7 en lugar de PHP 5, los paquetes a instalar son: ```sh apt-get install apache2 mysql-server php php-mysql libapache2-mod-php ``` <hr> 1. __ ¿Para que sirve cada paquete de los anteriores? __ Busca información en Internet. <hr> 1. __ Visualiza en un navegador web la página web por defecto del servidor.__ Haz una captura de pantalla. En el navegador deberás escribir: ``` http://192.168.0.1 ``` o, si tienes soporte DNS, algo similar a esto ``` http://servidor-linux.velez.local ``` ![Página por defecto de Apache2](assets/apache-default-page.png) <hr> 1. La página por defecto es __/var/www/html/index.html__. Renómbrala a __/var/www/html/index.html.orig__. Vuelve a cargar la URL anterior y haz una captura de pantalla. <hr> 1. Crea un archico __/var/www/html/info.php__ con el siguiente contenido: ```php <?php phpinfo(); ?> ``` ![Apache2 - Índice de archivos](assets/apache-index.png) <hr> 1. __ Visualiza en un navegador web la página info.php.__ Haz una captura de pantalla. En el navegador deberás escribir: ``` http://192.168.0.1/info.php ``` o, si tienes soporte DNS, algo similar a esto ``` http://servidor-linux.velez.local/info.php ``` ![apache info](assets/apache-info.png) <hr> 1. Comprueba el apartado __Loaded Modules__. Observa que no tienes cargados los módulos: ``` mod_rewrite mod_ssl ``` Estos son módulos de Apache para proporcionar reescritura de URL (para mejor indexación de motores de búsqueda) y soporte SSL (y por tanto HTTPS). <hr> 1. Habilita los módulos anteriores. Para ello ejecuta en un terminal con permisos de administrador: ```sh a2enmod rewrite ssl service apache2 restart ``` <hr> 1. __Vuelve a cargar la página info.php.__ Haz una captura del apartado __Loaded Modules__. ![Módulos de Apache](assets/apache-modules.png) <hr> 1. __Accede al servidor a través de HTTPS.__ Para ello escribe en el navegador la URL ``` https://192.168.0.1 ``` o, si tienes soporte DNS, algo similar a esto ``` https://servidor-linux.velez.local ``` Haz una captura de pantalla del resultado. <hr> 1. En la actividad anterior no teníamos habilitado el sitio con soporte SSL. Tenemos un sitio disponible para esto en __/etc/apache2/sites-available/__. Haz un listado de dicho directorio e indica que archivos están disponibles en él. <hr> 1. Haz un listado también de los archivos que tenemos en __/etc/apache2/sites-enabled/__. <hr> 1. Para habilitar el sitio con soporte SSL hacemos en un terminal con permisos de administrador: ```sh a2ensite default-ssl service apache2 restart ``` <hr> 1. Comprueba que ha aparecido un enlace simbólico en __/etc/apache2/sites-enabled/__ que no existía antes. <hr> 1. __Vuelve a acceder al servidor a través de HTTPS.__ Para ello escribe en el navegador la URL ``` https://192.168.0.1 ``` o, si tienes soporte DNS, algo similar a esto ``` https://servidor-linux.velez.local ``` Haz una captura de pantalla del resultado. NOTA: En ubuntu, Apache viene con un certificado autofirmado, por lo que no es reconocido por el navegador. Deberás añadir una excepción. <hr> 1. Investiga como puedes ver el certificado que te envía el servidor-linux. Una vez lo sepas, visualízalo y haz una captura de pantalla. ![Certificado SSL en KUbuntu](assets/apache-certificado-ssl.png) <hr> #### Servicio DNS 1. __ En servidor-linux instala los paquetes bind9 y bind9utils.__ Para ello ejecuta ```sh apt-get install bind9 bind9utils ``` <hr> 1. __ Archivo /etc/bind/named.conf.local __ . Edita el archivo anterior. Debe tener el siguiente contenido: ``` // // Do any local configuration here // // Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918"; // Zona directa zone "velez.local" IN { type master; file "/etc/bind/db.velez.local"; allow-update { none; }; }; // Zona inversa zone "0.168.192.in-addr.arpa" IN { type master; file "/etc/bind/db.192"; allow-update { none; }; }; ``` <hr> 1. __ Archivo /etc/bind/db.velez.local __ . Edita el archivo anterior. Debe tener el siguiente contenido: ``` ; ; BIND: Zona directa velez.local ; $TTL 604800 @ IN SOA velez.local. root.velez.local. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; Servidor DNS @ IN NS ns.velez.local. ns IN A 192.168.0.1 ; Otros equipos del dominio cliente-windows IN A 192.168.0.10 cliente-linux IN A 192.168.0.11 ; Alias servidor-linux IN CNAME ns.velez.local. www IN CNAME ns.velez.local. ftp IN CNAME ns.velez.local. ``` <hr> 1. __ Archivo /etc/bind/db.192 __ . Edita el archivo anterior. Debe tener el siguiente contenido: ``` ; ; BIND: Zona inversa de velez.local (192.168.0.0) ; $TTL 604800 @ IN SOA velez.local. root.velez.local. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; Servidor DNS @ IN NS ns. 1 IN PTR ns.velez.local. ; Otros equipos del dominio 10 IN PTR cliente-windows.velez.local. 11 IN PTR cliente-linux.velez.local. ``` <hr> 1. __Archivo /etc/bind/named.conf.options __ . Si queremos que nuestro servidor DNS se comunique con otros servidores DNS y así poder realizar consultas sobre otros dominios (y no sólo el nuestro), deberemos descomentar/editar las siguientes líneas: ``` forwarders { 8.8.8.8; 8.8.4.4; }; ``` Pueden ponerse otros distintos a los indicados. Esto es sólo un ejemplo. <hr> 1. __Comprueba si tienes errores de sintaxis en los archivos anteriores.__ Ejecuta ``` named-checkconf ``` Si no aparece ningún mensaje, enhorabuena, no tienes errores de sintaxis. <hr> 1. __Comprueba si tienes errores en la configuración de la zona directa.__ Ejecuta ``` named-checkzone velez.local db.velez.local ``` Debe aparecer algo similar a ``` zone velez.local/IN: loaded serial 1 OK ``` <hr> 1. __Comprueba si tienes errores en la configuración de la zona inversa.__ Ejecuta ``` named-checkzone 0.168.192.in-addr.arpa db.192 ``` Debe aparecer algo similar a ``` zone 0.168.192.in-addr.arpa/IN: loaded serial 2 OK ``` <hr> 1. __Inicia el servidor de resolución de nombres BIND9. __ ``` service bind9 restart ``` No suele aparecer ningún mensaje en pantalla. <hr> 1. __Comprueba que el servidor BIND está ejecutandose. __ ``` netstat -punta | grep named ``` Debe aparecer algo similar a ``` tcp 0 0 192.168.0.1:53 0.0.0.0:* ESCUCHAR 3856/named tcp 0 0 10.0.2.15:53 0.0.0.0:* ESCUCHAR 3856/named tcp 0 0 127.0.0.1:53 0.0.0.0:* ESCUCHAR 3856/named tcp 0 0 127.0.0.1:953 0.0.0.0:* ESCUCHAR 3856/named tcp6 0 0 :::53 :::* ESCUCHAR 3856/named tcp6 0 0 ::1:953 :::* ESCUCHAR 3856/named udp 0 0 192.168.0.1:53 0.0.0.0:* 3856/named udp 0 0 10.0.2.15:53 0.0.0.0:* 3856/named udp 0 0 127.0.0.1:53 0.0.0.0:* 3856/named udp6 0 0 :::53 :::* 3856/named ``` <hr> 1. __Comprobamos el correcto funcionamiento.__ Desde servidor-linux vamos a realizar algunas consultas. ``` dig servidor-linux.velez.local @127.0.0.1 ``` Debe aparecer algo parecido a esto ``` ; <<>> DiG 9.9.5-11ubuntu1.3-Ubuntu <<>> servidor-linux.velez.local @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5808 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;servidor-linux.velez.local. IN A ;; ANSWER SECTION: servidor-linux.velez.local. 604800 IN CNAME ns.velez.local. ns.velez.local. 604800 IN A 192.168.0.1 ;; AUTHORITY SECTION: velez.local. 604800 IN NS ns.velez.local. ;; Query time: 2 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu May 19 23:30:57 CEST 2016 ;; MSG SIZE rcvd: 102 ``` Asegurate de que aparece la __ANSWER SECTION__ <hr> #### Servicio SaMBa 1. __ En servidor-linux instala los paquetes samba, smbclient y cifs-utilss.__ Para ello ejecuta ```sh apt-get install samba smbclient cifs-utils ``` <hr> 1. __ Archivo /etc/samba/smb.conf __ . Este archivo contiene la configuración del servidor SAMBA. Vamos a realizar una copia de seguridad, por si acaso. ```sh mv /etc/samba/smb.conf /etc/samba/smb.conf.orig ``` <hr> 1. __Creamos un nuevo archivo /etc/samba/smb.conf con el siguiente contenido:__ ``` [global] workgroup = WORKGROUP server string = Servidor SMB/CIFS Linux security = user map to guest = Bad User log file = /var/log/samba/%m.log max log size = 50 [documentos] comment = "Carpeta compartida sin autenticación" path = /public public = yes only guest = yes writable = yes ``` En este archivo indicamos que vamos a compartir como usuario invitado (sin solicitar usuario/contraseña) el recursos documentos con permisos de lectura y escritura. Dicho recurso se halla en la carpeta /public <hr> 1. __Reinicia el servidor samba__ ```sh service samba restart ``` 1. __Crea la carpeta /public y pon como propietario a nobody y como grupo a nogroup__ ```sh mkdir /public chown -R nobody:nogroup /public ``` <hr> 1. __Copia algún archivo de prueba en el directorio anterior. __ Deberás poner también a este archivo el mismo propietario y grupo anteriores. Haz un listado largo del contenido de la carpeta /public. <hr> 1. __Comprueba si la sintaxis de /etc/samba/smb.conf es correcta.__ Para ello ejecuta el comando: ```sh testparm ``` Haz una captura de pantalla del resultado. <hr> 1. __Desde Linux (servidor o cliente) comprobamos la conexión__. ```sh smbclient -L 192.168.1.1 ``` Haz una captura de pantalla del resultado. <hr> 1. __En el cliente-windows realiza un mapeo de unidad de red del recurso compartido (documentos) por el servidor-linux. __ Haz una captura de pantalla. Para ello deberás examinar la red, encontrar el recurso compartido y pulsar con el botón secundario del ratón encima para mostrar el menú contextual. Una vez ahí pulsa en 'Map network drive'. ![Windows - Mapeo 1](assets/samba-win-map1.png) En lugar de 'pc' debería aparecerte 'servidor-linux'. <hr> 1. __Selecciona la unidad de red deseada.__ Haz una captura de pantalla. Evita las unidades A: ... C: ... H:, puesto que se utilizan para disqueteras, discos duros, CD/DVD, pendrives y demás. Utiliza letras de unidad altas. ![Windows - Mapeo 2](assets/samba-win-map2.png) <hr> 1. Ya puedes utilizar tu unidad de red a través del explorador de archivos. __Prueba a copiar, modificar y borrar algunos archivos. __ Haz una captura de pantalla. ![Windows - Mapeo 3](assets/samba-win-map3.png) <hr> 1. __En el cliente-linux realiza un acceso al recurso compartido (documentos) por el servidor-linux.__ Haz una captura de pantalla. Para ello deberás abrir el explorador de archivos y escribir en la barra de dirección lo siguiente: ```sh smb://192.168.1.1 ``` ![Linux - Recurso SAMBA](assets/samba-linux-mount.png) O, en nuestro caso, como tenemos el servidor-linux con IP 192.168.0.1 ```sh smb://192.168.0.1 ``` <hr> #### Servicio SSH 1. __¿Pára qué se utiliza el servicio SSH?__ Busca información si es necesario. <hr> 1. __ En servidor-linux instala el paquete ssh.__ Para ello ejecuta ```sh apt-get install ssh ``` <hr> 1. Archivo __/etc/ssh/sshd_config __ . Este archivo contiene la configuración del servidor SSH. En Ubuntu suele venir con una configuración bastante adecuada por lo que no es necesario tocar nada. No obstante comprueba que existe la directiva: ``` X11Forwarding yes ``` Para ello puedes utilizar un editor como nano ```sh nano /etc/ssh/sshd_config ``` <hr> 1. __Conecta desde cliente-linux.__ Para ello, en cliente-linux ejecuta: ```sh ssh -X 192.168.0.1 ``` La opción -X te permitirá lanzar aplicaciones gráficas si así lo deseas. <hr> 1. Una vez conectado a servidor-linux __ejecuta algunos comandos__ para comprobar que realmente estás en dicho equipo. Por ejemplo: ```sh hostname ifconfig who ``` <hr> 1. Puedes también __lanzar una aplicación gráfica__. Por ejemplo: ```sh firefox libreoffice ``` __NOTA__: Ten en cuenta que aunque la interfaz gráfica de la aplicación se muestra en cliente-linux, dicha aplicación se está ejecutando realmente en servidor-linux y tiene acceso a los archivos y demás recursos del servidor. <pre> </pre>