Limite el acceso SSH a clientes específicos por dirección IP

Limite el acceso SSH a clientes específicos por dirección IP

¿Cómo permitimos que cierto conjunto de IP privadas ingresen a través del inicio de sesión SSH (par de claves RSA) en el servidor Linux?

Respuesta1

Puede limitar qué hosts pueden conectarse configurandoEnvoltorios TCP o filtrar el tráfico de red (firewalling) usandoiptables. Si desea utilizar diferentes métodos de autenticación según la dirección IP del cliente, configure el demonio SSH (opción 3).

Opción 1: Filtrado con IPTABLES

Las reglas de Iptables se evalúan en orden, hasta la primera coincidencia.

Por ejemplo, para permitir el tráfico de la red 192.168.0.0/24 y, de lo contrario, descartar el tráfico (al puerto 22). La DROPregla no es necesaria si su política predeterminada de iptables está configurada en DROP.

iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

Puede agregar más reglas antes de la regla de eliminación para que coincida con más redes/hosts. Si tiene muchas redes o direcciones de host, debe usaripsetmódulo. También hayiprangemódulo que permite utilizar cualquier rango arbitrario de direcciones IP.

Los iptables no son persistentes tras los reinicios. Necesita configurar algún mecanismo para restaurar iptables en el arranque.

iptablesse aplica sólo al tráfico IPv4. Los sistemas que tienen ssh escuchando la dirección IPv6 se pueden realizar la configuración necesaria con ip6tables.

Opción 2: usar contenedores TCP

Nota: es posible que esta no sea una opción en las distribuciones modernas, ya que se eliminó la compatibilidad con tcpwrappers deAbiertoSSH 6.7

También puede configurar qué hosts pueden conectarse mediante contenedores TCP. Con los contenedores TCP, además de las direcciones IP, también puede utilizar nombres de host en las reglas.

De forma predeterminada, niega todos los hosts.

/etc/hosts.deny:

sshd : ALL

Luego, enumere los hosts permitidos en hosts.allow. Por ejemplo, para permitir que la red192.168.0.0/24yservidor local.

/etc/hosts.allow:

sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]

Opción 3: configuración del demonio SSH

Puede configurar el demonio ssh en sshd_config para utilizar un método de autenticación diferente según la dirección del cliente/nombre de host. Si solo desea bloquear la conexión de otros hosts, debe usar iptables o contenedores TCP.

Primero elimine los métodos de autenticación predeterminados:

PasswordAuthentication no
PubkeyAuthentication no

Luego agregue los métodos de autenticación deseados después de al Match Addressfinal del archivo. Colocar Matchal final del archivo es importante, ya que todas las líneas de configuración posteriores se colocan dentro del bloque condicional hasta la siguiente Matchlínea. Por ejemplo:

Match Address 127.0.0.*
    PubkeyAuthentication yes

Otros clientes aún pueden conectarse, pero los inicios de sesión fallarán porque no hay métodos de autenticación disponibles.

Los argumentos coincidentes y las opciones de configuración condicional permitidas se documentan en página de manual sshd_config. Los patrones de coincidencia están documentados enpágina de manual ssh_config.

Respuesta2

Aquí alguna configuración adicional para el demonio SSH para ampliar la respuesta anterior:

  • Agregue filtrado de usuarios con AllowUsersla opción en sshd_configel archivo:

    AllowUsers [email protected].* [email protected].* otherid1 otherid2
    

    Esto permitejuandoeyadministrador2sólo de 192.168.1.*direcciones yotroid1,otroid2de donde sea.

  • Restrinja una clave ssh o una clave basada en ca a un conjunto de direcciones en el .ssh/authorized_keysarchivo del directorio de inicio de un usuario determinado:

    from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
    

    En este ejemplo, la clave pública para los alias de usuario será efectiva solo desde direcciones determinadas.

Respuesta3

Si no le importa instalar UFW (FireWall sin complicaciones):

sudo ufw allow from 192.168.1.0/24 to any port 22

Editar: Como se mencionó anteriormente, es una buena práctica autenticarse solo usando claves en lugar de contraseñas, lo cual se puede hacer editando/etc/ssh/sshd_config:

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

Respuesta4

Si utiliza SSH CA para la autenticación del cliente, puede especificar la source-addressopción al firmar los certificados:

ssh-keygen -s ca_privkey -O source-address=172.16.0.0/16 id_rsa.pub
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

El certificado id_rsa-cert.pubse puede utilizar para iniciar sesión en hosts solo desde 172.16.0.0/16direcciones (ni siquiera 127.0.0.1a menos que usted también lo especifique).

man 1 ssh-keygenEs un buen documento si quieres más detalles.

información relacionada