Bagaimana saya bisa mengaudit pengguna dan mengakses upaya ke SSH di server saya?

28

Saya punya beberapa masalah keamanan dengan server saya, beberapa pengguna SSH telah mengatur kebakaran alias memberikan masalah.

Aku ingin:

  • Lacak login dan keluar pengguna
  • Lacak aktivitas SSH ini, untuk menemukan aktivitas jahat apa pun
  • Cegah pengguna menghapus log

Saya tidak banyak dari sys admin dan saya cukup berpengalaman dalam hal ini, jadi saran apa pun akan sangat diterima dan sangat membantu. :)

RadiantHex
sumber

Jawaban:

27

Karena kita berbicara tentang server SSH, saya akan memberikan Anda solusi command line.

  • Lacak login dan keluar pengguna. Itu mudah, file /var/log/auth.logharus memiliki informasi ini.

  • Lacak aktivitas para pengguna itu: Jika mereka tidak bersalah, Anda dapat memeriksa file .bash_historydi direktori home mereka. Anda akan melihat daftar perintah yang dieksekusi. Masalahnya tentu saja mereka dapat menghapus atau mengedit file ini.

  • Mencegah pengguna menghapus log: Pengguna seharusnya tidak dapat menyentuh auth.log. Untuk menghentikan mereka bermain dengan .bash_historyAnda perlu melakukan beberapa trik .

  • Bagaimana jika pengguna berhasil mendapatkan akses root? : Anda kacau. Kecuali jika mereka melakukan kesalahan, mereka akan dapat menyembunyikan semua jejak mereka.

Javier Rivera
sumber
Perhatikan bahwa tidak ada cara untuk mencegah pengguna mengetik unset HISTFILEdi dalam bash, dan kemudian riwayat bash mereka tidak akan direkam.
Gilles 'SO- stop being evil'
@Gilles, baca tautan triknya. Mereka menetapkan HITSFILE sebagai variabel hanya baca di .profile.
Javier Rivera
Saya pikir Anda dapat menghapus variabel readonly di bash yang tidak dibatasi, tetapi ternyata tidak. Ini sedikit meningkatkan keterlacakan sejak memulai shell lain (yang tidak mau dibaca ~/.bash_historyatau ~/.bashrc) akan muncul di $HISTFILE. Tetapi itu sendiri bisa sangat sah (misalnya pengguna hanya ingin menjalankan zsh, atau ingin mengatur opsi mereka sendiri di alternatif bashrc).
Gilles 'SO- stop being evil'
1
Iya nih. Anda dapat membatasi dia untuk bash atau shell lainnya. Bagaimanapun keamanan hanyalah sebuah perlombaan.
Javier Rivera
Tidak benar bahwa "jika pengguna berhasil mendapatkan akses root" mereka akan dapat menyembunyikan semua langkah. Anda selalu dapat menggunakan server eksternal untuk audit, di mana semua langkah akan dicatat, termasuk menjadi root.
Petr
6

[PENOLAKAN] Saya menyadari bahwa saya terlambat ke pesta, tetapi saya ingin menempelkan jawaban yang saya berikan ke pertanyaan lain , karena saya merasa seperti itu dapat menawarkan wawasan yang baik kepada pembaca, dan pertanyaan ini tampaknya menjadi tujuan tempat untuk info ssh dasar.

Ada masalah serupa yang mengejutkan saya setelah membaca pertanyaan ini di sini di AskUbuntu dan memeriksa VPS saya, hanya untuk melihat banyak upaya brute force. Saat itulah saya memutuskan untuk mengambil tindakan.

Sekarang sesuai dengan pertanyaan yang saya tautkan, jika Anda ingin melihat upaya login yang gagal pada mesin Anda lebih dari ssh (bisa berupa upaya brute force atau apa pun), coba ketikkan ini:

grep sshd.\*Failed /var/log/auth.log | less

Jika output terdiri dari beberapa baris, itu adalah banyak upaya brute force, terutama jika mereka terjadi di antara interval pendek, Anda mungkin ingin melakukan tindakan berikut:

Ubah file konfigurasi ssh

Untuk melakukan ini, buka file yang terletak di / etc / ssh / sshd_config dengan editor favorit Anda, seperti ini vim /etc/ssh/sshd_config.

1. Cobalah untuk memindahkan ssh dari port 22 : Sekarang cari baris yang bertuliskan:

