Jak „zamknąć” otwarte porty?


22

Kilka dni temu zacząłem bardzo troszczyć się o moje bezpieczeństwo danych, kończąc na nmap:nmap 127.0.0.1

Niespodzianka, niespodzianka, mam wiele aktywnych usług, słuchaj 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

Jedyne, czego mógłbym użyć, to ssh(chociaż prawdopodobnie nie jest dobrze skonfigurowane, przejdę do innego pytania).

O ile wiem ippprotokół jest używany przez CUPS do udostępniania moich drukarek, nie muszę ich udostępniać, po prostu uzyskuję dostęp do drukarek z serwera.

Jest to wynik działania netstat -lntupużytkownika root usuwającego adresy 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

Jak skonfigurować te usługi, aby słuchały świata zewnętrznego tylko wtedy, gdy faktycznie z nich korzystam?


Jak chcesz powiedzieć, że ich używasz?
Reactormonk

samodzielne uruchamianie usług (z uprawnieniami użytkownika i powłoką nadrzędną)
RSFalcon7

2
Prawidłowo, również jeśli używasz CUPS tylko z systemu lokalnego, możesz ustawić, aby nasłuchiwał tylko portu 631 na localhost (127.0.0.1). Uruchomiłbym ponownie nmap przy użyciu rzeczywistego adresu IP maszyny, a nie tylko 127.0.0.1.
slm

1
lepszym poleceniem do uruchomienia byłoby netstat -lntup-l = nasłuch -n = liczba -t = tcp -u = udp -p = pid. Pokazuje, jakie procesy masz uruchomione i jakie porty ujawniają. Wszystko, co jest otwarte do wersji 127.0.0.1, jest niedostępne w Internecie.
frogstarr78

1
Jeśli nie potrzebujesz Samby, po prostu ją odinstaluj. Jeśli nie jest to potrzebne, można je ograniczyć do interfejsu lokalnego (np eth0?) Dodając w smb.confdwóch dyrektywach bind interfaces only = yesi interfaces = eth0.
LSerni

Odpowiedzi:


26

Określ swoją ekspozycję

Biorąc wynik działania netstatpolecenia, wygląda to na bardzo krótką listę:

$ 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

Uzyskiwanie ukształtowania terenu

Patrząc na tę listę, jest kilka usług, które zostawiłbym w spokoju.

  • dhclient
    • Demon serwera DHCP odpowiedzialny za uzyskanie twojego adresu IP, musi go mieć.
  • Dropbox
    • oczywiście Dropbox, trzeba mieć

Zacznij zmniejszać - wyłącz Sambę

Prawdopodobnie możesz od razu wyłączyć nietoperza Sambę, stanowi ona 2 z powyższych usług nmbdi smbd. Jest wątpliwe, czy naprawdę potrzebujesz tego na laptopie, niezależnie od tego, czy jest to host lokalny, czy adres IP skierowany do sieci.

Aby sprawdzić, czy są uruchomione, możesz użyć następującego polecenia status:

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

Wyłączanie usług może być mylące z całym ciągłym rozwojem działalności związanej z upstartem /etc/rc.d, więc może być trudno ustalić, która usługa jest zgodna z jaką technologią. W przypadku Samby możesz użyć servicepolecenia:

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

Teraz są wyłączone:

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

Trzymanie ich z daleka ... na stałe

Aby je wyłączyć, korzystam z tego narzędzia sysv-rc-conf, aby zarządzać usługami z konsoli, działa lepiej niż większość. Pozwala sprawdzić, które usługi chcesz uruchomić i na jakim poziomie działania powinny zostać uruchomione / zatrzymane:

$ sudo apt-get install sysv-rc-conf

   ss sysv-rc-conf

Wyłączam resztę tego, co NIE jest potrzebne

