Làm cho máy chủ Nginx phản hồi chậm


8

Vì vậy, tôi có một spammer trên trang web của tôi. Tôi có thể chặn IP của anh ấy bằng cách sử dụng 'từ chối', nhưng sau đó anh ấy sẽ thay đổi IP của mình và tôi sẽ phải tiếp tục chơi trò mèo vờn chuột với anh ấy.

Thay vào đó, tôi tò mò liệu có cách nào để cấu hình nginx để phản hồi IP của mình chậm hơn không.

Bằng cách đó, có lẽ anh ta sẽ quyết định trang web không hoạt động chính xác và để tôi yên.

Cảm ơn

Câu trả lời:


7

Chỉ thị Nginx limit_ratecho phép bạn chỉ định tốc độ bạn muốn xếp hạng phản hồi giới hạn, ví dụ:

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

Tài liệu Nginx ở đây . (từ tài liệu bạn sẽ thấy rằng phần phụ trợ của bạn có thể đưa ra quyết định và yêu cầu Nginx đánh giá giới hạn khách hàng)

Làm thế nào bạn có được bộ $slowbiến này phụ thuộc vào cấu hình của bạn. Cách đơn giản nhất là đặt nó qua geoánh xạ:

geo $slow {
  default    0;

  1.2.3.0/24 1;
}

Ánh xạ "Geo" là một phụ thuộc $slowdựa trên địa chỉ IP của máy khách. Đó là 0 theo mặc định và 1 nếu địa chỉ IP của máy khách nằm trong 1.2.3.0/24mạng con. Xem tài liệu Nginx về "địa lý" tại đây

Sử dụng "fail2ban" là một sự phát triển hợp lý của toàn bộ giải pháp này. Bạn có thể sử dụng "fail2ban" để tự động phát hiện hoạt động bất thường và thu thập IP cho Nginx và sau đó tải lại Nginx để nó đọc lại danh sách các địa chỉ IP cần được làm chậm và / hoặc bị chặn.


5

Nếu bạn muốn lừa người dùng vi phạm nghĩ rằng anh ta vẫn không bị bạn chú ý, bạn có thể sử dụng mô-đun giới hạn yêu cầu của nginx ( http://wiki.nginx.org/HttpLimitReqModule ).

Đầu tiên xác định vùng giới hạn yêu cầu:

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

Vùng này sẽ sử dụng địa chỉ IP của người phạm tội để xác định và giới hạn các yêu cầu trong 30 phút mỗi phút (1/2 giây). Xin lưu ý rằng kích thước bộ nhớ của vùng được đặt thành 1 MiB, có nghĩa là nó có thể xử lý 1 MiB / 64 byte cho mỗi nhóm yêu cầu = 16384 địa chỉ spam (có thể là quá mức cho trường hợp của chúng tôi). Điều chỉnh tương ứng, nếu bạn phải.

Tiếp theo, chúng tôi xác định chỉ thị sẽ thực sự định tuyến người phạm tội thông qua bộ giới hạn bằng cách sử dụng một (ác, không may) nếu trường hợp:

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

Bạn có thể xem thành quả lao động của mình trong nhật ký truy cập của máy chủ.

Lưu ý rằng hack này không mở rộng tốt, vì bạn sẽ phải cập nhật tệp cấu hình mỗi khi người vi phạm thay đổi IP (hãy để một mình bao gồm nhiều IP hơn trong đó có nghĩa là nhiều hơn nếu có), nhưng nó hoạt động.


1
Bạn cũng có thể kết hợp câu trả lời của tôi với khối địa lý của Alexander Azarov và làm cho nó có thể mở rộng hơn!
Panagiotis PJ Papadomitsos

2

Cách tốt nhất để đối phó với người gửi thư rác này là cài đặt và cấu hình fail2ban thích hợp. Fail2ban sẽ tìm kiếm các mẫu trong tệp nhật ký và chặn tất cả các ips spam trang web của bạn. Tất nhiên, bạn phải cấu hình nó để tìm kiếm mô hình thích hợp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.