Restricting SSH Access Attempts Using DenyHosts
Restricting SSH Access Attempts Using DenyHosts
หลังจากที่เครื่อง server เข้าสู่ internet ไม่นานก็จะมีพวกมือดีต่างๆมาลอง login เข้าระบบด้วยโปรโตโคล ssh กันอย่างไม่ขาดสาย ซึ่งถ้าระบบเราไม่ได้มีการป้องกันไม่ให้ ssh ไม่อนุญาติให้ user root ทำการ Login ได้และ password ก็ยังแสนง่ายอีก ก็คงต้องเตรียมใจได้เลยว่าอีกไม่กี่วันต้องโดนใครสักคนเข้าสู่ระบบเราได้แน่ๆ เพราะผมเคยลองมาแล้ว ลองเซ็ตเล่นๆแล้วใช้ password ง่ายๆ ผ่านไปวันกว่าๆ ไปดูที่ log พบว่ามีใครบางคนเข้าสู่ระบบเราได้แล้ว

หลักการของพวกมือดีนี้โดยส่วนมากจะใช้วิธี 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 โดยวิธีการติดตั้งและตั้งค่ามีดังต่อไปนี้

  1. ติดตั้ง rpmforge repo ก่อนเพื่อที่จะสามารถใช้ yum ในการ Install ได้

    Red Hat Enterprise 5 64bit
    [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.rpm

    Red Hat Enterprise 5 32bit
    [root@Ezylinux ~]# rpm -ivh http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

    Red Hat Enterprise 6 64bit
    [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.rpm

    Red Hat Enterprise 6 32bit
    [root@Ezylinux ~]# rpm -ivh http://apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.i686.rpm

  2. หลังจากติดตั้ง rpmforge ไปเรียบร้อยแล้ว ก็มาถึงขั้นตอนการติดตั้ง DenyHosts ใช้คำสั่ง

    [root@Ezylinux ~]# yum -y install denyhosts

    Loaded plugins: downloadonly, fastestmirror
    Loading 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.th
    addons                    100% |=========================|  951 B    00:00
    atrpms                    100% |=========================| 3.0 kB    00:00
    atrpms/primary_db         100% |=========================| 1.1 MB    00:03
    base                      100% |=========================| 2.1 kB    00:00
    extras                    100% |=========================| 2.1 kB    00:00
    rpmforge                  100% |=========================| 1.1 kB    00:00
    updates                   100% |=========================|  951 B    00:00
    updates/primary           100% |=========================| 622 kB    00:00
    updates                                                               1137/1137
    Setting up Install Process
    Resolving Dependencies
    --> Running transaction check
    ---> Package denyhosts.noarch 0:2.6-3.el5.rf set to be updated
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ===================================================================================
     Package             Arch        Version                Repository          Size
    ===================================================================================
    Installing:
     denyhosts           noarch      2.6-3.el5.rf           rpmforge            91 k
    
    Transaction Summary
    ===================================================================================
    Install       1 Package(s)
    Upgrade       0 Package(s)
    
    Total download size: 91 k
    Downloading Packages:
    denyhosts-2.6-3.el5.rf.no 100% |=========================|  91 kB    00:01
    Running rpm_check_debug
    Running Transaction Test
    Finished Transaction Test
    Transaction Test Succeeded
    Running Transaction
      Installing     : denyhosts                                                1/1
    
    Installed:
      denyhosts.noarch 0:2.6-3.el5.rf
    
    Complete!
    
  3. เมื่อ Install denyhosts เสร็จเรียบร้อยก็สามารถใช้งานได้เลยโดยไม่ต้องแก้ไขอะไร แต่ถ้าต้องการให้ระบบส่ง report ไปเมื่อมีการ Block ip เพิ่มหรือมีการเข้าสู่ระบบที่น่าสงสัย ก็แก้ไขไฟล์ configure denyhosts.cfg ด้วยคำสั่ง
    [root@Ezylinux ~]# vi /etc/denyhosts/denyhosts.cfg

    แก้ไขค่า ADMIN_EMAIL ให้เป็น email ที่เราต้องการให้ส่ง report แต่ถ้าไม่ต้องการรายงานก็ให้เว้นว่างเอาไว้ได้เลย

    ตัวอย่างการตั้งค่าสำหรับ Red Hat Enterprise และ CentOS

    SECURE_LOG = /var/log/secure
    HOSTS_DENY = /etc/hosts.deny
    PURGE_DENY = 7d
    BLOCK_SERVICE  = sshd
    DENY_THRESHOLD_INVALID = 3
    DENY_THRESHOLD_VALID = 5
    DENY_THRESHOLD_ROOT = 2
    DENY_THRESHOLD_RESTRICTED = 1
    WORK_DIR = /usr/share/denyhosts/data
    SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
    HOSTNAME_LOOKUP=YES
    LOCK_FILE = /var/lock/subsys/denyhosts
    ADMIN_EMAIL = [email protected]
    SMTP_HOST = localhost
    SMTP_PORT = 25
    #SMTP_USERNAME=foo
    #SMTP_PASSWORD=bar
    SMTP_FROM = DenyHosts 
    SMTP_SUBJECT = DenyHosts Report
    AGE_RESET_VALID=5d
    AGE_RESET_ROOT=25d
    AGE_RESET_RESTRICTED=25d
    AGE_RESET_INVALID=10d
    DAEMON_LOG = /var/log/denyhosts
    DAEMON_SLEEP = 30s
    DAEMON_PURGE = 1h
    
  4. หลังจากแก้ไขค่า configure เสร็จแล้วให้ใช้คำสั่ง chkconfig เพื่อให้ service DenyHosts start ในตอนบูตเครื่อง

    [root@Ezylinux ~]# chkconfig denyhosts on
  5. Start service DenyHosts ด้วยคำสั่ง

    [root@Ezylinux ~]# /etc/init.d/denyhosts start
    starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/etc/denyhosts/denyhosts.cfg
  6. เมื่อ start service DenyHosts เสร็จแล้วให้ลองไปตรวจสอบดูที่ไฟล์ /etc/hosts.deny ดูครับ จะมีการ block sshd ใน IP ต่างๆที่ได้มีการพยายามลอง login เข้าสู่ระบบเราซึ่งการเริ่มใช้งานครั้งแรก DenyHosts จะเข้าไปอ่านไฟล์ /var/log/secure ทั้งหมดและไล่ block ย้อนหลังให้ด้วย

    ตัวอย่างการแจ้ง report ทางเมล์

    DenyHosts Mail Alert