Làm cách nào tôi có thể chặn các nỗ lực hack nhắm mục tiêu phpMyAdmin?


35

Trang web của tôi nhận được hàng ngàn lượt truy cập hàng ngày từ các IP khác nhau đang cố gắng truy cập:

/php-myadmin/
/myadmin/
/mysql/

... Và hàng ngàn biến thể khác. Không có thư mục nào trong số này tồn tại, tôi thậm chí không có phpmyadmin trên máy chủ của mình.

Tôi không nghĩ bất kỳ nỗ lực nào trong số này đã thành công, tuy nhiên họ phải chịu trách nhiệm về tài nguyên của máy chủ và lãng phí băng thông, vì vậy tôi muốn ngăn chặn chúng nếu có thể. Tôi đã chặn một số IP này nhưng chúng vẫn quay trở lại với các IP mới, có cách nào tôi có thể ngăn chặn điều này lâu dài hơn không?


8
Hàng ngàn lượt truy cập mỗi ngày là không có gì. Bạn đang thực sự gặp khó khăn về hiệu suất hay bạn chỉ đang giả định? Một vài ngàn 404 trong một ngày thực sự không có gì .
MDMarra

Không, tôi không gặp vấn đề về hiệu suất. Nhưng nó làm tôi khó chịu và tôi tự hỏi liệu tôi có thể làm được gì không.
amba88

6
Hãy cẩn thận với việc chặn dựa trên IP - rất nhiều IP cuối cùng đã được chuyển sang người dùng hợp pháp. Ngoài ra, một số người dùng hợp pháp có thể bị nhiễm như một phần của mạng botnet. Nếu bạn thực hiện bất kỳ chặn dựa trên IP nào, vui lòng đảm bảo rằng nó có thời hạn sử dụng khá ngắn.
Bob

Không đề cập đến mod_securitytrong chủ đề này, vì vậy hãy kiểm tra xem . Lưu ý một bình luận bên dưới lưu ý rằng điều này thực sự sẽ gây ra nhiều công việc hơn được thực hiện bởi máy chủ. Vì vậy, có lẽ mod_evasivecũng sẽ tốt để thực hiện . fail2ban, nhưng được liệt kê dưới đây.
mbrownnyc

Câu trả lời:


42

Đừng lo lắng về nó. Phục vụ 404 là một khối lượng công việc nhỏ, rất nhỏ để một máy chủ web thực hiện. Bạn có thể có thể phục vụ mười 404 giây một giây bằng 486. Băng thông trên 404 là không đáng kể; một yêu cầu NHẬN nhỏ và một phản hồi 404 nhỏ.

Nghiêm túc; đừng lo lắng về nó Đây chỉ là một phần và bưu kiện của việc chạy một máy chủ trên internet.


14
Hell-Banning: Phục vụ một trang bình thường (200 OK) với đầu ra vô nghĩa. Các công cụ mà bọn trẻ sử dụng sẽ báo cáo trang được tìm thấy và chúng sẽ cần điều tra bằng tay (một trang đăng nhập giả chắc chắn sẽ là một thiết bị ma quỷ) :)
arul

4
@arul - Một số kẻ tấn công có thể coi đây là một thách thức và chú ý nhiều hơn đến máy chủ của bạn. Việc phục vụ một 404 nhỏ hơn hoặc khác nhau có hữu ích ở đây không? Ví dụ: nếu máy chủ thường phục vụ 404 với liên kết hỗ trợ, thay vào đó, nó có thể phục vụ 404 đơn giản không có nội dung cho các url được nhắm mục tiêu này không?
Freiheit

1
Mục đích là để làm cho đối thủ dành thêm tài nguyên (thời gian) để phân tích kết quả. Nếu bạn nhận được 404, bạn biết rằng không có khả năng cuộc tấn công hoạt động. Kết quả OK có độ dài thay đổi là [không cần điều tra thêm] không thể phân biệt với kết quả dự kiến. Họ chạy các bản quét này vì sự kiên nhẫn không phải là đức tính của họ, vì vậy hãy tiêu diệt chúng và họ sẽ dừng lại :)
arul

