ฉันตั้งค่าอินสแตนซ์ Traefik ที่เรียกใช้โดยเครื่องมือ Docker ในโหมด Swarm ด้วยการกำหนดค่าแบบ "คลาสสิก" (ดูด้านล่าง เพื่อความกระชับ ฉันใส่เฉพาะส่วนที่เกี่ยวข้อง [สำหรับฉัน] เท่านั้น อย่าลังเลที่จะสอบถามรายละเอียดเพิ่มเติมหากคุณต้องการ).
ติดตั้ง Fail2Ban เช่นเดียวกับไฟร์วอลล์ (การกระจาย CentOS) จนถึงตอนนี้ ฉันได้ตั้งค่าตัวกรอง/คุกอย่างง่าย โดยส่วนใหญ่สำหรับการบล็อก DOS และ bruteforce โดยดูบันทึกการเข้าถึง Traefik
ปัญหาของฉัน : เมื่อฉันลองกับ นิกโต หรือ ไฮดราฉันเห็นว่า IP ที่พยายามของฉันถูกขึ้นบัญชีดำ:
# สถานะไคลเอนต์fail2ban symfony-auth
สถานะของคุก: symfony-auth
|- ตัวกรอง
| |- ล้มเหลวในปัจจุบัน: 3
| |- ทั้งหมดล้มเหลว: 906
| `- รายการไฟล์: /var/log/traefik/access.log
`- การกระทำ
|- ถูกแบนในขณะนี้: 1
|- ถูกแบนทั้งหมด: 2
`- รายการ IP ที่ถูกแบน: 37.19.218.169
แต่ไม่มีอะไรเปลี่ยนแปลงในส่วนกฎของ iptables และฉันเห็นว่า IP ที่ระบุไม่ได้ถูกบล็อกนอกจากนี้ หากฉันพยายามนำทางไปยังเว็บไซต์จาก IP ที่ถูกแบน ฉันสามารถทำได้แม้ว่าจะถูกแบนก็ตาม
ฉันต้องเพิ่มที่ฉันมี ไฟล์ 00-firewalld.conf
พร้อมคำแนะนำเริ่มต้นเกี่ยวกับการดำเนินการสำหรับ distro นี้:
# cat /etc/fail2ban/jail.d/00-firewalld.conf
# ไฟล์นี้เป็นส่วนหนึ่งของแพ็คเกจ fail2ban-firewalld เพื่อกำหนดค่าการใช้งาน
# การกระทำ firewalld เป็นการกระทำเริ่มต้น คุณสามารถลบแพ็คเกจนี้ได้
# (พร้อมกับ meta-package ของ fail2ban ที่ว่างเปล่า) หากคุณไม่ได้ใช้ firewalld
[ค่าเริ่มต้น]
banaction = firewallcmd-rich-rules[ประเภทการกระทำ=<หลายพอร์ต>]
banaction_allports = firewallcmd-rich-rules[actiontype=<allports>]
แบ็กเอนด์ = systemd
สุดท้ายนี้ฉันไม่มีความแตกต่างของเวลาเช่นที่ระบุไว้ ที่นี่.
# หาง /var/log/messages
12 ก.ค. 13:28:05 น. ....
#วันที่เวลา
เวลาท้องถิ่น: จันทร์ 2021-07-12 13:30:18 UTC
เวลาสากล: จันทร์ 2021-07-12 13:30:18 UTC
เวลา RTC: จันทร์ 2021-07-12 13:30:13 น
เขตเวลา: UTC (UTC, +0000)
นาฬิการะบบซิงโครไนซ์: ใช่
บริการ NTP: เปิดใช้งาน
RTC ใน TZ ท้องถิ่น: ไม่
เหตุใด IP ที่ถูกแบนของฉันจึงยังสามารถเข้าถึงเว็บไซต์เป้าหมายได้ ขอบคุณสำหรับการนำทางและการตรัสรู้ของคุณ
เกร็ดเล็กเกร็ดน้อย
เทรฟิค นักเทียบท่า-compose.yml
ส่วนการบันทึก
รุ่น: "3.3"
บริการ:
พร็อกซีย้อนกลับ:
รูปภาพ: "traefik:v2.4"
สั่งการ:
# บันทึกการกำหนดค่า
#- "--log.level=DEBUG"
- "--log.filepath=/var/log/traefik/traefik.log"
- "--accesslog.filepath=/var/log/traefik/access.log"
ส่วนปริมาตร :
# ...
ปริมาณ:
#เพื่อคงใบรับรอง
- ใบรับรอง traefik:/letsencrypt
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- /var/log/traefik:/var/log/traefik/
# ...
ล้มเหลว 2 แบน
ตัวกรองของฉัน
/etc/fail2ban/filter.d/my_filter.conf
[คำนิยาม]
failregex = ^<HOST>.*"(GET|POST|HEAD).*" (404|444|403|400|301) .*$
ละเว้นregex =
คุกของฉัน
[my_jail]
เปิดใช้งาน = จริง
พอร์ต = http,https
ฟิลเตอร์ = my_filter
logpath = /var/log/traefik/access.log
สูงสุด = 10
สถานะลูกค้า
# สถานะไคลเอนต์fail2ban
สถานะ
|- จำนวนคุก: 2
`- รายชื่อคุก: sshd, my_jail