Cosa si può fare per proteggere Ubuntu Server?


35

Ho un progetto per proteggere Ubuntu Server il più possibile. Il server è un server di web hosting. Il server eseguirà LAMP, Mail e DNS.


Quali servizi saranno in esecuzione?
Wojox,

LAMP, Mail, DNS
One Zero

Ho creato un cheat sheet di Ubuntu Server e vorrei condividerlo con te. Le prime pagine sono comandi generali di Linux, quindi pacchetti server specifici e l'ultima pagina è una lista di controllo di sicurezza del server. L'elenco di controllo unisce suggerimenti e indurimenti da molti siti Web. Spero che ti aiuti! Concesso in licenza con la licenza WTFPL . Puoi visualizzare / scaricare / qualunque sia l'elenco di controllo qui . Lo aggiorno di volta in volta.
Noah Krasser,

Risposte:


43

Ecco un elenco di cose che faccio per proteggere il mio server.

  1. Attiva UFW ( sudo ufw enable) e consenti solo le porte effettivamente utilizzate. ( sudo ufw allow 80)
  2. Assicurati che MySQL consenta solo connessioni da localhost.
  3. Abilita TLS sui servizi di posta. Anche se è un certificato autofirmato. Non vuoi che le password vengano inviate in chiaro.
  4. Installa i bloccanti ssh bruteforce come denyhosts o fail2ban. ( sudo apt-get install denyhosts)
  5. Cerca di creare solo accessi basati su chiavi ssh.
  6. Scopri AppArmor. Se usi configurazioni abbastanza vanigliate, è estremamente facile. Assicurati solo che sia acceso. Aiuterà a ridurre gli exploit zero-day.
  7. A seconda dell'accesso fisico al server, potresti persino voler esaminare la crittografia dei dati sul disco rigido.
  8. Segui altri consigli in questo link. EDIT: ho dimenticato di modificare questo quando non avevo abbastanza reputazione per aggiungere più collegamenti. Il link qui inteso è l'ultimo link qui sotto.
  9. Non fidarti mai dei tuoi utenti. Se hai più utenti con accesso al sistema, bloccali. Se devi dare loro l'accesso sudo, dai loro solo ciò di cui hanno bisogno.
  10. Usa il senso comune. Pensa seriamente a come entreresti se fossi bloccato. Quindi chiudere quei buchi.

Qualche altra cosa da considerare. Molte persone dimenticano l'accesso fisico. Tutte le configurazioni software nel mondo non significano nulla se posso entrare fisicamente con un LiveCD e rubare i tuoi dati. Attenzione all'ingegneria sociale. Poni domande per verificare chi è al telefono e assicurarti che abbiano l'autorizzazione per effettuare la richiesta che stanno facendo.

Dato che sono ancora un "nuovo" utente, non posso pubblicare più di 2 link. Puoi leggere di più su questo argomento qui: https://help.ubuntu.com/12.04/serverguide/index.html e prestare particolare attenzione a https://help.ubuntu.com/12.04/serverguide/security.html


2
Un'alternativa all'utilizzo di UFW (mentre si utilizzano ancora i firewall predefiniti in Ubuntu) è quella di bloccare il sistema con iptablesregole estremamente specifiche per impedire l'accesso esterno a qualsiasi servizio che non si intende utilizzare, se si dispone di uno strano- installazione di palla che richiede routing avanzato e roba comunque.
Thomas Ward

2
@LordofTime concordato. In realtà io uso iptables me stesso, ma uww va bene per la maggior parte delle installazioni di base. Inoltre UFW è più o meno solo un wrapper per le configurazioni iptables più comuni. Il sistema sottostante è sempre lo stesso.
Patrick Regan,

2
+1 per ufw, non sei un nuovo utente, sei membro da 1 anno: p
Tachyons

1
In effetti, volevo solo sottolineare che in alcuni casi iptables avrà una migliore usabilità su ufw in alcuni casi
Thomas Ward

1
Prendi BastilleLinux è anche una buona suite per rafforzare la sicurezza.
Plnnk,

13

Memoria condivisa sicura

/ dev / shm può essere utilizzato in un attacco contro un servizio in esecuzione, come httpd. Modifica / etc / fstab per renderlo più sicuro.

Apri una finestra Terminale e inserisci quanto segue:

sudo vi /etc/fstab

Aggiungi la seguente riga e salva. Sarà necessario riavviare per rendere effettiva questa impostazione:

tmpfs     /dev/shm     tmpfs     defaults,noexec,nosuid     0     0

