Sử dụng Pi-hole cùng VPN để chặn quảng cáo

Pi-hole là một DNS Server trung gian có thể giúp lọc hết các tên miền quảng cáo cho các máy khách mà không cần phải cài đặt thêm bất cứ phần mềm chặn quảng cáo nào (VD: Adblock, AdGuard…) vào máy khách cả. Ưu điểm của Pi-hole so với các phần mềm chặn quảng cáo là các website bạn truy cập sẽ không phát hiện bạn đang sử dụng Pi-hole nên nó sẽ không yêu cầu bạn tắt các phần mềm chống quảng cáo. Ngoài ra, Pi-hole có thể sử dụng chung cho tất cả các máy trong mạng nội bộ của bạn mà không cần phải cài đặt riêng cho từng máy.

Các bước cài đặt của mình được thực hiện trên máy chủ Ubuntu mình đã thuê từ trang DigitalOcean với giá 5$/tháng. Hiện nay đang có chương trình khuyến mãi tặng $100 cho khách hàng mới sử dụng miễn phí trong 2 tháng. Các bạn có thể dùng đường link sau để nhận ưu đãi:

Link đăng ký miễn phí 2 tháng sử dụng dịch vụ thuê máy chủ của DigitalOcean

Lưu ý là để hưởng ưu đãi này bạn phài có thẻ thanh toán quốc tế (Visa/ MasterCard/ JCB) hoặc có tài khoảng PayPal cho mục đích xác minh tài khoản (Yên tâm là bạn hoàn toàn không bị mất tiền trong 2 tháng đầu)

Tuy hướng dẫn dưới đây không yêu cầu bạn phải có sẳn VPN Server, nhưng mình khuyến cáo bạn nên sử dụng kèm với VPN Server, vì sao thì mình có nói rõ hơn ở bên dưới. Cách cài đặt VPN Server mình đã có bài hướng dẫn ở đây:

Việc cài đặt và cấu hình Pi-hole hết sức đơn giản thông qua script có sẵn. Các bước thực hiện như sau:

Bước 1: Cài đặt

Tư shell của Linux, thực hiện tuần tự các lệnh sau:

$ curl -sSL https://install.pi-hole.net | bash

Khi đó, giao diện cài đặt Pi-hole xuất hiện, bạn chỉ việc lựa chọn các thông số theo mặc định.

Tuy nhiên, tại giao diện chọn Interface (hay network adapter), nếu bạn muốn sử dụng chung với VPN Server thì nên chọn Interface của VPN Server (VD: wg0 với Wireguard hay tun0 với OpenVPN) thay vì Interface mặc định ra Internet (eth0).

Mình khuyến cáo bạn nên sử dụng Pi-hole với VPN vì nó sẽ giới hạn việc sử dụng Pi-hole cho riêng những người dùng VPN chứ không mở ra cho tất cả mọi người. Lý do là hacker hay bất kỳ ai cũng có thể sử dụng Pi-hole của bạn nếu họ biết IP của máy chủ của bạn. Điều này sẽ làm cho máy chủ của bạn kém an toàn và sẽ bị giảm tốc độ nếu có quá nhiều người truy cập. Một ưu điểm khác của việc dùng kèm với VPN là khi bạn bật VPN thì nó sẽ tự sử dụng Pi-hole, khi bạn tắt VPN thì cũng sẽ không sử dụng Pi-hole nữa. Điều này giúp bạn chủ động trong việc lựa chọn kết nối phù hợp nhất cho mình.

Trong trường hợp của mình (mình sử dụng Wireguard làm VPN Server) nên mình chọn Interface “wg0”. Bạn di chuyển bằng nút “Up”, “Down” và nhấn thanh “Space” để chọn, sau đó nhấn “Enter”

Tại bước tiếp theo mình chọn Google làm máy chủ DNS mặc định.

Các bước còn lại bạn chỉ việc chọn các thông số mặc định. Sau cùng, hệ thống sẽ cung cấp cho bạn thông tin đăng nhập vào trang quản trị của Pi-hole. Bạn hãy lưu những thông tin này lại.

Nếu bạn muốn đổi mật khẩu cho tài khoản quản trị viên (admin) thì có thể sử dụng lệnh sau:

$ pihole -a -p

Nếu bạn thiết lập Pi-hole chạy kèm với VPN thì phải thực hiện lệnh sau. Lệnh này bắt Pi-hole hoạt động trên tất cả mạng nội bộ của máy chủ.

$ pihole -a interface local
Bước 2: Mở tường lửa firewall

Nếu máy chủ bạn có sử dụng tường lửa, bạn cần phải mở cổng để Pi-hole có thể nhận kết nối từ bên ngoài. Bạn có thể kiểm tra bằng lệnh sau:

$ ufw status

Nếu kết quả là “inactive” thì có nghĩa bạn không sử dụng tường lửa, ngược lại bạn phải mở cổng bằng lệnh sau:

