Come "chiudere" le porte aperte?


22

Qualche giorno fa ho iniziato a interessarmi molto della mia sicurezza dei dati, finendo nmapcon me stesso:nmap 127.0.0.1

Sorpresa, sorpresa, ho molti servizi attivi che ascoltano localhost:

$ nmap 127.0.0.1
Starting Nmap 5.21 ( http://nmap.org ) at 2013-05-05 00:19 WEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00025s latency).
Not shown: 993 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
53/tcp  open  domain
111/tcp open  rpcbind
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

L'unico che potrei usare è ssh(anche se probabilmente non è ben configurato, terrò la questione su un'altra domanda).

Per quanto ne so il ippprotocollo viene utilizzato da CUPS per condividere le mie stampanti, non ho bisogno di condividerle, basta accedere alle stampanti da un server.

Questo è l'output netstat -lntupdell'utente root, che rimuove gli indirizzi localhost:

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:22              0.0.0.0:*               LISTEN      497/sshd        
tcp        0      0 0.0.0.0:17500           0.0.0.0:*               LISTEN      2217/dropbox    
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      892/smbd        
tcp        0      0 0.0.0.0:50022           0.0.0.0:*               LISTEN      1021/rpc.statd  
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      892/smbd        
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      906/rpcbind     
tcp6       0      0 :::22                   :::*                    LISTEN      497/sshd        
tcp6       0      0 :::42712                :::*                    LISTEN      1021/rpc.statd  
tcp6       0      0 :::445                  :::*                    LISTEN      892/smbd        
tcp6       0      0 :::139                  :::*                    LISTEN      892/smbd        
tcp6       0      0 :::111                  :::*                    LISTEN      906/rpcbind     
udp        0      0 0.0.0.0:51566           0.0.0.0:*                           615/avahi-daemon: r
udp        0      0 0.0.0.0:68              0.0.0.0:*                           7362/dhclient   
udp        0      0 0.0.0.0:111             0.0.0.0:*                           906/rpcbind     
udp        0      0 192.168.1.255:137       0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.67:137        0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:137             0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.255:138       0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.67:138        0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:138             0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:655             0.0.0.0:*                           906/rpcbind     
udp        0      0 0.0.0.0:17500           0.0.0.0:*                           2217/dropbox    
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           615/avahi-daemon: r
udp        0      0 0.0.0.0:34805           0.0.0.0:*                           1021/rpc.statd  
udp6       0      0 :::40192                :::*                                1021/rpc.statd  
udp6       0      0 :::111                  :::*                                906/rpcbind     
udp6       0      0 :::655                  :::*                                906/rpcbind     
udp6       0      0 :::5353                 :::*                                615/avahi-daemon: r
udp6       0      0 :::42629                :::*                                615/avahi-daemon: r

Come configuro quei servizi in modo che ascoltino il mondo esterno solo quando li sto effettivamente usando?


Come vuoi dirlo che li stai usando?
Reactormonk,

