Tối giản việc đọc tin nổi bật, comment chất lượng nhiều reaction trên voz cho các fen bận rộn.

VozFen.com: {thảo luận} Cài đặt Adguard Home - Chặn quảng cáo trên VPS

@namlshb0002 Joined: 09/2010
#1
Ưng 19

{thảo luận} Cài đặt Adguard Home - Chặn quảng cáo trên VPS

@namlshb0002 09/2010
#2
Ưng 16
Vàng quan điểm
#2 Cài đặt Adguard Home lên VPS

Vậy là xong các công việc và thao tác trên Web của Oracle Cloud.
Từ bây giờ sẽ chuyển qua Putty và giao diện dòng lệnh để thao tác cài đặt Adguard Home.

Login vào VPS vừa tạo ở trên bằng Putty.
Làm như hình và lưu ý các chỗ tô màu vàng thay đổi theo của các bạn.
  • User: [email protected]ủa-các-bạn.
  • Port: mặc định 22.
  • Hình thức kết nối tới server: dùng SSH.
  • Phần SSH --> Auth: chọn đường dẫn tới file Private Key đã lưu bên trên.




Đăng nhập vào sẽ hỏi Password của File hồi nãy lưu từ Putty GEN (nếu có):

Đăng nhập xong chuyển qua user root để có toàn quyền:
  • Gõ lệnh: sudo su


Các thao tác tiếp theo các bạn gõ lệnh lần lượt như sau:
  • Rất quan trọng và cần làm đầu tiên Cập nhật VPS:
  • yum -y update
  • Chờ một lúc khá lâu để vps cập nhật các gói lên bản mới nhất. Sau đó nên khởi động lại vps một lần và kết nối lại.
  • Khởi động lại bằng lệnh: reboot.
Sau đó cần dùng Putty để kết nối lại như trên.
  • Lại gõ: sudo su để có toàn quyền user.
  • Bắt đầu cài đặt Snap & Adguard Home theo hướng dẫn tại đây: https://snapcraft.io/install/adguard-home/centos
  • Lần lượt gõ các lệnh.
  • sudo yum install epel-release
  • sudo yum install snapd
  • sudo systemctl enable --now snapd.socket
  • sudo ln -s /var/lib/snapd/snap /snap
  • sudo reboot
Lệnh reboot sẽ Khởi động lại VPS để hoàn tất cài đặt Snap.
Kết nối lại với Putty. Sau đó cài Adguard Home bằng lệnh:

  • sudo snap install adguard-home
Hoàn tất cài đặt Adguard Home, nhưng vẫn chưa truy cập được do có Firewall.
Thay đổi và mở port để vào đc Adguard Home:

  • sudo firewall-cmd --zone=public --add-port=3000/tcp --permanent
  • sudo firewall-cmd --zone=public --add-port=53/udp --permanent
  • sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
  • sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
  • sudo firewall-cmd --zone=public --add-port=853/tcp --permanent
  • sudo firewall-cmd --reload
Các lệnh trên sẽ giúp mở các port tương ứng như sau:
  • Port 3000 & 80: truy cập giao diện cài đặt & Quản lí Adguard Home.
  • Port 53: chính là máy chủ DNS.
  • Port 443: sử dụng giao thức bảo mật HTTPs
  • Port 853: sử dụng giao thức bảo mật DNS-over-TLS
  • Reload: áp dụng có hiệu lực các lệnh trên.

OK đến đây là đã cài đặt xong. Các bạn đã có thể truy cập theo địa chỉ sau để setup Adguard Home và sử dụng DNS.
  • Địa.Chỉ.IP.Của.Bạn:3000
  • Ví dụ: 14.168.18.267:3000
Tiến hành cài đặt Adguard Home theo vài bước đơn giản là xong.
Đến đây là đã có thể trỏ máy chủ DNS về IP của các bạn và dùng được rồi.

Update Adguard Home khi có bản mới:
  • sudo snap refresh adguard-home

