Cómo asegurar los servicios de red utilizando TCP Wrappers en Linux


En este artículo explicaremos qué son las envolturas TCP y cómo configurarlas para restringir el acceso a los servicios de red que se ejecutan en un servidor Linux. Antes de comenzar, sin embargo, debemos aclarar que el uso de envolturas TCP no elimina la necesidad de un firewall configurado correctamente.

En este sentido, puede pensar en esta herramienta como una lista de control de acceso basada en host, y no como la última medida de seguridad para su sistema. Al utilizar un firewall y envoltorios TCP, en lugar de favorecer a uno sobre el otro, se asegurará de que su servidor no se quede con un solo punto de falla.

Entendiendo hosts.allow y hosts.deny

Cuando una solicitud de red llega a su servidor, las envolturas TCP utilizan hosts.allow y hosts.deny (en ese orden) para determinar si se debe permitir al cliente usar un servicio determinado .

Por defecto, estos archivos están vacíos, todos comentados o no existen. Por lo tanto, todo está permitido a través de la capa de envoltorios TCP y su sistema depende del firewall para una protección total. Dado que esto no se desea, debido a la razón que indicamos en la introducción, asegúrese de que existan ambos archivos:

# ls -l /etc/hosts.allow /etc/hosts.deny

La sintaxis de ambos archivos es la misma:

<services> : <clients> [: <option1> : <option2> : ...]

dónde,

  1. services is a comma-separated list of services the current rule should be applied to.
  2. clients represent the list of comma-separated hostnames or IP addresses affected by the rule. The following wildcards are accepted:
    1. ALL matches everything. Applies both to clients and services.
    2. LOCAL matches hosts without a period in their FQDN, such as localhost.
    3. KNOWN indicate a situation where the hostname, host address, or user are known.
    4. UNKNOWN is the opposite of KNOWN.
    5. PARANOID causes a connection to be dropped if reverse DNS lookups (first on IP address to determine host name, then on host name to obtain the IP addresses) return a different address in each case.

    Es posible que desee tener en cuenta que una regla que permite el acceso a un servicio determinado en /etc/hosts.allow tiene prioridad sobre una regla en /etc/hosts.deny que prohíbe eso. Además, si se aplican dos reglas al mismo servicio, solo se tendrá en cuenta la primera.

    Desafortunadamente, no todos los servicios de red admiten el uso de envoltorios TCP. Para determinar si un servicio dado los admite, haga:

    # ldd /path/to/binary | grep libwrap
    

    Si el comando anterior devuelve salida, puede ser envuelto en TCP. Un ejemplo de esto son sshd y vsftpd , como se muestra aquí:

    Cómo usar TCP Wrappers para restringir el acceso a los servicios

    A medida que edite /etc/hosts.allow y /etc/hosts.deny , asegúrese de agregar una nueva línea presionando Enter después de la última línea no vacía.

    Para permitir el acceso SSH y FTP solo a 192.168.0.102 y localhost y denegar todas las demás, agregue estas dos líneas en /etc/hosts.deny :

    sshd,vsftpd : ALL
    ALL : ALL
    

    y la siguiente línea en /etc/hosts.allow :

    sshd,vsftpd : 192.168.0.102,LOCAL
    

    #
    # hosts.deny	This file contains access rules which are used to
    #		deny connections to network services that either use
    #		the tcp_wrappers library or that have been
    #		started through a tcp_wrappers-enabled xinetd.
    #
    #		The rules in this file can also be set up in
    #		/etc/hosts.allow with a 'deny' option instead.
    #
    #		See 'man 5 hosts_options' and 'man 5 hosts_access'
    #		for information on rule syntax.
    #		See 'man tcpd' for information on tcp_wrappers
    #
    sshd,vsftpd : ALL
    ALL : ALL
    

    SSH

    #
    # hosts.allow	This file contains access rules which are used to
    #		allow or deny connections to network services that
    #		either use the tcp_wrappers library or that have been
    #		started through a tcp_wrappers-enabled xinetd.
    #
    #		See 'man 5 hosts_options' and 'man 5 hosts_access'
    #		for information on rule syntax.
    #		See 'man tcpd' for information on tcp_wrappers
    #
    sshd,vsftpd : 192.168.0.102,LOCAL
    

    Estos cambios tienen lugar inmediatamente sin necesidad de reiniciar.

    En la siguiente imagen puede ver el efecto de eliminar la palabra LOCAL de la última línea: el servidor FTP no estará disponible para localhost . Después de que volvamos a agregar el comodín, el servicio vuelve a estar disponible.

    Para permitir todos los servicios a los hosts donde el nombre contiene example.com , agregue esta línea en hosts.allow :

    ALL : .example.com
    

    y para denegar el acceso a vsftpd a las máquinas en 10.0.1.0/24 , agregue esta línea en hosts.deny :

    vsftpd : 10.0.1.
    

    En los dos últimos ejemplos, observe el punto al principio y al final de la lista de clientes. Se utiliza para indicar "TODOS los hosts y/o clientes donde el nombre o la IP contienen esa cadena".

    ¿Te ayudó este artículo? ¿Tienes alguna pregunta o comentario? No dude en enviarnos una nota utilizando el formulario de comentarios a continuación.