web-dev-qa-db-fra.com

Limiter l'accès SSH à des clients spécifiques par adresse IP

Comment autoriser certains ensembles d'adresses IP privées à entrer via une connexion SSH (paire de clés RSA) dans Linux Server?

26
Ranjan Kumar

Vous pouvez limiter les hôtes pouvant se connecter en configurant wrappers TCP ou en filtrant le trafic réseau (pare-feu) à l'aide de iptables . Si vous souhaitez utiliser différentes méthodes d'authentification en fonction de l'adresse IP du client, configurez plutôt le démon SSH (option 3).

Option 1: filtrage avec IPTABLES

Les règles d'Iptables sont évaluées dans l'ordre, jusqu'à la première correspondance.

Par exemple, pour autoriser le trafic provenant du réseau 192.168.0.0/24 et supprimer le trafic (vers le port 22). La règle DROP n'est pas requise si votre stratégie par défaut iptables est configurée sur 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

Vous pouvez ajouter plus de règles avant la règle de suppression pour correspondre à plus de réseaux/hôtes. Si vous avez beaucoup de réseaux ou d'adresses d'hôte, vous devez utiliser le module ipset . Il existe également un module iprange qui permet d'utiliser n'importe quelle plage arbitraire d'adresses IP.

Les ptables ne sont pas persistants lors des redémarrages. Vous devez configurer un mécanisme pour restaurer iptables au démarrage.

iptables ne s'applique qu'au trafic IPv4. Les systèmes qui ont ssh écoutant l'adresse IPv6, la configuration nécessaire peut être effectuée avec ip6tables.

Option 2: utilisation de TCP wrappers

Vous pouvez également configurer les hôtes qui peuvent se connecter à l'aide des encapsuleurs TCP. Avec les encapsuleurs TCP, en plus des adresses IP, vous pouvez également utiliser des noms d'hôte dans les règles).

Par défaut, refusez tous les hôtes.

/etc/hosts.deny:

sshd : ALL

Ensuite, répertoriez les hôtes autorisés dans hosts.allow. Par exemple, pour autoriser le réseau 192.168.0.0/24 et localhost .

/etc/hosts.allow:

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

Option 3: configuration du démon SSH

Vous pouvez configurer le démon ssh dans sshd_config pour utiliser une méthode d'authentification différente selon l'adresse/le nom d'hôte du client. Si vous souhaitez uniquement empêcher les autres hôtes de se connecter, vous devez utiliser iptables ou TCP wrappers à la place.

Supprimez d'abord les méthodes d'authentification par défaut:

PasswordAuthentication no
PubkeyAuthentication no

Ajoutez ensuite les méthodes d'authentification souhaitées après un Match Address à la fin du fichier. Il est important de placer Match à la fin du fichier, car toutes les lignes de configuration après celui-ci sont placées dans le bloc conditionnel jusqu'à la ligne Match suivante. Par exemple:

Match Address 127.0.0.*
    PubkeyAuthentication yes

D'autres clients peuvent toujours se connecter, mais les connexions échoueront car aucune méthode d'authentification n'est disponible.

Les arguments de correspondance et les options de configuration conditionnelle autorisées sont documentés dans page de manuel sshd_config . Les modèles de correspondance sont documentés dans page de manuel ssh_config .

48
sebasth

Voici une configuration supplémentaire pour le démon SSH pour étendre la réponse précédente:

  • Ajouter un filtrage utilisateur avec l'option AllowUsers dans sshd_config fichier:

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

    Cela permet johndoe et admin2 uniquement à partir de 192.168.1.* adresses et otherid1, otherid2 de n'importe où.

  • Restreindre une clé ssh ou une clé basée sur ca à un ensemble d'adresses dans .ssh/authorized_keys fichier du répertoire personnel d'un utilisateur donné:

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

    Dans cet exemple, la clé publique pour les pseudonymes ne sera effective qu'à partir d'adresses données.

11
tonioc

Si vous utilisez SSH CA pour l'authentification client, vous pouvez spécifier le source-address option lors de la signature des certificats:

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

Le certificat id_rsa-cert.pub peut être utilisé pour se connecter aux hôtes uniquement à partir de 172.16.0.0/16 adresses (même pas 127.0.0.1 sauf si vous le spécifiez également).

man 1 ssh-keygen est un bon document si vous voulez plus de détails.

1
iBug