ConfigServer Security & Firewall หรือ CSF เป็นไฟร์วอลล์สำหรับลงในเซิฟเวอร์ลินุกส์ มีจุดเด่นคือการตั้งค่าความปลอดภัยพื้นฐานได้ง่าย มี Login Failure Daemon (LFD) คอยตรวจจับและบล๊อคไอพีที่ลอคอินผิด มีระบบแจ้งเตือนสิ่งที่ผิดสังเกตบนเซิฟเวอร์ ฯ แต่ฟังก์ชั่นทั้งหมดที่ว่ามานี้ส่วนใหญ่ไม่ได้ถูกเปิดใช้งานมาเป็น default ดังนั้นเมื่อเราลง CSF แล้วจึงต้องทำการตั้งค่าพื้นฐานให้เหมาะสมกับการใช้งาน
อนึ่ง การตั้งค่าที่จะกล่าวถึงในบทความนี้ สามารถทำตามโดยใช้การแก้ไขไฟล์ผ่าน command line ก็ได้ หรือแก้ไขผ่านหน้าเว็บ (Web UI) ของ csf ก็ได้ ยกเว้นการตั้งค่าบางอย่างมีความเสี่ยงสูง จะต้องทำผ่าน command line เท่านั้น
บทความนี้ใช้กับเครื่องที่ลง csf เรียบร้อยแล้ว หากยังไม่ได้ลงหรือสามารถดูข้อมูลได้ในโพส วิธีลง CSF ใน Ubuntu บน EC2
หากต้องการตั้งค่าผ่าน Web UI สามารถดูวีธีการเปิดใช้งานได้ที่โพส ตั้งค่าและเปิดใช้งาน Web UI สำหรับ CSF
ก่อนจะเริ่มตั้งค่าในบทความนี้ ควรตั้งค่าเริ่มต้นอื่นๆมาก่อนแล้ว (TESTING, RESTRICT_SYSLOG, Allow Ports) โดย สามารถดูวิธีได้ในหัวข้อ ตั้งค่าเบื้องต้นและเปิดใช้งาน csf ในโพสวิธีลง CSF
ตั้งค่าการส่งอีเมลล์แจ้งเตือน
หนึ่งในสิ่งสำคัญในการใช้ csf คือการรับการแจ้งเตือนผ่านอีเมลล์ เพื่อให้ผู้ดูแลระบบได้ทราบข้อมูลอย่างทันท่วงทีเมื่อเกิดความผิดปกติขึ้นในเซิฟเวอร์ ดังนั้นเราจะต้องทำให้แน่ใจก่อนว่าอีเมลล์แจ้งเตือนเหล่านี้จะส่งมาถึงเราได้จริง
ปกติแล้ว csf จะใช้คำสั่ง sendmail ของ linux ในการส่งเมลล์แจ้งเตือน แต่หากเครื่องเราไม่ได้ลงเซอร์วิสที่ใช้ในการส่งอีเมลล์ไว้ csf ก็จะไม่สามารถส่งเมลล์ออกได้ วิธีแก้ไขปัญหานี้มีหลายวิธี หนึ่งในนั้นก็คือการลง โปรแกรม sSMTP เพื่อส่งอีเมลล์โดยผ่าน SMTP เซิฟเวอร์ภายนอก สามารถดูวีธีการได้ที่โพส ลง sSMTP สำหรับเชื่อมต่อกับเซิฟเวอร์ภายนอกเพื่อส่งอีเมลล์บน Ubuntu
เมื่อเรามั่นใจว่าเซิฟเวอร์ของเราสามารถทำการส่งอีเมลล์ออกได้แล้ว ก็จะต้องไปตั้งค่าอีเมลล์ผู้รับ: LF_ALERT_TO และชื่ออีเมลล์ผู้ส่ง LF_ALERT_FROM ที่ไฟล์ csf.conf
โดยให้เปิดไฟล์ขึ้นมาเพื่อแก้ไข ตามคำสั่งด้านล่างนี้
หากใช้งานผ่านหน้าเว็บ การแก้ไขไฟล์ csf.conf จะอยู่ในเมนู Firewall Configuaration
sudo vi /etc/csf/csf.conf
LF_ALERT_TO = "[email protected]"
LF_ALERT_FROM = "[email protected]"
เมื่อแก้ไขเรียบร้อยแล้วให้ทำการบันทึกไฟล์ และรัน sudo csf -r
เพื่อรีสตาร์ท csf
ตั้งค่าแจ้งเตือนหรือทำลาย Process ด้วย Process Tracking
ฟังก์ชั่นหนึ่งที่มีประโยชน์มากใน csf คือการ monitor process หรือคอยจับตาดูโปรแกรมที่รันอยู่ในเครื่อง หากมี process ใดที่ทำงานผิดปกติ เช่น ใช้เวลานานเกินไป หรือใช้แรมเยอะเกินไป csf ก็จะทำการแจ้งเตือนไปยังผู้ดูแลระบบ หรือ อาจจะทำลาย (kill) process นั้นไปเลย แล้วแต่การตั้งค่าของเรา โดยค่าที่เกี่ยวกับ process นี้จะอยู่ในไฟล์ csf.conf ชื่อนำหน้าด้วย PT_ เช่น
# ระยะเวลา (วินาที) ที่ปล่อยให้ process รัน ก่อนที่ csf จะเข้าไปยุ่ง
# ตั้งค่าเป็น 0 เพื่อปิดการใช้งาน process tracking
PT_LIMIT = "60"
# แจ้งเตือนหาก process ใดใช้หน่วยความจำมากกว่าที่กำหนด (MB)
PT_USERMEM = "512"
# แจ้งเตือนหาก process ใช้เวลาทำงานนานกว่าที่กำหนด (วินาที)
PT_USERTIME = "1800"
# ทำลาย(kill) process ที่เข้าเกณฑ์ PT_USERMEM, PT_USERTIME หรือ PT_USERPROC (ไม่แนะนำ)
PT_USERKILL = "0"
# แจ้งเตือนเมื่อ load average ของเซิฟเวอร์มีค่าสูงเกินกว่าที่กำหนด (เซิฟเวอร์ทำงานหนัก)
# ความถี่ที่ตรวจสอบค่า load averge ของเซิฟเวอร์ (วินาที)
PT_LOAD = "30"
# ค่าวินาที Load average ที่ใช้ (1, 5, 15)
PT_LOAD_AVG = "5"
# ค่า load average ที่กำหนด แจ้งเตือนหากเกินค่านี้
PT_LOAD_LEVEL = "6"
เมื่อแก้ไขเรียบร้อยแล้วให้ทำการบันทึกไฟล์ และรัน sudo csf -r
เพื่อรีสตาร์ท csf
ตั้งค่า Process Ignore
อย่างไรก็ตาม ในเครื่องเซิฟเวอร์ปกติก็จะมี process ที่มีความจำเป็นต้องรันอยู่ตลอดเวลา หรือใช้หน่วยความจำมากกว่าปกติ เช่น process ของระบบปฎิบัติการเอง ซึ่งหาก csf แจ้งเตือนการทำงานของ process เหล่านี้ ก็จะเป็น false alarm ไป ดังนั้น เราจึงสามารถตั้งค่าให้ csf ไม่สนใจบาง process ได้
โดยค่าเริ่มต้นนั้น csf จะตั้งค่าให้ไม่สนใจ process ที่รู้จักกันดีมาอยู่แล้ว แต่หากเครื่องเรา process อื่นๆที่ทำงานในลักษณะเดียวกันนี้ ก็จะต้องนำไปใส่ในไฟล์ process ignore เพื่อให้ระบบไม่แจ้งเตือน false alarm โดยแก้ไขไฟล์ csf.pignore ()
หากใช้งานผ่านหน้าเว็บ จะอยู่ในส่วน lfd หัวข้อ Edit lfd ignore file ให้เลือก csf.pignore แล้วกด Edit
sudo vi /etc/csf/csf.pignore
# เพิ่ม process ที่ต้องการ ignore ที่ด้านล่างสุดของไฟล์ โดยสามารถกำหนดได้หลากหลาย
# ตั้งให้ ignore ตัว executable process เช่น
exe:/usr/local/nginx/sbin/nginx
# ตั้งให้ ignore process ที่ผู้ใช้ใดผู้ใช้หนึ่งเป็นเจ้าของ เช่น
user:nginx
เมื่อแก้ไขเรียบร้อยแล้วให้ทำการบันทึกไฟล์ และรัน sudo csf -r
เพื่อรีสตาร์ท csf
ตรวจจับการลอคอินผิดเพื่อป้องกัน Brute Force Attack ด้วย LFD
หนึ่งในฟีเจอร์ที่สำคัญของ CSF คือ Login Failure Daemon (LFD) คือการคอยตรวจจับ บล๊อค และแจ้งเตือนเมื่อมีผู้พยายามเข้าระบบด้วยรหัสผ่านที่ไม่ถูกต้อง เพื่อป้องกันการ Brute-force attack หรือการพยายามเข้าระบบด้วยการสุ่มรหัสผ่านไปเรื่อยๆ
# บล๊อคผู้ที่พยายามเข้าใช้งาน SSH และลอคอินผิดมากกว่าจำนวนครั้งที่กำหนด (ในที่นี้คือ 5)
LF_SSHD = "5"
# ระยะเวลาในการบล๊อค 1=บล๊อคถาวร / มากกว่า 1 คือจำนวนวินาทีที่ต้องการบล๊อคชั่วคราว
LF_SSHD_PERM = "1"
# บล๊อคผู้ที่พยายามเข้าใช้งาน FTP และลอคอินผิดมากกว่าจำนวนครั้งที่กำหนด
LF_FTPD = "5"
LF_FTPD_PERM = "3600"
# บล๊อคผู้ที่พยายามเข้าใช้งาน SMTP AUTH และลอคอินผิดมากกว่าจำนวนครั้งที่กำหนด
LF_SMTPAUTH = "10"
LF_SMTPAUTH_PERM = "3600"
# บล๊อคผู้ที่พยายามเข้าใช้งาน EXIM และลอคอินผิดมากกว่าจำนวนครั้งที่กำหนด
LF_EXIMSYNTAX = "10"
LF_EXIMSYNTAX_PERM = "3600"
# บล๊อคผู้ที่พยายามเข้าใช้งาน POP3 และลอคอินผิดมากกว่าจำนวนครั้งที่กำหนด
LF_POP3D = "10"
LF_POP3D_PERM = "3600"
# บล๊อคผู้ที่พยายามเข้าใช้งาน IMAP และลอคอินผิดมากกว่าจำนวนครั้งที่กำหนด
LF_IMAPD = "10"
LF_IMAPD_PERM = "3600"
# บล๊อคผู้ที่พยายามเข้าใช้งานเว็บที่มีการตั้งรหัสผ่านด้วย HTACCESS และลอคอินผิดมากกว่าจำนวนครั้งที่กำหนด
LF_HTACCESS = "10"
LF_HTACCESS_PERM = "3600"
เมื่อแก้ไขเรียบร้อยแล้วให้ทำการบันทึกไฟล์ และรัน sudo csf -ra
เพื่อรีสตาร์ท csf & lfd
แจ้งเตือนการลอคอินเข้า SSH
ผู้ดูแลระบบควรให้ความสนใจกับการลอคอินเข้าระบบด้วย SSH เป็นพิเศษ เนื่องจากปกติจะมีผู้ได้รับอนุญาตให้เข้าใช้งานในลักษณะนี้ไม่มาก และผู้ใช้งานหรือผู้โจมตีสามารถรันคำสั่งได้อย่างหลากหลาย ดังนั้นจึงควรตั้งค่าให้ csf แจ้งเตือนทุกครั้งเมื่อมีผู้ลอคอินเข้าระบบผ่าน SSH จะได้ทราบว่ามีคนกำลังใช้งานระบบผ่าน SSH อยู่ แล้วแก้ไขได้ทันท่วงทีหากเป็นการเข้าใช้งานจากผู้ที่ไม่ได้รับอนุญาต
# แจ้งเตือนทุกครั้งเมื่อมีผู้ลอคอินเข้า SSH
LF_SSH_EMAIL_ALERT = "1"
# แจ้งเตือนเมื่อมีการใช้คำสั่ง su เพื่อใช้งานเป็นผู้ใช้อื่น ไม่ว่าจะ su สำเร็จหรือไม่ก็ตาม
LF_SU_EMAIL_ALERT = "1"
เมื่อแก้ไขเรียบร้อยแล้วให้ทำการบันทึกไฟล์ และรัน sudo csf -ra
เพื่อรีสตาร์ท csf & lfd
การตั้งค่าเพื่อลดความเสี่ยงและผลกระทบจาก DDOS Attack
สามารถลดความเสี่ยงการถูก DDOS ด้วย Connection tracking และลดผลกระทบเมื่ออยู่ระหว่างการถูกโจมตีด้วย SYN flood protection โดยดูวิธีการตั้งค่าได้ที่โพส
ตั้งค่า CSF เพื่อป้องกัน DDOS Attack เบื้องต้น
บล๊อคหรืออนุญาตการเชื่อมต่อเป็นรายประเทศ
สามารถตั้งค่าการเชื่อมต่อจากบางประเทศได้ด้วย Country Code Deny โดยดูวิธีการตั้งค่าได้ที่โพส