Limitare l'accesso SSH a client specifici per indirizzo IP


22

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


3
Le regole del firewall sono un normale corso di azione
Raman Sailopal,

2
firewall o /etc/hosts.allow se compilazione ssh con wrapper TCP o regole di file / etc / ssh / sshd_config.
Rui F Ribeiro,

più di un modo di fare, fare riferimento a linux.die.net/man/5/sshd_config che spiega tutto in/etc/ssh/sshd_config
ron

Risposte:


42

Puoi limitare quali host possono connettersi configurando i wrapper TCP  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 DROPregola 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 hai molte reti o indirizzi host, dovresti usare il modulo ipset . Esiste anche un 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.

iptablessi applica solo al traffico IPv4. I sistemi che hanno ssh in ascolto di IPv6 possono utilizzare la configurazione necessaria ip6tables.

Opzione 2: utilizzo dei wrapper TCP

È inoltre possibile configurare quali host possono connettersi utilizzando i wrapper TCP. Con i wrapper TCP, oltre agli indirizzi IP è anche possibile 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 client / nome host. Se si desidera solo bloccare la connessione di altri host, utilizzare invece iptables o wrapper TCP.

Rimuovere innanzitutto i metodi di autenticazione predefiniti:

PasswordAuthentication no
PubkeyAuthentication no

Quindi aggiungere i metodi di autenticazione desiderati dopo un Match Addressalla fine del file. Il posizionamento Matchalla fine del file è importante, poiché tutte le righe di configurazione successive vengono inserite nel blocco condizionale fino alla Matchriga 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 nella pagina man sshd_config . I modelli di corrispondenza sono documentati nella pagina man ssh_config .


Che dire dell'aggiunta di una direttiva ListenAddress in / etc / ssh / sshd_config?
Jerome,

È possibile in situazioni specifiche (ad esempio l'ascolto dell'indirizzo di rete privato), a seconda della configurazione della rete e degli host che si desidera consentire.
sebasth,

2
Inoltre, sshd_config può impostare i filtri con la direttiva AlowUsers, e anche le frecce autorizzate possono essere impostate con "da IP o sottorete" per filtrare anche.
tonioc

@tonioc Ottima soluzione per il mio caso d'uso. Espandi questo suggerimento in una risposta.
simlev

se si dispone di una scheda di rete con 4 porte ciascuna di andare a una rete diversa, quindi il valore di default #ListenAddress ::nel /etc/ssh/sshd_configdirà il server SSH per accettare in ingresso da qualsiasi di queste reti. Altrimenti, fai ListenAddress <ip address>dov'è <ip address>quella di quelle porte NIC che desideri siano autorizzate. Il mio eth0è 192.168.3.4quindi il ListenAddress 192.168.3.4risultato che SSH funziona solo sulla rete 192.168.3.4 che è su eth0; e eth1 eth2 eth3 viene negato.
ron

5

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

  • Aggiungi il filtro utente con l' AllowUsersopzione insshd_config file:

    AllowUsers johndoe@192.168.1.* admin2@192.168.1.* otherid1 otherid2
    

    Ciò consente a johndoe e admin2 solo di 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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.