risposta-alla-domanda-sullo-sviluppo-web-bd.com

Limitare l'accesso SSH a client specifici per indirizzo IP

Come possiamo consentire a determinati set di IP privati ​​di accedere tramite l'accesso SSH (coppia di chiavi RSA) nel server Linux?

26
Ranjan Kumar

Puoi limitare quali host possono connettersi configurando TCP wrapper o filtrando il traffico di rete (firewalling) usando iptables . Se si desidera utilizzare metodi di autenticazione diversi a seconda dell'indirizzo IP del client, configurare invece il demone SSH (opzione 3).

Opzione 1: filtro 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 in caso contrario rilasciare il traffico (alla porta 22). La regola DROP non è richiesta se il criterio predefinito di iptables è configurato 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

È possibile aggiungere più regole prima della regola di rilascio per abbinare più reti/host. Se disponi di molte reti o indirizzi host, dovresti utilizzare il modulo ipset . Esiste anche il modulo iprange che consente di utilizzare qualsiasi intervallo arbitrario di indirizzi IP.

Iptables non sono persistenti tra i riavvii. È necessario configurare alcuni meccanismi per ripristinare iptables all'avvio.

iptables si applica solo al traffico IPv4. I sistemi che hanno ssh in ascolto di IPv6 indirizzano la configurazione necessaria con ip6tables.

Opzione 2: utilizzo di TCP

Puoi anche configurare quali host possono connettersi usando TCP. Con TCP, oltre agli indirizzi IP puoi anche usare 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 client/nome host. Se si desidera solo bloccare la connessione di altri host, utilizzare invece iptables o TCP.

Rimuovere innanzitutto i metodi di autenticazione predefiniti:

PasswordAuthentication no
PubkeyAuthentication no

Quindi aggiungere i metodi di autenticazione desiderati dopo un Match Address alla fine del file. Posizionare Match alla fine del file è importante, poiché tutte le righe di configurazione successive vengono inserite all'interno del blocco condizionale fino alla riga Match successiva. Per 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.

Argomenti di corrispondenza e opzioni di configurazione condizionale consentite sono documentate in pagina man sshd_config . I modelli di corrispondenza sono documentati in pagina man ssh_config .

48
sebasth

Ecco alcune configurazioni aggiuntive per il demone SSH per estendere la risposta precedente:

  • Aggiungi il filtro utente con l'opzione AllowUsers in sshd_config file:

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

    Ciò consente johndoe e admin2 solo da 192.168.1.* indirizzi e otherid1, otherid2 da qualsiasi luogo.

  • Limitare una chiave ssh o una chiave basata su ca a un set 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à efficace solo da determinati indirizzi.

11
tonioc

Se si utilizza CA SSH per l'autenticazione client, è possibile specificare source-address opzione durante la firma dei certificati:

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

Il certificato id_rsa-cert.pub può essere utilizzato per accedere agli host solo da 172.16.0.0/16 indirizzi (nemmeno 127.0.0.1 a meno che non specifichi anche quello).

man 1 ssh-keygen è un buon documento se vuoi maggiori dettagli.

1
iBug