Il rafforzamento del server è il processo di miglioramento della sicurezza del server attraverso vari metodi. Abbiamo molti passaggi per proteggere un server. Tieni fuori te stesso e la tua azienda proteggendo i tuoi sistemi Linux da hacker, cracker e aggressori! Puoi trasformare una scatola vulnerabile in un server rinforzato tramite i seguenti passaggi. Ti aiuterà a prevenire attacchi esterni. Qui sto descrivendo il rafforzamento del server di CentOS.
Cosa sapere
Questa guida ti guida attraverso i passaggi necessari per rafforzare la sicurezza di CentOS 7. La protezione avanzata di un sistema lo renderà più restrittivo e potresti riscontrare problemi. Ti consiglio di creare una macchina virtuale duplicata che puoi utilizzare per la risoluzione dei problemi. Di seguito troverai un elenco di passaggi di base che puoi e dovresti eseguire per rafforzare i tuoi server subito dopo il provisioning.
1. Accesso remoto sicuro
A volte accediamo al nostro server con metodi remoti e se non è più sicuro, possiamo esporre il nostro server. Le opzioni OpenSSH sono controllate tramite /etc/ssh/sshd_config
file.
a. Disabilita il metodo di autenticazione della password SSH e abilita il metodo di autenticazione della chiave pubblica
È importante disabilitare il metodo di accesso remoto con password e abilitare la chiave pubblica di autenticazione
Modifica ChallengeResponseAuthentication e Autenticazione password a no per disattivare il metodo password
PasswordAuthentication no ChallengeResponseAuthentication no
Autorizza l'autenticazione con chiave pubblica
RSAAuthentication yes PubkeyAuthentication yes
ora puoi generare una nuova coppia di chiavi
# ssh-keygen -t rsa
b. Disabilita l'accesso root diretto
È una sicurezza di rischio per consentire a root di accedere direttamente al server. Dovresti invece accedere al sistema come tuo account e quindi fare su - per accedere come root. Quindi devi cambiare PermitRootLogin sì a PermitRootLogin no
PermitRootLogin no
c. Cambia la porta di ascolto SSH predefinita (es:8500)
A volte non è consigliabile utilizzare la porta predefinita perché è conosciuta da tutto il mondo ed è un rischio per la sicurezza. È bene personalizzare la porta da utilizzare
port 8500
2. Protezione del Boot Loader con grub password
Proteggendo il caricatore di avvio possiamo impedire l'accesso alla modalità utente singolo che accede automaticamente come root. Questo viene fatto con GRUB impostando una password che è memorizzata in testo normale per impostazione predefinita.
Per il sistema Debian
# grub-mkpasswd-pbkdf2
Per Cento
# grub2-mkpasswd-pbkdf2
3. Porte di rete in ascolto
Dopo aver configurato i servizi di rete, è importante prestare attenzione a quali porte sono effettivamente in ascolto sulle interfacce di rete del sistema. Eventuali porte aperte possono essere la prova di un'intrusione.
# nmap -sT -O localhost Starting Nmap 6.40 ( http://nmap.org ) at 2017-06-07 23:13 UTC Nmap scan report for localhost (127.0.0.1) Host is up (0.000061s latency). Other addresses for localhost (not scanned): 127.0.0.1 rDNS record for 127.0.0.1: centos-01 Not shown: 995 closed ports PORT STATE SERVICE 22/tcp open ssh 25/tcp open smtp 80/tcp open http 111/tcp open rpcbind 2049/tcp open nfs
Per elencare tutte le porte aperte e i programmi associati usa il comando seguente
# netstat -tulpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN
4. Limita le autorizzazioni
Restringi le autorizzazioni per i file e le cartelle di sistema per limitare i rischi.
# chmod 700 /root
# chmod 700 /var/log/audit
# chmod 740 /etc/rc.d/init.d/iptables
# chmod 740 /sbin/iptables
# chmod -R 700 /etc/skel
# chmod 600 /etc/rsyslog.conf
# chmod 640 /etc/security/access.conf
# chmod 600 /etc/sysctl.conf
5. Controllo account per password vuote
Qualsiasi account con una password vuota significa che è aperto per l'accesso non autorizzato a chiunque sul Web e fa parte della sicurezza all'interno di un server Linux. Per controllare gli account con password vuota, usa il comando qui sotto
# cat /etc/shadow | awk -F: '($2==""){print $1}' paul
Per sicurezza, è bene bloccare tutti gli account password vuoti:
# passwd -l paul Locking password for user paul. passwd: Success
6. Regola i parametri del kernel
Sysctl è un'interfaccia per esaminare e modificare dinamicamente i parametri nel sistema operativo Linux. Modifica /etc/sysctl.conf
file per ottimizzare i parametri del kernel
Sysctl è il comando utilizzato per modificare i parametri del kernel in fase di esecuzione.
# sysctl -a
# sysctl -A
# sysctl net.ipv4.conf.all.rp_filter
To load settings, enter:
# sysctl -p
Copia e incolla il seguente contenuto in /etc/sysctl.conf
# Turn on execshield
kernel.exec-shield=1
kernel.randomize_va_space=1
# Enable IP spoofing protection
net.ipv4.conf.all.rp_filter=1
# Disable IP source routing
net.ipv4.conf.all.accept_source_route=0
# Ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1
# Make sure spoofed packets get logged
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# Disable ICMP routing redirects
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv6.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv6.conf.all.send_redirects=0
# Disables the magic-sysrq key
kernel.sysrq = 0
# Turn off the tcp_sack
net.ipv4.tcp_sack = 0
# Turn off the tcp_timestamps
net.ipv4.tcp_timestamps = 0
# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1
# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1
7. Disattiva i servizi indesiderati
È necessario rimuovere tutti i servizi e i daemon indesiderati (servizi eseguiti in background) dall'avvio del sistema che vengono avviati all'avvio in livello di esecuzione 3 .
# chkconfig --list | grep '3:on'
Per disabilitare il servizio, inserisci:
# service serviceName stop
# chkconfig serviceName off
8. Richiedi l'autenticazione per la modalità utente singolo
Si consiglia di richiedere la password di root quando si accede alla modalità utente singolo. Apri /etc/sysconfig/init
file e aggiungi la riga:
SINGLE=/sbin/sulogin
9. Security Enhanced Linux (SELinux)
SELinux è un insieme di regole di sicurezza che determinano quale processo può accedere a quale file, directory, porte, ecc. Ogni file, processo, directory e porta ha un'etichetta di sicurezza speciale chiamata contesti SELinux. Un contesto è semplicemente un nome utilizzato dalla politica di SELinux per determinare se un processo può accedere o meno a un file, una directory o una porta. Per impostazione predefinita, la politica non consente alcuna interazione, quindi regole esplicite garantiscono l'accesso. Se non esiste una regola di autorizzazione, non è consentito l'accesso.
getenforce comando ci dice in quale modalità si trova SELinux.
Possiamo cambiare la modalità SELinux in enforcing cambiando SELINUX=enforcing
in /etc/sysconfig/selinux
Ci sono tre direttive in questo file come spiegato di seguito.
- Applicazione: La politica di sicurezza di SELinux viene applicata.
- Permissivo: SELinux stampa avvisi invece di imporre.
- Disabilitato: SELinux è completamente disabilitato.
Puoi controllare lo stato di SELinux con il comando
# sestatus
SELinux status: disabled
Vedi che è disabilitato. Per abilitarlo, puoi usare
# setenforce enforcing
10. Imposta il firewall con iptables
iptables è un programma applicativo dello spazio utente che consente a un amministratore di sistema di configurare le tabelle fornite da Linux Kernel Firewall e le catene e le regole che memorizza.
a. Chiudi tutte le porte indesiderate
iptables -A INPUT -p tcp --dport PORT_NUMBER -j DROP
b. Blocca IP non validi
iptables -A INPUT -s IP_ADDRESS -j DROP
c. Blocca le connessioni a un'interfaccia di rete
Per bloccare le connessioni da uno specifico indirizzo IP a una specifica interfaccia di rete, usa il comando
# iptables -A INPUT -i ens0 -s 6.6.6.6 -j DROP
d. Elenca le regole di iptables
Puoi vedere tutte le regole di iptables con il comando
iptables -L -n -v
11. Verifica del file system
Tutti i file abilitati per i bit SUID/SGID possono essere utilizzati per attività dannose, quando l'eseguibile SUID/SGID presenta un problema di sicurezza. Tutti gli utenti locali o remoti possono utilizzare tale file.
a. Identifica i binari SUID e SGID indesiderati
find / \( -perm -4000 -o -perm -2000 \) -print
find / -path -prune -o -type f -perm +6000 -ls
b. Identifica i file scrivibili in tutto il mondo
find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
c. Identifica file e cartelle orfani
find /dir -xdev \( -nouser -o -nogroup \) -print
12. Mantieni /boot in sola lettura
Il kernel Linux e i relativi file si trovano nella directory /boot che per impostazione predefinita è di lettura-scrittura. La modifica in sola lettura riduce il rischio di modifiche non autorizzate dei file di avvio critici. Dobbiamo modificare /etc/fstab
file e inserisci la riga sottostante<
LABEL=/boot /boot ext2 defaults,ro 1 2
13. Nega tutti i wrapper TCP
I wrapper TCP possono fornire un metodo semplice e veloce per controllare l'accesso alle applicazioni ad essi collegate. Pertanto si consiglia di bloccare tutte le applicazioni non utilizzate e quindi di autorizzare solo le applicazioni che verranno utilizzate.
Ad esempio, bloccheremo tutte le applicazioni ma solo ssh autorizzato
echo "ALL:ALL" >> /etc/hosts.deny
echo "sshd:ALL" >> /etc/hosts.allow
14. Blocca i cronjob per utenti non autorizzati
Cron viene utilizzato per automatizzare i lavori in un determinato momento. È possibile specificare chi può e chi non può essere in grado di eseguire lavori. Questo è controllato dall'uso di file chiamati /etc/cron.allow
e /etc/cron.deny
. Per bloccare un utente utilizzando cron, aggiungi semplicemente i nomi utente in cron.deny e per consentire a un utente di eseguire cron add nel file cron.allow.
# echo ALL >>/etc/cron.deny
15. Proteggi il server dall'overflow del buffer
Un buffer overflow si verifica quando un programma o un processo tenta di scrivere più dati in un blocco di memoria di lunghezza fissa, o buffer, di quanti il buffer sia allocato per contenere. È importante proteggere nuovamente il tuo server da questo attacco
a. Abilita ExecShield
Aiuta a prevenire la rottura dello stack. In genere, un exploit di overflow del buffer sovrascrive un indirizzo di ritorno in modo che una funzione torni a un indirizzo scelto dall'attaccante. Devi abilitare sul kernel corrente
sysctl -w kernel.exec-shield=1
Puoi anche aggiungere la riga seguente a /etc/sysctl.conf
kernel.exec-shield = 1
b. Verifica/Abilita ASLR
La randomizzazione del layout dello spazio degli indirizzi è una funzionalità di difesa per rendere più difficili gli overflow del buffer. ASLR rende difficile per l'attaccante trovare un indirizzo a cui saltare. Devi abilitare il posizionamento randomizzato della regione della memoria virtuale impostando il runtime per kernel.randomize_va_space
sysctl -q -n -w kernel.randomize_va_space=2
Aggiungi la riga sottostante a /etc/sysctl.conf
se non esiste già
kernel.randomize_va_space = 2
Conclusione
Queste sono alcune delle considerazioni di base per i nuovi utenti che tentano di eseguire i propri server. Tieni presente che i cracker sono sempre un passo avanti; continuano a cercare eventuali buchi da hackerare nel tuo server. È importante riconoscere che, anche se è meglio tardi che mai, le misure di sicurezza diminuiscono di efficacia quanto più si attende per implementarle