Preventing thwart SSH attacks with DenyHosts

Restricting SSH Access Attempts Using DenyHosts
หลักการของพวกมือดีนี้โดยส่วนมากจะใช้วิธี brust force เป็นหลัก นั้นก็คือการเดาไปเรื่อยๆจนกว่าจะจอนั้นเอง แต่ใช่ว่าจะสักแต่ว่าเดาอย่างเดียว โดยมาก password จะเอามาจากคำศัพท์ต่างๆ และ user ก็พวกชื่อคนหรือพวกชื่อ user ในระบบพวกชื่อเช่น bin, cyrus, nagios, postgres เป็นต้น
เอาละครับมาเข้าเรื่องกันเลยดีกว่า ในบทความนี้ผมจะมาแนะนำการป้องกันการโจมตีการเหล่า hacker ที่ใช้วิธีการ brust force ทั้งหลายด้วยการติดตั้ง DenyHosts ซึ่งโปรแกรมนี้นี้จะทำหน้าที่ในการ block IP ของผู้ไม่ประสงค์ดีเหล่านี้ โดยการเข้าไปอ่าน log ไฟล์ของ sshd แล้วก็ตรวจสอบว่า IP ใดมีความพยายามที่จะ login เข้าสู่ระบบแต่ไม่สำเร็จตามจำนวนครั้งที่เรากำหนด ก็จะ block IP นั้นด้วย TCP Wrapper หรือ เพิ่มข้อมูลเข้าไปที่ /etc/hosts.deny นั้นเอง
วิธีการติดตั้งจะขอพูดถึงแต่ Red Hat และ Centos โดยวิธีการติดตั้งและตั้งค่ามีดังต่อไปนี้
- ติดตั้ง rpmforge repo ก่อนเพื่อที่จะสามารถใช้ yum ในการ Install ได้
Red Hat Enterprise 5 64bit
123[root@Ezylinux ~]# rpm -ivh http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpmRed Hat Enterprise 5 32bit
123[root@Ezylinux ~]# rpm -ivh http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpmRed Hat Enterprise 6 64bit
123[root@Ezylinux ~]# rpm -ivh http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpmRed Hat Enterprise 6 32bit
123[root@Ezylinux ~]# rpm -ivh http://apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.i686.rpm - หลังจากติดตั้ง rpmforge ไปเรียบร้อยแล้ว ก็มาถึงขั้นตอนการติดตั้ง DenyHosts ใช้คำสั่ง
123[root@Ezylinux ~]# yum -y install denyhosts12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152Loaded plugins: downloadonly, fastestmirrorLoading mirror speeds from cached hostfile* addons: mirror.issp.co.th* atrpms: dl.atrpms.net* base: mirror.issp.co.th* extras: mirror.issp.co.th* rpmforge: fr2.rpmfind.net* updates: mirror1.ku.ac.thaddons 100% |=========================| 951 B 00:00atrpms 100% |=========================| 3.0 kB 00:00atrpms/primary_db 100% |=========================| 1.1 MB 00:03base 100% |=========================| 2.1 kB 00:00extras 100% |=========================| 2.1 kB 00:00rpmforge 100% |=========================| 1.1 kB 00:00updates 100% |=========================| 951 B 00:00updates/primary 100% |=========================| 622 kB 00:00updates 1137/1137Setting up Install ProcessResolving Dependencies--> Running transaction check---> Package denyhosts.noarch 0:2.6-3.el5.rf set to be updated--> Finished Dependency ResolutionDependencies Resolved===================================================================================Package Arch Version Repository Size===================================================================================Installing:denyhosts noarch 2.6-3.el5.rf rpmforge 91 kTransaction Summary===================================================================================Install 1 Package(s)Upgrade 0 Package(s)Total download size: 91 kDownloading Packages:denyhosts-2.6-3.el5.rf.no 100% |=========================| 91 kB 00:01Running rpm_check_debugRunning Transaction TestFinished Transaction TestTransaction Test SucceededRunning TransactionInstalling : denyhosts 1/1Installed:denyhosts.noarch 0:2.6-3.el5.rfComplete!
- เมื่อ Install denyhosts เสร็จเรียบร้อยก็สามารถใช้งานได้เลยโดยไม่ต้องแก้ไขอะไร แต่ถ้าต้องการให้ระบบส่ง report ไปเมื่อมีการ Block ip เพิ่มหรือมีการเข้าสู่ระบบที่น่าสงสัย ก็แก้ไขไฟล์ configure denyhosts.cfg ด้วยคำสั่ง
123[root@Ezylinux ~]# vi /etc/denyhosts/denyhosts.cfg
แก้ไขค่า ADMIN_EMAIL ให้เป็น email ที่เราต้องการให้ส่ง report แต่ถ้าไม่ต้องการรายงานก็ให้เว้นว่างเอาไว้ได้เลย
ตัวอย่างการตั้งค่าสำหรับ Red Hat Enterprise และ CentOS
12345678910111213141516171819202122232425262728SECURE_LOG = /var/log/secureHOSTS_DENY = /etc/hosts.denyPURGE_DENY = 7dBLOCK_SERVICE = sshdDENY_THRESHOLD_INVALID = 3DENY_THRESHOLD_VALID = 5DENY_THRESHOLD_ROOT = 2DENY_THRESHOLD_RESTRICTED = 1WORK_DIR = /usr/share/denyhosts/dataSUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YESHOSTNAME_LOOKUP=YESLOCK_FILE = /var/lock/subsys/denyhostsADMIN_EMAIL = MyEmail@ezylinux.comSMTP_HOST = localhostSMTP_PORT = 25#SMTP_USERNAME=foo#SMTP_PASSWORD=barSMTP_FROM = DenyHostsSMTP_SUBJECT = DenyHosts ReportAGE_RESET_VALID=5dAGE_RESET_ROOT=25dAGE_RESET_RESTRICTED=25dAGE_RESET_INVALID=10dDAEMON_LOG = /var/log/denyhostsDAEMON_SLEEP = 30sDAEMON_PURGE = 1h - หลังจากแก้ไขค่า configure เสร็จแล้วให้ใช้คำสั่ง chkconfig เพื่อให้ service DenyHosts start ในตอนบูตเครื่อง
123[root@Ezylinux ~]# chkconfig denyhosts on
- Start service DenyHosts ด้วยคำสั่ง
1234[root@Ezylinux ~]# /etc/init.d/denyhosts startstarting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/etc/denyhosts/denyhosts.cfg
เมื่อ start service DenyHosts เสร็จแล้วให้ลองไปตรวจสอบดูที่ไฟล์ /etc/hosts.deny ดูครับ จะมีการ block sshd ใน IP ต่างๆที่ได้มีการพยายามลอง login เข้าสู่ระบบเราซึ่งการเริ่มใช้งานครั้งแรก DenyHosts จะเข้าไปอ่านไฟล์ /var/log/secure ทั้งหมดและไล่ block ย้อนหลังให้ด้วย
ตัวอย่างการแจ้ง report ทางเมล์