Wie kann ich offene Ports "schließen"?

22

Vor ein paar Tagen habe ich angefangen, nmapmich sehr um meine Datensicherheit zu kümmern.nmap 127.0.0.1

Überraschung, Überraschung, ich habe viele aktive Dienste, um localhost zu hören:

$ 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

Das einzige, das ich verwenden könnte , ist ssh(obwohl es wahrscheinlich nicht gut konfiguriert ist, werde ich diese Angelegenheit auf eine andere Frage beschränken).

Soweit ich weiß ipp, verwendet CUPS das Protokoll, um meine Drucker freizugeben. Ich muss sie nicht freigeben, sondern greife nur von einem Server auf Drucker zu.

Dies ist die Ausgabe des netstat -lntupRoot-Benutzers, der die localhost-Adressen entfernt:

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

Wie konfiguriere ich diese Dienste so, dass sie nur dann die Außenwelt abhören, wenn ich sie tatsächlich benutze?

RSFalcon7
quelle
Wie möchten Sie sagen, dass Sie sie verwenden?
Reactormonk
Starten der Dienste selbst (mit Benutzerberechtigungen und einer übergeordneten Shell)
RSFalcon7
2
Richtig, auch wenn Sie CUPS nur vom lokalen System aus verwenden, können Sie es nur Port 631 auf dem lokalen Host (127.0.0.1) überwachen lassen. Ich würde die nmap mit der tatsächlichen IP des Computers und nicht nur mit 127.0.0.1 erneut ausführen.
slm
1
Ein besserer Befehl wäre netstat -lntup-l = listen -n = number -t = tcp -u = udp -p = pid. Zeigt an, welche Prozesse ausgeführt werden und welche Ports verfügbar gemacht werden. Alles, was für 127.0.0.1 offen ist, ist für das Internet nicht zugänglich.
Frogstarr78
1
Wenn Sie Samba nicht benötigen, deinstallieren Sie es einfach. Wenn Sie es benötigen, können Sie es auf die lokale Schnittstelle beschränken (z eth0. B. ?), Indem Sie smb.confdie beiden Anweisungen bind interfaces only = yesund hinzufügen interfaces = eth0.
LSerni

Antworten:

26

Bestimmen Sie Ihre Exposition

Unter Berücksichtigung Ihrer Ausgabe aus dem netstatBefehl ist eine sehr kurze Liste, die nach vielen Diensten aussieht:

$ 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

Sich ein Stück Land zulegen

Wenn ich mir diese Liste ansehe, gibt es einige Dienste, die ich in Ruhe lassen würde.

  • dhclient
    • Der DHCP-Server-Daemon, der für das Abrufen Ihrer IP-Adresse verantwortlich ist, muss über diese Adresse verfügen.
  • Dropbox
    • offensichtlich dropbox, muss haben

Reduziere es - deaktiviere Samba

Sie können wahrscheinlich Samba von Anfang an deaktivieren, es macht 2 der oben genannten Dienste aus nmbdund smbd. Es ist fraglich, ob das wirklich auf einem Laptop ausgeführt werden muss, egal ob auf dem Localhost oder auf Ihrer IP-Adresse in Ihrem Netzwerk.

Um zu überprüfen, ob sie ausgeführt werden, können Sie den folgenden Befehl verwenden status:

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

Das Ausschalten von Diensten kann verwirrend sein, wenn man den aktuellen Geschäftsverlauf mit /etc/rc.d betrachtet. Daher kann es schwierig sein, herauszufinden, welcher Dienst unter welcher Technologie ausgeführt wird. Für Samba können Sie den serviceBefehl verwenden:

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

Jetzt geht es los:

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

Halten Sie sie auf Dauer fern

Um sie davon abzuhalten, benutze ich dieses Tool. Um sysv-rc-confDienste von einer Konsole aus zu verwalten, funktioniert es besser als die meisten anderen. Hier können Sie überprüfen, welche Dienste Sie ausführen möchten und auf welcher Run-Ebene sie gestartet / gestoppt werden sollen:

$ sudo apt-get install sysv-rc-conf

   ss von sysv-rc-conf

Deaktivieren Sie den Rest dessen, was NICHT benötigt wird