Więc teraz Samba jest wyłączony, pozostaje nam:

  • avahi-daemon
    • część zeroconf (plug-n-play), wyłącz ją
  • rpcbind
    • potrzebne do NFS - wyłącz
  • rpc.statd
    • potrzebne do NFS - wyłącz

W przypadku pozostałych 3 możesz zrobić to samo, co Samba, aby je wyłączyć.

KUBKI?

Aby wyłączyć CUPS, którego tak naprawdę nie potrzebujesz, możesz wykonać ten sam taniec, wyłączając usługę, a następnie wyłączając ją z uruchamiania. Aby móc drukować, musisz skonfigurować każdą drukarkę indywidualnie w systemie. Możesz to zrobić za pomocą system-config-printerGUI.

Robisz te usługi na żądanie?

To jest naprawdę sedno twojego pytania, ale tak naprawdę nie ma srebrnego rozwiązania, które uczyni te usługi „inteligentnymi”, aby działały, gdy są używane, a nie przez cały czas.

# 1 - systemd vs. upstart

Część z nich to obecny podział na systemd i upstart . Jest to dobry przegląd z 2 konkurencyjnymi technologiami tutaj .

Obie technologie próbują robić nieco inne rzeczy, IMO, biorąc pod uwagę ich zestaw funkcji, systemd wydaje się bardziej ukierunkowany na serwery, podczas gdy upstart wydaje się bardziej ukierunkowany na pulpit. Z czasem to się sprawdzi, IMO, a obie usługi będą stabilne i bogate w funkcje.

Ostatecznie obie usługi będą oferować na żądanie uruchamianie i zatrzymywanie we wszystkich kierunkach dla wszystkich usług, którymi zarządzają. Funkcje takie jak StopWhenUnneeded=yesjuż istnieją, systemdna przykład, więc kwestią czasu jest rozwinięcie tych możliwości.

# 2 - wsparcie serwisowe

Niektóre usługi nie obsługują zatrzymywania / uruchamiania bardzo dobrze, jeśli w ogóle. Usługi takie, jak sshdwydaje się, nie mają sensu uruchamiać na żądanie, zwłaszcza jeśli są intensywnie używane. Również niektóre usługi, takie jak Apache, zapewniają w sobie mechanizmy pozwalające rozdzielić mniej więcej własnych słuchaczy zarządzających sobą. Nie jest więc jasne, w jaki sposób usługi na żądanie zapewniane systemdlub upstartzamierzają zintegrować z tego rodzaju usługami.

Czy to naprawdę konieczne?

Usłyszysz z obu stron, że jest to przesada lub że powinieneś podejść do minimalisty instalując tylko to, czego absolutnie potrzebujesz, ale to naprawdę osobisty wybór. Zrozumienie, że usługi te istnieją i to, co robią, jest naprawdę ważne. Pod koniec dnia komputer jest narzędziem, a używając systemu uniksowego już mówisz, że chcesz zajrzeć za zasłonę i zrozumieć, co sprawia, że ​​komputer tyka.

Powiedziałbym, że ten rodzaj przesłuchań jest dokładnie tym, do czego należy dążyć, mając do czynienia z komputerami i Unixem w ogóle.

Referencje


2
@ RSFalcon7 - nie ma za co! Dzięki za pytanie!
slm

12

127.0.0.1 nie jest „światem zewnętrznym”, rozgląda się po domu.

Sprawdź konfigurację zapory ogniowej (dzisiaj iptables w Linuksie), większość z nich nie powinna być dostępna od samego początku.

Nie uruchamiaj usług, których nie potrzebujesz. Odinstaluj wszystkie niepotrzebne oprogramowanie.

Zmień hasła, aby były silniejsze. Sprawdź, czy korzystasz z systemu, nie chodź przypadkiem po ciekawą stronę internetową. Sprawdź konfigurację przeglądarki anty-phishing, anty-skryptów itp. Sprawdź, czy korzystasz z SSH i su / sudo.

Ale przede wszystkim nadmierna paranoja przynosi efekt przeciwny do zamierzonego. Nie daj się złapać w blask technologii .


3
Zgadzam się z „Nie uruchamiaj usług, których nie potrzebujesz”. Ale „Odinstaluj całe niepotrzebne oprogramowanie.”, Poważnie? W czym to pomoże?
Hauke ​​Laging

6
@HaukeLaging, jak mówi przysłowie: „myszy gniazdują w stertach nieużywanego ubrania”. Każde oprogramowanie może zawierać lukę, którą można wykorzystać. Jeśli programu nie ma, ryzyko nie istnieje. Jeśli nie jest używany, koszt jest znikomy. Poza tym prostszy system jest łatwiejszy do kontrolowania i utrzymywania porządku.
vonbrand

Przypominamy, że 127.0.0.1 nie jest zewnętrznym światem . Całkowicie podpisuję się pod tym, aby nie uruchamiać usług, których nie potrzebuję , ale odinstalowanie to trochę przesada, jeśli już tu są, mogą się przydać
RSFalcon7

2
@ RSFalcon7, jeśli były przydatne (lub są przydatne dla kogoś innego, w końcu są w dystrybucji), nie ma znaczenia. Jeśli go nie użyjesz, rzuć go. Mniejsze zużycie dysku, mniej aktualizacji, ogólnie mniejsze ryzyko. Jeśli będziesz go potrzebować później, zainstaluj ponownie.
vonbrand

3

Chociaż możesz „zamykać” poszczególne usługi - być może skonfigurowanie zapory może być łatwiejsze. Prawie wszystkie popularne dystrybucje (Ubuntu, Debian, Centos itp.) Mają wbudowane wsparcie dla iptables.

Prosty zestaw reguł na początek: (wystarczy wpisać je w wierszu polecenia; aby na stałe dodać je do skryptów uruchamiania lub powiedzieć nam, jakiej dystrybucji używasz. Na Centos, na przykład: system-config -firewall to dobry interfejs do konfigurowania reguł iptables)

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

Zasadniczo - zezwalaj na ssh przychodzące; upuść wszystko inne.

Twój łańcuch INPUT wygląda teraz tak:

  • Jeśli pakiet przychodzi do mojego komputera po „ssh” - pozwól mu
  • Jeśli pakiet nie pasuje do żadnej z poprzednich reguł - po prostu go wyrzuć.

Później powiedz, że chcesz zezwolić na „sambę” (udostępnianie plików systemu Windows): możesz uruchomić

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

Do -Iwstawia i reguła w wykazie; -Adołącza regułę. Twój łańcuch wygląda teraz tak:

  • Jeśli na mój komputer przychodzi pakiet dla „samby” - pozwól na to
  • Jeśli pakiet przychodzi do mojego komputera po „ssh” - pozwól mu
  • Jeśli pakiet nie pasuje do żadnej z poprzednich reguł - po prostu go wyrzuć.

INPUTŁańcuch odnosi się do pakietów przeznaczonych dla danego systemu. Inne łańcuchy dotyczą OUTPUTpakietów z twojego komputera, przechodzących do Internetu oraz FORWARDpakietów, które są kierowane przez twój komputer (to znaczy pakiety, które „tranzytują” twój komputer, jak strefa tranzytowa lotniska - rzeczy, które nie są INPUTspowodowane tym, że nie dostaje się do twojego komputera ).

Na marginesie: nmap'ing 127.0.0.1 nie jest zbyt użyteczny; wiele usług jest dostępnych tylko od 127.0.0.1 i nie ma innego adresu. Jeśli nie masz innej maszyny, z której możesz uruchomić nmap - spróbuj użyć Shields UP Gibson Research! ( https://www.grc.com/shieldsup ) - który jest darmowym nmap-lite online. Lub dodaj komentarz do swojego adresu IP / e-maila, a ja nmap cię :)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.