Buat server Nginx merespons dengan lambat

8

Jadi saya punya spammer di situs saya. Saya bisa memblokir IP-nya menggunakan 'deny', tetapi kemudian dia hanya akan mengubah IP-nya dan saya harus terus bermain kucing dan tikus dengannya.

Sebaliknya, saya ingin tahu apakah ada cara untuk mengkonfigurasi nginx untuk merespons IP-nya lebih lambat.

Dengan begitu mungkin dia hanya akan memutuskan situsnya tidak berfungsi dengan benar dan tinggalkan aku sendiri.

Terima kasih

vinhboy
sumber

Jawaban:

7

Arahan Nginx limit_ratememungkinkan Anda menentukan kecepatan yang ingin Anda nilai tanggapan batas, misalnya

location / {
  if ($slow) {
    limit_rate 4k;
  }
}

Dokumentasi Nginx ada di sini . (dari dokumentasi Anda akan melihat bahwa backend Anda dapat membuat keputusan dan meminta Nginx untuk menilai batas klien)

Bagaimana Anda mendapatkan $slowset variabel ini tergantung pada konfigurasi Anda. Cara termudah adalah mengaturnya melalui geopemetaan:

geo $slow {
  default    0;

  1.2.3.0/24 1;
}

"Geo" pemetaan adalah ketergantungan $slowberdasarkan pada alamat IP klien. Ini 0 secara default dan 1 jika alamat IP klien di 1.2.3.0/24subnet. Lihat dokumentasi Nginx di "geo" di sini

Menggunakan "fail2ban" adalah evolusi yang masuk akal dari seluruh solusi ini. Anda dapat menggunakan "fail2ban" untuk secara otomatis mendeteksi aktivitas yang tidak biasa dan mengumpulkan IP untuk Nginx dan kemudian memuat ulang Nginx sehingga membaca kembali daftar alamat IP yang perlu diperlambat dan / atau diblokir.

Alexander Azarov
sumber
5

Jika Anda ingin menipu pengguna yang menyinggung itu dengan berpikir bahwa ia masih tidak diperhatikan oleh Anda, Anda dapat menggunakan modul limit permintaan nginx ( http://wiki.nginx.org/HttpLimitReqModule ).

Pertama-tama tentukan zona batas permintaan:

http {
    limit_req_zone  $binary_remote_addr  zone=spammers:1m   rate=30r/m;
}

Zona ini akan menggunakan alamat IP pelaku untuk mengidentifikasi dan membatasi permintaan menjadi 30 per menit (1/2 detik). Harap dicatat bahwa ukuran memori zona diatur ke 1 MiB, yang berarti dapat menangani 1 MiB / 64 byte per ember permintaan = 16384 alamat spammer (yang mungkin merupakan pembunuhan berlebihan untuk kasus kami). Sesuaikan masing-masing, jika Anda harus.

Selanjutnya, kami mendefinisikan arahan yang benar-benar akan mengarahkan pelaku melalui pembatas menggunakan (kejahatan, sayangnya) jika terjadi:

location / {
    if ($remote_addr = 1.2.3.4) {
        limit_req   zone=spammer  burst=5;
    }
}

Anda dapat menonton hasil kerja Anda di log akses server.

Perhatikan bahwa peretasan ini tidak skala dengan baik, karena Anda harus memperbarui file konfigurasi setiap kali pelaku mengubah IP (apalagi memasukkan lebih banyak IP di sana yang berarti lebih banyak jika ada kasus), tetapi ia berfungsi.

Panagiotis PJ Papadomitsos
sumber
1
Anda juga dapat menggabungkan jawaban saya dengan blok geo Alexander Azarov dan membuatnya lebih scalable!
Panagiotis PJ Papadomitsos
2

Cara terbaik untuk menangani spammer ini adalah memasang dan mengkonfigurasi fail2ban dengan benar. Fail2ban akan mencari pola dalam file log dan memblokir semua ips yang mengirim spam ke situs Anda. Tentu, Anda harus mengkonfigurasinya untuk mencari pola yang tepat.

B14D3
sumber