Làm cách nào để Tự động và Tạm thời chặn một địa chỉ IP tạo quá nhiều lần truy cập trên Máy chủ trong một khoảng thời gian ngắn?


21

Một trong những máy chủ LAMP của tôi gần đây đã bị một số loại bot script tìm kiếm khai thác. Từ vẻ bề ngoài của nó, nó đã thực hiện rất nhiều yêu cầu trong một giây, đến nỗi nó làm quá tải RAM trên máy chủ và khiến toàn bộ trang web của tôi bị hỏng trong một giờ. Tất cả "attacK" đó đến từ một địa chỉ IP duy nhất.

Vậy làm cách nào tôi có thể tự động và tạm thời chặn một địa chỉ IP tạo quá nhiều lần truy cập trên Máy chủ LAMP của tôi trong một khoảng thời gian ngắn? Công cụ tốt nhất cho công việc là gì và tôi nên giải quyết vấn đề này ở cấp Hệ điều hành hay thông qua PHP?

Câu trả lời:


25

Fail2Ban . Giải pháp vàng / giải pháp mặc định cho vấn đề này trên nền tảng Linux.


Thú vị, cảm ơn. Làm thế nào để điều này đối phó hoặc tác động đến các trình thu thập dữ liệu web như Google?
Lập trình viên vào

1
@Programmer Phụ thuộc vào cách bạn định cấu hình sự việc, nhưng bạn sẽ không mong muốn trình thu thập dữ liệu web nhập mật khẩu xấu, tìm kiếm khai thác hoặc xử lý đủ số lần truy cập để kích hoạt ngưỡng được xác định rõ - vì vậy chỉ cần kiểm tra nhật ký của bạn để tìm ra những gì để xác định ngưỡng của bạn tại.
HoplessN00b

5

Bạn nên tránh cố gắng làm điều này với PHP. Vào thời điểm PHP tham gia, đã quá muộn - bộ nhớ đã được phân bổ.

Bạn có thể cấm địa chỉ IP ở bất kỳ lớp nào, nhưng mức thấp nhất sử dụng ít tài nguyên nhất là tuyến đường bạn muốn đi. Đây thường là tường lửa. Ít nhất, iptables (tường lửa linux) là những gì bạn muốn sử dụng. Có những công cụ mà người khác đã đề cập, chẳng hạn như Fail2Ban, có thể tự động hóa việc này cho bạn. Tường lửa bên ngoài sẽ tốt hơn.

Bên cạnh việc cố gắng cấm các địa chỉ IP vi phạm, bạn nên cố gắng sử dụng tốt hơn các tài nguyên của mình. Nếu một yêu cầu mất ít tài nguyên hơn, sẽ mất nhiều thời gian hơn để một cuộc tấn công có hiệu quả.

Apache cũng sử dụng rất nhiều bộ nhớ. Nếu bạn đang sử dụng mod_php, điều đó còn tồi tệ hơn vì PHP được tải bên trong mọi tiến trình con của Apache. Điều này có nghĩa là ngay cả các yêu cầu đối với nội dung tĩnh (css / js / hình ảnh) đang tải PHP ngay cả khi PHP không được sử dụng. Bạn có thể giải quyết vấn đề này bằng cách sử dụng FastCGI thay thế. mod_fcgid là một lựa chọn tốt.

Ngoài ra còn có các máy chủ web khác có hiệu quả tài nguyên hơn. Nginx là yêu thích của tôi. Ngoài ra còn có Lighttpd. Rất nhiều người như Litespeed (thay thế cho Apache).

Nếu bạn muốn gắn bó với Apache, hãy cân nhắc điều chỉnh nó tốt nhất có thể. Xem xét vô hiệu hóa .htaccess. Đây là một lời giải thích tốt tại sao .


2

Để kiểm soát hoặc chặn lưu lượng truy cập http, bạn có thể sử dụng:

Tuy nhiên, lưu ý rằng các công cụ này cũng có thể chặn / làm chậm webspiders và do đó ảnh hưởng đến SEO.


2
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

ossec có thể thực hiện loại điều này một cách tự động và minh bạch dựa trên các nhật ký hệ thống.


1
Bạn có thể giải thích chính xác những gì dòng mã đầu tiên làm, chính xác? Ngoài ra, làm thế nào để ossec so sánh với fail2ban? Cảm ơn.
Lập trình viên vào

2
Đó là một quy tắc iptables. Tôi tin rằng nó tính có bao nhiêu lần thử kết nối mới được thực hiện và loại bỏ chúng sau khi chúng vượt quá 4 lần thử trong vòng 60 giây. Tôi khuyến khích bạn nhìn man iptablesvà xem ý nghĩa của mỗi lá cờ và cách chúng hoạt động cùng nhau.
Lu-ca

-3

Không,

--- lũ ---

iptables -N logdrop iptables -A logdrop -m gần đây --set --name danh sách đen

iptables -Một giới hạn đăng nhập -m --limit 1 / s --limit-nổ 1 -j LOG --log-prefix "Flood:"

iptables -A đăng nhập -j DROP

iptables -N ddos ​​iptables -A ddos ​​-m Recent --rcheck --name blacklist --seconds 300 --hitcount 1 -j logdrop iptables -A ddos ​​-m Recent --set --name --update - đặt tên lại - giây thứ 60 - đếm 2 -j đăng nhập iptables -A ddos ​​-j TRẢ LẠI

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.