Puoi limitare gli host che possono connettersi configurando i wrapper TCP o filtrando il traffico di rete (firewall) utilizzando iptables. Se desideri utilizzare metodi di autenticazione diversi a seconda dell'indirizzo IP del client, configura invece il demone SSH (opzione 3).
Opzione 1:filtraggio con IPTABLES
Le regole di iptables vengono valutate in ordine, fino alla prima corrispondenza.
Ad esempio, per consentire il traffico dalla rete 192.168.0.0/24 e altrimenti eliminare il traffico (alla porta 22). Lo DROP
la regola non è richiesta se la policy predefinita di iptables è configurata su 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
Puoi aggiungere più regole prima della regola di eliminazione per abbinare più reti/host. Se hai molte reti o indirizzi host, dovresti usare ipset modulo. C'è anche iprange modulo che consente di utilizzare qualsiasi intervallo arbitrario di indirizzi IP.
Iptables non è persistente tra i riavvii. Devi configurare qualche meccanismo per ripristinare iptables all'avvio.
iptables
si applicano solo al traffico IPv4. I sistemi che hanno ssh in ascolto dell'indirizzo IPv6, la configurazione necessaria può essere eseguita con ip6tables
.
Opzione 2:utilizzo di wrapper TCP
Nota:questa potrebbe non essere un'opzione nelle distribuzioni moderne, poiché il supporto per tcpwrapper è stato rimosso da OpenSSH 6.7
Puoi anche configurare quali host possono connettersi utilizzando i wrapper TCP. Con i wrapper TCP, oltre agli indirizzi IP puoi anche utilizzare i nomi host nelle regole.
Per impostazione predefinita, nega tutti gli host.
/etc/hosts.deny
:
sshd : ALL
Quindi elenca gli host consentiti in hosts.allow. Ad esempio per consentire la rete 192.168.0.0/24 e localhost .
/etc/hosts.allow
:
sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]
Opzione 3:configurazione del demone SSH
È possibile configurare il demone ssh in sshd_config per utilizzare un metodo di autenticazione diverso a seconda dell'indirizzo del client/nome host. Se vuoi solo impedire ad altri host di connettersi, dovresti invece usare iptables o TCP wrapper.
Per prima cosa rimuovi i metodi di autenticazione predefiniti:
PasswordAuthentication no
PubkeyAuthentication no
Quindi aggiungi i metodi di autenticazione desiderati dopo un Match Address
alla fine del file. Piazzando Match
alla fine del file è importante, poiché tutte le righe di configurazione dopo di esso vengono posizionate all'interno del blocco condizionale fino al successivo Match
linea. Ad esempio:
Match Address 127.0.0.*
PubkeyAuthentication yes
Altri client sono ancora in grado di connettersi, ma gli accessi falliranno perché non ci sono metodi di autenticazione disponibili.
Gli argomenti di corrispondenza e le opzioni di configurazione condizionale consentite sono documentati nella pagina man di sshd_config. I modelli di corrispondenza sono documentati nella pagina man di ssh_config.
Ecco alcune configurazioni aggiuntive per il demone SSH per estendere la risposta precedente:
-
Aggiungi il filtro utente con
AllowUsers
opzione insshd_config
file:AllowUsers [email protected]* [email protected]* otherid1 otherid2
Ciò consente a johndoe e admin2 solo da
192.168.1.*
indirizzi e otherid1 , altroid2 da qualsiasi luogo. -
Limita una chiave ssh o una chiave basata su ca a un insieme di indirizzi in
.ssh/authorized_keys
file della home directory di un determinato utente:from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
In questo esempio, la chiave pubblica per useralias sarà effettiva solo da determinati indirizzi.