Vous pouvez limiter les hôtes pouvant se connecter en configurant des wrappers TCP ou en filtrant le trafic réseau (pare-feu) à l'aide d'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 Iptables sont évaluées dans l'ordre, jusqu'à la première correspondance.
Par exemple, pour autoriser le trafic depuis le réseau 192.168.0.0/24 et autrement supprimer le trafic (vers le port 22). Le DROP
la règle 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 hôtes, vous devez utiliser ipset module. Il y a aussi iprange module qui permet d'utiliser n'importe quelle plage arbitraire d'adresses IP.
Iptables ne sont pas persistants lors des redémarrages. Vous devez configurer un mécanisme pour restaurer iptables au démarrage.
iptables
s'appliquent uniquement 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 :Utiliser des wrappers TCP
Remarque :cela peut ne pas être une option sur les distributions modernes, car la prise en charge des tcpwrappers a été supprimée d'OpenSSH 6.7
Vous pouvez également configurer les hôtes pouvant se connecter à l'aide d'encapsuleurs TCP. Avec les wrappers 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 en fonction de l'adresse/du nom d'hôte du client. Si vous souhaitez uniquement empêcher les autres hôtes de se connecter, vous devez utiliser iptables ou des wrappers TCP à 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. Placer Match
à la fin du fichier est important, car toutes les lignes de configuration qui le suivent sont placées à l'intérieur du bloc conditionnel jusqu'au prochain Match
ligne. Par exemple :
Match Address 127.0.0.*
PubkeyAuthentication yes
Les 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 la page de manuel sshd_config. Les modèles de correspondance sont documentés dans la page de manuel ssh_config.
Voici une configuration supplémentaire pour le démon SSH afin d'étendre la réponse précédente :
-
Ajouter un filtrage des utilisateurs avec
AllowUsers
option ensshd_config
fichier :AllowUsers [email protected]* [email protected]* otherid1 otherid2
Cela permet à johndoe et admin2 uniquement à partir de
192.168.1.*
adresses et otherid1 , autreid2 de n'importe où. -
Restreindre une clé ssh ou une clé basée sur ca à un ensemble d'adresses en
.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 des pseudonymes ne sera effective qu'à partir d'adresses données.