Thêm các bộ lọc tùy thích. List tham khảo:

Một số Setting trong mục DNS Setting:



Một số lưu ý khi dùng bản Ubuntu 20.04 trên máy ảo Oracle cloud:

1/ Dọn dẹp iptables:

Bản Ubuntu build sẵn của Oracle nhét đủ thứ linh tinh vào iptables, nên dọn sạch đi, đỡ rối và gây khó khăn khi cần mở port truy cập.
Code:
sudo su
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
netfilter-persistent save
Mục đích của các câu này là set iptables về defaut, mở hết tất cả các kết nối và xóa sạch các cấu hình linh tinh hiện có, sau đó lưu lại khi khởi động.

2/ Dùng UFW và chỉ cho phép 1 kết nối từ nhà vào máy ảo:

Khi iptables mở hết các kết nối thì đương nhiên là ai trên Internet cũng truy cập được vào máy ảo. Ubuntu có sẵn ứng dụng tường lửa ufw, mình sẽ dùng ufw để kiểm soát truy cập. UFW thực chất cũng gọi iptables lên để thi hành thôi, nhưng có cú pháp đơn giản hơn nhiều so với đám câu lệnh loằng ngoằng của iptables cũng như firewall-cmd.
Code:
ufw allow 22/tcp
ufw enable
Lưu ý thứ tự 2 câu trên, đầu tiên mở SSH, sau đó bật ufw lên. Do mặc định ufw sẽ chặn mọi kết nối từ ngoài vào nên nếu không mở SSH trước mà bật ufw lên thì tự mình đã khóa mình ở bên ngoài cửa luôn.

Tạo 1 script lấy IP từ tên miền dynamic dns của nhà và chỉ cho phép IP đó truy cập vào máy ảo, mình không dùng cách cho phép list IP VN truy cập vào nữa do nếu nạp list IP của VN vào thì đống câu lệnh của tường lửa sẽ phình ra quá nhiều, máy ảo xử lý cũng mệt.
Code:
nano ufw-ddns.sh

#!/bin/bash
HOSTNAME=THAY_TÊN_DDNS_VÀO_ĐÂY

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root"
   exit 1
fi

new_ip=$(host $HOSTNAME | head -n1 | cut -f4 -d ' ')
old_ip=$(/usr/sbin/ufw status | grep $HOSTNAME | head -n1 | tr -s ' ' | cut -f3 -d ' ')

if [ "$new_ip" = "$old_ip" ] ; then
    echo IP address has not changed
else
    if [ -n "$old_ip" ] ; then
        /usr/sbin/ufw delete allow from $old_ip to any
    fi
    /usr/sbin/ufw allow from $new_ip to any comment $HOSTNAME
fi
Chỉnh cho script này chạy liên tục mỗi 2 phút để cập nhật IP:
Code:
chmod +x ufw-ddns.sh
crontab -e
*/2 * * * * /home/ubuntu/ufw-ddns.sh
Chỉnh ufw giữ trạng thái đang hoạt động khi restart máy, nếu không khi restart máy, ufw sẽ bị tắt:
Code:
nano /lib/systemd/system/ufw.service

Before=network.target
After=netfilter-persistent.service

3/ Tắt IPv6:

Mặc định máy ảo sẽ được cấp 1 IPv4 và 1 IPv6, bình thường mình chỉ dùng IPv4 nên mình tắt IPv6 này đi luôn cho đỡ rối
Code:
nano /etc/default/grub

GRUB_CMDLINE_LINUX="ipv6.disable=1"

update-grub
reboot
Sau khi reboot xong dùng lệnh sau để xem IP, nếu IPv6 biến mất là ok:
Code:
ip a

Bài dưới đây sẽ nâng cao bảo mật cho VPS và Adguard Home.

