Cách cài đặt phpMyAdmin một cách an toàn

Tác giả sysadmin, T.Mười 14, 2022, 04:23:53 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách cài đặt phpMyAdmin một cách an toàn


phpMyAdmin là một công cụ tuyệt vời để quản lý cơ sở dữ liệu MySQL, nhưng đặt quyền truy cập vào cơ sở dữ liệu của bạn đằng sau giao diện web là một vấn đề bảo mật lớn. Dưới đây là một số cách để giảm thiểu rủi ro liên quan đến việc chạy phpMyAdmin.


1. Tại sao phpMyAdmin là một vấn đề bảo mật?

Thông thường, bạn có một cơ sở dữ liệu sẽ chạy trên máy chủ của mình và chỉ chấp nhận các kết nối từ localhost hoặc có thể từ một máy chủ đáng tin cậy khác. Nếu bạn có một ứng dụng cũng đang chạy trên máy chủ đó, nó sẽ giao tiếp trực tiếp. Không có cách nào để kẻ tấn công có được quyền truy cập trong trường hợp bẻ khóa toàn bộ máy chủ.

phpMyAdmin vượt qua điều này để cung cấp cho bạn một giao diện web để quản lý cơ sở dữ liệu của bạn. Đó là một công cụ rất hữu ích, nhưng đó là một thảm họa đối với bảo mật. phpMyAdmin có toàn quyền truy cập không hạn chế vào cơ sở dữ liệu của bạn, vì nó nhằm thay thế quyền truy cập trực tiếp bằng dòng lệnh. Nếu kẻ tấn công giành được quyền truy cập vào bảng điều khiển web, chúng sẽ có quyền truy cập vào mọi thứ. Và phpMyAdmin thường chỉ được bảo mật bằng một mật khẩu đơn giản.

2. Cài đặt phpMyAdmin và Secure MySQL

phpMyAdmin chạy trên ngăn xếp LAMP (Linux, Apache, MySQL, PHP). Trước khi bạn bắt đầu cài đặt phpMyAdmin, phiên bản MySQL của bạn phải được bảo mật. MySQL cung cấp một tiện ích hữu ích để thực hiện một số tác vụ bảo mật cơ bản:

Mã nguồn [Chọn]
sudo mysql_secure_installation
Thao tác này sẽ hướng dẫn bạn cách thay đổi mật khẩu gốc, tắt đăng nhập từ xa và xóa cơ sở dữ liệu thử nghiệm.

Sau đó, bạn có thể cài đặt phpMyAdmin  như bình thường. Trong quá trình cài đặt, bạn sẽ được nhắc nhập mật khẩu của người dùng quản trị cơ sở dữ liệu (mà bạn nên đặt trong khi cài đặt mysql_secure_installation) và mật khẩu mới để bảo mật phpMyAdmin. Đảm bảo mật khẩu này dài và an toàn, vì đây là điểm phòng thủ cuối cùng trước khi kẻ tấn công có thể truy cập.

Mặc dù vậy, lý tưởng nhất là không có kẻ tấn công nào có cơ hội đoán được mật khẩu của bạn, vì vậy bạn sẽ muốn đặt phpMyAdmin đằng sau một cái gì đó khác để bạn có thể bảo mật nó hơn nữa.

Tùy chọn 1: Khóa Apache xuống và sử dụng chuyển tiếp cổng SSH

Đây là tùy chọn an toàn nhất, nhưng nó chỉ thực sự phù hợp với quyền truy cập của một người dùng, đặc biệt là đối với những người dùng đơn lẻ có toàn quyền truy cập quản trị vào toàn bộ máy chủ, vì nó yêu cầu bạn kết nối qua SSH.

Chuyển tiếp cổng SSH là một phương pháp chuyển tiếp các cổng cục bộ đến một hệ thống từ xa. Ví dụ: bạn sẽ có Apache đang chạy trên máy chủ của mình, lắng nghe trên cổng 80. Nếu bạn đào cổng đó, bạn có thể truy cập nó bằng cách đi tới:

Mã nguồn [Chọn]
https://localhost:80/
... Trong bất kỳ trình duyệt web nào. Theo một nghĩa nào đó, nó gần giống như Apache đang chạy trên hệ thống của bạn. Nhưng cổng 80 không nhất thiết phải mở trên máy chủ của bạn; tất cả lưu lượng được định tuyến qua cổng tiêu chuẩn 22 được sử dụng cho SSH. Bạn sẽ cần đảm bảo SSH được bảo mật bằng khóa SSH và lý tưởng nhất là không chạy trên cổng tiêu chuẩn, vì phương pháp này chỉ an toàn như kết nối SSH của bạn.

Để thực hiện việc này, bạn sẽ cần liên kết Apache với localhost và đảm bảo rằng nó không mở trên internet. Mở /etc/apache2/ports.confvà thay đổi ba câu lệnh nghe để chỉ nghe trên localhost (còn gọi là 127.0.0.1):

Mã nguồn [Chọn]
Listen 127.0.0.1:80

<IfModule ssl_module>
  Nghe 127.0.0.1:443
</IfModule>

<IfModule mod_gnutls>
 Nghe 127.0.0.1:443
</IfModule>

Khởi động lại Apache bằng:

Mã nguồn [Chọn]
sudo service apache2 restart
Và phpMyAdmin sẽ không thể truy cập được. Điều này được mong đợi. Sau khi Apache được cấu hình, bạn có thể tạo đường hầm cho cổng 80 bằng lệnh sau:

Mã nguồn [Chọn]
ssh -L 80:localhost:80 user@server
Sau đó, bạn có thể truy cập phpMyAdmin từ localhost:80 bất kỳ trình duyệt web nào. Trong khi đó, máy chủ của bạn có thể được định cấu hình với tường lửa nghiêm ngặt để không cho phép bất kỳ thứ gì ngoại trừ SSH.

Nếu sshkhông thể liên kết với cổng 80, hãy thử thay đổi cổng đầu tiên thành một số khác và truy cập từ đó trên localhost. Nó vẫn sẽ chuyển đến cổng 80 trên máy tính từ xa. Kết nối này được duy trì cho đến khi bạn thoát ssh. Nếu bạn muốn chạy nó ở chế độ nền, hãy sử dụng -f cờ.

Nếu bạn chỉ muốn phpMyAdmin nghe trên localhost, thay vào đó, bạn có thể chỉnh sửa /etc/apache2/conf-enabled/phpmyadmin.conf và thêm các dòng sau vào Directory khối:

Mã nguồn [Chọn]
Order deny,allow
Deny from all
Allow from 127.0.0.1


Điều này sẽ từ chối mọi thứ ngoại trừ localhost truy cập cài đặt phpMyAdmin, mặc dù bạn vẫn cần mở cổng 80 trong tường lửa của mình để cho phép lưu lượng truy cập thường xuyên.

Tùy chọn 2: Khóa Apache và sử dụng VPN

Nếu bạn cần cho phép nhiều người truy cập mà không cấp quyền truy cập SSH, bạn có thể thiết lập Apache để lắng nghe trên IP riêng của máy và chỉ chấp nhận các kết nối từ cùng một đám mây. Điều này đặc biệt hiệu quả với các dịch vụ như AWS VPC, nơi mỗi máy chủ bạn khởi chạy được tạo trong một mạng ảo.

Để tìm IP riêng của mình, bạn có thể chạy ifconfig và tìm inet địa chỉ trên bộ điều hợp mạng chính của mình:


Địa chỉ này cũng hiển thị từ Bảng điều khiển AWS EC2. Khi bạn đã sao chép địa chỉ, hãy mở /etc/apache2/ports.confvà chỉnh sửa ba Listen lệnh để lắng nghe trên IP riêng:

Mã nguồn [Chọn]
Listen 172.31.87.118:8

<IfModule ssl_module>
  Nghe 172.31.87.118:443
</IfModule>

<IfModule mod_gnutls>
  Nghe 172.31.87.118:443
</IfModule>

Ngoài ra, nếu bạn chỉ muốn bảo mật phpMyAdmin, bạn có thể chỉnh sửa /etc/apache2/conf-enabled/phpmyadmin.conf và chỉ cho phép từ IP riêng:

Mã nguồn [Chọn]
Order deny,allow
Deny from all
Allow from 172.31.87.118

Và khởi động lại Apache.

Bây giờ, để truy cập phpMyAdmin, bạn sẽ cần thiết lập một máy chủ VPN như OpenVPN. Điều này sẽ cho phép bạn truyền máy khách của mình vào đám mây riêng ảo mà máy chủ web của bạn đang chạy và truy cập vào máy chủ đang chạy phpMyAdmin trên IP riêng như thể bạn là một máy chủ khác. Tất nhiên, bạn sẽ cần định cấu hình cài đặt tường lửa của mình để cho phép truy cập từ máy chủ OpenVPN vào phiên bản phpMyAdmin.

Tùy chọn 3: Bảo mật Apache với HTTPS và Xác thực cơ bản

Nếu bạn thực sự cần sử dụng DNS công cộng và có thể truy cập máy chủ của mình, bạn có thể sử dụng Xác thực cơ bản với Apache. Đây chỉ đơn giản là một mật khẩu khác phía trước phpMyAdmin để ngăn người ngoài thực hiện bất kỳ yêu cầu nào đối với ứng dụng phpMyAdmin. Bạn có thể sử dụng tùy chọn này cùng với các tùy chọn khác trong danh sách này, vì nó chỉ là một lớp bảo vệ bổ sung.

Tạo một tệp mật khẩu mới với htpasswd, tệp này đã được cài đặt cùng với Apache (nếu không, nó nằm trong apache2-utils):

Mã nguồn [Chọn]
sudo htpasswd /etc/apache2/.htpasswd phpadmin
Điều này cho phép bạn đặt mật khẩu mới cho người dùng phpadmin và lưu trữ mật khẩu đó /etc/apache2/.htpasswd.

Mở /etc/apache2/conf-enabled/phpmyadmin.confvà định cấu hình nó để sử dụng Xác thực cơ bản với tệp mật khẩu mới được tạo:

Mã nguồn [Chọn]
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

Khởi động lại Apache bằng:

Mã nguồn [Chọn]
sudo service apache2 restart
Và khi bạn cố gắng truy cập phpMyAdmin trong trình duyệt của mình, bạn sẽ được yêu cầu nhập tên người dùng và mật khẩu. Nhập phpadmin và mật khẩu bạn đã tạo và bạn sẽ được phép truy cập. Nếu không, tất cả những gì bạn sẽ thấy là một 401 Unauthorized phản hồi.