- การนำระบบบล็อก IP แบบไดนามิกมาใช้โดยอาศัยการวิเคราะห์บันทึกการเข้าถึง
- ใช้ไฟล์การกำหนดค่า .local เพื่อป้องกันการสูญหายของการตั้งค่าระหว่างการอัปเดตระบบ
- ความสามารถในการปกป้องหลายช่องทางสำหรับบริการที่สำคัญ เช่น SSH, เว็บเซิร์ฟเวอร์, ฐานข้อมูล และ FTP
- การจัดการการแบนและการยกเลิกการแบนแบบเรียลไทม์โดยใช้เครื่องมือบรรทัดคำสั่ง fail2ban-client

การปล่อยให้เซิร์ฟเวอร์ Linux เชื่อมต่อกับเครือข่ายภายนอกนั้นเปรียบเสมือนการดึงดูดบอทเข้ามา หากคุณไม่ได้ตั้งค่ามาตรการรักษาความปลอดภัยใดๆ คุณอาจมีบันทึกการเข้าสู่ระบบล้มเหลวนับพันครั้งแล้ว เพราะมีเครื่องจักรอัตโนมัติพยายามลองใส่ชื่อผู้ใช้และรหัสผ่านต่างๆ อย่างต่อเนื่องเพื่อพยายามควบคุมเครื่องของคุณผ่านการโจมตีแบบ Brute- force
นี่คือจุดที่ Fail2ban เข้ามามีบทบาท เครื่องมือนี้ทำหน้าที่เหมือนสุนัขเฝ้าบ้านที่ไม่รู้จักเหน็ดเหนื่อย มันไม่ใช่ไฟร์วอลล์ในความหมายที่แท้จริง แต่จะวิเคราะห์บันทึกระบบและเมื่อตรวจพบว่ามีใครพยายามบุกรุกเข้ามา มันจะปิดกั้นการเข้าถึงโดยการบล็อกที่อยู่ IP ของพวกเขาโดยใช้เครื่องมืออย่าง iptables หรือ nftables มาดูกันว่าเราจะตั้งค่าอย่างไรให้เซิร์ฟเวอร์ของคุณแข็งแกร่งและยากต่อการเจาะระบบ
Fail2ban คืออะไรกันแน่ และทำงานอย่างไร?
กล่าวโดยสรุป Fail2ban คือโปรแกรมที่ทำงานอยู่เบื้องหลัง คอยตรวจสอบไฟล์บันทึกของบริการต่างๆ อย่างต่อเนื่อง เมื่อพบรูปแบบที่น่าสงสัยซึ่งตรงกับกฎที่กำหนดไว้ล่วงหน้า เรียกว่าตัวกรองมันจะเริ่มนับจำนวนครั้งที่ล้มเหลว หากที่อยู่ IP ใดถึงจำนวนครั้งที่อนุญาตสูงสุดภายในระยะเวลาที่กำหนด โปรแกรมจะดำเนินการบางอย่างซึ่งโดยทั่วไปแล้วจะเกี่ยวข้องกับการเพิ่มที่อยู่ IP นั้นลงในบัญชีดำของไฟร์วอลล์
การกำหนดค่าเหล่านี้ถูกจัดระเบียบเป็นสิ่งที่เรียกว่า"คุก" (jails ) โดยพื้นฐานแล้ว คุกคือชุดของกฎที่ใช้กับบริการเฉพาะ (เช่น SSH, Apache หรือ MySQL) ด้วยวิธีนี้ คุณสามารถมีนโยบายที่เข้มงวดมากสำหรับการเข้าถึงระยะไกล และนโยบายที่ผ่อนปรนมากขึ้นสำหรับเว็บเซิร์ฟเวอร์ ทำให้มั่นใจได้ว่าผู้บุกรุกจะถูกบล็อกโดยอัตโนมัติโดยที่คุณไม่ต้องตรวจสอบบันทึกทุกๆ ห้านาทีด้วยตนเอง

