---
title: 'Bảo mật trang quản trị bằng phương pháp IP whitelisting'
date: '2026-06-24T21:51:57+07:00'
author: XV5HP
tags:
  - lazyblog
draft: false
summary: 'Không có cửa thì làm gì có chỗ mà đọc thần chú. Hướng dẫn vùi lấp trang quản trị admin của LazyBlog bằng IP allowlisting trên Caddy — cả khi dùng lẫn không dùng Cloudflare'
series: lazyblog
part: 2
---

Khi cài đặt Lazyblog, ứng dụng sẽ yêu cầu bạn nhập vào một mật khẩu, mạnh hay yếu lại tuỳ thói quen và nhận thức bảo mật của mỗi người. Lazyblog không có cơ chế xác thực nào phức tạp. Bạn chỉ cần nhập đúng mật khẩu vào trang quản trị `/admin`, như gọi đúng thần chú "Vừng ơi mở ra". Cửa hang sẽ mở để bạn vào đó thích viết, thích vẽ, thích làm gì làm với LazyBlog.

Nói theo ngôn ngữ của người làm bảo mật, thì cửa hang hay trang quản trị `/admin` là attack surface mà hacker sẽ dòm ngó tới. Hắn sẽ tới và hô thật nhiều các thần chú khác nhau để đoán xem mật khẩu mở cửa kho báu là gì. Vậy để an toàn hơn, ngoài cách đặt mật khẩu mạnh và trông chờ Lazyblog phát triển thêm các cơ chế bảo vệ khác. Mình sẽ hướng dẫn bạn cách vùi lấp cửa hang. Không có cửa thì làm gì có chỗ mà đọc thần chú nữa.

Nếu bạn chạy script cài đặt, mặc định LazyBlog sẽ dùng Web Server **Caddy** để chạy blog của bạn trên Internet. Nên ý tưởng của chúng ta sẽ kiểm tra người truy cập vào trang quản trị có đang ngồi ở nhà bạn không? Hay nói cách khác, cánh cửa hang sẽ vô hình với tất cả người dùng mà IP của họ không trùng với địa chỉ IP nhà bạn. Để làm được điều ấy, bạn cứ làm theo mình từng bước sau nhé.

Nhưng đầu tiên, cứ coi giá trị **X.X.X.X** hay **Y.Y.Y.Y** là địa chỉ IP nhà bạn. Biết cái này dễ lắm, chỉ cần hỏi Google "What is My IP". Vào bất kỳ trang nào trong kết quả tìm kiếm nó cũng trả về địa chỉ IP nhà bạn. Mình hay dùng [https://api.ipify.org](https://api.ipify.org) để biết được địa chỉ IP của mình. Hãy F5 nhiều lần để xem IP có thay đổi không nhé. Một số quán cà phê bạn hay ngồi, hoặc cty của bạn dùng nhiều địa chỉ IP để đi ra Internet đấy.

**Bước 1**: Với bất kỳ một công cụ chỉnh sửa file nào trong tay của bạn. Hãy mở file cấu hình của Web Server Caddy nằm ở đường dẫn `/etc/caddy/Caddyfile` để sửa.

**NẾU BẠN ĐANG DÙNG CLOUDFLARE LÀM PHÂN GIẢI PROXY CHO LAZYBLOG**

**Bước 2** Hãy thêm đoạn cấu hình dưới đây vào phần đầu tiên của file (trước cả đoạn `:80` nhé)
```
{
    servers {
        trusted_proxies static 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 104.16.0.0/13 104.24.0.0/14 108.162.192.0/18 131.0.72.0/22 141.101.64.0/18 162.158.0.0/15 172.64.0.0/13 173.245.48.0/20 188.114.96.0/20 190.93.240.0/20 197.234.240.0/22 198.41.128.0/17
    }
}
```

**Bước 3** Sau đó thêm đoạn mã `@admin_wrong_ip...` dưới đây vào phía sau của khối `handle_path /uploads/` trong file cấu hình. Mình sẽ ghi đủ cả cái khối đó để bạn dễ hình dung nhé. Khi dùng Cloudflare đứng trước LazyBlog sẽ không biết IP của người dùng là gì. Thay vào đó, chúng chỉ nhìn ra IP của các máy chủ Cloudflare thôi. Nhưng nếu thế chúng ta sẽ nhìn 100, hay 1000 người truy cập đều như nhau hết. Cloudflare lo lắng điều ấy, nên khi các máy chủ của Cloudflare gửi Request tới server Lazyblog của bạn, chúng sẽ gắn kèm thêm IP thật sự của người dùng vào Header `CF-Connecting-IP`. Caddy sẽ đọc Request gửi tới từ Cloudflare và lấy IP từ Header đó ra để bạn làm các bài kiểm tra
```
....
    handle_path /uploads/* {
        root * /var/www/lazyblog/src/content/uploads
        file_server
    }

    @admin_wrong_ip {
        path /admin /admin/*
        not expression {http.request.header.CF-Connecting-IP} in ["X.X.X.X", "Y.Y.Y.Y"]
    }
    respond @admin_wrong_ip 403
....
```

**NẾU BẠN CHẰNG DÙNG CÁI GÌ CẢ**

**Bước 2** Nếu không dùng Cloudflare, người dùng sẽ đi thẳng một mạch tới LazyBlog của bạn. Caddy chỉ cần gọi giá trị `remote_ip` trong cấu hình là biết bạn là ai. Từ đó lại làm các bài kiểm tra. 
```
@admin_wrong_ip {
    path /admin /admin/*
    not remote_ip X.X.X.X, Y.Y.Y.Y
}
respond @admin_wrong_ip 403
```

**Bước Cuối** Sau khi sửa xong, hãy kiểm tra xem các cấu hình đã chuẩn chưa bằng cách dùng lệnh dưới đây. Nếu mọi thứ OK Caddy, lệnh này sẽ áp dụng config mới ngay lập tức mà không drop bất kỳ kết nối của người dùng nào. Còn nếu có lỗi xảy ra, hãy thử hỏi ChatGPT hoặc đọc kỹ lại các bước trên nhé.
```
caddy reload --config /etc/caddy/Caddyfile
```

Vậy là xong rồi đó, giờ trang quản trị `/admin` của bạn đã vô hình trước đám Mafia Internet. Nó chỉ mở ra khi bạn đi đúng con đường **X.X.X.X** hoặc **Y.Y.Y.Y** mà bạn đã cấu hình

::: highlight
Đây chính là phương pháp bảo vệ hệ thống bằng phương pháp **IP allowlisting / IP whitelisting** 
:::