Also, jetzt, wo Samba weg ist, bleibt uns folgendes übrig:

  • Avahi-Daemon
    • Teil von ZeroConf (Plug-n-Play), schalten Sie es aus
  • rpcbind
    • benötigt für NFS - schalten Sie es aus
  • rpc.statd
    • benötigt für NFS - schalten Sie es aus

Für die restlichen 3 kannst du die gleichen Dinge tun, die wir auch für Samba getan haben, um sie auszuschalten.

TASSEN?

Zum Deaktivieren von CUPS, das Sie übrigens nicht wirklich benötigen, können Sie den gleichen Vorgang ausführen, bei dem Sie den Dienst deaktivieren und anschließend den Start deaktivieren. Um drucken zu können, müssen Sie jeden Drucker einzeln auf Ihrem System einrichten. Sie können dies über die system-config-printerGUI tun .

Machen Sie diese Dienste auf Anfrage?

Dies ist wirklich der Kern Ihrer Frage, aber es gibt keine Patentlösung, um diese Dienste "intelligent" zu machen, damit sie ausgeführt werden, wenn sie verwendet werden, und nicht die ganze Zeit.

# 1 - systemd vs. upstart

Ein Teil davon ist die aktuelle Aufteilung zwischen systemd und upstart . Es gibt einen guten Überblick über die 2 konkurrierenden Technologien hier .

Beide Technologien versuchen, etwas andere Dinge zu tun, IMO scheint systemd aufgrund ihrer Funktionsvielfalt eher auf Server ausgerichtet zu sein, während Upstart eher auf die Desktop-Rolle abzielt. Mit der Zeit wird dies von selbst funktionieren, IMO, und beide Dienste werden stabil und funktionsreich sein.

Schließlich werden beide Dienste bei Bedarf für alle von ihnen verwalteten Dienste ein umfassendes Starten und Stoppen anbieten. Funktionen, wie sie beispielsweise StopWhenUnneeded=yesbereits vorhanden sind systemd, sind nur eine Frage der Zeit, bis diese Funktionen umgesetzt sind.

# 2 - Serviceunterstützung

Einige Dienste unterstützen das Stoppen / Starten nicht sehr gut, wenn überhaupt. Dienste wie sshdscheinen wenig sinnvoll zu sein, um sie bei Bedarf auszuführen, insbesondere wenn sie intensiv genutzt werden. Einige Dienste wie Apache stellen Mechanismen in sich bereit, um mehr oder weniger eigene Listener zu aktivieren, die sich selbst verwalten. Es ist daher unklar, wie On-Demand- Dienste von diesen Arten von Diensten bereitgestellt werden systemdoder upstartsich in diese integrieren werden.

Ist das wirklich nötig?

Sie werden von beiden Seiten hören, dass dies übertrieben ist oder dass Sie nur das installieren sollten, was Sie unbedingt benötigen, aber es ist wirklich eine persönliche Entscheidung. Zu verstehen, dass diese Dienste vorhanden sind und was sie tun, ist wirklich wichtig. Letztendlich ist ein Computer ein Werkzeug, und wenn Sie ein Unix-System verwenden, sagen Sie bereits, dass Sie bereit sind, einen Blick hinter die Kulissen zu werfen und zu verstehen, was Ihren Computer zum Ticken bringt.

Ich würde sagen, dass diese Art der Befragung genau die Denkweise ist, die man im Umgang mit Computern und Unix im Allgemeinen anstreben sollte.

Verweise

slm
quelle
2
@ RSFalcon7 - gerne geschehen! Danke für die Frage!
SLM
12

127.0.0.1 ist nicht die "Außenwelt", es schaut sich im Haus um.

Überprüfen Sie Ihre Firewall-Konfiguration (iptables in Linux heute). Die meisten von ihnen sollten nicht von außen zugänglich sein.

Führen Sie keine Dienste aus, die Sie nicht benötigen. Deinstallieren Sie alle nicht benötigten Programme.

Ändern Sie die Passwörter , um sicherer zu sein. Überprüfen Sie die Nutzung des Systems und verfolgen Sie keine interessanten Websites nach dem Zufallsprinzip. Überprüfen Sie die Konfiguration des Browsers (Anti-Phising, Anti-Scripts usw.). Überarbeiten Sie die Verwendung von SSH und su / sudo.