ติดตั้งตามเวอร์ชัน Linux ที่คุณใช้งาน
คำสั่งในการติดตั้งจะแตกต่างกันเล็กน้อยขึ้นอยู่กับระบบปฏิบัติการที่คุณใช้ แต่โดยทั่วไปแล้วจะพบได้ในคลังซอฟต์แวร์อย่างเป็นทางการเกือบทุกระบบ
- บน Ubuntu และ Debian: มันง่ายมาก คุณแค่ต้องวิ่ง
sudo apt updateตามด้วยsudo apt install fail2ban. - บนระบบปฏิบัติการ Rocky Linux หรือ AlmaLinux: เนื่องจากเป็นการแจกจ่ายแบบ Enterprise คุณจึงต้องเปิดใช้งานที่เก็บข้อมูล EPEL ก่อนด้วยคำสั่งต่อไปนี้
sudo dnf install epel-releaseจากนั้นติดตั้งแพ็กเกจด้วยsudo dnf install fail2ban fail2ban-firewalld. - ใน Alpine Linux: ใช้โปรแกรมจัดการ APK กับ
sudo apk add fail2banและเนื่องจากมันใช้ OpenRC คุณจึงต้องเปิดใช้งานด้วยsudo rc-update add fail2ban defaultและเริ่มต้นด้วยsudo rc-service fail2ban start.

การกำหนดค่าหลัก: ความลับของไฟล์ .local
ข้อผิดพลาดที่พบบ่อยมากคือการแก้ไขไฟล์โดยตรง jail.confอย่าทำอย่างนั้น! ไฟล์นั้นอาจถูกเขียนทับเมื่อคุณอัปเดตระบบ กฎสำคัญคือต้องสร้างสำเนาไว้ด้วย jail.localพารามิเตอร์ใดๆ ที่คุณเพิ่มลงในไฟล์ที่สองนี้จะมีผลเหนือกว่าพารามิเตอร์ในไฟล์ต้นฉบับ และการเปลี่ยนแปลงของคุณจะถูกเขียนทับ ปลอดภัยจากการอัปเดต.
เริ่มต้นด้วยการคัดลอกไฟล์ต้นฉบับโดยใช้คำสั่งต่อไปนี้ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local จากนั้นเปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ เช่น nano หรือ vim ในส่วนนั้น [ค่าเริ่มต้น] ส่วนนี้ใช้สำหรับกำหนดพฤติกรรมโดยรวมของระบบ:
- แบนไทม์: ระยะเวลาที่ที่อยู่ IP ที่เป็นอันตรายจะถูกระงับไว้ สามารถระบุเป็นวินาทีหรือใช้ 'm' แทนนาที (เช่น 10m)
- findtime: ช่วงเวลาที่ Fail2ban ตรวจสอบข้อผิดพลาด หากใครทำผิดพลาด 5 ครั้งในหนึ่งชั่วโมง แต่เวลาที่ใช้ในการตรวจสอบคือ 10 นาที พวกเขาจะไม่ถูกแบน
- จำนวนครั้งการลองสูงสุด: จำนวนครั้งที่อนุญาตให้พยายามผิดพลาดก่อนที่ระบบจะแจ้งข้อผิดพลาด พอแล้วและบล็อก IP.
- ละเว้น: สิ่งสำคัญคือต้องหลีกเลี่ยงการแบนตัวเอง ที่นี่คุณต้องป้อนข้อมูลของคุณ ที่อยู่ IP สาธารณะ หรือช่วง VPN ของคุณ

