วิธีติดตั้ง
cd /usr/src
rm -fv csf.tgz
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh
หลังจากติดตั้งแล้วให้ตั้งค่า csf
1. TESTING = 0
2. RESTRICT_SYSLOG = 3
3. Reporting Settings ตั้งค่า LF_ALERT_TO เป็นอีเมล์ของเรา
4. Login Failure Blocking and Alerts
LF_SELECT = 0 หมายความว่า ถ้ามีคน login ไม่สำเร็จ ให้ block ip นั้น เช่น ใส่รหัสผ่านอีเมล์ผิด จะเช็คเมล์ไม่ได้ และเปิดดูเว็บไซท์ไม่ได้
LF_SELECT = 1 หมายความว่า ถ้ามีคน login ไม่สำเร็จ ให้ block เฉพาะบริการที่ login ไม่สำเร็จ เช่น ใส่รหัสผ่านอีเมล์ผิด จะเช็คเมล์ไม่ได้ แต่ยังเปิดดูเว็บไซท์ได้
ที่เราสนใจคือ
LF_SSHD = 5, LF_SSHD_PERM = 1 ถ้ามีคน ssh เข้า server เราไม่สำเร็จถึง 5 ครั้ง ให้ block ip นั้นตลอดไปเลย
LF_FTPD
LF_SMTPAUTH คือ login ผ่าน outlook เพื่อส่งเมล์ออก
LF_POP3D คือ login ผ่าน outlook เพื่อเช็ค inbox
LF_IMAPD คือ login ผ่าน webmail
5. OS Specific Settings
คือ log file ต่างๆ หากตั้งค่าไม่ถูกต้อง ข้อ 4 จะไม่ทำงาน
SSHD_LOG = /var/log/secure
FTPD_LOG = /var/log/vsftpd.log
SMTPAUTH_LOG = /var/log/dovecot.log
POP3D_LOG = /var/log/dovecot.log
IMAPD_LOG = /var/log/dovecot.log
6. หลังจากตั้งค่าตามนี้แล้ว ผมลอง ftp ผิดไป 2 ครั้ง ปรากกว่า CSF ไม่ block
หลังจากอ่านไปอ่านมา ผมพบว่า
ปรกติ แต่ละ user จะเขียน log file ของตัวเอง และเขียน log บางส่วนไปที่ syslog ของ server
ค่า RESTRICT_SYSLOG = 3 คือการอนุญาติบาง user เท่านั้นที่มีสิทธิ์เขียน log ไปที่ syslog ได้
จากหน้าหลัก CSF ให้คลิกปุ่ม LFD Syslog User ที่อยุ่ล่างสุด
แล้วเพิ่มคำว่า vsftpd แล้วกดบันทึก
จากนี้ไป user vsftpd จะสามารถเขียน log ไปที่ syslog ได้
และเมื่อ CSF อ่าน syslog แล้วเจอบรรทัด ftp login ไม่สำเร็จ ก้จะ block ftp ตามที่เราตั้งค่าไว้
7. ลอง pop3 imap ผิด 2ครั้ง ปรากฏว่าไม่ block
เลยเปลี่ยนค่านี้
POP3D_LOG = /var/log/dovecot.log
IMAPD_LOG = /var/log/dovecot.log
(ของเดิม /var/log/dovecot/dovecot.log ไม่ถูก)
8. ในกรณีทำข้อ 7 แล้ว ยังไม่ block เราจะต้องไปตั้งค่า custom trigger แทน
nano /etc/csf/regex.custom.pm
if (($lgfile eq $config{POP3D_LOG}) and ($line =~ /,(\S+),\S+\): Password mismatch/)) { return ("Failed POP3 login from",$1,"POP3_fail","5","110,143,993,995","600"); }
if (($lgfile eq $config{FTPD_LOG}) and ($line =~ /FAIL LOGIN: Client \"(\S+)\"/)) { return ("Failed FTP login from",$1,"vsftpd_fail","5","20,21","1"); }
if (($globlogs{CUSTOM1_LOG}{$lgfile}) and ($line =~ /(\S+) failed to login/)) { return ("Login attempt to VestaCP from",$1,"VESTAlogin_fail","5","8083","1"); }
if (($globlogs{CUSTOM2_LOG}{$lgfile}) and ($line =~ /Login failed for \S+ against localhost from (\S+)\(/)) { return ("Failed Roundcube login from",$1,"roundcube_fail","5","1","600"); }
if (($globlogs{CUSTOM3_LOG}{$lgfile}) and ($line =~ /\[(\S+)\]: 535 Incorrect/)) { return ("Failed SMTP login from",$1,"SMTP_fail","5","25,465,587","600"); }
nano /etc/csf/csf.conf
HTACCESS_LOG = "/var/log/httpd/error_log"
MODSEC_LOG = "/var/log/httpd/error_log"
SSHD_LOG = "/var/log/secure"
SU_LOG = "/var/log/secure"
FTPD_LOG = "/var/log/vsftpd.log"
SMTPAUTH_LOG = "/var/log/dovecot.log"
POP3D_LOG = "/var/log/dovecot.log"
IMAPD_LOG = "/var/log/dovecot.log"
IPTABLES_LOG = "/var/log/messages"
SUHOSIN_LOG = "/var/log/messages"
BIND_LOG = "/var/log/messages"
SYSLOG_LOG = "/var/log/messages"
WEBMIN_LOG = "/var/log/secure"
CUSTOM1_LOG = "/var/log/vesta/auth.log"
CUSTOM2_LOG = "/var/log/roundcubemail/errors.log"
CUSTOM3_LOG = "/var/log/exim/reject.log"
หมายเหตุ นี่เป็นแนวทางในการตั้งค่าเฉยๆ server แต่ละเครื่อง เก็บ log file ไว้ต่างกัน
และ version ของ log file ก็ต่างกัน
ทำให้เราต้องเขียน custom trigger เอง
เพื่อให้แน่ใจว่า CSF จะ Block คนที่กรอกรหัสผ่านผิดใน Service สำคัญต่างๆ
คือ SSH, FTP, POP3, IMAP, SMTP, Webmail
หลังจากตั้งค่าเสร็จแล้ว ก็ restart csf + lfd
19 ก.ค. 62