¿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 DROP
regla 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.
iptables
se 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 Address
final del archivo. Colocar Match
al final del archivo es importante, ya que todas las líneas de configuración posteriores se colocan dentro del bloque condicional hasta la siguiente Match
lí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
AllowUsers
la opción ensshd_config
el 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_keys
archivo 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-address
opció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.pub
se puede utilizar para iniciar sesión en hosts solo desde 172.16.0.0/16
direcciones (ni siquiera 127.0.0.1
a menos que usted también lo especifique).
man 1 ssh-keygen
Es un buen documento si quieres más detalles.