Puede limitar qué hosts pueden conectarse configurando contenedores TCP o filtrando el tráfico de red (cortafuegos) usando iptables. Si desea utilizar diferentes métodos de autenticación según la dirección IP del cliente, configure el demonio SSH en su lugar (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). El DROP
la 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 coincidan con más redes/hosts. Si tiene muchas redes o direcciones de host, debe usar ipset módulo. También hay iprange módulo que permite utilizar cualquier rango arbitrario de direcciones IP.
Las iptables no son persistentes en los reinicios. Debe configurar algún mecanismo para restaurar iptables en el arranque.
iptables
se aplican solo al tráfico IPv4. Los sistemas que tienen ssh escuchando la dirección IPv6, la configuración necesaria se puede hacer con ip6tables
.
Opción 2:usar envoltorios TCP
Nota:esta podría no ser una opción en las distribuciones modernas, ya que la compatibilidad con tcpwrappers se eliminó de OpenSSH 6.7
También puede configurar qué hosts pueden conectarse mediante contenedores TCP. Con contenedores TCP, además de las direcciones IP, también puede usar nombres de host en las reglas.
Por defecto, denegar todos los hosts.
/etc/hosts.deny
:
sshd : ALL
Luego enumere los hosts permitidos en hosts.allow. Por ejemplo, para permitir la red 192.168.0.0/24 y localhost .
/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 usar 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 en su lugar.
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 un Match Address
al final del archivo. Colocando Match
al final del archivo es importante, ya que todas las líneas de configuración posteriores se colocan dentro del bloque condicional hasta el 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 de coincidencia y las opciones de configuración condicional permitidas se documentan en la página de manual de sshd_config. Los patrones de coincidencia se documentan en la página de manual de ssh_config.
Aquí alguna configuración adicional para el demonio SSH para ampliar la respuesta anterior:
-
Añadir filtrado de usuarios con
AllowUsers
opción ensshd_config
archivo:AllowUsers [email protected]* [email protected]* otherid1 otherid2
Esto permite que johndoe y admin2 solo desde
192.168.1.*
direcciones y otherid1 , otroid2 desde cualquier lugar. -
Restrinja una clave ssh o clave basada en ca a un conjunto de direcciones en
.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 el alias de usuario será efectiva solo desde las direcciones dadas.