Administración y configuración de los servicios en red
De Sistemas Operativos II
Contenido |
La red en sistemas GNU/Linux
Los sistemas GNU/Linux disponen de un conjunto de comandos que permiten la configuración puntual de parámetros de red. Las configuraciones realizadas puntualmente mediante los comandos no persisten al realizar la reinicialización del sistema operativo. A mayores de estos comandos, existen ciertos ficheros de configuración que permiten la realización de configuraciones que, de forma contraria a los cambios realizados por los comandos, son persistentes.
La configuración de dispositivos de red requiere en primera instancia, disponer de un kernel con el soporte para el dispositivo concreto bien sea en forma de módulo o en el propio kernel. Normalmente, sistemas como Ubuntu ejecutan una autodetección del hardware durante el inicio permitiendo que se detecten los dispositivos de red (y otros) cargando automáticamente aquellos módulos que fuera necesario necesarios.
Tal como se ha visto anteoriormente, para comprobar que se han cargado los módulos que implementan los drivers del hardware de red se pueden emplear los comandos lsmod, lspci y lsusb. Si el hardware se ha detectado correctamente, las tarjetas de red deberían aparecer ejecutando el comando ifconfig -a. El comando ifconfig que se encuentra en el directorio /sbin el cual sólo se incluye en el PATH del usuario root por contener este último aplicaciones específicas para la administración del sistema. Por lo tanto para ejecutar ifconfig empleando un usuario sin privilegios es necesario especificar la ruta completa /sbin/ifconfig/). ifconfig puede ser empleado por usuarios sin privilegios para mostrar la configuración (nunca para modificarla).
Entre los comandos más importantes para la configuración de red se encuentra el comando ifconfig que permite obtener un listado de las interfaces (dispositivos) de red habilitadas y su configuración. La opción -a permite mostrar los dispositivos de red aunque no se encuentren habilitados. A continuación se muestra un ejemplo de configuración de interfaces.
# ifconfig
eth0 Link encap:Ethernet HWaddr 16:db:60:6a:2e:f9
inet addr:193.147.86.249 Bcast:193.147.86.255 Mask:255.255.255.0
inet6 addr: fe80::14db:60ff:fe6a:2ef9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5792487 errors:0 dropped:0 overruns:0 frame:0
TX packets:1469383 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:854447384 (814.8 MiB) TX bytes:598874140 (571.1 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:21514397 errors:0 dropped:0 overruns:0 frame:0
TX packets:21514397 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4012167286 (3.7 GiB) TX bytes:4012167286 (3.7 GiB)
El resultado del anterior comando indica que existen dos interfaces de red (eth0 y lo) y sus configuraciones. Por otro lado indica el tráfico transmitido y recibido desde que han sido habilitadas. Sin embargo, la opción -a puede indicar que existen dispositivos que, siendo reconocidos por el sistema operativo, no se encuentran habilitados como el siguiente ejemplo.
# ifconfig -a
eth0 Link encap:Ethernet HWaddr 16:db:60:6a:2e:f9
inet addr:193.147.86.249 Bcast:193.147.86.255 Mask:255.255.255.0
inet6 addr: fe80::14db:60ff:fe6a:2ef9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5795265 errors:0 dropped:0 overruns:0 frame:0
TX packets:1469707 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:854799918 (815.2 MiB) TX bytes:599093164 (571.3 MiB)
eth1 Link encap:Ethernet HWaddr ba:b6:b0:be:43:b5
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:21517205 errors:0 dropped:0 overruns:0 frame:0
TX packets:21517205 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4013306969 (3.7 GiB) TX bytes:4013306969 (3.7 GiB)
Normalmente, existen tres tipos de interfaces en linux (dispositivos):
- Las interfaces (dispositivos) ethernet: estos dispositivos se configuran y manejan usando exclusivamente ifconfig.
- Las interfaces (dispositivos) inalámbricos: a estos dispositivos el kernel les asigna un nombre wlanX donde X es un número que se asigna consecutivamente a cada dispositivo que haya detectado el sistema. Estos dispositivos se configuran y manejan con las utilidades iwconfig e iwlist.
- La interfaz de loopback: Siempre está presente en todos los equipos y se reconoce porque su nombre es lo y tiene asignada la dirección IP 127.0.0.1/8. El /8 es una notación comunmente usada en sistemas y redes y hace referencia al número de bits activos de la máscara. Dado que el número de bits activos en la máscara es 8, esta sólo puede ser 255.0.0.0.
Configuración no persistente de interfaces ethernet
Para cualquier operación de configuración y administración de las interfaces de red se empleará el comando ifconfig como administrador (sesión interactiva como administrador con sudo -s o simplemente usando sudo).
Para deshabilitar y/o habilitar una interfaz de red se usaran los siguientes comandos (asumiendo que eth0 es la interfaz):
# ifconfig eth0 down
# ifconfig eth0 up
Para cambiar o definir la configuración para la interfaz de red (eth0 en el ejemplo con la dirección IP 192.168.1.1/24) se empleará una sintaxis similar a la usada en el siguiente ejemplo.
# ifconfig eth0 192.168.1.1 netmask 255.255.255.0
En el mismo comando es posible realizar un cambio de configuración y la habilitación del interfaz de red usando la siguiente sintaxis:
# ifconfig eth0 192.168.1.1 netmask 255.255.255.0 up
Estas son las operaciones habituales de configuración de interfaces. Para cualquier otra operación, se consultará el manual de la aplicación ('man ifcnofig').
Una vez establecida la dirección IP y la máscara de subred para una determinada interfaz, será necesario configurar adecuadamente la tabla de enrutamiento para lograr que la configuración de red funcione correctamente. En este sentido, las tablas de enrutamiento permiten especificar la interfaz de red por la cual se puede alcanzar una determinada red y, en el caso de ser necesario, la puerta de enlace con dicha red. Por otra banda se puede especificar la puerta de enlace por defecto para el acceso a redes no previstas en la tabla de enrutamiento. Normalmente, al especificar una configuración de red para un dispositivo de red (por ejemplo al configurar eth0 con la dirección IP 192.168.1.12/24) ya se incluye una ruta de forma automática que permite acceder desde la interfaz configurada a la red (en el ejemplo se crearía la ruta 192.168.1.0/24 mediante el dispositivo eth0). Sin embargo, es necesario establecer la ruta a otras redes de forma manual así como la ruta por defecto que especifica normalmente la pasarela que da acceso a Internet.
Para mostrar y modificar la tabla de rutas se empleará el comando route (/sbin/route) que, en el caso de modificación, deberá ser ejecutado como usuario root (considerar el uso de sudo, su, etc.). Para mostrar la tabla de rutas sólo es necesario introducir el comando route sin argumentos aunque se suele emplear el flag -n para indicar que no se realicen resoluciones de las direcciones IP y, por lo tanto, obtener una salida más rápida y en forma de direcciones ip del comando. Nota: también se puede obtener la tabla de enrutamiento con el comando netstat -nr
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.3.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
192.168.3.0 192.168.3.2 255.255.255.0 UG 0 0 0 tun0
192.168.112.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
193.147.87.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 193.147.87.1 0.0.0.0 UG 0 0 0 eth0
# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.3.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
192.168.3.0 192.168.3.2 255.255.255.0 UG 0 0 0 tun0
192.168.112.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
193.147.87.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 193.147.87.1 0.0.0.0 UG 0 0 0 eth0
Cuando se desean configurar interfaces (dispositivos) de red mediante el uso de servidores DHCP (Dynamic Host Configuration Protocol) se usará el comando dhclient especificando como argumento el nombre de la interfaz que se desea configurar mediante DHCP. Es importante tener en cuenta la necesidad de disponer de un servidor DHCP en la red que ofrezca configuraciones válidas para los equipos de red. Normalmente las configuraciones ofrecidas por servidores DHCP incluyen la configuración de DNS y tabla de rutas. En caso de no incluirlo habrá que realizar estas configuraciones a mayores.
# dhclient eth0
Configuración no persistente de interfaces inalámbricas
La tabla de enrutamiento
Configuración persistente de interfaces y rutas
Monitorización de la red e identificación básica de problemas
Despliegue básico de firewalls con iptables
OpenSSH
OpenSSH es una potente herramienta para la administración remota de equipos, trasferencia de ficheros y acceso a los sistemas de red. Ver [1].
Instalación
Para instalar SSH (cliente y servidor) simplemente es necesario teclear el comando apt-get install ssh como usuario administrador (por ejemplo usando sudo). La instalación del servidor implica la creación de un par de claves con un algoritmo asimétrico (generalmente DSA) que permitirán posteriormente identificar unívocamente al equipo servidor cuando se realicen conexiones remotas. Si se quiere instalar únicamente el cliente o el servidor se considerará instalar únicamente el paquete openssh-client o openssh-server respectivamente (válido en Ubuntu).
Uso de OpenSSH para sesiones remotas
OpenSSH se puede emplear como reemplazo de ciertos clientes de sesión remota como telnet o rlogin. Estos últimos poseían el defecto de que todas las comunicaciones se realizaban de forma no encriptada. El uso de programas como ettercap permite obtener claves de usuarios que emplean este tipo de protocolos de una forma sencilla. Por este motivo el empleo de ciertos esquemas criptográficos para las comunicaciones por red es recomendable.
Para realizar una conexión con un servidor ssh se emplea el comando ssh. Ejemplo: ssh moncho@so2.atopa.me.
Identificación unívoca del equipo
Para identificar unívocamente al equipo servidor, el servidor genera un par de claves. La primera vez que un cliente se conecta no puede reconocer si el servidor es realmente el servidor al que se quiere conectar. Es por ello que el cliente ssh indica que existe un riesgo potencial de estar conectado a otro equipo distinto. Si se confirma la acción de conexión, el cliente almacena en ~/.ssh/known_hosts la clave pública del servidor remoto. En las siguientes conexiones, el cliente es capaz de verificar que se está conectando al mismo servidor que la primera vez. Para ello ssh implementa un protocolo de desafío por el cual encipta un texto aleatorio con la clave pública del servidor. El servidor será el seleccionado con el cliente si tiene la clave privada que desencripta el desafío del cliente y es capaz de enviar al cliente el texto original aleatorio descifrado.