Bagaimana cara "menutup" port terbuka?

22

Beberapa hari yang lalu saya mulai sangat peduli dengan keamanan data saya, akhirnya nmapsaya dengan:nmap 127.0.0.1

Kejutan, kejutan, saya punya banyak layanan aktif mendengarkan 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

Satu-satunya yang mungkin saya gunakan adalah ssh(meskipun mungkin tidak dikonfigurasi dengan baik, saya akan menyimpan masalah ini ke pertanyaan lain).

Sejauh yang saya tahu ippprotokol digunakan oleh CUPS untuk membagikan printer saya, saya tidak perlu membaginya, cukup akses printer dari server.

Ini adalah output dari netstat -lntupoleh pengguna root, menghapus alamat 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

Bagaimana cara mengkonfigurasi layanan tersebut sehingga mereka hanya mendengarkan dunia luar ketika saya benar-benar menggunakannya?

RSFalcon7
sumber
Bagaimana Anda ingin mengatakannya bahwa Anda menggunakannya?
Reactormonk
memulai layanan sendiri (dengan hak pengguna dan shell induk)
RSFalcon7
2
Benar, juga jika Anda menggunakan CUPS hanya dari sistem lokal Anda dapat memilikinya hanya mendengarkan port 631 di localhost (127.0.0.1). Saya akan menjalankan kembali nmap menggunakan IP aktual yang dimiliki mesin dan bukan hanya 127.0.0.1.
slm
1
perintah yang lebih baik untuk dijalankan adalah netstat -lntup-l = dengarkan -n = angka -t = tcp -u = udp -p = pid. Memperlihatkan proses apa yang telah Anda jalankan dan port apa yang terbuka. Apa pun yang terbuka untuk 127.0.0.1 tidak dapat diakses oleh internet.
frogstarr78
1
Jika Anda tidak membutuhkan Samba, cukup hapus instalannya. Jika Anda benar- benar membutuhkannya, Anda dapat membatasi ke antarmuka lokal (misalnya eth0?) Dengan menambahkan smb.confdua arahan bind interfaces only = yesdan interfaces = eth0.
LSerni

Jawaban:

26

Tentukan eksposur Anda

Mengambil output Anda dari netstatperintah, apa yang tampak seperti banyak layanan sebenarnya adalah daftar yang sangat singkat:

$ 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

Mendapat tanah

Melihat daftar ini ada beberapa layanan yang saya tinggalkan sendiri.

  • dhclient
    • Server daemon DHCP yang bertanggung jawab untuk mendapatkan alamat IP Anda, harus memiliki yang ini.
  • dropbox
    • jelas Dropbox, harus punya

Mulai menguranginya - nonaktifkan Samba

Anda mungkin dapat langsung menonaktifkan kelelawar Samba, itu menyumbang 2 dari layanan di atas, nmbddan smbd. Patut dipertanyakan bahwa Anda benar-benar perlu menjalankannya di laptop baik di localhost atau IP Anda yang menghadap jaringan Anda.

Untuk memeriksa bahwa mereka menjalankan Anda dapat menggunakan perintah berikut, status:

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

Menonaktifkan layanan dapat membingungkan dengan semua fluks yang terjadi dengan pemula, /etc/rc.d, bisnis sehingga mungkin sulit untuk mencari tahu layanan mana yang berada di bawah teknologi mana. Untuk Samba Anda dapat menggunakan serviceperintah:

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

Sekarang mereka libur:

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

Menjaga mereka ... secara permanen

Untuk membuat mereka menjauh saya telah menggunakan alat ini sysv-rc-conf,, untuk mengelola layanan dari konsol, itu berfungsi lebih baik daripada kebanyakan. Hal ini memungkinkan Anda untuk memeriksa layanan mana yang ingin Anda jalankan dan di mana runlevel mereka harus dimulai / dihentikan:

$ sudo apt-get install sysv-rc-conf

   ss dari sysv-rc-conf

Menonaktifkan sisa dari apa yang TIDAK diperlukan

