Bagaimana cara menghentikan / mencegah SSH bruteforce [ditutup]

22

Saya sangat baru dalam administrasi jaringan, jadi harap perhatikan bahwa saya belum berpengalaman.

Saya memiliki server root Ubuntu dengan panel plesk.

Kemarin saya dan teman-teman memperhatikan bahwa kualitas bicara di TS3 kami menjadi sangat buruk. Saya mengirim beberapa ping ke server dan ada paket loss yang sangat tinggi. Setelah itu saya googled sedikit dan ternyata ada auth.log. Saya mengunduhnya dan menggulirkannya sedikit, kemudian saya menemukan ini:

May 13 10:01:27 rs204941 sshd[9351]: input_userauth_request: invalid user student [preauth]
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): check pass; user unknown
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.220.198.102 
May 13 10:01:29 rs204941 sshd[9351]: Failed password for invalid user student from 112.220.198.102 port 39806 ssh2
May 13 10:01:29 rs204941 sshd[9351]: Received disconnect from 112.220.198.102: 11: Bye Bye [preauth]
May 13 10:01:31 rs204941 sshd[9353]: Invalid user student from 112.220.198.102

Sepertinya seseorang mencoba masuk lebih dari SSH berkali-kali. Saya menggulirkan sedikit ke sekitar, dan melihat, bahwa seseorang ini mencoba menggunakan banyak nama pengguna yang berbeda:student, tech, psi, news,...

Ratusan login ini ditampilkan dalam file.

Saya mencari statistik lalu lintas di situs web pusat data saya. Itu hanya di 17MB per jam. Saya memiliki 100Mbit Backbone, jadi transfer data itu sendiri tampaknya tidak menjadi masalah.

Saat ini saya tidak bisa mendapatkan akses ke server dengan cara apa pun.

Pertanyaan saya adalah: bagaimana saya bisa mendapatkan akses lagi, bagaimana saya bisa mengatasi serangan ini dan mencegah serangan berikut?


sumber
Masih mempelajari barang-barang saya di departemen ini .... Tapi bukankah ini berguna untuk mengetuk port?
mjrider

Jawaban:

37

Bagaimana cara mendapatkan akses?

Tidak jelas mengapa Anda tidak dapat mengakses akun Anda.

Jika mesin Anda sedang diserang atau memuat banyak, Anda harus berbicara dengan penyedia Anda tentang membatasi akses (Pembatasan IP) atau menjadikan server offline (memutuskan sambungan dari Internet).

Anda mungkin juga memerlukan akses di luar jalur yang dapat dibantu oleh penyedia Anda.

Jika seseorang telah mengkompromikan server Anda, Anda mungkin perlu memulihkan dari cadangan atau menggunakan gambar pemulihan.

Bagaimana mencegah serangan pada server Anda, khususnya SSH

cara terbaik untuk mencegah masuknya brute force?

Jangan biarkan mereka sampai ke mesin Anda di tempat pertama! Ada banyak cara untuk menghentikan upaya kekerasan sebelum sampai ke tuan rumah Anda, atau bahkan di tingkat SSH.

Karena itu, melindungi Sistem Operasi Anda dengan sesuatu seperti fail2ban adalah ide bagus. http://en.wikipedia.org/wiki/Fail2ban

Fail2ban mirip dengan DenyHosts ... tetapi tidak seperti DenyHosts yang berfokus pada SSH, fail2ban dapat dikonfigurasikan untuk memantau layanan apa pun yang menulis upaya masuk ke file log, dan alih-alih menggunakan /etc/hosts.deny hanya untuk memblokir alamat / host IP , fail2ban dapat menggunakan Netfilter / iptables dan TCP Wrappers /etc/hosts.deny.

Ada sejumlah teknik keamanan penting yang harus Anda pertimbangkan untuk membantu mencegah masuknya brute force:

SSH:

  • Jangan izinkan root masuk
  • Jangan izinkan kata sandi ssh (gunakan otentikasi kunci pribadi)
  • Jangan dengarkan di setiap antarmuka
  • Buat antarmuka jaringan untuk SSH (mis. Eth1), yang berbeda dengan antarmuka tempat Anda melayani permintaan (mis. Eth0)
  • Jangan gunakan nama pengguna umum
  • Gunakan daftar perbolehkan, dan hanya izinkan pengguna yang membutuhkan Akses SSH
  • Jika Anda memerlukan Akses Internet ... Batasi Akses ke kumpulan IP terbatas. Satu IP statis sangat ideal, namun menguncinya ke xx0.0 / 16 lebih baik dari 0.0.0.0/0
  • Jika mungkin menemukan cara untuk terhubung tanpa Akses Internet, dengan cara itu Anda dapat menolak semua lalu lintas internet untuk SSH (mis. Dengan AWS Anda bisa mendapatkan koneksi langsung yang melewati Internet, itu disebut Direct Connect)
  • Gunakan perangkat lunak seperti fail2ban untuk menangkap setiap serangan brute force
  • Pastikan OS selalu mutakhir, khususnya paket keamanan dan ssh

Aplikasi:

  • Pastikan aplikasi Anda selalu terbaru, dalam paket keamanan tertentu
  • Kunci halaman 'admin' aplikasi Anda. Banyak saran di atas berlaku untuk area admin aplikasi Anda juga.
  • Kata sandi Lindungi area admin Anda, sesuatu seperti htpasswd untuk konsol web akan memproyeksikan setiap kerentanan aplikasi yang mendasarinya dan menciptakan penghalang tambahan untuk masuk
  • Kunci izin file. 'Unggah folder' terkenal karena menjadi titik masuk dari segala macam hal buruk.
  • Pertimbangkan untuk meletakkan aplikasi Anda di belakang jaringan pribadi, dan hanya mengekspos penyeimbang beban front-end dan kotak lompatan (ini adalah pengaturan khas di AWS menggunakan VPC)