Indurire la rete con le impostazioni di sistema

Il file /etc/sysctl.conf contiene tutte le impostazioni di sysctl. Impedire il routing di origine dei pacchetti in entrata e registrare gli IP non validi immettere quanto segue in una finestra del terminale

sudo vi /etc/sysctl.conf

Modifica il file /etc/sysctl.conf e annulla commento o aggiungi le seguenti righe:

# IP Spoofing protection
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignore ICMP broadcast requests
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0 
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Ignore send redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Block SYN attacks
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Log Martians
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0 
net.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings
net.ipv4.icmp_echo_ignore_all = 1

Per ricaricare sysctl con le ultime modifiche, inserisci:

sudo sysctl -p

Prevenire lo spoofing IP

Apri un Terminale e inserisci quanto segue:

sudo vi /etc/host.conf

Aggiungi o modifica le seguenti righe:

order bind,hosts
nospoof on

Indurisci PHP per sicurezza

Modifica il file php.ini:

sudo vi /etc/php5/apache2/php.ini

Aggiungi o modifica le seguenti righe:

disable_functions = exec,system,shell_exec,passthru
register_globals = Off
expose_php = Off
magic_quotes_gpc = On

Web Application Firewall - ModSecurity

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Proteggi dagli attacchi DDOS (Denial of Service) - ModEvasive

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Esegui la scansione dei log e bandisci gli host sospetti - DenyHosts e Fail2Ban

@DenyHosts

DenyHosts è un programma Python che blocca automaticamente gli attacchi SSH aggiungendo voci a /etc/hosts.deny. DenyHosts informerà inoltre gli amministratori Linux di offendere host, utenti attaccati e accessi sospetti.

Apri un Terminale e inserisci quanto segue:

sudo apt-get install denyhosts

Dopo l'installazione modificare il file di configurazione /etc/denyhosts.conf e modificare l'e-mail e altre impostazioni come richiesto.

Per modificare le impostazioni e-mail dell'amministratore, aprire una finestra del terminale e inserire:

sudo vi /etc/denyhosts.conf

Modificare i seguenti valori come richiesto sul server:

ADMIN_EMAIL = root@localhost
SMTP_HOST = localhost
SMTP_PORT = 25
#SMTP_USERNAME=foo
#SMTP_PASSWORD=bar
SMTP_FROM = DenyHosts nobody@localhost
#SYSLOG_REPORT=YES 

@ Fail2Ban

Fail2ban è più avanzato di DenyHosts in quanto estende il monitoraggio del registro ad altri servizi tra cui SSH, Apache, Courier, FTP e altro.

Fail2ban esegue la scansione dei file di registro e vieta gli IP che mostrano segni dannosi: troppi errori di password, ricerca di exploit, ecc.

In genere Fail2Ban veniva quindi utilizzato per aggiornare le regole del firewall per rifiutare gli indirizzi IP per un determinato periodo di tempo, sebbene fosse possibile configurare qualsiasi altra azione arbitraria. Fail2Ban è dotato di filtri per vari servizi (apache, corriere, ftp, ssh, ecc.).

Apri un Terminale e inserisci quanto segue:

sudo apt-get install fail2ban

Dopo l'installazione, modifica il file di configurazione /etc/fail2ban/jail.local e crea le regole del filtro come richiesto.

Per modificare le impostazioni aprire una finestra del terminale e inserire:

sudo vi /etc/fail2ban/jail.conf

Attiva tutti i servizi che desideri che fail2ban controlli monitorando enabled = false in * enabled = true *

Ad esempio, se si desidera abilitare il monitoraggio SSH e vietare il jail, trovare la riga seguente e modificare abilitato da false a true . Questo è tutto.

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3

Se desideri ricevere e-mail da Fail2Ban se gli host sono vietati, modifica la seguente riga nel tuo indirizzo e-mail.

destemail = root@localhost

e cambia la seguente riga da:

action = %(action_)s

a:

action = %(action_mwl)s

È inoltre possibile creare filtri delle regole per i vari servizi che fail2ban deve monitorare e che non sono forniti per impostazione predefinita.

sudo vi /etc/fail2ban/jail.local

Buone istruzioni su come configurare fail2ban e creare i vari filtri sono disponibili su HowtoForge . Fai clic qui per un esempio

Al termine con la configurazione di Fail2Ban riavviare il servizio con:

sudo /etc/init.d/fail2ban restart

Puoi anche controllare lo stato con.

