วิธีการแก้ไขปัญหานี้ ผมจะเลือกใช้งานตัว 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: xxxThe post Pi-Hole Block pizzaseo.com DNS Flood Attack first appeared on 1412.]]>
เริ่มต้น ก็ให้เราเข้าสู่ระบบ /admin กันก่อนเลย จากนั้นเราจะเห็น Admin Dashboard อันสวยงามของ Pi-hole เรามาเริ่มกันเลย
ไปที่ Settings > DNS > คลิกเปิดใช้ use DNSSEC (DNSSEC คืออะไร?) และในตัวอย่าง จะมีการเปิดใช้งาน Upstream DNS Servers เพิ่มเติมสำหรับ DNS IPv6 ด้วย
ไปที่ Group Management > Adlist ในหน้านี้ เราจะสามารถเพิ่มรายโดเมนที่ต้องการ Block เพิ่มได้ ซึ่งค่า Default จะมีมาให้ด้วยกัน 4 URLs ตามรูปภาพ แนะนำให้ดู Lists ที่ต้องการเพิ่มได้จากลิงก์ https://firebog.net ซึ่งจะมีทั้ง Suspicious, Advertising, Tracking & Telemetry, และ Malicious หรือหากต้องการ Search หา Blacklist ด้วยตังเอง สามารถใช้คำค้น “Pi-hole blocklist” ค้นหาใน Google ได้เช่นกันครับ
หลังจากที่เราเพิ่ม List ที่ต้องการแล้ว ให้รันคำสั่ง pihole -g เพื่ออัพเดต List ลงฐานข้อมูลทุกๆครั้งนะครับ โดยสามารถคลิกที่ “online” ที่อยู่ด้านบนของ List เพื่อรันคำสั่งผ่านหน้า Admin Dashboard ได้เลย
สำหรับผู้ที่ติดตั้ง Pi-hole ผ่านทาง Docker: สามารถใช้ images ตัวนี้ที่มี Build-in ตัวระบบอัพเดตเข้ามาแล้ว โดยการสร้างไฟล์ docker-compose.yml ดังนี้
version: "3" services: pihole: container_name: pihole image: jacklul/pihole:latest ports: - "53:53/tcp" - "53:53/udp" - "67:67/udp" - "80:80/tcp" - "443:443/tcp" environment: TZ: 'Asia/Bangkok' WEBPASSWORD: '@Pass1234' volumes: - './etc-pihole/:/etc/pihole/' - './etc-dnsmasq.d/:/etc/dnsmasq.d/' - './etc-pihole-updatelists/:/etc/pihole-updatelists/' dns: - 127.0.0.1 - 1.1.1.2 cap_add: - NET_ADMIN restart: unless-stopped
หลังจากติดตั้งเสร็จ ให้แก้ไขไฟล์ etc-pihole-updatelists/pihole-updatelists.conf เพิ่ม ADLISTS_URL ที่ต้องการ เช่น หากต้องการ Block ทั้งหมดเลย ก็ใช้ URL https://v.firebog.net/hosts/lists.php?type=all ได้เลยครับ จากนั้นทำการรันดึงรายการโดเมนครั้งแรกด้วยคำสั่ง docker exec -it pihole pihole-updatelists แล้วต่อไป Cron จะรันให้เองครับ หรือหากต้องการแก้ไขเวลาที่รัน Cron สามารถแก้ไขไฟล์ crontab ในโฟเดอร์เดียวกัน
สำหรับผู้ที่ติดตั้ง Pi-hole ลงใน Linux: ให้ทำการติดตั้งตัว pihole-updatelists ได้ด้วยคำสั่งนี้ครับ
wget -O - https://raw.githubusercontent.com/jacklul/pihole-updatelists/master/install.sh | sudo bash
ส่วนวิธีการตั้งค่าต่างๆเหมือนกันกับในส่วนของการใช้งาน Docker เลยครับ..
The post Pi-hole ตอนที่ 4: การตั้งค่า Pi-hole Block 1 ล้าน Domain Blacklist first appeared on 1412.]]>