Drew Khoury
sumber
1
Saya telah menginstal Fail2ban melalui help.ubuntu.com/community/Fail2ban Tampaknya sangat kuat dan ramah pengguna (Pemberitahuan e-mail, ...)
Saya mendapat pesan dari pusat data saya: Ada serangan banjir (apa ini?) Dan ini membuat koneksi sangat buruk bagi banyak server. Itu bukan serangan pada server saya terutama.
1
Menarik. Jadi sepertinya pusat data saya adalah target serangan itu. Tetapi untuk mengetahui bahwa saya mendapatkan kekerasan di samping ini, juga sangat bagus. Dan Fail2ban benar-benar alat yang bagus. Saya akan membaca tentang Iptables dan Konfigurasi SSH hari-hari berikutnya dan mencoba membuatnya jauh lebih aman.
3
Konfigurasikan openssh untuk mendengarkan port selain 22, dan konfigurasikan iptables untuk menjatuhkan apa pun yang datang ke port 22. Jika Anda tidak berharap untuk ssh in dari negara lain selain dari tanah air Anda, buat daftar blokir di countryipblocks.net/country_selection. php dan gunakan dengan iptables.
ThoriumBR
4

bagaimana saya bisa mengatasi serangan ini dan mencegah serangan berikut

Biasanya saya mengubah port ssh default dari 22 ke yang lain seperti 1122. Ini mencegah banyak serangan otomatis dari bot, tetapi scan port sederhana dapat mendeteksi itu. Bagaimanapun:

vi /etc/ssh/sshd_config

dan edit Port 22 ke Port 1122 , tetapi ini tidak cukup.

Aturan IPTables otomatis tentang bruteforce

saya menggunakan log2iptables https://github.com/theMiddleBlue/log2iptables sebagai gantinya Fail2ban, karena merupakan skrip Bash sederhana yang mem-parsing semua file log dengan ekspresi reguler dan menjalankan iptables. Misalnya ketika 5 pertandingan terjadi, log2iptables menjatuhkan alamat ip tertentu. Ini keren karena menggunakan API Telegram dan dapat mengirim saya pesan di ponsel saya ketika dia menemukan masalah :)

Semoga ini bisa membantu!

Tengah
sumber
8
Saya menduga dari korelasi antara URL proyek dan pegangan SF Anda, bahwa Anda terlibat dengan proyek ini. Silakan lihat pedoman kami tentang referensi produk Anda sendiri, khususnya mencatat persyaratan bahwa " Anda harus mengungkapkan afiliasi Anda dalam jawaban Anda ".
MadHatter mendukung Monica
1

Saya baru saja menyatukan ini, jalankan setiap 15 menit sebagai cronjob dll:

for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
  count1=`grep $z /etc/hosts.deny | wc -l`
  count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
  if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
    current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
    sudo cp /etc/hosts.deny.bak /etc/hosts.deny
    sudo chmod 666 /etc/hosts.deny
    if [ $current ] ; then
      echo "sshd : $current , $z" >> /etc/hosts.deny
    else
      echo "sshd : $z" >> /etc/hosts.deny
    fi
    sudo chmod 644 /etc/hosts.deny
  fi
done
Menandai
sumber
0

Ini adalah solusi alternatif saya untuk serangan SSH. Idenya adalah tetap menutup daemon SSH jika tidak digunakan. Tidak ada port terbuka, tidak ada serangan. Kamu bisa mencobanya. Ini adalah open source https://github.com/indy99/nnet_port_guard

indy99
sumber
1
Selamat Datang di Kesalahan Server! Jawaban Anda menyarankan solusi yang bisa diterapkan untuk pertanyaan tersedia melalui situs web lain. Keluarga Stack Exchange dari situs web T&J umumnya tidak menyukai jenis jawaban ini karena situs web lain dapat bergerak, dihapus, atau diubah. Silakan baca Bagaimana saya menulis jawaban yang bagus? dan pertimbangkan untuk merevisi jawaban Anda untuk memasukkan langkah-langkah yang diperlukan untuk menyelesaikan masalah. Dan jangan lupa untuk mengambil tur situs .
Paul
0

Solusi Otomatis untuk Centos / RHEL untuk Memblokir Aktor Buruk

Berikut ini adalah skrip untuk Centos untuk memeriksa ssh gagal login untuk akun pengguna yang tidak valid dan kata sandi yang salah untuk akun yang valid. Jika IP sumber telah mengenai kami lebih dari 3 kali dan belum ada di daftar tolak, itu akan ditambahkan ke daftar tolak. Saya menjalankan ini setiap 15 menit dari crontab root. Saya juga melarang login root melalui ssh, jadi kombinasinya membuat semuanya tetap tenang.

     #/bin/bash
     # Save a copy of the existing hosts.deny file for safety
     cp /etc/hosts.deny /etc/hosts.deny.bak
     # Get a list of the offending IP addresses and process them
     for z in `grep "Invalid\|Failed" /var/log/secure | awk '{ print $NF }' | sort | uniq`
     do
     # Get the number of times this IP hit us
     hits=`grep "Invalid\|Failed" /var/log/secure* | grep $z | wc -l`
     # Check whether this IP is already blocked
     blocked=`grep $z /etc/hosts.deny | wc -l`
     # If they hit us more than 3 times and are not already on the deny list
     # add them to the deny list
     if [ $hits -gt 3 -a $blocked -eq 0 ]
     then
          echo "sshd : $z" >> /etc/hosts.deny
     fi
     done
David Lash
sumber
1
Lihatlah seorang fail2banyang melakukan hal yang sama dan teruji dalam pertempuran.
Patrick Mevzek