Jadi sekarang Samba tidak aktif, kita pergi dengan yang berikut ini:

  • avahi-daemon
    • bagian dari zeroconf (plug-n-play), matikan
  • rpcbind
    • diperlukan untuk NFS - matikan
  • rpc.statd
    • diperlukan untuk NFS - matikan

Untuk 3 sisanya Anda dapat melakukan hal yang sama yang kami lakukan untuk Samba untuk mematikannya juga.

CUPS?

Untuk mematikan CUPS, yang sebenarnya tidak Anda perlukan, Anda dapat mengikuti cara mematikan layanan yang sama dan kemudian menonaktifkannya dari memulai. Agar dapat mencetak, Anda harus mengatur setiap printer secara terpisah di sistem Anda. Anda dapat melakukannya melalui system-config-printerGUI.

Membuat layanan ini sesuai permintaan?

Ini benar-benar inti dari pertanyaan Anda, tetapi tidak ada solusi yang benar-benar tepat untuk menjadikan layanan ini "pintar" sehingga mereka berjalan saat digunakan, alih-alih sepanjang waktu.

# 1 - systemd vs pemula

Bagian dari itu adalah pemisahan saat ini antara systemd dan pemula . Ada gambaran bagus dari 2 teknologi yang bersaing di sini .

Kedua teknologi mencoba melakukan hal-hal yang sedikit berbeda, IMO, mengingat set fitur mereka, systemd tampaknya lebih diarahkan ke server sedangkan pemula tampaknya lebih diarahkan ke desktop roll. Seiring waktu, ini akan berjalan dengan sendirinya, IMO, dan kedua layanan akan stabil dan kaya fitur.

Akhirnya kedua layanan akan menawarkan sesuai permintaan mulai & berhenti di papan untuk semua layanan yang mereka kelola. Fitur seperti yang StopWhenUnneeded=yessudah ada systemdmisalnya, jadi tinggal menunggu waktu hingga kemampuan ini disempurnakan.

# 2 - dukungan layanan

Beberapa layanan tidak mendukung dihentikan / dimulai dengan sangat baik. Layanan seperti sshdtampaknya tidak masuk akal untuk berjalan sesuai permintaan, terutama jika mereka banyak digunakan. Juga beberapa layanan seperti Apache menyediakan mekanisme di dalam diri mereka sendiri untuk memutar lebih atau kurang dari pendengar mereka sendiri yang mengelola diri mereka sendiri. Jadi tidak jelas bagaimana on-demand yang disediakan oleh systemdatau upstartakan diintegrasikan dengan jenis layanan ini.

Apakah ini benar-benar perlu?

Anda akan mendengar dari kedua sisi bahwa ini berlebihan atau bahwa Anda harus mengambil pendekatan minimalis hanya menginstal apa yang benar-benar Anda butuhkan, tetapi itu benar-benar pilihan pribadi. Memahami bahwa layanan ini ada di sana dan apa yang mereka lakukan benar-benar penting. Pada akhirnya komputer adalah alat, dan dengan menggunakan sistem Unix Anda sudah mengatakan bahwa Anda bersedia mengintip di balik tirai dan memahami apa yang membuat komputer Anda berdetak.

Saya akan mengatakan bahwa jenis pertanyaan ini adalah kerangka berpikir yang harus diperjuangkan ketika berhadapan dengan komputer dan Unix secara umum.

Referensi

slm
sumber
2
@ RSFalcon7 - sama-sama Terima kasih untuk pertanyaannya!
slm
12

127.0.0.1 bukan "dunia luar", ia melihat sekeliling di dalam rumah.

Periksa konfigurasi firewall Anda (iptables di Linux hari ini), sebagian besar tidak dapat diakses dari ouside.

Jangan menjalankan layanan yang tidak Anda butuhkan. Copot semua perangkat lunak yang tidak diperlukan.

Ubah kata sandi menjadi lebih kuat. Periksa penggunaan sistem Anda, jangan mengejar situs web yang menarik secara acak. Periksa konfigurasi anti-phising, anti-skrip, dll dari browser. Tinjau penggunaan SSH dan su / sudo Anda.