sudo fail2ban-client status

Verifica i rootkit: RKHunter e CHKRootKit.

Sia RKHunter che CHKRootkit sostanzialmente fanno la stessa cosa: controlla il tuo sistema per i rootkit. Nessun danno nell'uso di entrambi.

Apri un Terminale e inserisci quanto segue:

sudo apt-get install rkhunter chkrootkit

Per eseguire chkrootkit, apri una finestra del terminale e inserisci:

sudo chkrootkit

Per aggiornare ed eseguire RKHunter. Apri un Terminale e inserisci quanto segue

sudo rkhunter --update
sudo rkhunter --propupd
sudo rkhunter --check

Scansione porte aperte - Nmap

Nmap ("Network Mapper") è un'utilità gratuita e open source per il rilevamento della rete e il controllo della sicurezza.

Apri un Terminale e inserisci quanto segue:

sudo apt-get install nmap

Scansiona il tuo sistema alla ricerca di porte aperte con:

nmap -v -sT localhost

Scansione SYN con il seguente:

sudo nmap -v -sS localhost

Analizza i file di registro di sistema - LogWatch

Logwatch è un sistema di analisi dei log personalizzabile. Logwatch analizza i registri del sistema e crea un rapporto che analizza le aree specificate. Logwatch è facile da usare e funzionerà direttamente dal pacchetto sulla maggior parte dei sistemi.

Apri un Terminale e inserisci quanto segue:

sudo apt-get install logwatch libdate-manip-perl

Per visualizzare l'output di logwatch usare meno:

sudo logwatch | less

Per inviare tramite e-mail un rapporto logwatch degli ultimi 7 giorni a un indirizzo e-mail, immettere quanto segue e sostituire mail@domain.com con l'e-mail richiesta. :

sudo logwatch --mailto mail@domain.com --output mail --format html --range 'between -7 days and today' 

Controlla la sicurezza del tuo sistema - Tiger.

Tiger è uno strumento di sicurezza che può essere utilizzato sia come controllo di sicurezza che come sistema di rilevamento delle intrusioni.

Apri un Terminale e inserisci quanto segue:

sudo apt-get install tiger

Per eseguire la tigre, inserisci:

sudo tiger

Tutti gli output di Tiger possono essere trovati in / var / log / tiger

Per visualizzare i rapporti sulla sicurezza della tigre, apri un Terminale e inserisci quanto segue:

sudo less /var/log/tiger/security.report.*

Per ulteriori informazioni


PHP: magic_quotes_gpc = On. Le citazioni di Magic sono state prima deprecate e poi rimosse: php.net/manual/en/security.magicquotes.whynot.php
Tim

13

Da quando hai detto che si tratta di web-hosting-server ... Vorrei condividere le mie migliori pratiche ed esperienze di 5 lunghi anni nella linea di web hosting.

  1. Dalle mie esperienze passate, piuttosto che andare subito nell'inferno della configurazione, dovresti prima assemblare le uve basse di sicurezza appese come indicato nell'articolo dato.

  2. Dal momento che stai avendo LAMP, quindi devi essere molto cauto su PHP e le sue impostazioni php.ini. Questo è un buon collegamento per proteggere PHP. PHP ha dei superpoteri che possono diventare loop di sicurezza se non configurati correttamente.

  3. Puoi usare un cron job per verificare quando i tuoi file sono stati modificati senza la tua autorizzazione e possibilmente hackerati; usando questo cron job . Preferisco Notepad ++ per confrontare i risultati cron (scarica direttamente l'email cron dal tuo server web e apri in Notepad ++).

  4. Se vuoi installare qualche SEM, allora cPanel è il migliore (comunque pagato). Webmin e zpanel sono ottime alternative gratuite. Webmin è meglio perché almeno usa certificati autofirmati e aggiunge sicurezza.

  5. Se vuoi che qualcosa funzioni subito, puoi scegliere Turnkey Linux. Si basa su Ubuntu, estremamente facile da implementare e flessibile per le tue esigenze. Con pochissimo sforzo ottieni la sicurezza fuori dalla scatola. Questo è il loro stack LAMP . Personalmente uso e preferisco solo questo.

  6. Se stai iniziando da zero, puoi anche installare ISPconfig3. Istruzioni qui .

  7. puoi testare la tua sicurezza cercando di penetrare la tua sicurezza usando Back-Track-Linux .

  8. mantenere complesse password lunghe e casuali. Non archiviarli su PC. prendi nota. Utilizzare un CD live per accedere a questi accessi.

  9. ottenere un software di protezione della forza bruta come fail2ban.

  10. Non eseguire quei demoni che non ti servono.

  11. Blocca tutte le porte non necessarie . fare molta attenzione con la porta SSH (22).

  12. Procurati un IP statico sul sistema attraverso il quale gestirai il server. Apporta la maggior parte delle cose al blocco IP e consenti solo al tuo IP particolare di accedere a quei luoghi di configurazione come la porta 22.

Alla fine della giornata ... lavora con la massima tranquillità, non emozionarti con l'installazione e applicare il buon senso ti porta ben oltre.

**My heartiest best wishes to you. good luck.**

1
PHP può anche essere pericoloso quando si fida dell'input dell'utente (ad esempio sql injection).
NoBugs,

@NoBugs Sono assolutamente d'accordo con questo punto. Non è possibile comprimere tutto in un'unica risposta. La mia risposta contiene molti collegamenti ipertestuali e in quanto tali questi siti Web contenenti quelle pagine sono davvero molto utili. Spero che la mia risposta e i collegamenti inclusi aiutino la comunità :)
Bhavesh Diwan,

