วิธีอัปเดตกฎ UFW อัตโนมัติด้วย IP แบบ Cloudflare

เมื่อคุณนั่งอยู่หลัง Cloudflare คุณควร เพียง อนุญาตการจราจรจากช่วง IP ของ Cloudflare บนพอร์ต 80 และ 443 Cloudflare จะอัปเดตช่วงเหล่านี้เป็นระยะ ดังนั้นกฎของ UFW จำเป็นต้องรีเฟรชโดยอัตโนมัติ สคริปต์จาก cloudflare‑ufw, โดย พอล รีด ทำเช่นนั้นได้อย่างสมบูรณ์แบบ.

1. ดาวน์โหลดและทำให้สคริปต์สามารถเรียกใช้งานได้

bashsudo wget -O /usr/local/bin/cloudflare-ufw.sh \
  https://raw.githubusercontent.com/Paul-Reed/cloudflare-ufw/refs/heads/master/cloudflare-ufw.sh
sudo chmod +x /usr/local/bin/cloudflare-ufw.sh

2. ตรวจสอบกฎปัจจุบันของ UFW (ก่อนการเปลี่ยนแปลง)

bashsudo ufw status verbose

คุณอาจเห็นบางอย่างที่คล้ายกับ:

textTo Action From
-- ------ ----
22/tcp ALLOW ทุกที่
80/tcp ALLOW ทุกที่
443 ALLOW ทุกที่
...

3. ลบกฎ 80/443 ที่อนุญาตมากเกินไป

กฎเหล่านี้ในปัจจุบันอนุญาตให้ ใดๆ IP ที่จะเข้าถึงพอร์ตเว็บของคุณ เราจะแทนที่ด้วยกฎเฉพาะ Cloudflare เท่านั้น.

bashsudo ufw delete allow 80/tcp
sudo ufw delete allow 443/tcp

หาก UFW ขอให้ยืนยัน ให้พิมพ์ y และกด Enter.

ตรวจสอบสถานะอีกครั้ง:

bashsudo ufw status verbose

คุณไม่ควรเห็นอีกต่อไป 80/tcp หรือ 443 กับ อนุญาต จาก ที่ไหนก็ได้.

4. รันสคริปต์ Cloudflare‑UFW

bashsudo /usr/local/bin/cloudflare-ufw.sh

สิ่งที่สคริปต์ทำ:

  • ดึงช่วง IPv4 และ IPv6 ล่าสุด Cloudflare จาก https://www.cloudflare.com/ips-v4 และ .../ips-v6.
  • ลบกฎ UFW ที่มีอยู่สำหรับพอร์ต 80 และ 443 ที่อนุญาต ที่ไหนก็ได้.
  • เพิ่มใหม่ อนุญาต กฎ เพียง สำหรับแต่ละช่วง IP Cloudflare บนพอร์ต 80 (HTTP) และ 443 (HTTPS).
  • โหลดใหม่ UFW ตามต้องการเพื่อให้กฎใหม่มีผลทันที.

เมื่อเสร็จสิ้นแล้ว ให้ตรวจสอบ:

bashsudo ufw status verbose

คุณควรเห็นหลายบรรทัดเช่น:

textถึง: ผู้ดำเนินการ จาก
-- ------ ----
80/tcp อนุญาต 173.245.48.0/20
80/tcp อนุญาต 103.21.244.0/22
...
443 อนุญาต 173.245.48.0/20
443 อนุญาต 103.21.244.0/22
...

ไอพีอื่น ๆ ทั้งหมดถูกปฏิเสธโดยปริยายสำหรับพอร์ต 80/443.

5. อัตโนมัติการอัปเดตประจำวันด้วย cron

Cloudflare สามารถเปลี่ยนช่วง IP ได้ตลอดเวลา เพื่อให้ไฟร์วอลล์ของคุณทำงานสอดคล้องกัน ให้กำหนดเวลาให้สคริปต์ทำงานทุกวัน (เช่น เวลา 03:00).

แก้ไข crontab หลัก:

bashsudo crontab -e

หากมีการแจ้งให้เลือก โปรดเลือกโปรแกรมแก้ไขที่คุณต้องการ (เช่น, นาโน).

เพิ่มบรรทัดต่อไปนี้ที่ท้ายสุด:

text0 3 * * * /usr/local/bin/cloudflare-ufw.sh >> /var/log/cloudflare-ufw.log 2>&1

นี่คือสิ่งที่ทำ:

  • รันสคริปต์ทุกวันเวลา 03:00 น. ตามเวลาเซิร์ฟเวอร์.
  • เพิ่มต่อท้ายผลลัพธ์และข้อผิดพลาดไปยัง /var/log/cloudflare-ufw.log สำหรับการตรวจสอบ.

บันทึกและออกจากโปรแกรมแก้ไข.

6. ตรวจสอบงาน cron

แสดงรายการ crontab ของ root เพื่อยืนยัน:

bashsudo crontab -l

คุณควรเห็นแถวใหม่.

หากต้องการ สามารถบังคับให้ทำงานทันทีและตรวจสอบบันทึกได้:

bashsudo /usr/local/bin/cloudflare-ufw.sh
sudo tail -n 20 /var/log/cloudflare-ufw.log

7. การบำรุงรักษาอย่างต่อเนื่อง

เพื่อรีเฟรชกฎด้วยตนเองเมื่อใดก็ได้:

bashsudo /usr/local/bin/cloudflare-ufw.sh

เพื่อตรวจสอบบันทึก:

bashsudo less /var/log/cloudflare-ufw.log

หากคุณต้องการย้อนกลับไปใช้ “อนุญาตทุกที่” (ไม่แนะนำสำหรับการใช้งานจริง):

bashsudo ufw delete allow from any to any port 80 proto tcp sudo ufw delete allow from any to any port 443 proto tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp

ด้วยการตั้งค่านี้ ไฟร์วอลล์ UFW ของคุณจะยอมรับเฉพาะการรับส่งข้อมูล HTTP/HTTPS จากช่วง IP ปัจจุบันของ Cloudflare เท่านั้น ซึ่งจะช่วยลดพื้นที่เสี่ยงต่อการโจมตีได้อย่างมาก ในขณะที่ยังคงรับประกันว่าเว็บไซต์ของคุณสามารถเข้าถึงได้ผ่าน Cloudflare.

หน้านี้มีประโยชน์หรือไม่?

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *