หลังจากที่มีการเขียนเล่าเรื่อง Pi-Hole ระบบจัดการ DNS แบบส่วนตัวไปหลายๆตอน และใช้งานจริง ทางผมก็พบว่า มีการ DNS Query Attack pizzaseo.com เข้ามายัง Pi-Hole ที่เปิดใช้งานอยู่ ก็หาวิธีการ Block อยู่หลายวิธี เพราะว่ามีการยิง DNS Query เข้ามาเยอะมากๆ จากหลายๆ IP เลยทีเดียว เรียกได้ว่าเป็นล้านๆ Query ต่อวัน ทำให้ Log บวม จนทำให้ DNS ล่มในที่สุด
วิธีการแก้ไขปัญหานี้ ผมจะเลือกใช้งานตัว Fail2ban และ CSF เข้ามาช่วย โดยทำการติดตั้ง Fail2ban และ CSF ให้เรียบร้อย ตามที่ OS ของท่านใช้งานอยู่นะครับ สำหรับ CentOS สามารถใช้คำสั่งนี้ได้เลยครับ
yum install fail2ban systemctl enable fail2ban cd /usr/src/ wget https://download.configserver.com/csf.tgz tar -xzf csf.tgz cd csf sh install.sh
หลังจาก Service ต่างๆพร้อมแล้ว ให้ทำการแก้ไขไฟล์ csf.conf สำหรับ Fail2ban
nano /etc/fail2ban/action.d/csf.conf # Input in file csf.conf # Fail2Ban configuration file # http://configserver.com/cp/csf.html # # Note: CSF doesn't play nicely with other actions. It has been observed to # remove bans created by other iptables based actions. If you are going to use # this action, use it for all of your jails. # # DON'T MIX CSF and other IPTABLES based actions [Definition] actionstart = actionstop = actioncheck = actionban = csf --deny <ip> "banned by Fail2Ban <name>" actionunban = csf --denyrm <ip> [Init] # Name used in CSF configuration # name = default # DEV NOTES: # # based on apf.conf by Mark McKinstry
ทำการเพิ่ม Rule ของ DNS Query สำหรับโดเมน pizzaseo.com ที่มีการยิง DNS Query เข้ามา แล้วก็แบนมันซะ
nano /etc/fail2ban/filter.d/pihole-bad.conf # Add to file pi-hole-bad.conf [INCLUDES] before = common.conf [Definition] _daemon = dnsmasq failregex = .*query.*pizzaseo.com from <HOST> ignoreregex = nano /etc/fail2ban/jail.local # Append in file jail.local [pihole-bad] enabled = true port = 53 action = %(banaction)s[name=%(__name__)s-tcp, port="%(port)s", protocol="tcp", chain="%(chain)s", actname=%(banaction)s-tcp] %(banaction)s[name=%(__name__)s-udp, port="%(port)s", protocol="udp", chain="%(chain)s", actname=%(banaction)s-udp] logpath = /var/log/pihole.log findtime = 60 maxretry = 1 bantime = 86400 banaction = csf
เมื่อตั้งค่าเสร็จเรียบร้อย ก็ทำการ Restart Fail2ban และตรวจสอบสถานะการทำงานของระบบ
systemctl restart fail2ban systemctl status fail2ban fail2ban-client status pihole-bad
Status for the jail: pihole-bad |- Filter | |- Currently failed: 0 | |- Total failed: 1211 | `- File list: /var/log/pihole.log `- Actions |- Currently banned: 7 |- Total banned: 7 `- Banned IP list: 73.133.181.197 47.152.202.28 47.150.161.174 172.74.3.46 78.108.216.207 72.202.137.151 47.204.23.134
อัพเดต: หลังจากที่ได้นำเอา Fail2Ban เข้ามาช่วย Block DNS Flood Attack ผลปรากฏว่า ผ่านไปประมาณ 2 วัน ทำการ Block ไปมากกว่า 834 IP Address สุดยอดจริงๆ
Status for the jail: pihole-bad |- Filter | |- Currently failed: 0 | |- Total failed: 6714 | `- File list: /var/log/pihole.log `- Actions |- Currently banned: 297 |- Total banned: 834 `- Banned IP list: xxx
Blog ส่วนตัว ที่จะแชร์เรื่องร่าวต่างๆที่พบเจอมา จากประสบการณ์จริง เพื่อเป็นประโยชน์ต่อสังคมและผู้ที่กำลังศึกษาหาความรู้เรื่องต่างๆ ไม่ว่าจะเป็น Server, Network, Security, ทำเว็บไซต์, เขียนโปรแกรม, ฯลฯ ขอบคุณทุกๆการติดตามครับ 😉
★ บริการ Cloud Server ★