fail2ban

 
    พอดีมีอยู่วันหนึ่งตอนนั่งเล่นคอมอยู่ที่ทำงานดันเหลือบสายตาไปเห็นคุณ chris(ฝรั่งที่ทำงาน) กำลังติดตั้งโปรแกรมอยู่โปรแกรมนึงดูน่าสนใจดี(fail2ban) ก็เลยเข้าไปถามว่ามันคืออะไร ใช้งานยังไง หลังจากถามจนได้ความก็เลยลองติดตั้งแล้วใช้งานดูเองมั่ง หลังจากใช้งานดูแล้วก็รู้สึกว่า "เฮ้ย! โปรแกรมมันจ๊าบชะมัดเลยว่ะ" เลยกะว่าถ้าว่างๆจะมาเขียนเล่าสู่กันฟังสักหน่อย ตอนนี้ก็ว่างแล้วก็เลยขอมา review ให้อ่านกันสักหน่อยละกันครับ 
 
    ตัวโปรแกรม fail2ban มันจะเป็นโปรแกรมจำพวกป้องกันการพยายาม login เข้าใช้งานระบบจากผู้ไม่ประสงค์ดี หลักการง่ายๆสมมติเครื่อง server ของเราเปิดให้มีการ secure shell เข้ามาใช้งานจากภายนอกได้ ถ้าเราไม่ลงโปรแกรมจำพวก fail2ban สิ่งที่อาจจะเกิดขึ้น คือ วันดีคืนดีอาจจะโดน hack เข้ามาใช้งาน server ได้ โดย hacker มันอาจจะใช้โปรแกรมสุ่ม username,password ช่วยในการเจาะระบบ ถ้าเผอิญดวงตก hacker มันสามารถได้ username,password เราไป ก็เป็นอันว่าได้อุทาน "เอ้า! ซวยล่ะสิ" แน่ๆเลย ก็เพราะยังงี้แหละเลยมีคนคิดโปรแกรมแบน ip ขึ้นมา
 
    หลักการทำงานของตัวโปรแกรม คือ มันจะไปอ่าน log ไฟล์ของระบบอยู่เป็นระยะๆ ว่ามีคนที่พยายาม login เข้าระบบแล้ว fail ติดๆกันมั๊ย เช่น ถ้าเราตั้งค่าคอนฟิคของตัวโปรแกรมหลังจากที่ได้ติดตั้งไว้ว่า ถ้า login แล้ว fail ครบ 3 ครั้งก็ให้แบน ip เบอร์นั้นแ_ร่งไปเลยสักปีนึง ถ้ามีคน login แล้ว fail เข้าให้จริงๆ ทุกๆครั้งที่ fail ข้อมูลการ fail จะถูกเก็บเป็น log ไฟล์เอาไว้ และโปรแกรม fail2ban มันก็จะคอยอ่าน log ไฟล์อยู่เป็นระยะๆ ถ้าเจอ host ไหนปรากฎอยู่ใน log ว่า login แล้ว fail ครบตามจำนวน มันก็จะไปแก้ iptables ให้ block ipaddress นั้นไปเลย ซึ่งพอ ban ครบตามกำหนดเวลาที่ได้ตั้งไว้ในไฟล์ configure ตัว fail2ban ก็จะไปแก้ค่า iptables ให้ ip นั้นสามารถ access เข้ามาใช้งานได้ตามเดิม
 
วิธีใช้งาน
 
step1: $sudo  aptitude  install  fail2ban   --->   ติดตั้ง fail2ban
 
step2: $sudo  gedit  /etc/fail2ban.conf    --->   เปิดไฟล์ configure ขึ้นมาแก้ไข

* option ในส่วนต่างๆที่สำคัญมีดังนี้

maxfailures = 5    --->  ในส่วนนี้หมายถึง connect แล้ว fail ครบ 5 ครั้งแล้วให้แบน ip(ของผมตั้งไว้ 2)

bantime = 600
    --->  หมายถึงให้แบนเป็นเวลา 600 วินาที (ของผมกรอกเป็นหมื่นเลย)

ignoreip = 192.168.20.0/24
    --->   หมายถึง ip ในวงนี้ไม่ต้องไปสนใจแบนเพราะว่าอยู่ใน lan วงเดียวกัน(ช่างมันละกันฟะ หยวนๆ)

** ถ้าต้องการให้มันส่ง mail มาแจ้งเตือนด้วยก็ให้ไปที่หัวข้อ [mail] แล้วแก้ดังนี้

enable = true


host = mail.sipa.or.th 
   --->  เครื่องที่จะใช้ส่ง mail(อันนี้ตามสะดวกครับ ใครใช้อันไหน)

port = 25
    --->   port ของ mail

#####################special option add by rooney##################

 
AUTHREQUIRED = true   

smtpuser = rooney@sipa.or.th
    --->   กรอก email address ของเราลงไป

smtppassword = abcd 
  --->   กรอก password ของ email address เราลงไปครับ

###########################################################

 
from = rooney@sipa.or.th   --->   mail ถูกส่งมาจาก rooney@sipa.or.th

to = rooney@hotmail.com 
  --->   ให่ส่ง mail แจ้งเตือนไปที่ rooney@hotmail.com

step3 : $sudo  /etc/init.d/fail2ban  restart    --->   restart สักรอบก่อนใช้งาน

*ส่วนข้างล่างนี้ คือ เนื้อหาใน mail ที่ fail2ban ส่งมาถึงผมเวลาเจออะไรไม่ชอบมาพากลครับ

Hi,

The IP 125.18.166.180 has just been banned by Fail2Ban after
3 attempts against ssh.

Here are more information about 125.18.166.180:

% [whois.apnic.net node-2]
% Whois data copyright terms    http://www.apnic.net/db/dbcopyright.html

inetnum:      125.18.166.0 - 125.18.166.255
netname:      ANARFIN2187-srt
descr:        ANAR FIN ENGINEERS PVT. LTD
descr:        905,World Trade Center
descr:        Ring Road
descr:        Surat
descr:        Gujarat
descr:        India
descr:        Contact Person: Mr. Umesh
descr:        Email: urn@yahoo.co.in
descr:        Phone:null
country:      IN
admin-c:      NA40-AP
tech-c:       NA40-AP
mnt-by:       MAINT-IN-BBIL
status:       ASSIGNED NON-PORTABLE
changed:      techsupport@bharti.com 20060405
source:       APNIC

route:        125.18.166.0/24
descr:        BHARTI-IN
descr:        Bharti Tele-Ventures Limited
descr:        Class A ISP in INDIA .
descr:        234 , OKHLA PHASE III ,
descr:        NEW DELHI
descr:        INDIA
country:      IN
origin:       AS9498
mnt-by:       MAINT-IN-BBIL
changed:      techsupport@bharti.com 20050812
source:       APNIC

person:       Network Administrator
nic-hdl:      NA40-AP
e-mail:       techsupport@bharti.com
address:      Bharti Infotel Ltd.
address:      ISP Division - Long Distance - Telesonic
address:      234 ,
address:      Okhla Ind. Area,
address:      Phase III
address:      New Delhi,
address:      INDIA-110020
phone:        +91-11- 5171 0131
fax-no:       +91-11- 5171 1050
country:      IN
changed:      techsupport@bharti.com 20040911
mnt-by:       MAINT-IN-BBIL
source:       APNIC

Regards,

Fail2Ban

* นี่ก็เนื้อหาใน email อีกฉบับที่ส่งมาถึงผมครับ

Hi,

The jail apache-noscript has been started successfuly.

Regards,

Fail2Ban