การปกป้องบริการเฉพาะทีละขั้นตอน
เมื่อตั้งค่าทั่วไปเสร็จแล้ว ก็ถึงเวลาเปิดใช้งานระบบรักษาความปลอดภัยสำหรับบริการที่คุณสนใจมากที่สุด เพื่อให้การป้องกันทำงานได้ คุณต้องตั้งค่าให้ถูกต้อง enabled = true ในส่วนที่เกี่ยวข้องภายใน jail.local.
การเข้าถึง SSH (จุดสำคัญที่สุด)
พอร์ต 22 คือเป้าหมายอันดับหนึ่ง การกำหนดค่าที่แข็งแกร่งจะกำหนด maxretry = 3 และ bantime = 3600 (หนึ่งชั่วโมง) Fail2ban จะอ่านไฟล์ /var/log/auth.log (บน Debian/Ubuntu) หรือ / var / log / ปลอดภัย (บน CentOS/RHEL) เพื่อตรวจจับความล้มเหลวในการตรวจสอบสิทธิ์และปิดกั้นการเข้าถึงของผู้โจมตี
เว็บเซิร์ฟเวอร์ (Apache และ Nginx)
หากคุณมีเว็บไซต์หรือร้านค้าออนไลน์ บอทจะพยายามเข้าถึงเส้นทางที่สำคัญ เช่น /wp-admin o /login.phpคุณสามารถสร้างตัวกรองแบบกำหนดเองได้ใน /etc/fail2ban/filter.d/ เพื่อตรวจจับรูปแบบเหล่านี้ ตัวอย่างเช่น เพื่อ ปกป้อง WordPressข้อผิดพลาด 403 หรือความพยายามที่ไม่สำเร็จจะถูกตรวจสอบใน wp-login.phpโดยจะบล็อก IP หากเกินขีดจำกัดที่ตั้งไว้ใน Apache หรือ Nginx jail
ฐานข้อมูลและ FTP
สำหรับ MySQL คุณสามารถตรวจสอบบันทึกข้อผิดพลาดสำหรับวลีดังกล่าวได้ ผู้ใช้ไม่ได้รับอนุญาตให้เข้าถึงในกรณีของ FTP (เช่น ProFTPD) การตรวจสอบให้แน่ใจว่า... logpath ตรวจสอบให้แน่ใจว่าเส้นทางไปยังไฟล์บันทึกของคุณตรงกับความเป็นจริง เพราะหาก Fail2ban หาไฟล์บันทึกไม่พบ ระบบป้องกันก็จะใช้งานไม่ได้
การจัดการขั้นสูงด้วย fail2ban-client
คุณไม่จำเป็นต้องแก้ไขไฟล์และรีสตาร์ทบริการเสมอไปเพื่อทำการเปลี่ยนแปลงอย่างรวดเร็ว คำสั่งนี้จะช่วยได้ fail2ban-client ฟังก์ชันนี้ช่วยให้คุณสามารถจัดการระบบได้ทันทีจากคอนโซล
หากต้องการดูว่าเรือนจำใดกำลังทำงานอยู่และมี IP กี่รายการที่ถูกบล็อก ให้ใช้คำสั่งต่อไปนี้ sudo fail2ban-client statusหากคุณต้องการศึกษาบริการต่างๆ อย่างละเอียดมากขึ้น เช่น SSH ให้เรียกใช้คำสั่งต่อไปนี้ sudo fail2ban-client status sshdนอกจากนี้ หากเกิดความผิดพลาด คุณได้บล็อกเพื่อนร่วมงานคนหนึ่งแล้ว หรือคุณสามารถปล่อยที่อยู่ IP ด้วยตนเองได้อย่างรวดเร็วโดยใช้คำสั่งนี้ sudo fail2ban-client set sshd unbanip IP_A_DESBLOQUEAR.
Mantenimiento และการแก้ปัญหาของปัญหา
หากคุณสังเกตว่า Fail2ban ไม่ทำงานอย่างที่ควรจะเป็น จุดแรกที่ควรตรวจสอบคือไฟล์บันทึกของโปรแกรมเอง /var/log/fail2ban.log. การใช้ tail -f คุณสามารถดูได้แบบเรียลไทม์ว่าใครถูกแบนและเพราะเหตุใด
โปรดจำไว้ว่า Fail2ban จะจัดเก็บสถานะการล็อกไว้ในฐานข้อมูล SQLite /var/lib/fail2ban/fail2ban.sqlite3ดังนั้น หากคุณรีสตาร์ทเซิร์ฟเวอร์ IP ที่ถูกแบนก็จะถูกปลดแบน จะยังคงถูกบล็อกต่อไป จนกว่าระยะเวลาการลงโทษของคุณจะหมดลง เมื่อใดก็ตามที่คุณทำการเปลี่ยนแปลงไฟล์การกำหนดค่า อย่าลืมใช้การเปลี่ยนแปลงด้วย sudo systemctl restart fail2ban.
การใช้งานเครื่องมือนี้จะเปลี่ยนเซิร์ฟเวอร์ของคุณจากเป้าหมายที่โจมตีได้ง่ายให้กลายเป็นป้อมปราการอัตโนมัติ ลดภาระการทำงานของ CPU โดยการกำจัดทราฟฟิกที่เป็นอันตรายที่ระดับเครือข่าย และช่วยให้คุณนอนหลับได้อย่างสบายใจโดยรู้ว่าบอทจะไม่สามารถเจาะระบบได้ การผสมผสานการใช้ไฟล์ .local การจัดการ jails เฉพาะ และการตรวจสอบบันทึกอย่างต่อเนื่อง จะทำให้คุณได้ระบบป้องกันเชิงลึกที่จำเป็นสำหรับผู้ดูแลระบบ Linux ทุกคน