# What ports, IPs and protocols we listen for
Port 22

dan komentari Port 22, dan gunakan siapa saja yang Anda suka. Contoh:

# What ports, IPs and protocols we listen for
# Port 22
Port 28934

Harap diingat bahwa port di bawah 1024 perlu izin khusus (root). Saya tidak tahu bagaimana ini bisa mengganggu itu, tetapi saya hanya mengatakan.

2. Nonaktifkan login Root melalui ssh : Karena nama pengguna root dapat diprediksi dan menyediakan akses lengkap ke sistem Anda, memberikan akses tanpa batas ke akun ini melalui SSH adalah tidak bijaksana. Temukan baris yang membaca PermitRootLogin dan atur ke no .

PermitRootLogin no

3. Nonaktifkan otentikasi kata sandi : Hasilkan dan gunakan kunci SSH untuk masuk ke sistem Anda. Tanpa kata sandi diaktifkan, penyerang perlu menebak (atau mencuri) kunci pribadi SSH Anda untuk mendapatkan akses ke server Anda. Sesuatu yang sangat sangat sulit. Lanjutkan untuk menemukan baris yang membaca PasswordAuthentication dan set ke no

PasswordAuthentication no

!PERINGATAN! Sebelum melakukannya, silakan baca panduan ini di sini tentang cara mengatur otentikasi sertifikat.

CATATAN: Setelah Anda melakukan perubahan, gunakan sudo /etc/init.d/ssh restart. Untuk menyambung ke port lain melalui penggunaan ssh: ssh [email protected] -p <port_number>.

Siapkan firewall

Silakan lihat panduan ini tentang cara mengatur firewall yang sangat kuat dan efektif, yang terintegrasi ke Linux, IPTables .

Siapkan skrip untuk membantu Anda dengan keamanan

Salah satu yang saya gunakan secara pribadi dan cepat terlintas dalam pikiran adalah Fail2Ban . Fail2ban akan memantau file log Anda untuk upaya login yang gagal. Setelah alamat IP melebihi jumlah upaya otentikasi maksimum, alamat itu akan diblokir pada tingkat jaringan dan acara akan dicatat /var/log/fail2ban.log. Untuk menginstalnya:sudo apt-get install fail2ban

Periksa riwayat perintah melalui ssh

Ada perintah linux, bernama history, yang memungkinkan Anda untuk melihat perintah mana yang telah diinput hingga saat itu. Coba ketikkan historyterminal untuk melihat semua perintah hingga saat itu. Ini bisa membantu jika Anda root .

Untuk mencari perintah tertentu, coba:history | grep command-name

Untuk mendaftar semua perintah setelah ssh :fc -l ssh

Anda juga dapat mengedit perintah menggunakan vi (belum mencobanya, meskipun saya menganggap itu berfungsi juga):fc -e vi

Anda juga dapat menghapus riwayat :history -c

CATATAN: Jika Anda bukan penggemar perintah, historyada juga file di direktori home Anda ( cd ~), bernama .bash_history (jika Anda menggunakan bash) yang Anda bisa catmelihat semua yang telah diketikkan dalam bash shell.

NlightNFotis
sumber
jawaban yang sangat bagus Anda juga harus melihat panduan yang ditunjuk oleh @radu di askubuntu.com/a/3906/59250
Cerber
3
  1. Javier sudah menjawab yang ini: /var/log/auth.log
  2. Saya telah menemukan artikel yang bagus tentang ini di sini .
  3. Jika pengguna Anda tidak memiliki akses untuk melakukan rooting maka file log Anda harus aman. Anda dapat mencoba membuat beberapa aturan khusus dalam file sudoers untuk membatasi apa yang dapat diakses oleh pengguna Anda dan bagaimana caranya. Anda juga dapat meningkatkan level log untuk daemon sshd.
Radu Cotescu
sumber
3

Selain dari login itu sendiri, tidak ada cara yang aman untuk melacak / mencatat tindakan pengguna setelah mereka masuk, dengan asumsi mereka memiliki pengetahuan dasar Linux mereka akan dapat menonaktifkan shell logging atau hanya menjalankan perintah dari shell lain (misalnya python).

Sebaliknya Anda harus konservatif dalam menyediakan akses ssh, apakah mereka benar-benar membutuhkannya? Sangat tidak umum untuk memberikan akses ssh kecuali Anda berada di bisnis penyedia shell.

João Pinto
sumber