Langkah apa yang Anda ambil untuk mengamankan server Debian? [Tutup]

66

Saya menginstal server Debian yang terhubung langsung ke Internet. Jelas saya ingin membuatnya seaman mungkin. Saya ingin kalian menambahkan ide-ide Anda untuk mengamankannya dan program apa yang Anda gunakan untuk itu.

Saya ingin sebagian dari pertanyaan ini mencakup apa yang Anda gunakan sebagai firewall? Hanya iptables yang dikonfigurasi secara manual atau Anda menggunakan beberapa jenis perangkat lunak untuk membantu Anda? Apa cara terbaik? Blokir semua dan hanya izinkan apa yang dibutuhkan? Apakah mungkin ada tutorial yang bagus untuk pemula untuk topik ini?

Apakah Anda mengubah port SSH Anda? Apakah Anda menggunakan perangkat lunak seperti Fail2Ban untuk mencegah serangan bruteforce?

Peter Mortensen
sumber
1
Ada banyak tumpang tindih dengan serverfault.com/questions/42/securing-a-fresh-ubuntu-server dan
Zoredache
1
Ubuntu memiliki ufw Debian tidak;) Saya woundering apakah orang-orang yang mengkonfigurasi iptables diri mereka atau menggunakan beberapa perangkat lunak seperti fireHOL
Thomaschaaf
Saya selalu cenderung menulis aturan iptables sendiri. Saya punya plat boiler yang berfungsi seperti drop semua fragmen, paket xmas, dll. Apa pun di luar itu yang spesifik untuk sistem, dan biasanya cukup kecil. Saya tidak bisa menekankan cukup menjatuhkan fragmen ketika menggunakan iptables, btw. Untuk beberapa alasan saya belum meneliti, iptables hanya memeriksa fragmen pertama, dan membabi buta melewati sisanya tanpa memeriksa. Menurut saya, itu membuat fragmen menjadi kewajiban.
Scott Pack
3
Uhm ... Debian punya ufw. packages.debian.org/ufw
womble

Jawaban:

50

Wajib:

  • instalasi sistem dengan mode ahli, hanya paket yang saya butuhkan
  • firewall tertulis tangan dengan kebijakan standar pada iptables'input: drop, mengizinkan akses ke SSH, HTTP atau apa pun yang diberikan server sedang berjalan
  • Fail2Ban untuk SSH [dan terkadang FTP / HTTP / lainnya - tergantung konteks]
  • nonaktifkan login root, paksa menggunakan pengguna normal dan sudo
  • kernel kustom [hanya kebiasaan lama]
  • peningkatan sistem terjadwal

Tergantung pada tingkat paranoia juga:

  • kebijakan drop pada output kecuali beberapa tujuan / port yang diizinkan
  • integrituntuk memeriksa apakah beberapa bagian dari sistem file tidak dimodifikasi [dengan checksum disimpan di luar mesin], misalnya Tripwire
  • pemindaian terjadwal setidaknya dengan nmap sistem dari luar
  • log otomatis memeriksa pola yang tidak diketahui [tapi itu sebagian besar untuk mendeteksi kerusakan perangkat keras atau beberapa kerusakan kecil]
  • jadwal menjalankan chkrootkit
  • atribut abadi untuk /etc/passwdmenambahkan pengguna baru sedikit lebih sulit
  • / tmp dipasang dengan noexec
  • port knocker atau cara tidak standar lainnya untuk membuka port SSH [misalnya mengunjungi halaman web 'rahasia' pada server web memungkinkan koneksi SSH yang masuk untuk jangka waktu terbatas dari alamat IP yang melihat halaman tersebut. Jika Anda terhubung, -m state --satete ESTABLISHEDberhati-hatilah mengizinkan aliran paket selama Anda menggunakan satu sesi SSH]

Hal-hal yang tidak saya lakukan sendiri tetapi masuk akal:

  • grsecurity untuk kernel
  • syslog jarak jauh sehingga log tidak dapat ditimpa ketika sistem dikompromikan
  • mengingatkan tentang login SSH
  • konfigurasikan rkhunter dan atur agar berjalan dari waktu ke waktu
pQd
sumber
4
Setelah melakukan semua ini jalankan BASTILLE terhadap sistem untuk mencari hal lain. Saya juga akan merekomendasikan melakukan bess penuh, tidak aman memeriksa Nessus memindai sistem juga; lalu perbaiki apa pun yang diperingatkan.
Scott Pack
13
Kompilasi kernel khusus tidak memberikan keuntungan keamanan kecuali Anda benar-benar tahu apa yang Anda lakukan. Anda juga akan lalai untuk memperbaruinya kecuali jika Anda memasukkannya ke dalam sistem manajemen paket, yang akan menghasilkan keamanan yang lebih buruk.
Adam Gibbins
3
-1 untuk keamanan melalui ketidakjelasan. Sebaliknya jawaban yang layak.
DWC
@ Adam - ya, saya tahu itu, masih saya lebih suka memiliki kernel monolitik yang hanya terdiri dari bagian-bagian yang saya butuhkan. itu mungkin sangat terbelakang, tetapi saya masih melakukannya. @ DWC - itu hanya satu langkah tambahan yang hanya lapisan gula atau seperti yang kita katakan ceri di atas tumpukan hal-hal bau yang tidak menyenangkan.
pQd
1
Dan maksudmu sudo tidak su -
LapTop006
18

Hanya catatan tentang firewall perangkat Anda ...

  • Gunakan daftar putih, bukan daftar hitam - yaitu memblokir semuanya, dan hanya mengizinkan apa yang Anda butuhkan, tolak semua yang lain.
  • Jangan gunakan GUI / ncurses atau perangkat lunak apa pun yang mencoba membuat tugas menulis firewall untuk Anda. Jika ya, Anda akan membiarkan perangkat lunak membuat asumsi untuk Anda - Anda tidak perlu mengambil risiko itu dan tidak seharusnya. Konfigurasikan sendiri, jika tidak yakin, nonaktifkan - Anda akan segera tahu jika diperlukan. Jika sudah menjadi sistem yang berjalan dan Anda tidak dapat mengganggu lalu lintas (dengan secara tidak sengaja memblokirnya), kemudian jalankan tcpdump (dump to file) dan ambil sampel - pelajari nanti, lalu cari tahu apa yang valid dan apa yang tidak.
  • Saya pribadi tidak melihat ada gunanya menjalankan layanan pada port non-standar, alat tidak begitu bodoh hari ini untuk mengasumsikan bahwa karena sesuatu berjalan pada port 22 misalnya, maka itu harus ssh, dan tidak sebaliknya - untuk misalnya amap, dan nmap's -Apilihan. Karena itu, Anda dapat (dan mungkin harus jika khawatir) memodifikasi layanan Anda untuk menyembunyikan diri dari mencongkel mata, misalnya, yang berikut ini akan membuat penyerang tahu versi persis OpenSSHyang Anda jalankan, mereka kemudian dapat mencari exploit untuk versi yang tepat. Jika Anda menyembunyikan hal-hal seperti itu, Anda akan membuatnya lebih sulit untuk itu.
    [root @ ud-olis-1 uhtbin] # telnet localhost 22
    Mencoba 127.0.0.1 ...
    Terhubung ke localhost.localdomain (127.0.0.1).
    Karakter melarikan diri adalah '^]'.
    SSH-2.0-OpenSSH_3.9p1
  • Tetap perbarui semua layanan publik Anda dan tempel dengan tambalan keamanan terbaru.
  • Jangan menyimpan DATA di server gateway itu sendiri, setidaknya Anda akan membeli waktu ketika mereka berhasil masuk ke mesin ini, dan Anda akan kehilangan satu atau dua layanan, dan beberapa waktu, tetapi bukan data.

Intinya adalah bahwa Anda tidak akan pernah berhasil membuat apa pun 100% aman - itu tidak mungkin - jadi tujuannya adalah untuk membuat seaman mungkin - jika terlalu banyak upaya untuk merusak sistem Anda, itu cukup baik, dan sebagian besar lamer script-kiddies akan pindah ke sistem selanjutnya.

  • iptables adalah cara untuk menggunakan sistem Linux apa pun - tetapi konfigurasikan sendiri.

Jangan pernah menggunakan "perangkat lunak keamanan" apa pun yang tidak didasarkan pada standar terbuka - mereka ditakdirkan untuk ditulis dengan buruk dan akan diretas (bukan soal "jika", tetapi "kapan"). Protokol open source dan terbuka terbuka untuk pengawasan publik dan menyatu untuk menjadi produk yang matang dan andal; perangkat lunak sumber tertutup sebagian besar bergantung pada kepercayaan diri penulis tentang seberapa hebat / mengamankan-produk yang mereka pikirkan - yaitu sejumlah kecil mata vs bumi yang penuh mata.

Semoga itu bisa membantu :)

Xerxes
sumber
"... sejumlah kecil mata vs bumi yang penuh mata." - Saya berharap cukup "korporasi" menyadari hal ini, tetapi keamanan melalui ketidakjelasan tampaknya menjadi tren yang paling mengikuti. Ya menjalankan layanan, seperti ssh, pada port non-standar tidak akan menghindarkan penyerang yang gigih. Namun itu akan menjauhkan skrip anak-anak - seseorang yang menjalankan serangan kamus pada kisaran alamat ip pada port 22.
L0neRanger
12
  • nonaktifkan login root
  • nonaktifkan login dengan kata sandi (hanya izinkan login dengan kunci publik)
  • ubah port SSH
  • gunakan denyhosts (atau serupa)

  • tulis skrip iptbles Anda sendiri (sehingga Anda mengontrol dengan tepat apa yang diizinkan dan dapat membatalkan yang lainnya)

  • memaksakan penggunaan komunikasi aman SSL / TLS dan memastikan memiliki sertifikat yang valid, tidak kedaluwarsa, dan ditandatangani

  • aktifkan verifikasi sertifikat yang ketat untuk semua layanan eksternal (misalnya ketika mengotentikasi pengguna dengan server LDAP di komputer lain)
arah x
sumber
Anda mendapat upvote untuk menonaktifkan auth kata sandi.
derobert
6

Sebagai titik awal umum, saya mengikuti tolok ukur / panduan dari Pusat Keamanan Internet , yang merupakan kompilasi komprehensif praktik keamanan terbaik. Sepertinya benchmark Debian mereka tidak diperbarui dalam beberapa waktu, tetapi gambaran umum langkah-langkahnya adalah:

  • Terapkan patch / paket OS terbaru
  • Mengaktifkan akuntansi sistem / kernel / proses.
  • Aktifkan MAC (mis. SELinux atau AppArmor).
  • Aktifkan firewall berbasis host (iptables).
  • Verifikasi sumber APT. Daftar (kunci benar, sumber tepercaya).
  • Minimalkan layanan jaringan, nonaktifkan semua yang tidak diperlukan, dan firewall apa yang ada.
  • Gunakan TCPWrappers untuk lebih membatasi akses sistem.
  • Hanya gunakan protokol jaringan terenkripsi, nonaktifkan layanan tidak terenkripsi (telnet, ftp, dll).
  • Konfigurasikan akses jarak jauh ke SSH saja.
  • Nonaktifkan kata sandi login pengguna dan memerlukan otentikasi berbasis kunci.
  • Nonaktifkan berbagi sistem file (NFS, SMB).
  • Aktifkan pencatatan sistem jarak jauh / terpusat (dan tinjau log secara berkala!).
  • Tetapkan kata sandi tingkat BIOS / firmware.
  • Tetapkan kata sandi bootloader.
  • Konfigurasikan cadangan sistem, miliki rencana pemulihan bencana dan UJI bahwa cadangan itu valid, dan bahwa personel mengetahui prosedur pemulihan bencana!

Ada banyak sumber daya di semua pengaturan yang beragam ini, termasuk perintah khusus dan file konfigurasi untuk diimplementasikan pada sistem dalam tolok ukur CISecurity.

jtimberman
sumber
5

Saya sarankan untuk tidak memasang mesin secara langsung ke Internet. Tempatkan semacam firewall antara mesin dan Internet. Ini memungkinkan Anda untuk melakukan pemantauan keamanan dan jaringan tanpa menempatkan lebih banyak beban di server. Secara pribadi, saya menemukan segmentasi fungsi dan jaringan sering menyederhanakan pemecahan masalah jaringan, meskipun kadang-kadang, kompleksitas tambahan membuat analisis lebih sulit.

Kebijakan firewall yang paling aman, tetapi paling menjengkelkan untuk dikelola, adalah menolak semua dan secara eksplisit hanya mengizinkan lalu lintas yang harus Anda izinkan. Ini menjengkelkan, karena orang sering perlu memperbarui kebijakan firewall karena jaringan perlu diubah.

Saya juga menyarankan menggunakan semacam antarmuka firewall di server - pertahanan mendalam adalah kuncinya. Menggunakan port non-standar untuk layanan terkait administrasi tidak ada salahnya. fail2ban baik-baik saja. Kejar pertanyaan yang lebih spesifik tentang aplikasi keamanan di Serverfault untuk menemukan lebih banyak ide.

Keamanan seperti lelucon tentang dua pejalan kaki dan beruang - sementara seseorang tidak pernah dapat mencapai keamanan yang sempurna, akan sangat membantu untuk menjadi target yang lebih sulit daripada yang lain.

pcapademic
sumber
+1 untuk jawaban yang bagus. Saya harus menunjukkan bahwa tolak default tidak mengganggu untuk dikelola jika Anda mendekatinya dengan benar. Tentunya Anda harus tahu apa yang Anda izinkan, bukan? Bahkan, ini harus ditulis dalam bahasa sederhana sebagai pernyataan kebijakan. Jika Anda tidak melakukan itu sebagai rutinitas normal maka Anda tidak melakukan pekerjaan Anda sebagai admin. Jika ya, mudah untuk memperbarui aturan firewall.
dwc
Poin yang sangat bagus. Setiap organisasi harus memiliki pernyataan kebijakan keamanan bahasa yang sederhana. Ketika kebutuhan organisasi berubah, pernyataan kebijakan harus diperbarui. Jika hanya untuk admin untuk merencanakan implementasi aturan firewall dan CYA, admin cerdas akan mempertahankan pernyataan kebijakan seperti itu bahkan jika manajemen organisasi tidak dapat diganggu untuk memikirkan keamanan.
pcapademic
4

Beberapa orang telah menunjuk pada Securing Debian Manual . Ini harus cukup memadai untuk semuanya kecuali persyaratan militer.

Banyak orang berpikir bahwa menjadi paranoid sangat keren atau profesional atau semacamnya. Ini tidak , itu hanya mengganggu untuk admin lain dan langsung represif bagi pengguna Anda. Sebagian besar dari hal-hal yang Anda lihat akan direkomendasikan hanyalah pekerjaan palsu untuk merasa berguna bagi admin paranoid, tetapi sebenarnya tidak membantu, karena pelanggaran keamanan nyata kemungkinan disebabkan oleh sistem yang tidak diperbarui dan / atau dari sumber dalam.

Yang mengatakan, saya menganggap itu salah satu prinsip saya untuk tidak mempercayai apa pun di jaringan lokal lebih dari apa pun dari Internet. Oleh karena itu, saya mengkonfigurasi semuanya untuk memerlukan otentikasi bahkan di jaringan lokal. Saya mengenkripsi dan mengautentikasi semua lalu lintas antara setiap komputer menggunakan IPsec.

Saya sedang dalam proses konversi ke enkripsi disk penuh untuk semua server saya.

Saya hanya menginstal layanan yang saya gunakan. Saya tidak punya firewall; Saya mengkonfigurasi layanan yang saya harus minta otentikasi atau membatasi mereka (dengan konfigurasi program sendiri atau oleh pembungkus TCP) untuk IP tertentu. Satu-satunya hal yang perlu saya blokir menggunakan iptables adalah memcached, karena tidak memiliki file konfigurasi, dan tidak menggunakan TCP-wrappers.

Saya menggunakan kata sandi yang baik dan dibuat secara acak untuk akun saya dan mempercayai server SSH saya (dan semua layanan lainnya) untuk menjaga mereka yang tidak tahu kata sandinya. fail2banhanya untuk mereka yang memiliki ruang terbatas untuk file log, IMO. (Anda harus memiliki kata sandi yang cukup baik untuk dapat memercayainya.)

Teddy
sumber
3

Pergi melalui cara-ke ini bagus di www.debian.org/doc/manuals/securing-debian-howto/

Saya pribadi mengubah port ssh dan menggunakan fail2ban + denyhosts. Dan saya memblokir semua yang tidak diperlukan. Semakin banyak Anda memblokir semakin sedikit Anda harus khawatir.

Vihang D
sumber
4
Ugh. Anda memiliki saya sampai "ganti port SSH". Tidak ada gunanya. Terutama tidak ketika joe schmoe dengan waktu yang cukup di tangannya dapat memindai port Anda dan langsung mencari tahu apa port SSH sedang berjalan. Ini menyatakan nama layanan (dan versi server) segera setelah Anda terhubung.
Matt Simmons
3
Ya, saya tahu ada orang yang bisa memindai port Anda, dan mencari tahu port yang tepat. Tetapi kebanyakan serangan ada di port default. Cobalah untuk mendapatkan beberapa statistik dengan mengubah port.
Vihang D