1
Đối với các điểm thưởng, trả về một trang tĩnh trông giống hệt trang phpmyadmin thật, nhưng hoàn toàn không hoạt động.
captncraig

1
Để có thêm điểm thưởng, hãy tạo độ trễ 0,5 - 1 giây. Điều này sẽ không làm tăng đáng kể thời gian tải bởi người dùng hợp pháp nhưng nó sẽ làm chậm quá trình quét mà kẻ xấu đang làm. (Bạn chỉ cần đảm bảo rằng máy chủ của bạn có khả năng giữ các kết nối mở lâu hơn mức cần thiết và vẫn xử lý các yêu cầu hợp pháp.)
Moshe Katz

38

Thật không may cho bạn đây là cách Internet hoạt động. Chỉ cần bỏ qua nó. Hàng ngàn bot / trojan quét Internet. IP nguồn sẽ luôn luôn ngẫu nhiên. Không thể chữa khỏi.

Giải pháp 100% duy nhất để loại bỏ lưu lượng truy cập được minh họa bên dưới: nhập mô tả hình ảnh ở đây

Một cách khác là:
- để di chuyển bằng https / http từ cổng 80/443 sang thứ khác. Bots thường không tìm kiếm máy chủ http trên tất cả các cổng 65k khác.
- sử dụng VPN để kết nối với máy chủ (tôi đoán điều này là không thể nếu bạn lưu trữ một trang web công cộng).


LOL +1 cho sơ đồ :-) Tôi có vấn đề gây phiền nhiễu này (cũng như tất cả chúng ta) trên một trang web tĩnh và đây là câu trả lời hữu ích nhất.
Dave Everitt

30

Những gì bạn muốn là Fail2ban (giả sử đây là máy linux, bạn không nói ...)

Fail2ban là gì?

Fail2ban sẽ phân tích các bản ghi hệ thống, tìm kiếm các biểu thức chính quy cụ thể để chặn. Khi tìm thấy kết quả khớp (hoặc một số kết quả trùng khớp từ cùng một IP, tùy thuộc vào cách bạn định cấu hình nó), nó sẽ chặn, thông thường thông qua IPTables. Thông thường, điều này được sử dụng để chặn các nỗ lực xác thực thất bại đối với SSH hoặc máy chủ web.

Bạn định cấu hình nó để cấm chúng trong một khoảng thời gian nhất định (có thể là vài phút, có thể là vài ngày ... tùy thuộc vào mức độ tồn tại của chúng), sau đó lệnh cấm sẽ hết hiệu lực, trừ khi chúng thử lại.

Làm thế nào điều này giúp chặn các bot quét phpmyadmin?

Nó có thể dễ dàng được sử dụng để phù hợp với các dấu hiệu phổ biến của một cuộc tấn công, như cố gắng truy cập các thư mục phpmyadmin không tồn tại. Bạn sẽ phải tìm ra biểu thức chính xác chính xác để khớp với các lần thử đó và đảm bảo bạn không chặn người dùng hợp pháp.

Cấu hình được đưa ra trong bài đăng trên blog này có thể hoạt động nguyên văn hoặc yêu cầu một số điều chỉnh cho thiết lập của bạn.

Tại sao tôi nên chặn chúng? Các lỗi 404 không tốn nhiều tiền

Chặn chúng trong iptables DOES có một số cách sử dụng - tỷ lệ cược là nếu chúng đang kiểm tra các lỗ hổng phpmyadmin, chúng cũng có thể thử các dịch vụ khác để tìm lỗ hổng, cho đến khi chúng đạt được thứ gì đó hoạt động. Cấm chúng sẽ khiến hầu hết các bot / script bỏ cuộc sau một lúc, và chúng sẽ chuyển sang các mục tiêu tốt hơn.

Ngay cả khi quét không tốn nhiều chi phí (trừ khi chúng thực sự tìm thấy lỗ hổng), chúng sẽ làm ngập nhật ký của bạn khiến việc xem các cuộc tấn công và sự cố thành công với máy chủ web của bạn trở nên khó khăn hơn.

Như bình luận bên dưới nói, Fail2ban yêu cầu một số tài nguyên hệ thống. Nhưng không nhiều. Ít nhất tôi có thể nói rằng tôi chưa bao giờ gặp vấn đề về hiệu năng mà tôi có thể gán cho Fail2ban. Tuy nhiên, tôi đã gặp vấn đề về hiệu năng từ các tập lệnh rất tích cực khi cố gắng tạo ra mật khẩu hoặc ném hàng ngàn lần thử SQL và các khai thác khác mỗi giây vào máy chủ của tôi. Chặn chúng ở cấp tường lửa cần ít tài nguyên hơn FAR so với chặn chúng ở cấp máy chủ / ứng dụng. Nó cũng có thể được mở rộng để chạy các tập lệnh tùy chỉnh để cấm địa chỉ IP - vì vậy thay vì cấm chúng trong IPtables, bạn có thể cấm nó trong tường lửa phần cứng hoặc gửi email cho ai đó nếu cùng một người cố gắng tấn công bạn để bạn có thể khiếu nại đến ISP của họ hoặc yêu cầu trung tâm dữ liệu của bạn chặn họ trên tường lửa của họ.

Còn lời khuyên nào nữa không?

Điều đáng lưu ý là bạn nên liệt kê một vài địa chỉ IP mà bạn kiểm soát để bạn không vô tình tự khóa mình.


6
đó sẽ là một công cụ khai thác tài nguyên :) Tôi nghĩ rằng bạn sẽ sử dụng nhiều chu kỳ CPU trên Fail2ban hơn là chỉ phục vụ đôi khi 404 :)
Bartłomiej Zarzecki

4
@ BartłomiejZarzecki Bảo mật tốt hơn luôn đòi hỏi nhiều tài nguyên hơn
user11153

3
@ heinrich5991 nó sẽ chặn sau những lần thử đầu tiên . Không có sự khác biệt đối với một số lần quét, nhưng sự khác biệt rất lớn đối với các lần quét thử nhiều lần trên máy chủ.
Cấp

2
Fail2ban (hoặc tương tự) hy vọng sẽ không chỉ dành cho / phpmyadmin. Giả sử anh ta có bất kỳ loại quyền truy cập từ xa nào, việc chặn loại F2B (3 mật khẩu và bạn ... đã ... biến mất!) Không chỉ dành cho 404s.
WernerCD

3
Nếu bạn làm điều gì đó như thế này, hãy đảm bảo đặt lệnh cấm hết hạn tương đối nhanh (tối đa một vài giờ) hoặc bạn có nguy cơ khóa người dùng hợp pháp nếu cuộc tấn công đến từ một IP được phân bổ động.
Jens Neubauer

7

Những gì tôi làm là đưa một tập lệnh nhỏ vào thư mục thích hợp, để nó chạy nếu ai đó truy cập / phpmyadmin /. Tập lệnh đó không làm gì khác ngoài việc gọi iptables (trong Linux), nó chặn địa chỉ IP truy cập tập lệnh trong 30 phút (sau đó, một cron-job sẽ xóa chuỗi iptables mà địa chỉ IP được thêm vào).

Ưu điểm so với fail2ban là bạn không sử dụng bất kỳ tài nguyên nào để phân tích nhật ký nhật ký hệ thống / nhật ký truy cập. Tất nhiên, nhược điểm là bạn không kiểm tra bất cứ điều gì khác, ngoại trừ truy cập địa chỉ rất cụ thể này.

