
การปล่อยให้เซิร์ฟเวอร์ Linux เชื่อมต่อกับเครือข่ายภายนอกนั้น เปรียบเสมือนการดึงดูดบอทเข้ามา หากคุณไม่ได้ตั้งค่ามาตรการรักษาความปลอดภัยใดๆ คุณอาจมีบันทึกการเข้าสู่ระบบล้มเหลวนับพันครั้งแล้ว เพราะมีเครื่องจักรอัตโนมัติพยายามใช้ชื่อผู้ใช้และรหัสผ่านต่างๆ เพื่อพยายามควบคุมเครื่องของคุณอยู่ตลอดเวลา การโจมตีด้วยกำลังดุร้าย.
นี่คือจุดที่ Fail2ban เข้ามามีบทบาท เครื่องมือนี้ทำหน้าที่เสมือนสุนัขเฝ้าบ้านที่ไม่รู้จักเหน็ดเหนื่อย มันไม่ใช่ไฟร์วอลล์ในความหมายที่แท้จริง แต่เป็นเพียงเครื่องมือที่คอยตรวจสอบและป้องกันเท่านั้น วิเคราะห์บันทึกระบบ และเมื่อตรวจพบว่ามีใครพยายามบุกรุกเข้ามา มันก็จะปิดกั้นการเข้าถึงนั้นโดยการบล็อกที่อยู่ IP ของพวกเขาโดยใช้เครื่องมืออย่าง iptables หรือ nftables มาดูกันว่าเราจะปรับแต่งมันอย่างไรเพื่อให้เซิร์ฟเวอร์ของคุณยากต่อการเจาะระบบ
Fail2ban คืออะไรกันแน่ และทำงานอย่างไร?
กล่าวโดยสรุป Fail2ban คือโปรแกรมที่ทำงานอยู่เบื้องหลัง คอยตรวจสอบไฟล์บันทึกของบริการต่างๆ อย่างต่อเนื่อง เมื่อพบรูปแบบที่น่าสงสัยซึ่งตรงกับกฎที่กำหนดไว้ล่วงหน้า ก็จะทำการเรียกใช้ฟังก์ชันต่างๆ ฟิลเตอร์โปรแกรมจะเริ่มนับจำนวนครั้งที่ล้มเหลว หากที่อยู่ IP ใดถึงจำนวนครั้งที่อนุญาตภายในระยะเวลาที่กำหนด โปรแกรมจะดำเนินการบางอย่าง การกระทำซึ่งโดยปกติแล้วจะต้องเพิ่มที่อยู่ IP นั้นลงในบัญชีดำของไฟร์วอลล์
โครงสร้างเหล่านี้ถูกจัดระเบียบเป็นสิ่งที่เรียกว่า คุกหรือเรือนจำโดยพื้นฐานแล้ว "คุก" คือชุดของกฎที่ใช้กับบริการเฉพาะ (เช่น 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 ในส่วนนั้น [ค่าเริ่มต้น] ส่วนนี้ใช้สำหรับกำหนดพฤติกรรมโดยรวมของระบบ:
- แบนไทม์: El tiempo que la IP maliciosa se quedará en el congelador. Puede ser en segundos o usando ‘m’ para minutos (ej. 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 ทุกคน
