Contenedor TCP es un sistema ACL (Lista de control de acceso) basado en host de código abierto, que se utiliza para restringir los servicios de red TCP en función del nombre de host, la dirección IP, la dirección de red, etc. Decide a qué host se le debe permitir acceder a un servicio de red específico. TCP Wrapper fue desarrollado por un programador y físico holandés Wietse Zweitze Venema en 1990 en la Universidad Tecnológica de Eindhoven. Lo mantuvo hasta 1995 y luego lo lanzó bajo la licencia BSD en 2001. En esta breve guía, explicaré cómo restringir el acceso a servidores Linux utilizando TCP Wrappers.
Tenga en cuenta que TCP Wrapper no es un reemplazo completo para un firewall configurado correctamente . Es solo una valiosa adición para mejorar la seguridad de su servidor Linux. Se recomienda usarlo junto con un firewall completamente configurado y otros mecanismos y herramientas de seguridad.
Instalar contenedores TCP
TCP Wrappers está disponible en los repositorios oficiales de la mayoría de los sistemas operativos Linux.
Dependiendo de la distribución de Linux que utilice, se puede instalar como se muestra a continuación.
En sistemas basados en Arch:
$ sudo pacman -S tcp_wrappers
En sistemas basados en YUM:
$ sudo yum install tcp_wrappers
En sistemas basados en APT:
$ sudo apt-get install tcp_wrappers
En sistemas SUSE/openSUSE:
$ sudo zypper in tcp_wrappers
Restringir el acceso a servidores Linux usando contenedores TCP
Configuración
TCP Wrappers implementa el control de acceso con la ayuda de dos archivos de configuración:/etc/hosts.allow y /etc/hosts.deny . Estos dos archivos de lista de control de acceso deciden si los clientes específicos pueden o no acceder a su servidor Linux.
El archivo /etc/hosts.allow
Este archivo contiene la lista de hosts o redes permitidos o no permitidos. Significa que podemos permitir o denegar conexiones a servicios de red definiendo reglas de acceso en este archivo.
El archivo /etc/hosts.deny
Este archivo contiene la lista de hosts o redes que no pueden acceder a su servidor Linux. Las reglas de acceso en este archivo también se pueden configurar en /etc/hosts.allow con 'deny' opción.
La sintaxis típica para definir una regla de acceso es:
daemon_list : client_list : option : option ...
donde,
- lista_demonios - El nombre de un servicio de red como SSH, FTP, Portmap, etc.
- lista_de_clientes - La lista separada por comas de nombres de host válidos, direcciones IP o direcciones de red.
- opciones - Una acción opcional que especifica algo que se debe hacer siempre que se cumpla una regla.
La sintaxis es la misma para ambos archivos.
Reglas para recordar
Antes de usar TCP Wrappers, debe conocer las siguientes reglas importantes. Tenga en cuenta que TCP Wrapper solo consulta estos dos archivos (hosts.allow y hosts.deny).
- Las reglas de acceso en el archivo /etc/hosts.allow se aplican primero. Tienen prioridad sobre las reglas del archivo /etc/hosts.deny. Por lo tanto, si se permite el acceso a un servicio en /etc/hosts.allow archivo y una regla que deniega el acceso a ese mismo servicio en /etc/hosts.deny se ignora.
- Solo se permite una regla por servicio en ambos archivos (hosts.allow y hosts.deny).
- El orden de las reglas es muy importante. Solo se tendrá en cuenta la primera regla coincidente para un servicio dado. Lo mismo se aplica a ambos archivos.
- Si no hay reglas coincidentes para un servicio en ninguno de los archivos o si ninguno de los archivos existe, se otorgará acceso al servicio a todos los hosts remotos.
- Cualquier cambio en cualquiera de los archivos tendrá efecto inmediatamente sin reiniciar los servicios de red.
El enfoque recomendado para asegurar su servidor
En general, la mejor práctica para proteger un servidor Linux es bloquear todas las conexiones entrantes y permitir solo algunos hosts o redes específicos. Para hacerlo, edite /etc/hosts.deny archivo:
$ sudo vi /etc/hosts.deny
Agregue la siguiente línea. Esta línea rechaza conexiones a TODOS los servicios y TODAS las redes.
ALL: ALL
Luego, edite /etc/hosts.allow archivo:
$ sudo vi /etc/hosts.allow
y permita los hosts o redes específicos de su elección.
sshd: 192.168.43.192 192.168.43.193
Además, puede especificar nombres de host válidos en lugar de direcciones IP como se muestra a continuación.
sshd: server1.ostechnix.lan server2.ostechnx.lan
Alternativamente, puede hacer lo mismo definiendo todas las reglas (tanto permitir como denegar) en el mismo archivo /etc/hosts.allow.
Edite /etc/hosts.allow archivo y agregue las siguientes líneas.
sshd: 192.168.43.192 192.168.43.193 sshd: ALL: DENY
No necesita especificar ninguna regla en /etc/hosts.deny archivo.
Según la regla anterior, se denegarán todas las conexiones entrantes para todos los hosts excepto los dos hosts 192.168.43.192, 192.168.43.193.
Ahora, intente conectar SSH a su servidor Linux desde cualquier host, excepto los hosts anteriores, obtendrá el siguiente error.
ssh_exchange_identification: read: Connection reset by peer
Puede verificar esto desde los archivos de registro de su servidor Linux como se muestra a continuación.
$ cat /var/log/secure
Salida de muestra:
Jun 16 19:40:17 server sshd[15782]: refused connect from 192.168.43.150 (192.168.43.150)
De manera similar, puede definir reglas para otros servicios, digamos, por ejemplo, vsftpd, en /etc/hosts.allow archivo como se muestra a continuación.
vsftpd: 192.168.43.192 vsftpd: ALL: DENY
Nuevamente, no necesita definir ninguna regla en /etc/hosts.deny expediente. Según la regla anterior, un host remoto con la dirección IP 192.168.43.192 puede acceder al servidor Linux a través de FTP. Todos los demás hosts serán denegados.
Además, puede definir las reglas de acceso en diferentes formatos en el archivo /etc/hosts.allow como se muestra a continuación.
sshd: 192.168.43.192 #Allow a single host for SSH service sshd: 192.168.43.0/255.255.255.0 #Allow a /24 prefix for SSH vsftpd: 192.168.43.192 #Allow a single host for FTP vsftpd: 192.168.43.0/255.255.255.0 #Allow a /24 prefix for FTP vsftpd: server1.ostechnix.lan #Allow a single host for FTP
Permitir todos los hosts excepto un host específico
Puede permitir conexiones entrantes desde todos los hosts, pero no desde un host específico. Digamos, por ejemplo, para permitir conexiones entrantes desde todos los hosts en el 192.168.43 subred, pero no del host 192.168.43.192 , agregue la siguiente línea en /etc/hosts.allow archivo.
ALL: 192.168.43. EXCEPT 192.168.43.192
En el caso anterior, no necesita agregar ninguna regla en el archivo /etc/hosts.deny.
O puede especificar el nombre de host en lugar de la dirección IP como se muestra a continuación.
ALL: .ostechnix.lan EXCEPT badhost.ostechnix.lan
Para obtener más detalles, consulte las páginas man.
$ man tcpd
Lea también:
- Permitir o denegar el acceso SSH a un usuario o grupo en particular en Linux
- Limite el número de inicios de sesión SSH por usuario/grupo/sistema
Nuevamente, no olvidemos que TCP Wrapper no reemplaza a un firewall. Debe usarse junto con firewalls y otras herramientas de seguridad.