Búsqueda de sitios web

Cómo proteger los servicios de red utilizando contenedores TCP en Linux


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

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

Entendiendo hosts.allow y hosts.deny

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

De forma predeterminada, estos archivos están vacíos, todos comentados o no existen. Por lo tanto, todo está permitido a través de la capa de contenedores TCP y su sistema depende del firewall para una protección completa. Dado que esto no es deseado, por el motivo que indicamos en la introducción, asegúrese de que ambos archivos existan:

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

La sintaxis de ambos archivos es la misma:

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

dónde,

  1. servicios es una lista de servicios separados por comas a los que se debe aplicar la regla actual.
  2. Los clientes representan la lista de nombres de host o direcciones IP separados por comas afectados por la regla. Se aceptan los siguientes comodines:

    1. ALL coincide con todo. Aplica tanto para clientes como para servicios.
    2. LOCAL busca hosts sin un punto en su FQDN, como localhost.
    3. CONOCIDO indica una situación en la que se conoce el nombre del host, la dirección del host o el usuario.
    4. DESCONOCIDO es lo opuesto a CONOCIDO.
    5. PARANOID provoca que se interrumpa una conexión si las búsquedas DNS inversas (primero en la dirección IP para determinar el nombre del host, luego en el nombre del host para obtener las direcciones IP) devuelven una dirección diferente en cada caso.
  3. Finalmente, una lista opcional de acciones separadas por dos puntos indica lo que debería suceder cuando se activa una regla determinada.

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 él. Además, si se aplican dos reglas a un mismo servicio, solo se tendrá en cuenta la primera.

Desafortunadamente, no todos los servicios de red admiten el uso de contenedores TCP. Para determinar si un servicio determinado los admite, haga lo siguiente:

ldd /path/to/binary | grep libwrap

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

Cómo utilizar contenedores TCP para restringir el acceso a los servicios

Al editar /etc/hosts.allow y /etc/hosts.deny, asegúrese de agregar una nueva línea presionando Entrar 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 todos los 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
#
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 se realizan 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 dejará de estar disponible para localhost. Una vez que volvemos a agregar el comodín, el servicio vuelve a estar disponible.

Para permitir todos los servicios a los hosts cuyo 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 contiene 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.