Vor allem aber ist exzessive Paranoia kontraproduktiv. Lass dich nicht vom Glanz der Technologie fangen .

vonbrand
quelle
3
Ich bin einverstanden mit "Führen Sie keine Dienste aus, die Sie nicht benötigen". Aber "Alle nicht benötigten Programme deinstallieren.", Im Ernst? Wogegen soll das helfen?
Hauke ​​Laging
6
@HaukeLaging, wie das Sprichwort sagt, "Mäuse nisten in Haufen unbenutzter Kleidung". Jede Software kann eine Sicherheitsanfälligkeit aufweisen, die ausgenutzt werden kann. Wenn das Programm nicht vorhanden ist, besteht dieses Risiko nicht. Wenn es nicht verwendet wird, sind die Kosten vernachlässigbar. Außerdem ist ein einfacheres System leichter zu überwachen und in Ordnung zu halten.
Vonbrand
Dank daran erinnern, dass 127.0.0.1 nicht von außen woruld ist . Ich abonniere völlig, dass keine Dienste ausgeführt werden, die ich nicht benötige , aber die Deinstallation ist ein bisschen übertrieben, wenn sie hier sind, waren sie in einer Zeit nützlich
RSFalcon7
2
Wenn sie @ RSFalcon7, waren nützlich (oder nützlich sind , für jemand anderen, sie sind in der Verteilung , nachdem alle) ist ohne consecuence. Wenn Sie es nicht benutzen, werfen Sie es. Weniger Festplattenverbrauch, weniger Aktualisierung, insgesamt weniger Risiko. Wenn Sie es später benötigen, installieren Sie es erneut.
Vonbrand
3

Sie können zwar einzelne Dienste "schließen", es ist jedoch möglicherweise einfacher, eine Firewall einzurichten. Fast alle gängigen Distributionen (Ubuntu, Debian, Centos usw.) unterstützen integrierte iptables.

Ein einfacher Regelsatz für den Anfang: (Sie können diese einfach an einer Eingabeaufforderung eingeben; um sie dauerhaft zu machen, fügen Sie sie Ihren Startskripten hinzu oder teilen Sie uns mit, welche Distribution Sie verwenden. Auf Centos zum Beispiel: system-config -Firewall ist eine gute Benutzeroberfläche zum Konfigurieren von Iptables-Regeln.

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

Grundsätzlich - erlaube ssh inbound; alles andere fallen lassen.

Ihre INPUT-Kette sieht jetzt so aus:

  • Wenn ein Paket für 'ssh' auf meinen Computer gelangt, lassen Sie es zu
  • Wenn ein Paket keiner der vorherigen Regeln entspricht, werfen Sie es einfach weg.

Sagen Sie dann zu einem späteren Zeitpunkt, Sie möchten "Samba" (Windows-Dateifreigabe) zulassen: Sie könnten ausführen

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

Das -IVoranstellen und Regeln der Liste; -Ahängt eine Regel an. So sieht deine Kette jetzt aus:

  • Wenn ein Paket für "Samba" auf meinen Computer gelangt, lassen Sie es zu
  • Wenn ein Paket für 'ssh' auf meinen Computer gelangt, lassen Sie es zu
  • Wenn ein Paket keiner der vorherigen Regeln entspricht, werfen Sie es einfach weg.

Die INPUTKette bezieht sich auf Pakete, die für Ihr System bestimmt sind. Andere Ketten sind OUTPUTfür Pakete von Ihrem Computer, die ins Internet gehen, und FORWARDfür Pakete, die über Ihren Computer geleitet werden (das sind Pakete, die Ihren Computer wie den Transitbereich eines Flughafens "durchlaufen" - Dinge, die nicht darauf zurückzuführen sind, INPUTdass sie nicht in Ihren Computer gelangen ).

Als Abschiedsnotiz: nmap'ing 127.0.0.1 ist nicht sehr nützlich; Viele Dienste sind nur über 127.0.0.1 und keine andere Adresse zugänglich. Wenn Sie keinen anderen Rechner haben, können Sie nmap ausführen - versuchen Sie es mit Gibson Research 'Shields UP! ( https://www.grc.com/shieldsup ) - das ist eine kostenlose online nmap-lite. Oder füge einen Kommentar mit deiner IP / E-Mail hinzu und ich melde dich :)

Grynn
quelle