avviare personalmente i servizi (con i privilegi dell'utente e una shell padre)
RSFalcon7,

2
Corretto, anche se stai usando CUPS solo dal sistema locale puoi farlo ascoltare solo sulla porta 631 sull'host locale (127.0.0.1). Riesco a eseguire nuovamente nmap utilizzando l'IP effettivo della macchina e non solo 127.0.0.1.
slm

1
un comando migliore da eseguire sarebbe netstat -lntup-l = Listen -n = number -t = tcp -u = udp -p = pid. Mostra quali processi hai in esecuzione e quali porte stanno esponendo. Tutto ciò che è aperto a 127.0.0.1 è inaccessibile a Internet.
frogstarr78,

1
Se non hai bisogno di Samba, disinstallalo semplicemente. Se non ne ha bisogno, si può limitare a l'interfaccia locale (ad esempio eth0?) Con l'aggiunta di smb.confdue direttive bind interfaces only = yese interfaces = eth0.
LSerni,

Risposte:


26

Determina la tua esposizione

Prendendo il tuo output dal netstatcomando, quello che sembra un sacco di servizi è in realtà un elenco molto breve:

$ netstat -lntup | awk '{print $6 $7}'|sed 's/LISTEN//'| cut -d"/" -f2|sort|uniq|grep -v Foreign
avahi-daemon:r
dhclient
dropbox
nmbd
rpcbind
rpc.statd
smbd
sshd

Ottenere una disposizione della terra

Guardando questo elenco ci sono diversi servizi che lascerei da solo.

  • dhclient
    • Il demone del server DHCP responsabile per ottenere il tuo indirizzo IP, deve avere questo.
  • dropbox
    • ovviamente Dropbox, devi avere

Inizia a ridurlo - disabilita Samba

Probabilmente puoi subito disabilitare Samba, rappresenta 2 dei servizi di cui sopra nmbde smbd. È discutibile che ne avresti davvero bisogno in esecuzione su un laptop sia su localhost o il tuo IP di fronte alla tua rete.

Per verificare che siano in esecuzione è possibile utilizzare il seguente comando status:

$ status nmbd
nmbd start/running, process 19457
$ status smbd
smbd start/running, process 19423

Disattivare i servizi può essere fonte di confusione con tutto il flusso che sta succedendo con upstart, /etc/rc.d, quindi potrebbe essere difficile capire quale servizio è sotto quale tecnologia. Per Samba puoi usare il servicecomando:

$ sudo service nmbd stop
nmbd stop/waiting
$ sudo service smbd stop
smbd stop/waiting

Ora sono spenti:

$ status nmbd 
nmbd stop/waiting
$ status smbd 
smbd stop/waiting

Tenerli lontani ... permanentemente

Per farli stare fuori sto usando questo strumento sysv-rc-conf, per gestire i servizi da una console, funziona meglio della maggior parte. Ti consente di verificare quali servizi vuoi eseguire e in quale runlevel dovrebbero essere avviati / arrestati:

$ sudo apt-get install sysv-rc-conf

   ss di sysv-rc-conf

Disabilitare il resto di ciò che NON è necessario

Quindi ora Samba è spento ci resta quanto segue:

  • avahi-daemon
    • parte di zeroconf (plug-n-play), spegnilo
  • rpcbind
    • necessario per NFS: disattivarlo
  • rpc.statd
    • necessario per NFS: disattivarlo

Per i restanti 3 puoi fare le stesse cose che abbiamo fatto anche per Samba per disattivarle.

CUPS?

Per disattivare CUPS, cosa di cui non hai davvero bisogno, puoi seguire la stessa danza di disattivare il servizio e quindi disabilitarlo dall'avvio. Per poter stampare è necessario configurare ciascuna stampante singolarmente sul proprio sistema. Puoi farlo attraverso la system-config-printerGUI.

Rendere questi servizi su richiesta?

Questo è davvero il cuore della tua domanda, ma non c'è davvero una soluzione di proiettile d'argento per rendere questi servizi "intelligenti" in modo che funzionino quando vengono utilizzati, piuttosto che sempre.

# 1 - systemd vs. upstart

Parte di essa è l'attuale divisione tra systemd e upstart . Ecco una buona panoramica delle 2 tecnologie concorrenti qui .

Entrambe le tecnologie stanno cercando di fare cose leggermente diverse, IMO, dati i loro set di funzionalità, systemd sembra orientato maggiormente verso i server mentre upstart sembra orientato maggiormente verso il desktop roll. Nel tempo questo funzionerà da solo, IMO, ed entrambi i servizi saranno stabili e ricchi di funzionalità.

Alla fine entrambi i servizi offriranno su richiesta l'avvio e l'arresto su tutta la linea per tutti i servizi che gestiscono. Funzionalità come StopWhenUnneeded=yesgià esistono systemdad esempio, quindi è solo una questione di tempo fino a quando queste funzionalità non vengono concretizzate.

# 2 - supporto al servizio

Alcuni servizi non supportano l'arresto / avvio molto bene, se non del tutto. Servizi come sshdsembrano avere poco senso funzionare come su richiesta, soprattutto se vengono utilizzati pesantemente. Anche alcuni servizi come Apache forniscono meccanismi interni per far girare più o meno i propri ascoltatori che si gestiscono. Quindi non è chiaro come on-demand fornito da systemdo upstartstanno per integrarsi con questo tipo di servizi.

È davvero necessario?

Sentirai da entrambe le parti che questo è eccessivo o che dovresti adottare un approccio minimalista installando solo ciò di cui hai assolutamente bisogno, ma è davvero una scelta personale. Comprendere che questi servizi ci sono e quello che fanno è davvero ciò che è importante. Alla fine della giornata un computer è uno strumento e, utilizzando un sistema Unix, stai già dicendo che sei disposto a sbirciare dietro la tenda e capire cosa fa battere il tuo computer.

Direi che questo tipo di domande è esattamente lo stato d'animo che ci si dovrebbe impegnare quando si ha a che fare con computer e Unix in generale.

Riferimenti


2
@ RSFalcon7 - Prego! Grazie per la domanda!
slm

12

127.0.0.1 non è il "mondo esterno", si sta guardando all'interno della casa.

Controlla la configurazione del tuo firewall (iptables in Linux oggi), la maggior parte di essi non dovrebbe essere accessibile dall'esterno.

Non eseguire servizi non necessari. Disinstallare tutto il software non richiesto.

Cambia le password per renderle più forti. Controlla il tuo utilizzo del sistema, non andare a caccia di siti Web interessanti a caso. Controlla la configurazione del browser anti-phishing, anti-script, ecc. Rivedi l'utilizzo di SSH e su / sudo.

Ma soprattutto, l'eccessiva paranoia è controproducente. Non rimanere intrappolato dal luccichio della tecnologia .


3
Sono d'accordo con "Non eseguire servizi non necessari". Ma "Disinstallare tutto il software non richiesto.", Sul serio? Cosa dovrebbe aiutare contro?
Hauke ​​Laging

6
@HaukeLaging, come dice il proverbio, "i topi nidificano in un mucchio di vestiti inutilizzati". Qualsiasi software può presentare una vulnerabilità che può essere sfruttata. Se il programma non è presente, quel rischio non esiste. Se non viene utilizzato, il costo è trascurabile. Inoltre, un sistema più semplice è più facile da controllare e mantenere in ordine.
vonbrand,

Grazie per ricordare che 127.0.0.1 non è la preoccupazione esterna . Sono totalmente abbonato per non eseguire servizi di cui non ho bisogno , ma la disinstallazione è un po 'eccessiva, se sono qui sono stati utili in qualche momento
RSFalcon7

2
@ RSFalcon7, se fossero utili (o utili per qualcun altro, dopo tutto sono nella distribuzione) non ha consistenza. Se non lo usi, buttalo. Meno utilizzo del disco, meno aggiornamenti, meno rischi in generale. Se è necessario in un secondo momento, reinstallare.
vonbrand,

3

Sebbene sia possibile "chiudere" singoli servizi, forse potrebbe essere più semplice configurare un firewall. Quasi tutte le distro comuni (Ubuntu, Debian, Centos, ecc.) Hanno il supporto per iptables integrato.

Un semplice set di regole per iniziare: (puoi semplicemente digitarli al prompt dei comandi; per renderli permanenti aggiungili agli script di avvio o facci sapere quale distro stai usando. Su Centos ad esempio: system-config -firewall è una buona interfaccia utente per la configurazione delle regole di iptables)

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

Fondamentalmente - consenti ssh inbound; lascia cadere tutto il resto.

La tua catena INPUT ora appare così:

  • Se un pacchetto sta arrivando nel mio computer per "ssh", consentitelo
  • Se un pacchetto non corrisponde a nessuna delle regole precedenti, buttalo via.

Quindi, in un secondo momento, supponiamo che tu voglia consentire 'samba' (condivisione di file Windows): potresti eseguire

iptables -I INPUT-p tcp --dport 465 -j ACCEPT

Le -Ianteprime e la regola alla lista; -Aaggiunge una regola. Quindi la tua catena ora appare così:

  • Se un pacchetto sta arrivando nel mio computer per "samba", consentitelo
  • Se un pacchetto sta arrivando nel mio computer per "ssh", consentitelo
  • Se un pacchetto non corrisponde a nessuna delle regole precedenti, buttalo via.

La INPUTcatena si riferisce ai pacchetti destinati al tuo sistema. Altre catene sono OUTPUTper pacchetti dal tuo computer, per andare su Internet e FORWARDper pacchetti che sono instradati attraverso il tuo computer (ovvero pacchetti che "transitano" sul tuo computer, come l'area di transito di un aeroporto - cose che non sono INPUTperché non stanno entrando nel tuo computer ).

Come nota di separazione: nmap'ing 127.0.0.1 non è molto utile; molti servizi sono accessibili solo da 127.0.0.1 e nessun altro indirizzo. Se non hai un'altra macchina da cui puoi eseguire nmap - prova a utilizzare Gibson Research 'Shields UP! ( https://www.grc.com/shieldsup ) - che è un nmap-lite online gratuito. O aggiungi un commento con il tuo IP / e-mail e ti mapperò :)

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.