Bảo mật phpMyAdmin

Mở đầu

Mặc định, MySQL hoặc MariaDB server sẽ được quản trị bằng giao diện dòng lệnh (command line interface). Nếu cảm thấy bất tiện với điều này, bạn có thể cài đặt PhpMyAdmin – một công cụ quản trị database bằng giao diện web (Web Interface) rất thân thiện và phổ biến. Tuy nhiên đây cũng là một trong những yếu điểm dễ bị các attacker khai thác nhằm mục đích truy cập trái phép vào database của bạn.

Để hạn chế rủi ro này, hôm nay mình chia sẻ một số thủ thuật (security best practice) để tăng cường bảo mật cho giao diện phpMyAdmin.

1. Giới hạn địa chỉ IP  truy cập (Restricting Access to a Specific IP Address)

Điều đầu tiên chúng ta nên nghĩ khi muốn hạn chế các cuộc tấn công chắc chắn là giới hạn IP truy cập vào phpMyAdmin (càng ít người có quyền truy cập vào database càng tốt 😆 ). Có nhiều cách thức để đạt được điều này như: giới hạn ở tầng network bởi firewall cứng, OS firewall,… hoặc trên tầng application ( bởi web server).

Trong phạm vi bài viết này, mình chỉ giới thiệu về cách giới hạn địa chỉ IP truy cập bởi web server như Nginx, Apache.

  • Dưới đây là ví dụ cấu hình trên Nginx chỉ cho phép truy cập đến phpMyAmin từ các IP trong dải mạng 192.168.1.0/24:
    location /phpmyadmin {

        root /home/nginx/phpmyadmin/public_html/;
        index  index.php;
        access_log  /home/nginx/logs/phpmyadmin-access.log  main;
        error_log  /home/nginx/logs/phpmyadmin-error.log;

        # Restrict access to phpMyAdmin
        allow 192.168.1.0/24; # my IP
        deny all;
		...
	}

Bạn chỉ cần thay thế IP cụ thể hoặc dải IP vào mục allow của location block xử lý cho phpMyAdmin và nhớ reload Nginx để apply cấu hình.

  • Cấu hình với Apache: bạn cần tìm và mở file cấu hình Apache phpMyAdmin, ví dụ /etc/phpmyadmin/apache.conf

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
AllowOverride All
AllowOverride All
...

Order Deny,Allow
Deny from All
Allow from 192.168.1.0/24

</Directory>
...

Tương tự nhớ reload Apache sau khi cấu hình restristed IP.

2. Bật HTTPS và cấu hình SSL

Tip thứ hai mình đề cập đến là phải bật giao thức https và cấu hình SSL  cho giao diện phpMyAdmin để ngăn chặn các kiểu tấn công MITM (man-in-the-middle) hoặc sử dụng công cụ bắt gói tin để dò username, password khi người dùng đăng nhập vào database.

Hiện nay, https và ssl là một tiêu chuẩn gần như bắt buộc với mọi web service.

3. Cấu hình password protect cho phpMyAdmin URL

Với việc sử dụng chính thông tin user database để đăng nhập nên việc cấu hình thêm password protect (hay còn gọi là http basic authen) cho phpMyAdmin là cần thiết. Đây được coi như một lớp bảo mật tăng cường khi người dùng truy cập vào đường dẫn phpMyAdmin cần phải vượt qua xác thực do web server cung cấp.

Chúng ta có thể dễ dàng bật password protect trên những web server phổ biến như: Apache, Nginx,… Trong phạm vi bài viết này, mình hướng dẫn cấu hình trên Nginx như sau:

  • Đầu tiên, có thể sử dụng tool htpasswd (nếu chưa có sẵn trên OS, bạn có thể chủ động cài httpd-tools) để tạo user và password:

htpasswd -c /etc/nginx/.htpasswd <your-username>

Lệnh trên sẽ yêu cầu bạn nhập vào xác nhận mật khẩu cho user, sau khi hoàn tất thông tin về username và password sẽ được trong file /etc/nginx/.htpasswd (dưới dạng mã hóa). Tất nhiên, bạn hoàn toàn có thể tùy biến username và đường dẫn file lưu file .htpasswd theo ý thích.

Tiếp theo, bạn thêm đoạn mã sau vào file cấu hình phpMyAdmin của Nginx:

auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;

Với:

  • auth_basic: Nội dung tùy ý đặt trong cặp dấu “”
  • auth_basic_user_file: đường dẫn đến file .htpasswd

Đừng quên reload Nginx sau khi cấu hình:

systemctl reload nginx

4. Disable Root Login

Một lưu ý quan trọng nữa là chỉ cung cấp quyền truy cập nhỏ nhất có thể vào một hoặc một số database cụ thể, đừng bao giờ cho phép đăng nhập bằng tài khoản mysql root.

Theo mặc đinh, root login đã được tắt trên phpMyAdmin. Tuy nhiên để đảm bảo bạn cần mở file cấu hình phpMyAdmin: /etc/phpMyAdmin/config.inc.php

Tìm và cập nhật nội dung như sau:

$cfg['Servers'][$i]['AllowRoot'] = FALSE;

Nhớ reload Nginx nếu có thay đổi cấu hình.

5. Tùy biến cấu hình PHP cho phpMyAdmin

Ngoài ra, bạn có thể thêm một số tùy biến bên dưới vào file cấu hình PHP cho phpMyAdmin (/etc/phpMyAdmin/config.inc.php):

/* Custom Security Configuration */

$cfg['LoginCookieValidity'] = 3600;
$cfg['LoginCookieRecall'] = false;
$cfg['AllowUserDropDatabase'] = false;
$cfg['ShowServerInfo'] = false;
$cfg['RestrictPaths'] = yes;

Tùy biến trên sẽ thiết lập session timeout (tự động đăng xuất sau một giờ) cho trang phpMyAdmin, đồng thời không cho phép user xóa database trên giao diện này.

Lời kết

Trên đây chỉ là một vài mẹo đơn giản nhưng giúp tăng cường bảo mật đáng kể cho giao diện phpMyAdmin của bạn.Nếu có bất kỳ thắc mắc, góp ý về nội dung bài viết hoặc anh em có thêm những tip hay khác có thể chia sẻ dưới phần bình luận nhé.

Chúc anh em thành công!

 

 

Giới thiệu Hiệp Phạm 116 bài viết
Hiệp hiện đang là thành viên nhóm tác giả của HIEPSHARING.COM. Thích tìm hiểu, nghiên cứu Ethical Hacking, SysAdmin, DevOps và những công nghệ mới. Phương châm sống của mình: "Chỉ cần bản thân không bỏ cuộc, chậm chút cũng không sao."

Hãy bình luận đầu tiên

Để lại một phản hồi

Thư điện tử của bạn sẽ không được hiện thị công khai.


*