Tại sao tôi làm điều này? Chắc chắn, việc phục vụ 404 sẽ dễ dàng cho máy chủ, nhưng tôi không muốn họ chọc ngoáy, đơn giản như vậy. Tôi muốn lãng phí thời gian của công cụ của họ, chờ máy chủ trả lời, thử lại cho đến khi cuối cùng nó bỏ cuộc. Ngoài ra, nếu bạn không chặn chúng, họ sẽ thử rất nhiều URL khác nhau trước khi cuối cùng tiếp tục - đôi khi hơn một nghìn. Tùy thuộc vào công cụ, nó có thể "đẹp" và loại bỏ chúng trong vài giờ hoặc nó có thể không quan tâm và đập máy chủ của bạn với tất cả chúng trong vòng vài phút.

Tại sao tôi không phục vụ một trang hợp lệ? Công cụ của họ có thể dừng quét bạn và cảnh báo người trượt tuyết đang chạy nó - người sau đó phải kiểm tra thủ công. Điểm nổi bật của việc này là họ sẽ cung cấp cho máy chủ của bạn một cái nhìn gần hơn nhiều so với những gì họ có, nếu việc quét của họ không khiến bạn bật lên trong kết quả của họ. Có thể họ sẽ chọc ngoáy thêm một chút, có thể là một vài lần quét cổng, có thể bạn khiến họ phát điên và họ khởi chạy một DoS để xem họ có thể làm gì không. Đơn giản chỉ cần chặn chúng - theo quan điểm của họ khiến máy chủ hết thời gian khi họ truy cập tập lệnh phpmyadmin - sẽ lãng phí thời gian của công cụ của họ, đồng thời tránh sự chú ý không mong muốn.

Nếu bạn có phpMyAdmin trên máy chủ, một giải pháp hiệu quả có thể là đưa nó vào một thư mục riêng và sử dụng kiểm soát mật khẩu của máy chủ web (.htpasswd cho Apache) để chặn truy cập trước khi mọi thứ đến được.


Nghe có vẻ là một lựa chọn thay thế tốt ... nhưng không yêu cầu máy chủ web có thể chạy tập lệnh với quyền root?
Cấp

1
Điều chỉnh bí danh cho các công cụ như phpMyAdmin. Thay đổi đơn giản thành tệp cấu hình để thay đổi tệp thành adminMyPhp hoặc chrisPhpAdmin ... hoặc một cái gì đó sẽ không được xử lý theo kịch bản.
WernerCD

Xin lỗi vì trả lời trễ - nó không (nhất thiết). Bạn có thể sử dụng sudo (với tệp sudoers) để cho phép máy chủ web thực thi một tập lệnh nổi tiếng (và chỉ tập lệnh đó) với quyền root. Tập lệnh đó sẽ chấp nhận (dưới dạng tham số) IP và bạn kiểm tra nó theo biểu thức thông thường ([0-9] + \. [0-9] + \. [0-9] + \. [0-9] + ) để đảm bảo rằng nó không tiêm bất cứ thứ gì kỳ lạ.
Aaa

1

FWIW chúng tôi chỉ giới hạn quyền truy cập vào / phpmyadmin / đối với các Địa chỉ IP được liệt kê trong danh sách trắng.

Chúng tôi cũng sử dụng mod_evasive (trên apache2) để ngăn chặn các cuộc tấn công theo kịch bản của DOS / hành vi kém.


1

liên kết công cụ quản trị mysql với địa chỉ loopback máy 127.0.0.1 của bạn

sau đó sử dụng ssh với cổng chuyển tiếp để truy cập vào quản trị viên của bạn.

thêm một lớp bảo mật có thể khá minh bạch.


-4

Cách tốt nhất mà chúng tôi tìm thấy là mật khẩu bảo vệ thư mục mà phpmyadmin đang ở. Ngoài ra, đừng sử dụng bất cứ thứ gì liên quan đến phpmyadmin làm tên thư mục: pma, phpmy, v.v ...


2
Từ câu hỏi: None of these directories exist, I don't even have phpmyadmin on my server.- Anh ấy không hỏi làm thế nào để làm cứng các bản cài đặt hiện có của mình ... anh ấy hỏi phải làm gì với những thứ không tồn tại. Bạn không thể đổi tên PMAhoặc những gì có bạn nếu nó không tồn tại.
WernerCD
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.