$ sudo ufw allow in on wg0 to any port 80 proto tcp

$ sudo ufw allow in on wgo to any port 53 proto tcp

$ sudo ufw allow in on wgo to any port 53 proto udp

Trường hợp bạn không sử dụng chung với VPN thì có thể thay “wg0” bằng “eth0” để cho phép kết nối trực tiếp từ mọi người.

Bước 3: Cấu hình máy khách để sử dụng Pi-hole làm DNS Server

Đầu tiên bạn phải tìm địa chỉ IP của VPN Server bằng lệnh sau:

$ ip address
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 10.66.66.1/24 scope global wg0
       valid_lft forever preferred_lft forever
    inet6 fd42:42:42::1/64 scope global
       valid_lft forever preferred_lft forever

Nếu bạn sử dụng Wireguard thì tìm Interface tên “wg0”, nếu là OpenVPN thì tìm “tun0”, còn trường hợp bạn không sử dụng với VPN thì tìm “eth0”. Ở đây mình sử dụng Wireguard có IP là “10.66.66.1”.

Trên máy khách, bạn thay đổi DNS Server bằng việc chỉnh sửa profile trên ứng dụng Wireguard. Trong phần [Interface] bạn thêm dòng sau:

DNS = <IP Máy Chủ Wireguard>

VD: DNS = 10.66.66.1

Sau đó bạn Save lại và kết nối là đã có thể sử dụng.

Đối với trường hợp không dùng VPN có thể thay đổi DNS Server bằng cách nhập IP máy chủ vào phần Internet Protocal Version 4 trong Ethernet Properties cửa Windows.

Bước 4: Tối ưu

Mặc định thì Pi-Hole sẽ lưu lại tất cả những truy vấn (query) từ máy khách trong file log và trong database tại /etc/pihole/pihole-FTL.db.

Nếu bạn sử dụng trong thời gian dài thì dung lượng các file này sẽ tăng đáng kể và sẽ làm giảm hiệu năng của máy chủ. Để ngăn ngừa việc này bạn có thể cài đặt để Pi-hole tự xóa các dữ liệu cũ sau một thời gian nhất định.

Đầu tiên bạn thực hiện lệnh sau để cài đặt xóa tự động database cũ:

$ sudo nano /etc/pihole/pihole-FTL.conf

Sau đó thêm dòng sau:

MAXDBDAYS=<NUM>

VD: MAXDBDAYS=5

Trong đó <NUM> là số ngày bạn muốn Pi-hole lưu lại lịch sử truy vấn từ máy khách, VD. Nếu bạn đặt 5 ngày thì những dữ liệu cũ hơn 5 ngày sẽ bị xóa.

Sau đó bạn gõ lệnh sau để khởi động lại Pi-Hole

$ sudo service pihole-FTL restart

Kế tiếp bạn thực hiện như sau để tự động xóa các file log cũ:

$ sudo nano /etc/cron.daily/piholeflush

Sau đó trong cửa sổ soạn thảo bạn nhập như sau:

sudo pihole -f

Sau khi lưu file này lại bạn tiếp tục thực hiện lệnh:

$ chmode +x /etc/cron.daily/piholeflush

Bước 5: Thêm các danh sách đen (không bắt buộc)

Mặc định thì Pi-hole đã cập nhật sẵn danh sách các tên miền quảng cáo vào file gravity.db. Danh sách này sẽ được Pi-hole tự động cập nhật mỗi tuần. Tuy nhiên, mình thấy danh sách này vẫn còn thiếu và cập nhật khá chậm. Sau khi tìm hiểu thì mình phát hiện một script tên là “pihole-updatelists”, bổ sung thêm rất nhiều các tên miền quảng cáo từ nhiều nguồn khác nhau. Dưới đây là cách mình tích hợp danh sách này vào Pi-hole:

Từ shell Linux đang chạy Pi-hole, thực hiện lệnh sau:

$ sudo apt-get install php-curl

$ wget -O - https://raw.githubusercontent.com/jacklul/pihole-updatelists/master/install.sh | sudo bash

Sau khi cài đặt xong thì mình cấu hình “pihole-updatelists”:

$ sudo nano /etc/pihole-updatelists.conf

Trong phần “ADLISTS_URL” mình thêm vào:

ADLISTS_URL="https://v.firebog.net/hosts/lists.php?type=tick"

Trong phần “WHITELIST_URL” mình thêm vào:

WHITELIST_URL="https://raw.githubusercontent.com/anudeepND/whitelist/master/domains/whitelist.txt"

Sau đó thêm vào:

UPDATE_GRAVITY=false

Lưu file cấu hình và thoát ra trở lại shell, mình tiếp tục thực hiện lệnh sau:

$ sudo pihole-updatelists

Sau cùng mình thực hiện lệnh sau để cập nhật lại gravity.db

$ pihole -g

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *