Skip to main content

Hosts.allow - Comando de Linux

???? COMO configurar o Hostname, Hosts e TCP Wrappers no GNU/Linux Ubuntu Server 18.04.x LTS (Junio 2026)

???? COMO configurar o Hostname, Hosts e TCP Wrappers no GNU/Linux Ubuntu Server 18.04.x LTS (Junio 2026)
Anonim

Nombre

hosts_access - formato de acceso de host a los archivos de control de Linux.

Descripción

Esta página de manual describe Linux como un lenguaje de control de acceso simple que se basa en los patrones del cliente (nombre / dirección de host, nombre de usuario) y servidor (nombre de proceso, nombre de host / dirección). Se dan ejemplos al final. Se recomienda al lector impaciente que pase a la sección de Ejemplos para una introducción rápida. Una versión extendida del lenguaje de control de acceso se describe en la hosts_options (5) documento. Las extensiones se activan en el momento de la creación del programa mediante la compilación con -DPROCESS_OPTIONS.

En el siguiente texto, demonio es el nombre del proceso de un proceso de daemon de red, y cliente es el nombre y / o la dirección de un host que solicita el servicio. Los nombres de proceso del daemon de red se especifican en el archivo de configuración inetd.

Archivos de control de acceso

El software de control de acceso consulta dos archivos. La búsqueda se detiene en el primer partido.

Se otorgará acceso cuando un par (demonio, cliente) coincida con una entrada en el /etc/hosts.allow expediente.

De lo contrario, el acceso se denegará cuando un par (demonio, cliente) coincida con una entrada en el /etc/hosts.deny expediente.

De lo contrario, se otorgará el acceso.

Un archivo de control de acceso no existente se trata como si fuera un archivo vacío. Por lo tanto, el control de acceso se puede desactivar al no proporcionar archivos de control de acceso.

Reglas de control de acceso

Cada archivo de control de acceso consta de cero o más líneas de texto. Estas líneas se procesan en orden de aparición. La búsqueda termina cuando se encuentra una coincidencia.

Un carácter de nueva línea se ignora cuando está precedido por un carácter de barra invertida. Esto le permite dividir líneas largas para que sean más fáciles de editar.

Las líneas en blanco o líneas que comienzan con un carácter `# 'se ignoran. Esto le permite insertar comentarios y espacios en blanco para que las tablas sean más fáciles de leer.

Todas las demás líneas deben satisfacer el siguiente formato, las cosas entre son ​​opcionales:

daemon_list: client_list : shell_command

daemon_list es una lista de uno o más nombres de proceso de daemon (valores argv 0) o comodines (ver más abajo).

lista de clientes es una lista de uno o más nombres de host, direcciones de host, patrones o comodines (ver a continuación) que se compararán con la dirección o el nombre de host del cliente.

Las formas más complejas. daemon @ host y usuario @ host se explican en las secciones sobre patrones de punto final del servidor y en las búsquedas de nombre de usuario del cliente, respectivamente.

Los elementos de la lista deben estar separados por espacios en blanco y / o comas.

Con la excepción de las búsquedas en el grupo de redes NIS (YP), todas las comprobaciones de control de acceso no distinguen entre mayúsculas y minúsculas.

Patrones

El lenguaje de control de acceso implementa los siguientes patrones:

Una cadena que comienza con un `. personaje. Se hace coincidir un nombre de host si los últimos componentes de su nombre coinciden con el patrón especificado. Por ejemplo, el patrón `.tue.nl 'coincide con el nombre de host` wzv.win.tue.nl'.

Una cadena que termina con un `. personaje. Una dirección de host coincide si sus primeros campos numéricos coinciden con la cadena dada. Por ejemplo, el patrón `131.155 '. coincide con la dirección de (casi) todos los hosts de la red de la Universidad de Eindhoven (131.155.x.x).

Una cadena que comienza con un carácter `@ 'se trata como un nombre de grupo de red NIS (anteriormente YP). Se hace coincidir un nombre de host si es un miembro del host del netgroup especificado. Las coincidencias de Netgroup no se admiten para los nombres de proceso de daemon o para los nombres de usuario del cliente.

Una expresión de la forma `n.n.n.n / m.m.m.m 'se interpreta como un par` net / mask'. Una dirección de host IPv4 coincide si 'net' es igual al AND a nivel de bit de la dirección y la 'máscara'. Por ejemplo, el patrón de red / máscara `131.155.72.0/255.255.254.0 'coincide con todas las direcciones en el rango` 131.155.72.0' hasta `131.155.73.255 '.

Una expresión de la forma `n: n: n: n: n: n: n: n / m 'se interpreta como un par` net / prefixlen'. Una dirección de host IPv6 coincide si los bits 'prefixlen' de 'net' son iguales a los bits 'prefixlen' de la dirección. Por ejemplo, el patrón net / prefixlen `3ffe: 505: 2: 1 :: / 64 'coincide con cada dirección en el rango` 3ffe: 505: 2: 1 ::' hasta `3ffe: 505: 2 1: ffff: ffff: ffff: ffff '.

Una cadena que comienza con un carácter `/ 'se trata como un nombre de archivo. Se hace coincidir un nombre de host o una dirección si coincide con cualquier patrón de dirección o nombre de host listado en el archivo nombrado. El formato del archivo es cero o más líneas con cero o más nombres de host o patrones de dirección separados por espacios en blanco. Un patrón de nombre de archivo se puede usar en cualquier lugar donde se pueda usar un nombre de host o un patrón de dirección.

Comodines `* 'y`?' se puede utilizar para hacer coincidir nombres de host o direcciones IP. Este método de coincidencia no se puede utilizar junto con la coincidencia `net / mask ', la coincidencia del nombre de host que comienza con`.' o la coincidencia de la dirección IP que termina con `. '.

Comodines

El lenguaje de control de acceso admite comodines explícitos, incluidos:

'TODOS'

El comodín universal, siempre coincide.

'LOCAL'

Coincide con cualquier host cuyo nombre no contenga un carácter de punto.

'DESCONOCIDO'

Coincide con cualquier usuario cuyo nombre es desconocido, y coincide con cualquier host cuyo nombre o La dirección es desconocida. Este patrón debe usarse con cuidado: los nombres de host pueden no estar disponibles debido a problemas temporales del servidor de nombres. Una dirección de red no estará disponible cuando el software no pueda determinar con qué tipo de red está hablando.

'CONOCIDO'

Coincide con cualquier usuario cuyo nombre sea conocido y coincide con cualquier host cuyo nombre y Las direcciones son conocidas.Este patrón debe usarse con cuidado: los nombres de host pueden no estar disponibles debido a problemas temporales del servidor de nombres. Una dirección de red no estará disponible cuando el software no pueda determinar con qué tipo de red está hablando.

'PARANOICO'

Coincide con cualquier host cuyo nombre no coincide con su dirección. Cuando tcpd se construye con -DPARANOID (modo predeterminado), elimina las solicitudes de dichos clientes incluso antes de mirar las tablas de control de acceso. Genere sin -DPARANOID cuando desee más control sobre dichas solicitudes.

'OPERADORES'

'EXCEPTO'

El uso previsto es de la forma: `list_1 EXCEPTO list_2 '; esta construcción coincide con cualquier cosa que coincida list_1 a menos que coincida list_2 . El operador EXCEPTO se puede utilizar en las listas de daemon y en las listas de clientes. El operador EXCEPTO puede estar anidado: si el lenguaje de control permitiera el uso de paréntesis, "un EXCEPTO b EXCEPTO c 'se analizaría como" (un EXCEPTO (b EXCEPTO c)) ".

Comandos de Shell

Si la regla de control de acceso de primera coincidencia contiene un comando de shell, ese comando está sujeto a% de sustituciones (consulte la siguiente sección). El resultado es ejecutado por un / bin / sh Proceso hijo con entrada estándar, salida y error conectado a / dev / null . Especifique un `& 'al final del comando de la terminal si no desea esperar hasta que se complete.

Los comandos de shell no deben depender de la configuración PATH del inetd. En su lugar, deberían usar nombres de ruta absolutos, o deberían comenzar con una PATH explícita = cualquier instrucción.

los hosts_options (5) el documento describe un lenguaje alternativo que utiliza el campo de comando de shell de una manera diferente e incompatible.

% Expansiones

Las siguientes expansiones están disponibles dentro de los comandos de shell:

% a (% A) - La dirección de host del cliente (servidor).

%do - Información del cliente: usuario @ host, usuario @ dirección, nombre de host o simplemente una dirección, según la cantidad de información disponible.

%re - El nombre del proceso del daemon (argv 0 valor).

%S.S) - El nombre o la dirección del host del cliente (servidor), si el nombre del host no está disponible.

