Involucro TCP è un sistema ACL (Access Control List) basato su host open source, utilizzato per limitare i servizi di rete TCP in base al nome host, all'indirizzo IP, all'indirizzo di rete e così via. Decide quale host dovrebbe essere autorizzato ad accedere a un servizio di rete specifico. TCP Wrapper è stato sviluppato da un programmatore e fisico olandese Wietse Zweitze Venema nel 1990 presso l'Università di Tecnologia di Eindhoven. Lo ha mantenuto fino al 1995 e poi lo ha rilasciato sotto licenza BSD nel 2001. In questa breve guida, spiegherò come limitare l'accesso ai server Linux usando TCP Wrapper.
Tieni presente che TCP Wrapper non è un sostituto completo del firewall correttamente configurato . È solo un'aggiunta preziosa per migliorare la sicurezza del tuo server Linux. Si consiglia di utilizzarlo insieme a un firewall completamente configurato e ad altri meccanismi e strumenti di sicurezza.
Installa wrapper TCP
TCP Wrappers è disponibile nei repository ufficiali della maggior parte dei sistemi operativi Linux.
A seconda della distribuzione Linux in uso, può essere installato come mostrato di seguito.
Sui sistemi basati su Arch:
$ sudo pacman -S tcp_wrappers
Sui sistemi basati su YUM:
$ sudo yum install tcp_wrappers
Sui sistemi basati su APT:
$ sudo apt-get install tcp_wrappers
Sui sistemi SUSE/openSUSE:
$ sudo zypper in tcp_wrappers
Limita l'accesso ai server Linux utilizzando i wrapper TCP
Configurazione
TCP Wrapper implementa il controllo degli accessi con l'aiuto di due file di configurazione:/etc/hosts.allow e /etc/hosts.deny . Questi due file dell'elenco di controllo dell'accesso decidono se i client specifici possono accedere o meno al tuo server Linux.
Il file /etc/hosts.allow
Questo file contiene l'elenco di host o reti consentiti o non consentiti. Significa che possiamo consentire o negare le connessioni ai servizi di rete definendo le regole di accesso in questo file.
Il file /etc/hosts.deny
Questo file contiene l'elenco di host o reti a cui non è consentito accedere al server Linux. Le regole di accesso in questo file possono anche essere impostate in /etc/hosts.allow con un 'nega' opzione.
La sintassi tipica per definire una regola di accesso è:
daemon_list : client_list : option : option ...
Dove,
- lista_demoni - Il nome di un servizio di rete come SSH, FTP, Portmap ecc.
- elenco_clienti - L'elenco separato da virgole di nomi host, indirizzi IP o indirizzi di rete validi.
- opzioni - Un'azione facoltativa che specifica qualcosa da fare ogni volta che una regola viene soddisfatta.
La sintassi è la stessa per entrambi i file.
Regole da ricordare
Prima di utilizzare TCP Wrapper, è necessario conoscere le seguenti regole importanti. Tieni presente che il TCP Wrapper consulta solo questi due file (hosts.allow e hosts.deny).
- Le regole di accesso nel file /etc/hosts.allow vengono applicate per prime. Hanno la precedenza sulle regole nel file /etc/hosts.deny. Pertanto, se l'accesso a un servizio è consentito in /etc/hosts.allow file e una regola che nega l'accesso allo stesso servizio in /etc/hosts.deny viene ignorato.
- È consentita una sola regola per servizio in entrambi i file (hosts.allow e hosts.deny).
- L'ordine delle regole è molto importante. Verrà presa in considerazione solo la prima regola di corrispondenza per un determinato servizio. Lo stesso vale per entrambi i file.
- Se non ci sono regole di corrispondenza per un servizio in nessuno dei file o se nessuno dei due file esiste, l'accesso al servizio sarà concesso a tutti gli host remoti.
- Qualsiasi modifica in entrambi i file avrà effetto immediato senza riavviare i servizi di rete.
L'approccio consigliato per proteggere il tuo server
In genere, la procedura migliore per proteggere un server Linux è bloccare tutte le connessioni in entrata e consentire solo pochi host o reti specifici. Per farlo, modifica /etc/hosts.deny file:
$ sudo vi /etc/hosts.deny
Aggiungi la riga seguente. Questa linea rifiuta le connessioni a TUTTI i servizi e TUTTE le reti.
ALL: ALL
Quindi, modifica /etc/hosts.allow file:
$ sudo vi /etc/hosts.allow
e consenti gli host o le reti specifici di tua scelta.
sshd: 192.168.43.192 192.168.43.193
Inoltre, puoi specificare nomi host validi invece dell'indirizzo IP come mostrato di seguito.
sshd: server1.ostechnix.lan server2.ostechnx.lan
In alternativa, puoi fare lo stesso definendo tutte le regole (consenti e nega) nel file /etc/hosts.allow stesso.
Modifica /etc/hosts.allow file e aggiungi le seguenti righe.
sshd: 192.168.43.192 192.168.43.193 sshd: ALL: DENY
Non è necessario specificare alcuna regola in /etc/hosts.deny file.
Secondo la regola precedente, tutte le connessioni in entrata verranno negate per tutti gli host eccetto i due host 192.168.43.192, 192.168.43.193.
Ora, prova a eseguire l'SSH sul tuo server Linux da qualsiasi host tranne gli host precedenti, riceverai il seguente errore.
ssh_exchange_identification: read: Connection reset by peer
Puoi verificarlo dai file di registro del tuo server Linux come mostrato di seguito.
$ cat /var/log/secure
Risultato di esempio:
Jun 16 19:40:17 server sshd[15782]: refused connect from 192.168.43.150 (192.168.43.150)
Allo stesso modo, puoi definire regole per altri servizi, ad esempio vsftpd, in /etc/hosts.allow file come mostrato di seguito.
vsftpd: 192.168.43.192 vsftpd: ALL: DENY
Anche in questo caso, non è necessario definire alcuna regola in /etc/hosts.deny file. Secondo la regola precedente, un host remoto con indirizzo IP 192.168.43.192 può accedere al server Linux tramite FTP. Tutti gli altri host verranno rifiutati.
Inoltre, puoi definire le regole di accesso in diversi formati nel file /etc/hosts.allow come mostrato di seguito.
sshd: 192.168.43.192 #Allow a single host for SSH service sshd: 192.168.43.0/255.255.255.0 #Allow a /24 prefix for SSH vsftpd: 192.168.43.192 #Allow a single host for FTP vsftpd: 192.168.43.0/255.255.255.0 #Allow a /24 prefix for FTP vsftpd: server1.ostechnix.lan #Allow a single host for FTP
Consenti tutti gli host tranne un host specifico
Puoi consentire connessioni in entrata da tutti gli host, ma non da un host specifico. Supponiamo, ad esempio, di consentire le connessioni in entrata da tutti gli host nel 192.168.43 sottorete, ma non dall'host 192.168.43.192 , aggiungi la seguente riga in /etc/hosts.allow file.
ALL: 192.168.43. EXCEPT 192.168.43.192
Nel caso precedente, non è necessario aggiungere alcuna regola nel file /etc/hosts.deny.
Oppure puoi specificare il nome host invece dell'indirizzo IP come mostrato di seguito.
ALL: .ostechnix.lan EXCEPT badhost.ostechnix.lan
Per maggiori dettagli, fare riferimento alle pagine man.
$ man tcpd
Leggi anche:
- Consenti o nega l'accesso SSH a un particolare utente o gruppo in Linux
- Limita il numero di accessi SSH per utente/gruppo/sistema
Ancora una volta, non dimentichiamo che TCP Wrapper non sostituisce un firewall. Dovrebbe essere utilizzato insieme a firewall e altri strumenti di sicurezza.