Tự động đổi record DNS khi dùng Cloudflare

Không còn nghi ngờ gì nữa, Cloudflare là dịch vụ DNS tốt nhất thế giới bạn nên dùng.

Với việc hỗ trợ API, chúng ta còn có thể làm được nhiều trò hơn nữa để tối ưu cho phù hợp với nhu cầu sử dụng.

Mình có sử dụng nameserver của Cloudflare từ những ngày đầu ra mắt để quản lý DNS, tốc độ cập nhật nhanh chóng, hỗ trợ nhiều loại record và nhất là khả năng kích hoạt Proxy để bảo vệ server khỏi những cuộc tấn công DDoS vừa và nhỏ rất tốt.

Thường thì mình không bật Proxy lên, chỉ khi nào có tấn công thì mới dùng mà thôi. Những website quan trọng thì không bao giờ để lộ IP backend mà chạy Nginx reverse proxy dùng một server khác làm fronend kết nối tới. Server frontend có chết thì backend vẫn hoạt động được bình thường, hoặc nếu cần thì nhân lên nhiều server frontend để chạy.

Do hôm vừa rồi bị DDoS tống tiền mà không có đủ tiền trả, nên mình có tìm được cách này hay quá, tự động thay đổi cấu hình DNS của Cloudflare để trỏ đến IP mong muốn, rồi có thể kích hoạt Proxy nếu muốn nữa.

Có 2 thao tác mình sử dụng, chia sẻ lại hết nếu bạn nào cần thì dùng hoặc chỉnh lại.

1. Ping kiểm tra server frontend

Server backend mình kiểm tra liên tục frontend coi có hoạt động hay không bằng cách ping. Công cụ theo dõi sử dụng monit.

Lệnh cài đặt monit trên CentOS:

yum install monit

Thêm cấu hình cho monit theo dõi trong thư mục /etc/monit.d/, ví dụ:

nano /etc/monit.d/ping

Dán nội dung file này vào, thay lại IP của bạn.

check host 1.2.3.4 with address 1.2.3.4
if failed icmp type echo count 3 with timeout 3 seconds for 2 cycles then exec "/bin/bash -c /root/monit/proxy.sh"
else if succeeded for 2 cycles then exec "/bin/bash -c /root/monit/native.sh"

Ý nghĩa đoạn code trên như sau:

  • Nếu ping 2 chu kỳ liên tiếp không được, mỗi chu kì 3 lần ping với thời gian timeout 3 giây, thì chạy file bash kia /root/monit/proxy.sh
  • Nếu ping ok thì chạy lại file bash /root/monit/native.sh

proxy.sh mình dùng đổi IP và kích hoạt Proxy, thường thì bạn chỉ cần kích hoạt Proxy là xong. native.sh sẽ đổi lại IP frontend nếu cuộc tấn công kết thúc. Nội dung file thì bạn theo dõi bước tiếp theo.

2. Thay đổi DNS Cloudflare qua API

Đoạn code thay đổi DNS Cloudflare thì mình có lấy ở đây, lưu lại làm 2 file tương ứng như đoạn code trên nhé. Ví dụ với file proxy.sh trước tiên.

Cách cấu hình script đó như sau:

  • Bước 1: Điền EMAIL, TOKEN, DOMAIN và SUBDOMAIN. Token API lấy ở đây: https://dash.cloudflare.com/profile/api-tokens. Nếu đổi IP cho tên miền chính thì đặt SUBDOMAIN là @, nên test trước khi áp dụng chính thức.
  • Bước 2: Tạo A record với subdomain bạn đã chọn trên Cloudflare
  • Bước 3: Phân quyền chmod +x proxy.sh rồi chạy file đó cùng tham số proxy.sh -l để lấy zone_id và rec_id rồi điền lại vào script
  • Bước 4: Chạy lại file script proxy.sh bạn sẽ nhận được thông báo đổi IP thành công hoặc IP không cần update nếu đã cập nhật từ trước rồi, vậy là ok.

Lưu ý dòng lệnh thực thi việc cập nhật DNS ở gần cuối file mình có chỉnh sửa lại một chút cho phù hợp, thêm thông số TTL thành như sau:

$CURL -X PUT "$API_URL/zones/$ZONE_ID/dns_records/$REC_ID" --data '{"type":"A","name":"'"$SUBDOMAIN"'","content":"'"$IP"'","ttl":"120","proxied":false}' 1>/dev/null

TTL chỉnh thành 120 giây để khách truy cập lấy IP mới cho nhanh nếu có đổi. Proxied bạn đổi thành true/false nếu muốn kích hoạt hoặc không nhé.

Kết hợp với bước 1 bên trên vậy là bạn đã có kịch bản tự động cập nhật IP cho tên miền trên Cloudflare nếu server gặp sự cố rồi đấy.

Trong quá trình làm theo nếu cần hỗ trợ thêm hoặc gặp sự cố gì hãy comment bên dưới để được trợ giúp nha. Nếu có ý tưởng gì hay hơn các bạn cũng comment góp ý nhé.

Chúc bạn thành công.

4.7/5 - (13 votes)
guest

17 Bình luận
mới nhất
cũ nhất
Inline Feedbacks
View all comments

Thành Đạt
3
Thành Đạt
2 năm trước

vultr dạo này giá mắc ghê, định làm con vps 4core 8gb chạy mà toàn giá mặn quá, anh em cho xin địa chỉ mua ngon với ah

Binh Nguyen
1,477
Binh Nguyen
2 năm trước

Từ lúc chuyển qua vps rồi cài hocvps tưởng là cũng bảo mật khá tốt r, giờ mới bít vụ bị lộ IP sad chắc chuyển lại hosting xài rofl

Nguyễn Chí Thảo
304
Nguyễn Chí Thảo
2 năm trước
Reply to  Binh Nguyen

hocvps hình như nó không chạy trên cenos8 thì phải, setup toàn báo lỗi rofl

Binh Nguyen
1,477
Binh Nguyen
2 năm trước

Báo lỗi như thế nào bác? Hôm bữa mình setup bt mà

Hải
240
Hải
2 năm trước

Có mở dịch vụ cài reverse proxy như này ko Luân ơi? Hỏi biết để khi cần còn alo

Minh
9
Minh
2 năm trước

Cách này hay đấy, và ai kém IT thì có thể tìm hiểu gói Load Balancers của vultr nhé.

Thành Thái
262
Thành Thái
2 năm trước

Mới mua con domain, giờ add vào cloudflare thấy nó có gần 200 record A sad
Có cách nào để xoá toàn bộ record đó cho nhanh ko nhỉ bác Luân?
Có tìm hiểu qua cái API mà đọc như bò đọc chữ vậy á sad(

nam phạm
9
nam phạm
2 năm trước
Reply to  Thành Thái

auto click đi bác wink

Bùi Trung Hiếu
66
Bùi Trung Hiếu
2 năm trước
Reply to  Thành Thái

Xóa tay từng record anh ơi. Không xóa hàng loạt được. Em cài cho khách cũng dính nhiều lần rồi. rofl

Thành Thái
262
Thành Thái
2 năm trước

He, thử theo cách của bác Đức ở comment dưới kìa e, a đã xoá phát xong luôn laugh

Đức
528
Đức
2 năm trước
Reply to  Thành Thái

Xoá đc bằng api mà, xoá hết tất cả các records luôn.
https://gist.github.com/ducbo/31d22f1fdea4e8f033abb311ade3692e
Nhớ sửa api key email zone id và nhớ cài đặt jq

Last edited 2 năm trước by Đức
Thành Thái
262
Thành Thái
2 năm trước
Reply to  Đức

Thank bác, dựa vào comment của bác, mình mò tiếp cũng đã làm được laugh

Đăng
12
Đăng
2 năm trước

Dành cho chuyên gia thôi cwl

David
429
David
2 năm trước

Người mù CNTT nên ko làm theo được sad

Mai Xinh
6
Mai Xinh
2 năm trước

cảm ơn bồ nhé. Dùng hocvps lên theo dõi canhme và hocvps dài.

David Do
508
David Do
2 năm trước

Mình tưởng tự độnh đổi IP theo local thì ngon

Lê Tí
124
Lê Tí
2 năm trước

Cảm ơn bác đã chia sẻ, hóng bác làm thêm bài này nữa “Những website quan trọng thì không bao giờ để lộ IP backend mà chạy Nginx reverse proxy dùng một server khác làm fronend kết nối tới. Server frontend có chết thì backend vẫn hoạt động được bình thường, hoặc nếu cần thì nhân lên nhiều server frontend để chạy.”