วันศุกร์ที่ 8 สิงหาคม พ.ศ. 2551

ป้องกันการโจมตีด้วย SSH

เปลี่ยน port ที่ใข้ใน /etc/ssh/sshd_config

# aptitude install fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# vi /etc/fail2ban/jail.local
...
[DEFAULT]
ignoreip = 127.0.0.1 # เป็น ip ที่จะไม่มีการ Ban โดยเด็ดขาด
bantime = 1440 # เป็นเวลาที่จะ Ban IP ครับ ค่าเริ่มต้น 600 วินาที = 10 นาที
# น้อยไปก็เปลี่ยนได้ครับ 1440 วินาที = 1 วัน
# หรือ -1 สำหรับการ Ban IP ตลอดไป จนกว่าจะ Reboot
maxretry = 3 # ให้ผู้ไม่ประสงค์ดี หรือแม้แต่เราเอง ลองได้กี่ครั้ง
...
[ssh-ddos]
enabled = true # ผมเปลี่ยนจาก false เป็น true เพื่อเพิ่มการตรวจสอบ SSH DoS
port = ssh, sftp
filter = sshd-ddos
...

แก้ไขเสร็จ สั่งเริ่ม Service ใหม่

# /etc/init.d/fail2ban restart

ผลคือ

# cat /var/log/fail2ban.log ... 2007-09-17 18:33:15,860 fail2ban.actions: WARNING [ssh] Ban 125.24.142.28 2007-09-17 18:34:25,008 fail2ban.actions: WARNING [ssh] Ban 60.191.41.108 ...

ความสามารถของ fail2ban ยังไม่หมดแค่การตรวจสอบ และปิดกั้นสำหรับ SSH เท่านั้น ยังมีอีกหลาย Service ที่ fail2ban สามารถเฝ้ายามให้ได้ ไม่ว่าจะเป็น apache, vsftpd, proftpd, postfix, couriersmtp, named (DNS) เป็นต้น

หลังจากวันนี้ไป... ใครจะมาโจมตีก็ทำได้ยากซักหน่อยละครับผม :)

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

ตัวโปรแกรม 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 ได้ก็ใช้งานไม่ได้
***จบแล้วจ้า***

คลังบทความของบล็อก