2
# 9: No, i passowrds ramdom sono cattivi, la chiave è nella lunghezza , cioè. "D0g ....................." è più forte di "PrXyc.N (n4k77 # L! EVdAfp9". Spiegazione su spiegatoxkcd.com/2011/08/10 / password-
strong

2
@papukaija ti consiglio di google su brute force attackse dictionary attacks.. La password lunga casuale è l'unico modo per proteggerti da tali attacchi.
Bhavesh Diwan,

6

Approfitta del progetto Bastille Linux.

Fornisce uno strumento interattivo per eseguire ulteriori misure di rafforzamento della sicurezza per aumentare la sicurezza globale e ridurre la suscettibilità al compromesso per il sistema Ubuntu (da Bastille Linux ).

Offre una funzionalità di valutazione e reporting, in modo da poter dire quali parti del sistema non sono bloccate. Esamina il sistema in sola lettura, riferendo sullo stato di ciascuno dei suoi elementi di indurimento. Ad esempio, Bastille potrebbe verificare se il server DNS è bloccato in una prigione chroot, se telnet è spento o anche se le password devono avere una buona lunghezza. Puoi dare un'occhiata a una demo solo Web di questo tramite questo link (maggiori informazioni ).

Puoi avere un'anteprima della demo Web (solo) qui .

BastillleLinux


1
Posso assecondare quella raccomandazione. Per l'esecuzione di host esposti (ad esempio server Web), Bastille contribuisce notevolmente alla protezione del sistema.
Floyd,

Sembra simile al sistema SELinux che trovi su CentOS / Redhat ma scommetto che SELinux è più moderno.
Djangofan,

3

Utilizzare nmapsu tutte le interfacce sulla macchina, in modo da sapere quali servizi si eseguono sulla macchina. Questo è uno strumento essenziale per la sicurezza.

Rimuovi tutti i servizi che non ti servono sulle tue interfacce esterne. Puoi configurare MySQL per l'ascolto solo su interfacce specifiche, come localhost.

Usa ufw per proteggere il tuo servizio SSH (e possibili altri) in modo che non consenta troppe connessioni (fallite) al minuto dalla stessa macchina. Ciò renderà più difficili gli attacchi di forza bruta. Modificare il numero di porta non è così utile, solo oscurità, nessuna sicurezza.

Sii restrittivo con il numero di account sul tuo computer. Inoltre, non installare più pacchetti / programmi di quelli effettivamente utilizzati. Installa solo client X11, non un server X11.

Consenti solo ssh-login alla macchina con certificati digitali, nessuna password. Ciò renderà anche gli attacchi di forza bruta difficili / impossibili.



0

La sicurezza ha sempre un prezzo. Stabilire alcuni confini realistici ti aiuterà a raggiungere i tuoi obiettivi. Vorrei considerare i seguenti aspetti:

  • Contro cosa ti stai proteggendo (che tipo di cattivo, qual è il suo budget)?
  • Quali sono i tuoi vettori di attacco?

Controllando tutti i collegamenti che sono pubblicati qui, penso che questo dovrebbe essere aggiunto. Va nel dettaglio non solo su come configurare il software, ma anche sul piano di sicurezza. Inoltre, ogni comando da eseguire viene spiegato con una fonte.

Protezione di un server Web Ubuntu su Xenial 16.04


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.