Tetapi yang paling penting, paranoia berlebihan adalah kontraproduktif. Jangan terjebak oleh gemerlapnya teknologi .

vonbrand
sumber
3
Saya setuju dengan "Jangan jalankan layanan yang tidak Anda butuhkan". Tapi "Copot semua perangkat lunak yang tidak diperlukan.", Serius? Apa yang akan membantu melawan?
Hauke ​​Laging
6
@ HaukeLaging, seperti kata pepatah, "tikus bersarang di tumpukan pakaian yang tidak digunakan". Setiap perangkat lunak dapat memiliki kerentanan yang dapat dieksploitasi. Jika program tidak ada, risiko itu tidak ada. Jika tidak digunakan, biayanya dapat diabaikan. Selain itu, sistem yang lebih sederhana lebih mudah untuk diawasi dan dijaga rapi.
vonbrand
Berkat mengingatkan bahwa 127.0.0.1 bukan luar dunia . Saya benar-benar berlangganan untuk tidak menjalankan layanan yang tidak saya butuhkan , tetapi uninstall agak berlebihan, jika mereka ada di sini, mereka berguna dalam beberapa waktu
RSFalcon7
2
@ RSFalcon7, jika mereka adalah berguna (atau berguna untuk orang lain, mereka berada dalam distribusi setelah semua) adalah tidak consecuence. Jika Anda tidak menggunakannya, buang. Lebih sedikit penggunaan disk, lebih sedikit pembaruan, risiko lebih sedikit secara keseluruhan. Jika Anda membutuhkannya nanti, instal ulang.
vonbrand
3

Meskipun Anda bisa 'menutup' layanan individual - mungkin lebih mudah untuk memasang firewall. Hampir semua distro umum (Ubuntu, Debian, Centos, dll) memiliki dukungan untuk iptables bawaan.

Rangkaian aturan sederhana untuk memulai: (Anda bisa mengetik ini di command-prompt; untuk membuatnya permanen menambahkannya ke skrip startup Anda atau memberi tahu kami apa distro yang Anda gunakan. Pada Centos misalnya: system-config -firewall adalah UI yang bagus untuk mengonfigurasi aturan iptables)

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

Pada dasarnya - izinkan ssh masuk; letakkan yang lainnya.

Rantai INPUT Anda sekarang terlihat seperti ini:

  • Jika sebuah paket masuk ke komputer saya untuk 'ssh' - izinkan saja
  • Jika sebuah paket belum cocok dengan aturan sebelumnya - buang saja.

Kemudian di kemudian hari, katakan Anda ingin mengizinkan 'samba' (berbagi file windows): Anda dapat menjalankan

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

The -Iprepends dan aturan untuk daftar; -Amenambahkan aturan. Jadi rantai Anda sekarang terlihat seperti ini:

  • Jika sebuah paket masuk ke komputer saya untuk 'samba' - ijinkan
  • Jika sebuah paket masuk ke komputer saya untuk 'ssh' - izinkan saja
  • Jika sebuah paket belum cocok dengan aturan sebelumnya - buang saja.

The INPUTchain mengacu pada paket ditakdirkan untuk sistem anda. Rantai lainnya adalah OUTPUTuntuk paket dari komputer Anda, pergi ke internet dan FORWARDuntuk paket yang diarahkan melalui komputer Anda (yaitu paket yang 'transit' komputer Anda, seperti area transit bandara - hal-hal yang bukan INPUTkarena tidak masuk ke komputer Anda ).

Sebagai catatan perpisahan: nmap'ing 127.0.0.1 tidak terlalu berguna; banyak layanan yang hanya dapat diakses dari 127.0.0.1 dan tidak ada alamat lain. Jika Anda tidak memiliki komputer lain, Anda dapat menjalankan nmap dari - coba gunakan Gibson Research 'Shields UP! ( https://www.grc.com/shieldsup ) - yang merupakan nmap-lite online gratis. Atau tambahkan komentar dengan IP / email Anda dan saya akan nmap Anda :)

Grynn
sumber