@namlshb0002 09/2010
#3
Ưng 11
Vàng quan điểm
#3 Bảo mật HTTPs và DNS-over-TLS:
Tính năng quan trọng mà Adguard Home có sẵn, tốt hơn so với Pi-Hole vì ko cần config phức tạp.

Đăng kí 1 tên miền miễn phí
Vào trang web: http://www.freenom.com/en/index.html
Chọn và đăng kí 1 tên miền miễn phí bất kì mà bạn thích. Ví dụ như bên dưới.


Đăng kí xong các bạn Đăng nhập, vào phần quản lí DNS để trỏ về địa chỉ IP của các bạn.
Services --> My Domain --> Manage Freenom DNS.
Các bạn cần thêm 2 records như hình:
  • Record A: trỏ về địa chỉ IP.
  • Record CNAME: thêm www vào tên miền.


Mở lại Putty để thêm Tên miền vào VPS và cài đặt chứng chỉ HTTPS của Let's Encrypt.
Đầu tiên cần STOP Adguard Home để tránh xung đột services.
  • sudo snap stop adguard-home
Tiến hành cài đặt Let's Encrypt: (tham khảo từ HocVPS)
  • yum -y install certbot
  • certbot certonly --standalone
Chờ một lúc để Let’s Encrypt cài đặt những công cụ cần thiết. Sau đó bạn hãy nhập địa chỉ email, rồi nhấn phím Enter.


Chấp nhận quy định bằng cách nhập a, rồi nhấn tiếp Enter.

Tiếp theo bạn nhập tên miền sẽ sử dụng chứng chỉ SSL, rồi nhấn Enter.
Lưu ý: không nhập www. Chỉ nhập tên miền

Nếu không gặp vấn đề gì bạn sẽ gặp thông báo như bên dưới:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/tên-miền-của-bạn/fullchain.pem.
Your cert will expire on 2021-01-16. To obtain a new version of the certificate in
the future, simply run Certbot again.
- Your Private key:

/etc/letsencrypt/live/tên-miền-của-bạn/privkey.pem
- If you lose your account credentials, you can recover through
e-mails sent to email-của-bạn.
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Lưu ý các thông tin mình bôi màu để input vào Adguard Home:
  • /etc/letsencrypt/live/tên-miền-của-bạn/fullchain.pem.
  • /etc/letsencrypt/live/tên-miền-của-bạn/privkey.pem
  • 2021-01-16: ngày hết hạn của chứng chỉ (90 ngày từ ngày cài)
Khởi đông lại Adguard Home:
  • sudo snap restart adguard-home
Vào trang quản trị của Adguard Home và cài đặt bảo mật. (Encryption Setting) như hình.
  • Đánh dấu tích vào: Enable Encryption
  • Đánh dấu tích vào Redirect HTTPS automatically.
  • Server name = tên miền của bạn.
  • Lưu ý điền 2 đường dẫn đến Let's Encrypt như bôi màu bên trên.

Lưu lại các setting: Save

Sau bước này, các bạn đã có thể truy cập vào trang Quản trị của Adguard Home bằng tên miền của bạn với bảo mật HTTPS.

Tự động gia hạn Let’s Encrypt​

Chứng chỉ Let’s Encrypt chỉ sử dụng được trong vòng 90 ngày và bạn cần phải chạy lại dòng lệnh bên dưới để gia hạn.
  • /opt/letsencrypt/certbot-auto renew --pre-hook "sudo snap stop adguard-home" --post-hook "sudo snap restart adguard-home"
Tuy nhiên, mình sẽ hướng dẫn các bạn cấu hình để tự động gia hạn chứng chỉ này với crontab như vậy chúng ta sẽ sử dụng SSL miễn phí trọn đời mà không cần phải lo về việc gia hạn nữa.

Mở file cấu hình crontab:
  • EDITOR=nano crontab -e
Copy và paste đoạn code bên dưới vào cửa sổ terminal:
(trên Windows copy xong qua cửa sổ terminal bấm chuột phải là tự động paste)


30 2 * * * /opt/letsencrypt/certbot-auto renew --pre-hook "sudo snap stop adguard-home" --post-hook "sudo snap restart adguard-home" >> /var/log/le-renew.log

Nhấn Ctrl+O, Enter để lưu và Ctrl+X để thoát. Bạn nhận được thông báo sau là thành công
  • crontab: installing new crontab
crontab trên sẽ tự động chạy lệnh gia hạn Let’s Encrypt vào lúc 2h30 hàng ngày và kiểm tra xem đã hết hạn chưa và tiến hành gia hạn. Trước khi gia hạn sẽ stop Adguard Home Service, sau đó sẽ start lại ngay lập tức. Như vậy, gần như không ảnh hưởng gì cả.

Vậy là xong, bạn có thể yên tâm sử dụng.

@namlshb0002 09/2010
#4
Ưng 23
Vàng quan điểm
#4 Bảo mật VPS nâng cao: Chặn các truy cập không mong muốn

Phương án 1: Khuyến khích dùng vì đảm bảo chống hack

Phương pháp bảo mật ở đây là chặn 100% request từ bên ngoài, chỉ cho duy nhất 1 IP cá nhân truy cập. Cách này thì đảm bảo 100% DNS của các bạn là private và ko ai có thể hack được. Các bạn tham khảo thêm ở đây:
https://www.mollberg.de/?Firewalld_on_Centos_7_with_dynamic_IP

Phương án 2: chỉ cho IP VN vào Whitelist và block tất cả các nước khác.
https://voz.vn/t/cai-dat-adguard-home-chan-quang-cao-tren-vps.178061/page-11#post-5670864
Cách chặn từng quốc gia quá phiền phức, phải chọn từng quốc gia một. Nên áp dụng cách chỉ cho IP VN kết nối vào, còn lại chặn hết, như thế triệt để hơn. Để làm việc này thì cần làm 2 bước chính:

  • Chỉnh IP VN vào Source IP của zone trusted (default source IP của zone public là any)
  • Chuyển zone default đang ở public sang zone drop

Khi 1 kết nối từ ngoài Internet đến server, FirewallD sẽ kiểm tra:

  • Source IP là bao nhiêu, nếu là IP VN => vào zone trusted, truy cập HTTP, DNS, SSH v.v...
  • Source IP khác IP VN => đang nằm ở zone drop => loại bỏ kết nối.

Loại bỏ cấu hình cũ, đưa FirewallD về default:

sudo su
rm -f /etc/firewalld/zones/*
firewall-cmd --complete-reload

Thêm các rule cho các dịch vụ hoạt động:

firewall-cmd --zone=public --add-port=3000/tcp --permanent
firewall-cmd --zone=public --add-port=53/udp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=853/tcp --permanent

Download list IP VN:

wget https://www.ipdeny.com/ipblocks/data/countries/vn.zone

Thêm IP VN vào Whitelist:

firewall-cmd --new-ipset=whitelist --type=hash:net --option=family=inet --option=hashsize=4096 --option=maxelem=200000 --permanent
firewall-cmd --ipset=whitelist --add-entries-from-file=./vn.zone --permanent

Chỉnh Whitelist vào Source của zone Public:

firewall-cmd --zone=trusted --add-source=ipset:whitelist --permanent

Thay đổi zone mặc định thành zone drop:

firewall-cmd --set-default-zone=drop

Kiểm tra các zone :
firewall-cmd --list-all

Hiện lên như sau là OK:
drop (active)
target: DROP
icmp-block-inversion: no
interfaces: ens3

Khởi động lại FirewallD để áp dụng các cấu hình vừa chỉnh:

firewall-cmd --reload

Tổng hợp cấu hình FirewallD:

firewall-cmd --zone=public --add-port=3000/tcp --permanent
firewall-cmd --zone=public --add-port=53/udp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=853/tcp --permanent
firewall-cmd --ipset=whitelist --add-entries-from-file=./vn.zone --permanent
firewall-cmd --zone=trusted--add-source=ipset:whitelist --permanent
firewall-cmd --set-default-zone=drop
firewall-cmd --reload


Phương án 3: Chặn theo IP list quốc gia. (hơi mất công & tốn thời gian vì phải chọn từng quốc gia) -> Không khuyến khích.

Đây là một cách dễ dàng để tạo Blacklitst IP bằng cách sử dụng các lệnh firewalld-cmd. Sau đây, mình sẽ hướng dẫn cách chặn toàn bộ quốc gia không thể truy cập vào VPS/ DNS của các bạn. Tránh các hacker từ các quốc gia như Trung Quốc, Nga Ngố, v.v...

Tạo danh sách blacklist:
  • sudo su
  • firewall-cmd --permanent --new-ipset=blacklist --type=hash:net --option=family=inet --option=hashsize=4096 --option=maxelem=200000
Download Black-list blocks từ trang web ipdeny:
Thêm các quốc gia bạn muốn chặn vào blacklist:
Ở đây mình ví dụ: cn=TQ, us=Mỹ, de=Đức, ru=Nga. Các bạn thêm vào bao nhiêu tùy thích.
Khuyến khích các bác chặn càng nhiều càng tốt cho yên tâm (trừ VN)
Có thể tải về file trên về máy tính và để mở ra xem danh sách chi tiết.
Một số quốc gia thường bị chặn: ar, bd, bg, br, by, cn, co, il, in, ir, kp, ly, mn, mu, pa, sd, tw, ua, ro, ru, ve, sa, ca, eg, jo.
  • firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=./cn.zone
  • firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=./us.zone
  • firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=./de.zone
  • firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=./in.zone
  • firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=./ru.zone
Từ chối truy cập từ các quốc gia trên bằng cách thêm blacklist vào drop zone của FirewallD.
  • firewall-cmd --permanent --zone=drop --add-source=ipset:blacklist
  • firewall-cmd --reload

Nhận xét cá nhân:
Ban đầu khi cài đặt DNS xong, mình chỉ chia sẻ cho một vài người bạn để sử dụng, tuy nhiên mỗi ngày vẫn có 2-3 request từ các bot scan vào DNS từ các quốc gia khác nhau. Sau khi mình áp dụng các phương pháp trên thì chỉ có các IP thật từ mình và bạn bè truy câp & sử dụng DNS từ Việt Nam. Do đó cá nhân mình thấy các phương pháp này phần nào có hiệu quả.

Xét theo độ toàn, Phương pháp 1 > 2 > 3 nhé.

Note cuối cùng:

Nếu bạn nào đọc xong bài và thấy rắc rối quá thì có thể mua Private DNS của ABPVN mình thấy rất tốt và giá cả hợp lý Mình đã dùng thử bên họ và rất ưng Ủng hộ hàng VN chất lượng cao.
https://private-dns.abpvn.com/payment/packages

@kyocooro 09/2011
#218
Ưng 11
Ưng 2
Adguad nó có dns chặn quảng cáo sẵn luôn, cài làm gì cho mệt
Choose Use the following DNS server addresses and enter these:

IPv4

For "Default" servers:

94.140.14.14

94.140.15.15

For "Family protection" servers:

94.140.14.15

94.140.15.16

IPv6

For "Default" servers:

2a10:50c0::ad1:ff

2a10:50c0::ad2:ff

For "Family protection" servers:

2a10:50c0::bad1:ff

2a10:50c0::bad2:ff

Family là cho gia đình, chặn cả porn nhé. quan trọng nhất là chặn ad của youtube cho tivi thì không được, nên cũng hơi gân gà.

@kyocooro 09/2011
#222
Ưng 11
Ưng 2
quan trong là riêng tư và bác tự quản lý domain muốn chặn, quản lý ip muốn chặt
Chỉ tổ mất thời gian thôi bác, .

@abpvn 11/2017
#229
Ưng 4
Giờ mới biết có cái Oracle cloud free tier

Cái AguardHome này thì mình dùng lâu rồi. Giờ mình con đang chạy giải pháp để tạo nhiều DNS AguardHome trên 1 VPS nữa.

@rainsg 09/2006
#641
Ưng 9
Một số lưu ý khi dùng bản Ubuntu 20.04 trên máy ảo Oracle cloud:

1/ Dọn dẹp iptables:

Bản Ubuntu build sẵn của Oracle nhét đủ thứ linh tinh vào iptables, nên dọn sạch đi, đỡ rối và gây khó khăn khi cần mở port truy cập.
Code:
sudo su
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
netfilter-persistent save
Mục đích của các câu này là set iptables về defaut, mở hết tất cả các kết nối và xóa sạch các cấu hình linh tinh hiện có, sau đó lưu lại khi khởi động.

2/ Dùng UFW và chỉ cho phép 1 kết nối từ nhà vào máy ảo:

Khi iptables mở hết các kết nối thì đương nhiên là ai trên Internet cũng truy cập được vào máy ảo. Ubuntu có sẵn ứng dụng tường lửa ufw, mình sẽ dùng ufw để kiểm soát truy cập. UFW thực chất cũng gọi iptables lên để thi hành thôi, nhưng có cú pháp đơn giản hơn nhiều so với đám câu lệnh loằng ngoằng của iptables cũng như firewall-cmd.
Code:
ufw allow 22/tcp
ufw enable
Lưu ý thứ tự 2 câu trên, đầu tiên mở SSH, sau đó bật ufw lên. Do mặc định ufw sẽ chặn mọi kết nối từ ngoài vào nên nếu không mở SSH trước mà bật ufw lên thì tự mình đã khóa mình ở bên ngoài cửa luôn.

Tạo 1 script lấy IP từ tên miền dynamic dns của nhà và chỉ cho phép IP đó truy cập vào máy ảo, mình không dùng cách cho phép list IP VN truy cập vào nữa do nếu nạp list IP của VN vào thì đống câu lệnh của tường lửa sẽ phình ra quá nhiều, máy ảo xử lý cũng mệt.
Code:
nano ufw-ddns.sh

#!/bin/bash
HOSTNAME=THAY_TÊN_DDNS_VÀO_ĐÂY

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root"
   exit 1
fi

new_ip=$(host $HOSTNAME | head -n1 | cut -f4 -d ' ')
old_ip=$(/usr/sbin/ufw status | grep $HOSTNAME | head -n1 | tr -s ' ' | cut -f3 -d ' ')

if [ "$new_ip" = "$old_ip" ] ; then
    echo IP address has not changed
else
    if [ -n "$old_ip" ] ; then
        /usr/sbin/ufw delete allow from $old_ip to any
    fi
    /usr/sbin/ufw allow from $new_ip to any comment $HOSTNAME
fi
Chỉnh cho script này chạy liên tục mỗi 2 phút để cập nhật IP:
Code:
chmod +x ufw-ddns.sh
crontab -e
*/2 * * * * /home/ubuntu/ufw-ddns.sh
Chỉnh ufw giữ trạng thái đang hoạt động khi restart máy, nếu không khi restart máy, ufw sẽ bị tắt:
Code:
nano /lib/systemd/system/ufw.service

Before=network.target
After=netfilter-persistent.service

3/ Tắt IPv6:

Mặc định máy ảo sẽ được cấp 1 IPv4 và 1 IPv6, bình thường mình chỉ dùng IPv4 nên mình tắt IPv6 này đi luôn cho đỡ rối
Code:
nano /etc/default/grub

GRUB_CMDLINE_LINUX="ipv6.disable=1"

update-grub
reboot
Sau khi reboot xong dùng lệnh sau để xem IP, nếu IPv6 biến mất là ok:
Code:
ip a