% n (% N) - El nombre de host del cliente (servidor) (o "desconocido" o "paranoico").

%pag - El id del proceso del daemon.

% s - Información del servidor: daemon @ host, daemon @ address, o simplemente un nombre de daemon, dependiendo de cuánta información esté disponible.

% u - El nombre de usuario del cliente (o "desconocido").

%% - Se expande a un solo carácter `% '.

Los caracteres en% expansiones que pueden confundir el shell son reemplazados por guiones bajos.

Patrones de punto final del servidor

Para distinguir a los clientes por la dirección de red a la que se conectan, utilice los patrones del formulario:

process_name @ host_pattern: client_list …

Patrones como estos pueden usarse cuando la máquina tiene diferentes direcciones de Internet con diferentes nombres de host de Internet. Los proveedores de servicios pueden utilizar este servicio para ofrecer archivos FTP, GOPHER o WWW con nombres de Internet que pueden pertenecer incluso a diferentes organizaciones. Vea también la opción `twist 'en el documento hosts_options (5). Algunos sistemas (Solaris, FreeBSD) pueden tener más de una dirección de Internet en una interfaz física; con otros sistemas puede que tenga que recurrir a pseudo interfaces SLIP o PPP que viven en un espacio de direcciones de red dedicado.

El host_pattern obedece las mismas reglas de sintaxis que los nombres de host y las direcciones en el contexto client_list. Normalmente, la información de punto final del servidor solo está disponible con servicios orientados a la conexión.

Búsqueda de nombre de usuario del cliente

Cuando el host del cliente admite el protocolo RFC 931 o uno de sus descendientes (TAP, IDENT, RFC 1413), los programas de envoltura pueden recuperar información adicional sobre el propietario de una conexión. La información del nombre de usuario del cliente, cuando está disponible, se registra junto con el nombre de host del cliente y se puede usar para hacer coincidir patrones como:

daemon_list: … user_pattern @ host_pattern …

Los envoltorios de daemon se pueden configurar en tiempo de compilación para realizar búsquedas de nombre de usuario basadas en reglas (predeterminado) o para interrogar siempre al host del cliente. En el caso de búsquedas de nombre de usuario basadas en reglas, la regla anterior causaría la búsqueda de nombre de usuario solo cuando daemon_list y el host_pattern partido.

Un patrón de usuario tiene la misma sintaxis que un patrón de proceso de daemon, por lo que se aplican los mismos comodines (no se admite la pertenencia a netgroup). Sin embargo, uno no debe dejarse llevar por las búsquedas de nombre de usuario.

No se puede confiar en la información del nombre de usuario del cliente cuando más se necesita, es decir, cuando el sistema cliente ha sido comprometido. En general, TODOS y (UN) CONOCIDOS son los únicos patrones de nombre de usuario que tienen sentido.

Las búsquedas de nombre de usuario solo son posibles con servicios basados ​​en TCP, y solo cuando el host del cliente ejecuta un demonio adecuado; en todos los demás casos el resultado es "desconocido".

Un error conocido en el kernel de UNIX puede causar la pérdida del servicio cuando un firewall bloquea las búsquedas de nombres de usuario. El documento README del envoltorio describe un procedimiento para averiguar si su kernel tiene este error.

Las búsquedas de nombre de usuario pueden causar retrasos notables para los usuarios que no son UNIX. El tiempo de espera predeterminado para las búsquedas de nombre de usuario es de 10 segundos: demasiado corto para hacer frente a redes lentas, pero lo suficientemente largo como para irritar a los usuarios de PC.

Las búsquedas de nombre de usuario selectivas pueden aliviar el último problema. Por ejemplo, una regla como:daemon_list: @pcnetgroup ALL @ ALL

coincidiría con los miembros de pc netgroup sin hacer búsquedas de nombre de usuario, pero realizaría búsquedas de nombre de usuario con todos los demás sistemas.

Detección de ataques de suplantación de direcciones

Una falla en el generador de números de secuencia de muchas implementaciones de TCP / IP permite a los intrusos suplantar fácilmente hosts de confianza e interrumpir, por ejemplo, el servicio de shell remoto.El servicio IDENT (RFC931, etc.) se puede usar para detectar tales y otros ataques de suplantación de direcciones de host.

Antes de aceptar una solicitud de cliente, los envoltorios pueden usar el servicio IDENT para descubrir que el cliente no envió la solicitud en absoluto. Cuando el host del cliente proporciona el servicio IDENT, un resultado negativo de búsqueda de IDENT (el cliente coincide con `UNKNOWN @ host ') es una prueba contundente de un ataque de suplantación de host.

Un resultado de búsqueda IDENT positivo (el cliente coincide con `KNOWN @ host ') es menos confiable. Es posible que un intruso falsifique tanto la conexión del cliente como la búsqueda de IDENT, aunque hacerlo es mucho más difícil que falsificar solo una conexión del cliente. También puede ser que el servidor IDENT del cliente esté mintiendo.

Nota: las búsquedas IDENT no funcionan con los servicios UDP.

Ejemplos

El lenguaje es lo suficientemente flexible como para que los diferentes tipos de políticas de control de acceso se puedan expresar con un mínimo de esfuerzo. Aunque el lenguaje utiliza dos tablas de control de acceso, las políticas más comunes pueden implementarse con una de las tablas trivial o incluso vacía.

Al leer los ejemplos a continuación, es importante darse cuenta de que la tabla de permisos se explora antes que la tabla de denegación, que la búsqueda termina cuando se encuentra una coincidencia y que se concede acceso cuando no se encuentra ninguna coincidencia.

Los ejemplos utilizan nombres de dominio y host. Se pueden mejorar al incluir información de dirección y / o red / máscara de red, para reducir el impacto de las fallas de búsqueda temporales del servidor de nombres.

Mayormente cerrado

En este caso, el acceso está denegado por defecto. Sólo se permite el acceso a hosts explícitamente autorizados.

La política predeterminada (sin acceso) se implementa con un archivo de denegación trivial:

/etc/hosts.deny: ALL: ALL

Esto deniega todo el servicio a todos los hosts, a menos que se les permita el acceso por las entradas en el archivo permitido.

Los hosts autorizados explícitamente se enumeran en el archivo permitido. Por ejemplo:

/etc/hosts.allow: ALL: LOCAL @some_netgroupTODOS: .foobar.edu EXCEPTO TerminalServer.foobar.edu

La primera regla permite el acceso desde los hosts en el dominio local (no `. 'En el nombre del host) y desde los miembros de la some_netgroup grupo de red La segunda regla permite el acceso de todos los hosts en el foobar.edu dominio (observe el punto inicial), con la excepción de terminaleserver.foobar.edu .

En su mayoría abierto

Aquí, el acceso se concede por defecto; solo los hosts especificados explícitamente se rechazan servicio.

La política predeterminada (acceso concedido) hace que el archivo de permiso sea redundante para que pueda omitirse. Los hosts explícitamente no autorizados se enumeran en el archivo de denegación. Por ejemplo:

/etc/hosts.deny: ALL: some.host.name, .some.domainTODOS EXCEPTO in.fingerd: other.host.name, .other.domain

La primera regla niega a algunos hosts y dominios todos los servicios; la segunda regla todavía permite solicitudes de dedo de otros hosts y dominios.

Trampas explosivas

El siguiente ejemplo permite las solicitudes de tftp de los hosts en el dominio local (observe el punto inicial). Las solicitudes de cualquier otro host son denegadas. En lugar del archivo solicitado, se envía una sonda de dedo al host ofensivo. El resultado se envía por correo al superusuario.

/etc/hosts.allow:

in.tftpd: LOCAL, .my.domain/etc/hosts.deny:in.tftpd: ALL: spawn (/ some / where / safe_finger -l @% h | / usr / ucb / mail -s% d-% h root) &

El comando safe_finger viene con el envoltorio tcpd y debe instalarse en un lugar adecuado. Limita los posibles daños causados ​​por los datos enviados por el servidor remoto de dedo. Da mejor protección que el comando de dedo estándar.

La expansión de las secuencias% h (host del cliente) y% d (nombre del servicio) se describe en la sección sobre comandos de shell.

Advertencia: No atrape a su demonio de dedos, a menos que esté preparado para infinitos bucles de dedos.

En los sistemas de cortafuegos de red, este truco puede llevarse aún más lejos. El firewall de red típico solo proporciona un conjunto limitado de servicios al mundo exterior. Todos los demás servicios pueden ser "controlados" al igual que el ejemplo tftp anterior. El resultado es un excelente sistema de alerta temprana.

Ver también

tcpd (8) tcp / ip programa de envoltura de daemon.tcpdchk (8), tcpdmatch (8), programas de prueba.

Importante: Utilizar el hombre comando % hombre ) para ver cómo se usa un comando en su computadora en particular.