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 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 DROPrègle n'est pas requise si votre stratégie par défaut iptables est configurée pour 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.
iptabless'appliquent uniquement au trafic IPv4. Les systèmes qui ont une écoute ssh de l'adresse IPv6 avec laquelle la configuration nécessaire peut être effectuée ip6tables.
Option 2: utilisation de wrappers TCP
Vous pouvez également configurer les hôtes qui peuvent se connecter à l'aide de wrappers TCP. Avec les wrappers TCP, en plus des adresses IP, vous pouvez également utiliser des noms d'hôtes 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 .
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 d'autres hôtes de se connecter, vous devez utiliser à la place iptables ou des wrappers TCP.
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. Le placement Matchà la fin du fichier est important, car toutes les lignes de configuration après celui-ci sont placées à l'intérieur du bloc conditionnel jusqu'à la Matchligne 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 la page de manuel sshd_config . Les modèles de correspondance sont documentés dans la page de manuel ssh_config .
Qu'en est-il de l'ajout d'une directive ListenAddress dans / etc / ssh / sshd_config?
Jerome
Cela est possible dans des situations spécifiques (par exemple, écouter une adresse de réseau privé), en fonction de la configuration de votre réseau et des hôtes que vous souhaitez autoriser.
sebasth
2
De plus, sshd_config peut définir des filtrages avec la directive AlowUsers, et également, les authorized_keys peuvent être définies avec 'from IP or subnet "pour filtrer également.
tonioc
@tonioc Excellente solution pour mon cas d'utilisation. Veuillez développer cette suggestion en une réponse.
simlev
si vous avez une carte réseau avec 4 ports allant chacun vers un réseau différent, la valeur #ListenAddress ::par défaut en /etc/ssh/sshd_configdira au serveur SSH d'accepter les entrées de l'un de ces réseaux. Sinon, faites ListenAddress <ip address>où <ip address>est celui des ports NIC que vous souhaitez autoriser. Mon résultat eth0est 192.168.3.4donc ListenAddress 192.168.3.4que SSH ne fonctionne que sur le réseau 192.168.3.4 qui est sur eth0; et eth1 eth2 eth3 est refusé.
ron
5
Voici une configuration supplémentaire pour le démon SSH pour étendre la réponse précédente:
Ajouter un filtrage utilisateur avec AllowUsersoption dans le sshd_configfichier:
Cela permet johndoe et admin2 seulement des 192.168.1.*adresses et otherid1 , otherid2 de partout.
Restreignez une clé ssh ou une clé basée sur ca à un ensemble d'adresses dans le .ssh/authorized_keysfichier du répertoire personnel d'un utilisateur donné:
/etc/ssh/sshd_config
Réponses:
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 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
DROP
règle n'est pas requise si votre stratégie par défaut iptables est configurée pourDROP
.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
s'appliquent uniquement au trafic IPv4. Les systèmes qui ont une écoute ssh de l'adresse IPv6 avec laquelle la configuration nécessaire peut être effectuéeip6tables
.Option 2: utilisation de wrappers TCP
Vous pouvez également configurer les hôtes qui peuvent se connecter à l'aide de wrappers TCP. Avec les wrappers TCP, en plus des adresses IP, vous pouvez également utiliser des noms d'hôtes dans les règles.
Par défaut, refusez tous les hôtes.
/etc/hosts.deny
: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
: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 d'autres hôtes de se connecter, vous devez utiliser à la place iptables ou des wrappers TCP.
Supprimez d'abord les méthodes d'authentification par défaut:
Ajoutez ensuite les méthodes d'authentification souhaitées après un
Match Address
à la fin du fichier. Le placementMatch
à la fin du fichier est important, car toutes les lignes de configuration après celui-ci sont placées à l'intérieur du bloc conditionnel jusqu'à laMatch
ligne suivante . Par exemple: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 la page de manuel sshd_config . Les modèles de correspondance sont documentés dans la page de manuel ssh_config .
la source
#ListenAddress ::
par défaut en/etc/ssh/sshd_config
dira au serveur SSH d'accepter les entrées de l'un de ces réseaux. Sinon, faitesListenAddress <ip address>
où<ip address>
est celui des ports NIC que vous souhaitez autoriser. Mon résultateth0
est192.168.3.4
doncListenAddress 192.168.3.4
que SSH ne fonctionne que sur le réseau 192.168.3.4 qui est sur eth0; et eth1 eth2 eth3 est refusé.Voici une configuration supplémentaire pour le démon SSH pour étendre la réponse précédente:
Ajouter un filtrage utilisateur avec
AllowUsers
option dans lesshd_config
fichier:Cela permet johndoe et admin2 seulement des
192.168.1.*
adresses et otherid1 , otherid2 de partout.Restreignez une clé ssh ou une clé basée sur ca à un ensemble d'adresses dans le
.ssh/authorized_keys
fichier du répertoire personnel d'un utilisateur donné:Dans cet exemple, la clé publique pour les pseudonymes ne sera effective qu'à partir d'adresses données.
la source