เนื่องด้วย fail2ban นอกจากจะมอนิเตอร์ดูการ access เข้ามายังเครื่องได้แล้ว มันยังสามารถมอนิเตอร์ดู process ของโปรแกรมได้อีกด้วยนะครับ
แต่ว่ามอนิเตอร์ได้เป็นบางโปรแกรมนะครับ ถ้าอยากจะให้มันมอนิเตอร์โปรแกรมใดก็ให้ไปตั้งค่า enable = true ตรงโปรแกรมนั้นเป็นอันใช้ได้

***เรื่องเล่าจากการใช้งานจริง***

จากการที่ได้ทดลองใช้งานดูนะครับ(ผมตั้งค่า maxfailures = 2)

1. กรณีเครื่องที่เราใช้เป็น client เป็น linux ถ้าเกิดเราทำการ ssh ไปยังเครื่องอื่นแล้วกรอก password ผิดครบ 3 ครั้ง(3 ครั้งถ้วนๆไม่ขาดไม่เกิน) จะโดนเตะออกจากระบบ ไม่ว่าเครื่องที่เปิดให้ login จะลง fail2ban หรือเปล่า

rooney@rooney:~$ ssh root@192.168.20.182
root@192.168.20.182's password:
Permission denied, please try again.
root@192.168.20.182's password:
Permission denied, please try again.
root@192.168.20.182's password:
Permission denied (publickey,password).
rooney@rooney:~$

* ปัญหาอยู่ตรงนี้ครับ คือ ผมตั้งค่า maxfailures ไว้ที่ 2 ครั้ง ซึ่งที่ผมเข้าใจผมคิดว่าพอกรอกรหัสผิดครบ 2 ครั้งแล้ว จะโดนแบนทันทีไม่มีการขึ้น prompt มาให้กรอก password ใดๆทั้งสิ้น แต่พอเอาเข้าจริงพอกรอกผิดไป 2 ครั้งมันก็ยังดันขึ้น prompt มาให้กรอก password อีก ไอ้เราก็คิดต่อว่า "อ๋อ มันคงขึ้นprompt มาให้กรอกเฉยๆแต่คงเข้าไม่ได้เพราะน่าจะโดนแบนไม่ให้เข้าตั้งกะผิดครั้งที่ 2 แล้วแหงมๆ" แต่พอเอาเข้าจริง พอกรอก 2 ครั้งแรกผิด แต่ว่ากรอกครั้งที่ 3 ถูก ก็ดัน login เข้าเครื่องได้ซะงั้น เล่นเอาอึ้งกิมกี่ไปชั่วขณะ พอหลังจากมีเวลาทำใจสักพักก็เลยรู้ว่า "ฮั่นแน่! login ได้แต่ว่ามันใช้งานไม่ได้นี่หว่า"

 
    สรุปก็คือ โดย default ของโปรแกรม ssh ใน linux มันจะให้กรอก password ผิดได้ 3 ครั้ง ดังนั้นถึงเราจะกรอกผิดไป 2 ครั้งมันก็จะยังขึ้น prompt มาให้กรอกอีก และถ้ากรอกครั้งที่ 3 ถูกก็ยังจะสามารถ login ได้ด้วย แต่จะทำอะไรกับระบบไม่ได้เลยเพราะโดนแบนโดย fail2ban ตั้งกะกรอก password ผิดครั้งที่ 2 ครับ และถ้าโดนแบนแล้ว ถ้าพยายาม ssh อีกรอบคราวนี้จะโดนแบนตั้งกะตอนแรกเลย คือ จะไม่มี prompt ขึ้นมาให้ถาม password สักกะแว๊ปนึงเลย
 
2. กรณีเครื่องที่เราใช้เป็น client เป็น windows แล้วใช้โปรแกรม putty เป็นโปรแกรมในการ ssh มันจะสามารถกรอก password ได้ถึง 7 ครั้งครับ แต่ก็จะโดนแบนตั้งกะกรอกผิด 2 ครั้งเหมือนกันครับ ถึง login ได้ก็ใช้งานไม่ได้        
   
                        ***จบแล้วจ้า***
 

Comments

mrtomyum's picture

ได้ความรู้จัง ขอบคุณมากครับ