miércoles, 14 de noviembre de 2018

Network Manager

El Network Manager es el administrador de las conexiones de Ubuntu

Su fichero de configuracion se encuentra en la ruta /etc/NetworkManager/NetworkManager.conf

----
[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

----

Cada dispositivo que el Network Manager administra es configurado mediante una conexión cuyo archivo es guarda en /etc/NetworkManager/system-connections/[nombre de la conexion]

/etc/NetworkManager/system-connections/LAN en PC Cliente para la iface enp0s3
----
[connection]
id=LAN
uuid=150ada1a-6db9-3c62-b7cd-e934bc979568
type=ethernet
autoconnect-priority=-999
interface-name=enp0s3
permissions=
timestamp=1538758218

[ethernet]
mac-address=08:00:27:00:03:01
mac-address-blacklist=

[ipv4]
address1=192.168.100.11/24,192.168.100.254
dns=192.168.100.11;192.168.100.254;8.8.8.8;8.8.4.4;
dns-search=aulaser.com
method=manual

----

Configurado de manera manual con
IP 192.168.100.11
mascara /24
puerta de enlace 192.168.100.254
servidores DNS locales y de google
y dominio de busqueda el dominio local de la entidad: aulaser.com

En el caso de que se hubieran definido rutas apareceria en la seccion [ipv4] la variable routeX=bloque_IPs,via,metrica

Ejemplo: route1=10.0.116.0/24,192.168.100.116,100

Para una interfaz configurada de manera automatica por DHCP
method=auto

Y si solo queremos que nos propociones IP mascara y gateway pero no servidores DNS ademas:
ignore-auto-dns=true

Dispone de una interfaz de linea de comandos NMCLI





El comando ip

Nuevo comando para obtener informacion de nuestras interfaces.

Para ver nuestras intefaces de red y su MAC

>ip link

>ip link show enp0s3


Para ver las direcciones de red configuradas en las interfaces (links)

>ip address

>ip address show dev enp0s3
>ip address show scope link


Para ver las rutas

>ip route
>ip route list dev enp0s3



Junto con el comando tracepath

>tracepath servidor.aulaser.com
>tracepath 192.168.112.13



martes, 13 de noviembre de 2018

De ifconfig a ip en ubuntu 18

Fuentes:

https://askubuntu.com/questions/1038037/ifconfig-in-ubuntu-18-04-is-not-working

https://blog.ubuntu.com/2017/07/07/if-youre-still-using-ifconfig-youre-living-in-the-past

Configuracion mediante ficheros de las intefaces de red

Archivo /etc/network/interfaces

iface eth1 inet static
address 192.168.1.41

netmask 255.255.255.0

network 192.168.1.0

broadcast 192.168.1.255
gateway 192.168.1.1

dns-nameserver 8.8.8.8
dns-search [dominio local]



Archivo /etc/resolv.conf (no se edita, se escribe por el programa resolvconf)

search [dominio local]
nameserver [IP servidor DNS]


Aplicar la configuración reiniciando la red:

/etc/init.d/networking restart


En version 18

editar el fichero /etc/netplan/01-network-manager-all.yaml

-----------
network:
  version: 2   
  renderer: networkd
  ethernets:
    enp0s3:
       dhcp4: no
       dhcp6: no
       addresses: [192.168.100.123/24]
       gateway4: 192.168.100.254
       nameservers:
         addresses: [192.168.100.254,8.8.8.8] 

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

Ejecutar

>sudo netplan apply

y comprobar

>systemctl status systemd-networkd
>ip address show dev enp0s3

Para comprobar servidores DNS
>systemd-resolve --status  

Se guardan en el archivo /run/systemd/resolve/resolv.conf

Aunque en /etc/resolv.conf indica 127.0.0.53 que luego hace forward a estos primeros



Fuentes:
https://www.solusan.com/etcnetworkinterfaces-de-un-plumazo.html

https://www.todavianose.com/configurar-interface-de-red-en-versiones-de-ubuntu-17-10-o-superiores/

https://askubuntu.com/questions/1031709/ubuntu-18-04-switch-back-to-etc-network-interfaces

https://www.administradortotal.net/sistemas/linux/configurar-la-red-ubuntu-18-04-derivados/

https://aprendiendoavirtualizar.com/configurar-ip-estatica-en-ubuntu-server/

https://aprendiendoavirtualizar.com/configurar-ip-estatica-en-ubuntu-server-18-04/

https://websiteforstudents.com/configure-static-ip-addresses-on-ubuntu-18-04-beta/

https://www.techrepublic.com/article/how-to-set-dns-nameservers-in-ubuntu-server-18-04/


Network Manager Comand Line Interface - nmcli

Terminos:

Dispositivo: Interfaz de red (link o device)

Conexión: Conjunto de opciones de configuración establecidas (connection)


Ver informacion general de las intefaces de red
>nmcli

>nmcli device show [nombre de interfaz]

>nmcli device show enp0s3



Averiguar las conexiones disponibles

>nmcli connection show


Obtener detalles de una conexión especifica

>nmcli connection show [nombre_conexión]


Obtener información del estado de los dispositivos (si están administrador o no por networkmanager)

>nmcli device status


Añadir una conexión

1.  Automatica por DHCP

nmcli connection add con-name "[nombre-conexión]" type [ethernet | loopback] ifname [nombre_dispositivo]

2. Estatica

nmcli connection add con-name "[nombre-conexión]" type [ethernet | loopback] ifname [nombre_dispositivo] autoconect no ip4 x.y.z.w gw4 x.y.z.w


Modificar una conexión

1. Indicar un DNS
nmcli connection modify "[nombre_conexion] ipv4.dns 8.8.8.8


1. Añadir un DNS (ademas del que había)
nmcli connection modify "[nombre_conexion] +ipv4.dns 8.8.4.4

3. Añadir otra dirección IP
-ip4.addresses x.y.z.w



Aplicar los cambios en una configuración de una conexión

nmcli connection update [nombre_conexion]


Ejemplos:

1. Modificar el hostname de una conexión enp0s3 (nombre de con y de dispositivo)

nmcli con modify enp0s3 ipv4.dhcp-hostname 'hostname'


ffvfvf

Fuentes:

https://www.unixmen.com/basics-networkmanager-command-line-tool-nmcli/

https://bbs.archlinux.org/viewtopic.php?id=195388


Evitar que NM controle una interfaz de red

El NetworkManager es un servicio que se encarga de administrar las conexiones de red del equipo. Pero solamente se encargá de aquellas que le dejemos que administre.

Cuando una conexión de red está administrada por NetworkManager su configuración no se obtiene de los ficheros de configuración estándares del sistema. Para configurar la tarjeta de red tendremos que hacerlo mediante el applet del NetworkManager, o es su defecto mediante la CLI con el comando nmcli


Existen varias maneras para indicar al NetworkManager que no queremos que una conexión sea administrada por este.

Una de ellas consiste en definir la configuración de la interfaz en el fichero de configuración de las interfaces de red /etc/network/interfaces



Fuentes:

https://websetnet.net/disable-network-manager-linux/

http://support.qacafe.com/knowledge-base/how-do-i-prevent-network-manager-from-controlling-an-interface/

https://askubuntu.com/questions/266767/how-to-stop-networkmanager

https://people.freedesktop.org/~lkundrak/nm-docs/nmcli-examples.html

https://enavas.blogspot.com/2016/07/evitar-que-network-manager-controle.html

Cliente de DHCP

El cliente de DHCP se invoca mediante la orden dhclient.

El comportamiento del cliente de DHCP se puede configurar mediante el fichero de configuración /etc/dhcp/dhclient.conf.

Si comentamos con un # la linea

#send host-name = gethostname();

El cliente no enviará su hostname y será la configuración del servidor DHCP la que tendrá que proporcionarlo.


>sudo dhclient -v
>sudo dhclient -r

No obstante, NetworkManager creará un archivo en /var/lib/NetworkManager con nombre dhclient-enp0sN.conf con una mezcla de sus opciones más las de el fichero estandar.



El archivo /var/lib/dhcp/dhclient.leases contiene la informacion de las últimas concesiones realizadas por el servidor para que el que cuando el cliente se inicia pida renovarlas al servidor.

El network manager no usa este achivo de configuracion directamente, usa sin embargo este otro:

/var/lib/NetworkManager/dhclient-[conection.uuid]-enp0sN.lease


Mediante este comando podremos hacer que se envie el hostname o no si estamos usando Networkmanager

>nmcli con modify "LAN" ipv4.dhcp-send-hostname FALSE

y con este ver los resultados


Si no queremos que el nm administre nuestra interfaz debemos editar el archivo de configuración de las interfaces de red  /etc/network/interfaces.

Si lo que queremos es que la configuración de red sea automática por dhcp entonces el archivo debe contener la siguiente línea:

iface enp0s3 inet dhcp


Además debemos reiniciar el servicio network-manager mediante el comando

/etc/init.d/network-manager restart


Fuentes:
https://askubuntu.com/questions/151958/how-to-make-dhclient-forget-its-last-dhcp-lease

https://wiki.gnome.org/Projects/NetworkManager

https://bbs.archlinux.org/viewtopic.php?id=195388







Configurar Webmin para la version 4.4.3 del servidor DHCP de ISC

El boton de start del módulo de configuración para DHCP de Webmin parece no funcionar, pero en realidad el problema está en que  en el módulo no está bien configurada la ruta al fichero PID del proceso dhcpd

Por lo tanto, hay que cambiarlo por

/run/dhcp-server/dhcpd.pid



Podemos averiguar el estado actual en el que se encuentra el servicio DHCP mediante el comando

/etc/inid.d/isc-dhcp-server status

y comprobar si el servicio se encuentra en ejecución o por el contrario, se encuentra detenido.

jueves, 18 de octubre de 2018

Reenvio de puertos (Port forwarding) en Ubuntu mediante iptables

El reenvío de puertos permite acceder a equipos que están situados detrás de la interfaz LAN o interna de un router. Este router está realizando traducción de direcciones IP origen (NAT) porque las direcciones IP del segmento interno usan direccionamiento IP privado. Gracias a ello los equipos con dirección IP privado pueden establecer conexiones con equipos externos en la Internet, dado que el equipo remoto contactado responde a la IP Publica de la interfaz WAN o externa del router.

La finalidad del Port Forwarding es justo la contraria, permitir que sea un equipo exterior el que pueda contactar con algún servicio de un equipo del segmento interno de la red. Para ello, el equipo externo intentará establecer una conexión usando la IP publica del router y especificando un puerto (externo). El router debe redirigir este trafico que ha recibido en dicho puerto. Esto se hará especificando la IP del equipo donde está el servicio y el puerto (interno) en el que escucha el servicio dentro de esa máquina.

Para configurar el equipo que hace de router en un sistema Linux se realiza mediante IP Tables.
La regla se debe aplicar a la tabla NAT en la cadena PREROUTING. La condición de los paquetes es que lleguen por la interfaz WAN y que vengan dirigidos al puerto externo que queremos redirigir. La acción a realizar se especifican mediante una acción de tipo DNAT indicando la IP destino (la del equipo destino de la redirección) y el puerto de destino.

Ejemplo:

Permitir una conexión a Webmin de un equipo interno que tiene IP 192.168.1.2

Redirigir el trafico que llegue al puerto 3000 del router al puerto 10000 (Webmin) de la maquina con IP 192.168.1.2

Explicar con iptables

Tambien se puede hacer mediante ssh

Asi:

https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding


Fuentes:

https://askubuntu.com/questions/751467/forward-port-to-local-ip-port

Esta podria ser util tambien
https://askubuntu.com/questions/320121/simple-port-forwarding

viernes, 19 de enero de 2018

Instalación de Apache Web Server

Podemos instalar el servidor web Apache desde webmin. Para ello, desplegaremos la opción Unused modules>Apache Webserver


y hacemos click en el enlace para iniciar la instalación


o desde la linea de comandos

>sudo apt-get update
>sudo apt-get install apache2

Al instalar se crean:
- Los archivos de configuración.
- El usuario www-data dentro del grupo tambien llamado www-data.
- La carpeta /var/www

Comprobar que se ha creado el usuario www-data y el grupo del mismo nombre.

>cat /etc/passwd | grep www-data

y el grupo

>cat /etc/group| grep www-data

Mediante el usuario y el grupo www-data se ejecutan los procesos hijos de apache que se encargan de atender peticiones.

Comprobar que
Se ha creado el directorio /var/www
Su propietario es root y grupo root

Este es el directorio raiz del "servidor virtual por defecto".

>ls -l /var/www


Iniciar el servidor apache

Para iniciar el servicio, como cualquier otro servicio de ubuntu utlizamos el siguiente comando:

>/etc/init.d/apache2 start  (o service apache2 start)

y para comprobar el estado

>>/etc/init.d/apache2 status

El servidor se iniciará correctamente, podemos comprobarlo leyendo el fichero de registro de eventos des sistema, aunque nos dará un pequeño error, el cual consiste en que no puede determinar el nombre del equipo.

>cat /var/log/syslog | grep apache2




La opción Others>System and Server Status de Webmin también nos permite saber el estado en que se encuentran nuestros servicios, entre ellos Apache.


Para iniciar y detener el servidor apache tambien podemos usar el script apachectl de la siguiente manera

>sudo apachectl start
>sudo apachectl stop

Haciendolo de esta manera obtenemos información que apache envia al syslog, pues también no saca esta misma infomacion directamente por el terminal.




Podemos apreciar el error antes comentado y la forma de solucionarlo (más tarde)

Comprobamos que se han creado los directorios y archivos de configuración en la carpeta /etc/apache2



Consultamos su contenido

/etc/apache2/apache2.conf





/etc/apache2/ports.conf



/etc/apache2/envars

Comprobar los subdirectorios

Directorios de configuración de módulos disponibles y habilitados

/etc/apache2/mod-available
/etc/apache2/mods-enabled

Directorios de configuración de sitios (o servidores) virtuales

/etc/apache2/sites-available
/etc/apache2/sites-enabled

Directorios de configuraciones
/etc/apache2/conf-available
/etc/apache2/conf-enabled




Comprobar que el proceso está en ejecución, es decir, que el servidor esta iniciado.

>ps -ef \ grep apache

Las opciones utilizadas corresponden a:
-e para ver todos los procesos
-f (full) para ver la informacion completa de cada proceso






Desde Webmin también podemos visualizar procesos en ejecución desde la opción System>Running Processes

Para buscar  procesos tenemos varias opciones dependiendo de la caja de texto que seleccionemos marcado el boton de radio a su lado.



Por ejemplo, matching y escribiendo "apache" o Using Port y escribiendo 80.




Observar que existen varios procesos iniciados por apache2
Uno de ellos es el proceso padre cuyo propietario es root, y el resto son los procesos hijos o trabajadores, creados para atender peticiones y su propietario es www-data.

Podemos saber que son procesos hijos fijandonos en la tercera columna, que nos dice su PPID, el ID de proceso del proceso padre y vemos que coincide con el PID del primero proceso de la lista.

Tambien mediante Wemin podemos hacer click en el PID de un proceso hijo para ver una pagina de detalle del proceso y fijarnos donde dice parent process. A continuación, hacer click en este enlace y ver que nos lleva a lainfo del proceso padre.



Comprobar que el servidor está escuchando en el puerto TCP 80.

>netstat -ltn

En este caso las opciones utilizadas son las siguientes:
-l para mostrar los sockets que estan a la escucha (listening)
-t para quedanos con aquellos que usan el protocolo TCP
-n para que no resuelva nombres y nos muestre numeros (IPs, puertos, etc)

Podemos ver la diferencia entre el uso de la opcion -n o no.




En este caso, como webmin no tiene una opción específica para ver esta información debemos hacer uso de la opción general que permite ejecutar un comando en el servidor. La opcion está ubicada en Others>Command Shell. Una vez ahí, introducir los comandos.



Hasta aqui todas las comprobaciones necesarias.

---







Criterio para determinar el host virtual que atiende la solicitud HTTP recibida en el servidor web Apache

El criterio para asociar una solicitud con un host virtual de entre todos los que integran la lista será el siguiente.

A partir de la información procedente de las cabeceras de la solicitud HTTP realizada por el cliente se usarán los siguientes datos (entre paréntesis con que parametro del host virtual se compara):

- Nombre DNS utilizado (ServerName)
- puerto TCP (puerto)
- IP a la que se resuelve el nombre DNS (Addresss)
- IP especificada explícitamente, si se ha usado directamente la IP en la URL en lugar de un nombre DNS. (Address)


El criterio para seleccionar el host virtual que atiende la petición HTTP recibida en el servidor se basa en el número de parámetros que coinciden con los de la solicitud, pero en un orden de prioridad. En primero lugar la IP, a continuación el número de puerto y por último el ServerName.

Por lo tanto, si encontramos en la lista de hosts virtuales un solo host virtual con la IP establecida de forma explicita y esta coinicide con la IP de la solicitud (o la IP del nombre DNS una vez resuelto) este será el host virtual asociado con la solicitud.

Si existieran varios hosts virtuales con la IP coincidente, entonces entre ellos se escogerá aquel que explicite el número de puerto TCP y este coincida con el de la solicitud HTTP recibida.

Nuevamente, en caso de haber varios hosts, se debe seguir probando con el siguiente criterio, y este ya, por fin, es el parametro ServerName, de modo que aquel host virtual que coincida con el valor del ServerName será el seleccionado.

El último criterio para desempatar, caso de que no se haya podido decidir todavía que host virtual atiende la petición, sera el nombre del fichero de configuración del host virtual en orden alfabético descendente.

No obstante, puede suceder que, mientras se está seleccionando el host virtual, aparte del caso en que exista uno o varios host virtuales que cumplen el criterio, también puede ocurrir el caso de que no exista ninguno. En este caso se pasa al criterio siguiente, es decir, si se trata de la IP se pasará al puerto, y si se trata del puerto se pasará al ServerName y finalmente si no hay mas remedio al nombre del fichero de configuración.


Certificados de cliente en Apache


 Si queremos validar un usuario mediante un certificado emitido por alguna autoridad de certificación...

Fuentes:
http://www.garex.net/apache/#CCCreate

Generar una solicitud de certificado para una autoridad de certificación




Un CSR (Certificate Signing Request) es un archivo que contiene la información necesaria para solicitar un certificado a una CA Autoridad de Certificación, incluida una clave publica.

Usaremos el comand:

openssl req -nodes -newkey rsa:2048 -keyout myserver.key -out server.csr


openssl req -nodes -newkey rsa:2048 -keyout servidorweb.key -out servidorweb.csr

-nodes no encriptar la clave generada con una frase de paso DES
-newkey rsa:bits -> genera un clave RSA de el numero tamaño 'bits' bits
-keyout fichero -> archivo donde ser va a escribir la clave privada
-out -> fichero donde se va a escribir la solicitud de certificado para la CA


La solicitud la tendremos que autofirmar con nuestra propia CA.


Fuentes:
http://acidx.net/wordpress/2013/02/enabling-ssl-on-your-webserver/

http://acidx.net/wordpress/2012/09/creating-a-certification-authority-and-a-server-certificate-on-ubuntu/

Configurar los servidores virtuales en Apache

El servidor principal o por defecto atiende las peticiones a menos que se configuren servidores virtuales.
Su cofiguración está definida directamente en los ficheros de configuración de apache, concretamente en el fichero /etc/apache2.conf.

Podemos comprobar como da igual lo que escribamos en la barra direcciones del navegador siempre que el nombre DNS se pueda resolver a la IP 192.168.100.254, es decir, la del propio servidor web.

Podemos probar con

http://servidor.aulasri.com
http://192.168.100.254
http://127.0.0.1

Y también con los alias

http://www.aulasri.com
http://dns1.aulasri.com
http://smtp.aulasri.com

Estos alias y en general toda la información para resolver el nombre DNS a la IP del servidor se crearon cuando vimos BIND9 y ahora vemos su utilidad.

El directorio raiz de documentos predeterminado del servidor web Apache para Ubuntu es /var/www/html.

Podemos abrir este archivo con el navegador y ver su contenido.
Comprobamos de este modo que se trata del mismo documento que el servidor web nos está sirviendo via web, usando el puerto 80 tcp, cuando lo hacemos a través del servidor escribiendo en la barra de direcciones las URLs anteriormente citadas.

 
Para cada host virtual definido en Apache se pueden establecer 3 parámetros diferentes. Estos son:

- Address (direccion)
- port (puerto)
- ServerName (nombre DNS del servidor / host virtual)

Para Address y port se puede establecer un valor explicito o dejarlo sin definir mediante Any en webmin o * directamente en la directiva VirtualHost (para la dirección o el puerto).

En el caso del ServerName se puede utilizar el valor por defecto de la configuración global o establecer un valor diferente que lo reemplace.


Estos parámetros permitirán establecer los criterios de correspondencia o no con el sitio web (host virtual) una vez confrontados con los propios valores de la solicitud.

Si hemos establecido el valor Any para algo de ellos estaremos indicando que nos valdría cualquier valor proporcionado en la solicitud (request) para ese parámetro a la hora de admitirlo como acierto (match).





Comparando todos datos proporcionados por la solicitud con los parámetros de cada host virtual de la lista en el servidor, se eligen aquellos que mejor se ajustan a la solicitud.

Se entiende que los host virtuales que mejor se ajustan son aquellos en lo que coinciden un mayor número de parámetros explícitos (no cuentan los establecidos como Any, ya que estos solo sirven para descartar)

Primero, se descartan hosts cuyo puerto o dirección no coincide con el de la solicitud. Para saber si la dirección no coincide se resuelve el nombre DNS proporcionado en la solicitud.

Aunque para aquellos hosts virtuales que estén configurados con la opción Any se entenderá que pueden corresponder con la solicitud y no serán descartados de la lista.




Si al final, después de tener en cuenta estos filtros solamente hay un ganador en cuanto número de parámetros coincidentes (3,2,1 o 0 y los Any no cuentan) ese será el host virtual al que se asociará la solicitud.

En caso de empate, habrá que tener en cuenta criterios de desempate.

El criterio para desempatar será escoger a aquel que se encuentre antes en la lista, que será aquel cuyo archivo de configuración tiene un nombre en el sistema de archivos menor en orden alfabético.

Hay que tener en muy en cuenta que pasa cuando usamos al mismo tiempo hosts virtuales basados en IP y host virtuales basados en nombre. La precaución que hay que tener en cuenta es la siguiente:

Toda solicitud HTTP recibida indicando un nombre DNS es resuelta a su correspondiente IP mediante el servicio DNS. Si existiera un host virtual basado en IP asociado a ese nombre que además indica número de puerto, este tendría preferencia sobre un host virtual que si coincidiera el nombre DNS pero que no indica número de puerto.


De DNS a IP.

Primero aquel que coincida la IP de forma explicita, si varios, aquel que explicite el puerto y coincida, y si varios (o ninguno explicita el puerto) entonces aquel que coincida en ServerName,

y después el primero fichero alfabético.


Criterio para determinar el host virtual que atiende la solicitud HTTP recibida en el servidor web Aache